From 7d5866a7658598466e33691f442f422e59577a34 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 19 Dec 2022 12:39:37 +0800 Subject: Develop secret api. v44 --- .../CrupestApi.Commons/Crud/CrudService.cs | 6 ++++++ .../CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs | 21 +++++++++++++++++++++ .../CrupestApi.Commons/Secrets/SecretInfo.cs | 2 +- .../CrupestApi.Commons/Secrets/SecretService.cs | 14 +++++++++++++- 4 files changed, 41 insertions(+), 2 deletions(-) (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons') diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs index 27f0c85..d1958e5 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs @@ -62,6 +62,12 @@ public class CrudService : IDisposable where TEntity : class return result.Single(); } + public string Create(TEntity entity) + { + var key = _table.Insert(_dbConnection, entity); + return (string)key; + } + public string Create(JsonElement jsonElement) { var insertClauses = _jsonHelper.ConvertJsonElementToInsertClauses(jsonElement); diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs index 3147e99..a20963c 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs @@ -1,4 +1,5 @@ using System.Data; +using System.Diagnostics; using System.Reflection; using System.Text; using Dapper; @@ -438,6 +439,18 @@ CREATE TABLE {tableName}( return queryResult.Select(MapDynamicTo).ToList(); } + public IInsertClause ConvertEntityToInsertClause(object entity) + { + Debug.Assert(EntityType.IsInstanceOfType(entity)); + var result = new InsertClause(); + foreach (var column in PropertyColumns) + { + var value = column.PropertyInfo!.GetValue(entity); + result.Add(column.ColumnName, value); + } + return result; + } + /// /// Insert a entity and call hooks. /// @@ -504,6 +517,14 @@ CREATE TABLE {tableName}( return key ?? throw new Exception("No key???"); } + public object Insert(IDbConnection dbConnection, object entity) + { + Debug.Assert(EntityType.IsInstanceOfType(entity)); + var insert = ConvertEntityToInsertClause(entity); + return Insert(dbConnection, insert); + } + + /// /// Upgrade a entity and call hooks. /// diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs index 8b9420a..1f00f9a 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs @@ -8,7 +8,7 @@ public class SecretInfo { [Column(NotNull = true)] public string Key { get; set; } = default!; - [Column(NotNull = true, Generated = true, NoUpdate = true, ActAsKey = true)] + [Column(NotNull = true, NoUpdate = true, ActAsKey = true)] public string Secret { get; set; } = default!; [Column(DefaultEmptyForString = true)] public string Description { get; set; } = default!; diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretService.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretService.cs index fc13707..4d9b14c 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretService.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretService.cs @@ -1,4 +1,3 @@ -using CrupestApi.Commons; using CrupestApi.Commons.Crud; namespace CrupestApi.Commons.Secrets; @@ -11,6 +10,19 @@ public class SecretService : CrudService, ISecretService } + protected override void DoInitializeDatabase(System.Data.IDbConnection connection) + { + base.DoInitializeDatabase(connection); + using var transaction = connection.BeginTransaction(); + _table.Insert(connection, new SecretInfo + { + Key = SecretsConstants.SecretManagementKey, + Secret = "crupest", + Description = "This is the init key. Please revoke it immediately after creating a new one." + }); + transaction.Commit(); + } + public List GetPermissions(string secret) { var list = _table.Select(_dbConnection, -- cgit v1.2.3