Skip to content

Commit 3c9a0fb

Browse files
Implement additional tests for ApiMethods and Resource Action definitions
1 parent 8da6f12 commit 3c9a0fb

File tree

5 files changed

+202
-33
lines changed

5 files changed

+202
-33
lines changed

src/Certify.Models/Hub/AccessControlConfig.cs

Lines changed: 80 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ namespace Certify.Models.Hub
99
{
1010
public class StandardRoles
1111
{
12+
internal static Role BackupOperator { get; } = new Role("backup_operator_role", "Backup Operator", "Can perform import and export operations",
13+
policies: new List<string> {
14+
StandardPolicies.ManagedInstanceSystemExport,
15+
StandardPolicies.ManagedInstanceSystemImport
16+
});
17+
1218
public static Role Administrator { get; } = new Role("sysadmin_role", "Administrator", "Certify Server Administrator",
1319
policies: new List<string> {
1420
StandardPolicies.ManagementHubAdmin,
@@ -18,9 +24,11 @@ public class StandardRoles
1824
StandardPolicies.StoredCredentialAdmin,
1925
StandardPolicies.ManagedChallengeAdmin,
2026
StandardPolicies.AccessAdmin,
27+
StandardPolicies.AccessTokenAdmin,
2128
StandardPolicies.CertificateConsumer,
22-
StandardPolicies.AccessAdmin,
23-
StandardPolicies.ManagedChallengeAdmin
29+
StandardPolicies.ManagedChallengeAdmin,
30+
StandardPolicies.ManagedInstanceSystemExport,
31+
StandardPolicies.ManagedInstanceSystemImport
2432
});
2533

2634
public static Role CertificateManager { get; } = new Role("cert_manager_role", "Certificate Manager", "Can manage and administer all certificates",
@@ -66,6 +74,7 @@ public class ResourceTypes
6674
{
6775
public static string System { get; } = "system";
6876
public static string SecurityPrinciple { get; } = "securityprinciple";
77+
public static string Role { get; } = "role";
6978
public static string AccessToken { get; } = "accesstoken";
7079
public static string Domain { get; } = "domain";
7180
public static string ManagedItem { get; } = "manageditem";
@@ -122,6 +131,8 @@ public static class StandardResourceActions
122131
public const string SecurityPrinciplePasswordValidate = "securityprinciple_password_validate_action";
123132
public const string SecurityPrincipleCheckAccess = "securityprinciple_access_check_action";
124133

134+
public const string RoleList = "role_list_action";
135+
125136
public const string ManagedChallengeList = "managedchallenge_list_action";
126137
public const string ManagedChallengeUpdate = "managedchallenge_update_action";
127138
public const string ManagedChallengeDelete = "managedchallenge_update_action";
@@ -134,14 +145,16 @@ public static class StandardResourceActions
134145
public const string ManagementHubInstanceAdd = "managementhub_instance_add_action";
135146
public const string ManagementHubInstanceUpdate = "managementhub_instance_update_action";
136147

148+
public const string ManagementHubInstanceExport = "managementhub_instance_export_action";
149+
public const string ManagementHubInstanceImport = "managementhub_instance_import_action";
150+
137151
public const string AccessTokenList = "accesstoken_list_action";
138152
public const string AccessTokenAdd = "accesstoken_add_action";
139153
public const string AccessTokenUpdate = "accesstoken_update_action";
140154
public const string AccessTokenDelete = "accesstoken_delete_action";
141155

142156
public const string SystemGeneralAction = "system_general_action";
143-
public const string SystemExport = "system_export_action";
144-
public const string SystemImport = "system_import_action";
157+
145158
public const string SystemStatusList = "system_status_list_action";
146159
public const string SystemServiceConfigList = "system_serviceconfig_list_action";
147160
public const string SystemCoreSettingsList = "system_coresettings_list_action";
@@ -157,13 +170,14 @@ public static class StandardResourceActions
157170
public const string ChallengeProviderDnsZonesList = "challengeprovider_dnszones_list_action";
158171

159172
public const string DeploymentTaskExecute = "deploymenttask_execute_action";
173+
public const string DeploymentTaskListProviders = "deploymenttask_list_providers_action";
160174

161-
public const string CertificateDelete = "certificate_delete_action";
162175
}
163176

164177
public class StandardPolicies
165178
{
166179
public const string AccessAdmin = "access_admin_policy";
180+
public const string AccessTokenAdmin = "accesstoken_admin_policy";
167181
public const string ManagedItemAdmin = "manageditem_admin_policy";
168182
public const string CertificateConsumer = "certificate_consumer_policy";
169183
public const string CertificateAuthorityAdmin = "ca_admin_policy";
@@ -175,6 +189,8 @@ public class StandardPolicies
175189
public const string ManagementHubAdmin = "managementhub_admin_policy";
176190
public const string ManagementHubReader = "managementhub_reader_policy";
177191
public const string ManagedInstance = "managementhub_managedinstance_policy";
192+
public const string ManagedInstanceSystemImport = "system_import_policy";
193+
public const string ManagedInstanceSystemExport = "system_export_policy";
178194
}
179195

180196
public static class Policies
@@ -188,7 +204,8 @@ public static List<Role> GetStandardRoles()
188204
StandardRoles.CertificateConsumer,
189205
StandardRoles.StoredCredentialConsumer,
190206
StandardRoles.ManagedChallengeConsumer,
191-
StandardRoles.ManagedInstance
207+
StandardRoles.ManagedInstance,
208+
StandardRoles.BackupOperator
192209
};
193210
}
194211

@@ -218,8 +235,18 @@ public static List<ResourceAction> GetStandardResourceActions()
218235
new(StandardResourceActions.SecurityPrincipleList, "List Security Principles", ResourceTypes.SecurityPrinciple),
219236
new(StandardResourceActions.SecurityPrincipleAdd, "Add New Security Principle", ResourceTypes.SecurityPrinciple),
220237
new(StandardResourceActions.SecurityPrincipleUpdate,"Update Security Principles", ResourceTypes.SecurityPrinciple),
238+
new(StandardResourceActions.SecurityPrincipleUpdateAssignedRoles,"Update Security Principle Assigned Roles", ResourceTypes.SecurityPrinciple),
221239
new(StandardResourceActions.SecurityPrinciplePasswordUpdate, "Update Security Principle Passwords", ResourceTypes.SecurityPrinciple),
222240
new(StandardResourceActions.SecurityPrincipleDelete, "Delete Security Principle", ResourceTypes.SecurityPrinciple),
241+
new(StandardResourceActions.SecurityPrincipleCheckAccess, "Check Security Principle Access", ResourceTypes.SecurityPrinciple),
242+
new(StandardResourceActions.SecurityPrinciplePasswordValidate, "Validate Security Principle Passwords", ResourceTypes.SecurityPrinciple),
243+
244+
new(StandardResourceActions.AccessTokenAdd, "Add Access Token", ResourceTypes.AccessToken),
245+
new(StandardResourceActions.AccessTokenDelete, "Delete Access Token", ResourceTypes.AccessToken),
246+
new(StandardResourceActions.AccessTokenList, "List Access Tokens", ResourceTypes.AccessToken),
247+
new(StandardResourceActions.AccessTokenUpdate, "Update Access Token", ResourceTypes.AccessToken),
248+
249+
new(StandardResourceActions.RoleList, "List Roles", ResourceTypes.Role),
223250

224251
new(StandardResourceActions.ManagedItemRequest, "Request New Managed Items", ResourceTypes.ManagedItem),
225252

@@ -247,9 +274,12 @@ public static List<ResourceAction> GetStandardResourceActions()
247274
new(StandardResourceActions.ManagementHubInstancesList, "List managed instances", ResourceTypes.ManagedInstance),
248275
new(StandardResourceActions.ManagementHubInstanceJoin, "Join management hub as a managed instance", ResourceTypes.ManagedInstance),
249276
new(StandardResourceActions.ManagementHubInstanceDelete, "Delete managed instance from the hub", ResourceTypes.ManagedInstance),
277+
new(StandardResourceActions.ManagementHubInstanceAdd, "Add managed instance details to the hub", ResourceTypes.ManagedInstance),
278+
new(StandardResourceActions.ManagementHubInstanceUpdate, "Update managed instance detail in the hub", ResourceTypes.ManagedInstance),
279+
280+
new(StandardResourceActions.ManagementHubInstanceExport, "Export system configuration", ResourceTypes.ManagedInstance),
281+
new(StandardResourceActions.ManagementHubInstanceImport, "Import system configuration", ResourceTypes.ManagedInstance),
250282

251-
new(StandardResourceActions.SystemExport, "Export system configuration", ResourceTypes.System),
252-
new(StandardResourceActions.SystemImport, "Import system configuration", ResourceTypes.System),
253283
new(StandardResourceActions.SystemStatusList, "List system status", ResourceTypes.System),
254284
new(StandardResourceActions.SystemServiceConfigList, "List system service configuration", ResourceTypes.System),
255285
new(StandardResourceActions.SystemCoreSettingsList, "List system core settings", ResourceTypes.System),
@@ -264,7 +294,8 @@ public static List<ResourceAction> GetStandardResourceActions()
264294
new(StandardResourceActions.ChallengeProviderList, "List challenge providers", ResourceTypes.ChallengeProvider),
265295
new(StandardResourceActions.ChallengeProviderDnsZonesList, "List challenge provider DNS zones", ResourceTypes.ChallengeProvider),
266296

267-
new(StandardResourceActions.DeploymentTaskExecute, "Execute deployment task", ResourceTypes.DeploymentTask)
297+
new(StandardResourceActions.DeploymentTaskExecute, "Execute deployment task", ResourceTypes.DeploymentTask),
298+
new(StandardResourceActions.DeploymentTaskListProviders, "List deployment task providers", ResourceTypes.DeploymentTask)
268299

269300
};
270301
}
@@ -302,6 +333,17 @@ public static List<ResourcePolicy> GetStandardPolicies()
302333
StandardResourceActions.SecurityPrinciplePasswordUpdate
303334
}
304335
},
336+
new() {
337+
Id = StandardPolicies.AccessTokenAdmin,
338+
Title = "Access Token Administration",
339+
SecurityPermissionType = SecurityPermissionType.ALLOW,
340+
ResourceActions = new List<string> {
341+
StandardResourceActions.AccessTokenList,
342+
StandardResourceActions.AccessTokenAdd,
343+
StandardResourceActions.AccessTokenDelete,
344+
StandardResourceActions.AccessTokenUpdate,
345+
}
346+
},
305347
new() {
306348
Id = StandardPolicies.CertificateConsumer,
307349
Title = "Consume Certificates",
@@ -396,15 +438,35 @@ public static List<ResourcePolicy> GetStandardPolicies()
396438
}
397439
},
398440
new() {
399-
Id = StandardPolicies.ManagedInstance,
400-
Title = "Management Hub Managed Instance",
401-
Description = "Join management hub and alow to be managed by hub.",
402-
SecurityPermissionType = SecurityPermissionType.ALLOW,
403-
IsResourceSpecific = true,
404-
ResourceActions = new List<string> {
405-
StandardResourceActions.ManagementHubInstanceJoin
406-
}
407-
}
441+
Id = StandardPolicies.ManagedInstance,
442+
Title = "Management Hub Managed Instance",
443+
Description = "Join management hub and allow to be managed by hub.",
444+
SecurityPermissionType = SecurityPermissionType.ALLOW,
445+
IsResourceSpecific = true,
446+
ResourceActions = new List<string> {
447+
StandardResourceActions.ManagementHubInstanceJoin
448+
}
449+
},
450+
new() {
451+
Id = StandardPolicies.ManagedInstanceSystemImport,
452+
Title = "Instance Configuration Import",
453+
Description = "Import system configuration and apply to a target instance",
454+
SecurityPermissionType = SecurityPermissionType.ALLOW,
455+
IsResourceSpecific = true,
456+
ResourceActions = new List<string> {
457+
StandardResourceActions.ManagementHubInstanceImport
458+
}
459+
},
460+
new() {
461+
Id = StandardPolicies.ManagedInstanceSystemExport,
462+
Title = "Instance Configuration Export",
463+
Description = "Export system configuration for a target instance",
464+
SecurityPermissionType = SecurityPermissionType.ALLOW,
465+
IsResourceSpecific = true,
466+
ResourceActions = new List<string> {
467+
StandardResourceActions.ManagementHubInstanceExport
468+
}
469+
}
408470
};
409471
}
410472
}

src/Certify.SourceGenerators/ApiMethods.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static List<GeneratedAPI> GetApiDefinitions()
111111
PublicAPIRoute = "roles",
112112
ServiceAPIRoute = "access/roles",
113113
ReturnType = $"ICollection<{nameof(Role)}>",
114-
RequiredPermissions = [new(ResourceTypes.System, StandardResourceActions.SystemGeneralAction)]
114+
RequiredPermissions = [new(ResourceTypes.Role, StandardResourceActions.RoleList)]
115115
},
116116
new()
117117
{
@@ -358,29 +358,29 @@ public static List<GeneratedAPI> GetApiDefinitions()
358358
ReturnType = actionResultTypeName,
359359
Params = new Dictionary<string, string>
360360
{
361-
{ "request", "Certify.Models.Hub.ManagedChallengeRequest" }
361+
{ "request", GetFormattedTypeName(typeof(Certify.Models.Hub.ManagedChallengeRequest)) }
362362
},
363363
RequiredPermissions = [new(ResourceTypes.ManagedChallenge, StandardResourceActions.ManagedChallengeCleanup)]
364364
},
365365
new()
366366
{
367367
OperationName = "PerformExport",
368368
OperationMethod = HttpPost,
369-
Comment = "Perform an export of all settings",
369+
Comment = "Perform an export of all settings for an instance",
370370
ServiceAPIRoute = "system/migration/export",
371-
ReturnType = "Models.Config.Migration.ImportExportPackage",
372-
Params = new Dictionary<string, string> { { "exportRequest", "Certify.Models.Config.Migration.ExportRequest" } },
373-
RequiredPermissions = [new(ResourceTypes.System, StandardResourceActions.SystemExport)]
371+
ReturnType = GetFormattedTypeName(typeof(Models.Config.Migration.ImportExportPackage)),
372+
Params = new Dictionary<string, string> { { "exportRequest", GetFormattedTypeName(typeof(Certify.Models.Config.Migration.ExportRequest)) } },
373+
RequiredPermissions = [new(ResourceTypes.ManagedInstance, StandardResourceActions.ManagementHubInstanceExport)]
374374
},
375375
new()
376376
{
377377
OperationName = "PerformImport",
378378
OperationMethod = HttpPost,
379-
Comment = "Perform an import of all settings",
379+
Comment = "Perform an import of all settings for an instance",
380380
ServiceAPIRoute = "system/migration/import",
381381
ReturnType = "ICollection<ActionStep>",
382-
Params = new Dictionary<string, string> { { "importRequest", "Certify.Models.Config.Migration.ImportRequest" } },
383-
RequiredPermissions = [new(ResourceTypes.System, StandardResourceActions.SystemImport)]
382+
Params = new Dictionary<string, string> { { "importRequest", GetFormattedTypeName(typeof(Certify.Models.Config.Migration.ImportRequest)) } },
383+
RequiredPermissions = [new(ResourceTypes.ManagedInstance, StandardResourceActions.ManagementHubInstanceImport)]
384384
},
385385
/* per instance API, via management hub */
386386
new()
@@ -503,7 +503,8 @@ public static List<GeneratedAPI> GetApiDefinitions()
503503
Params = new Dictionary<string, string>
504504
{
505505
{ "instanceId", "string" }
506-
}
506+
},
507+
RequiredPermissions = [new(ResourceTypes.DeploymentTask, StandardResourceActions.DeploymentTaskListProviders)]
507508
},
508509
new()
509510
{
@@ -641,9 +642,9 @@ public static List<GeneratedAPI> GetApiDefinitions()
641642
UseManagementAPI = true,
642643
PublicAPIController = "System",
643644
PublicAPIRoute = "{instanceId}/system/migration/export",
644-
ReturnType = "Models.Config.Migration.ImportExportPackage",
645-
Params = new Dictionary<string, string> { { "instanceId", "string" }, { "exportRequest", "Certify.Models.Config.Migration.ExportRequest" } },
646-
RequiredPermissions = [new(ResourceTypes.System, StandardResourceActions.SystemExport)]
645+
ReturnType = GetFormattedTypeName(typeof(Models.Config.Migration.ImportExportPackage)),
646+
Params = new Dictionary<string, string> { { "instanceId", "string" }, { "exportRequest", GetFormattedTypeName(typeof(Certify.Models.Config.Migration.ExportRequest)) } },
647+
RequiredPermissions = [new(ResourceTypes.ManagedInstance, StandardResourceActions.ManagementHubInstanceExport)]
647648
},
648649
new()
649650
{
@@ -654,8 +655,8 @@ public static List<GeneratedAPI> GetApiDefinitions()
654655
PublicAPIController = "System",
655656
PublicAPIRoute = "{instanceId}/system/migration/import",
656657
ReturnType = "ICollection<ActionStep>",
657-
Params = new Dictionary<string, string> { { "instanceId", "string" }, { "importRequest", "Certify.Models.Config.Migration.ImportRequest" } },
658-
RequiredPermissions = [new(ResourceTypes.System, StandardResourceActions.SystemImport)]
658+
Params = new Dictionary<string, string> { { "instanceId", "string" }, { "importRequest", GetFormattedTypeName(typeof(Certify.Models.Config.Migration.ImportRequest)) } },
659+
RequiredPermissions = [new(ResourceTypes.ManagedInstance, StandardResourceActions.ManagementHubInstanceImport)]
659660
},
660661
new()
661662
{

src/Certify.Tests/Certify.Core.Tests.Unit/Certify.Core.Tests.Unit.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676

7777
<ProjectReference Include="..\..\Certify.Providers\ACME\Anvil\Certify.Providers.ACME.Anvil.csproj" />
7878
<ProjectReference Include="..\..\Certify.Shared\Certify.Shared.Core.csproj" />
79+
<ProjectReference Include="..\..\Certify.SourceGenerators\Certify.SourceGenerators.csproj" />
7980

8081
</ItemGroup>
8182
<ItemGroup>

0 commit comments

Comments
 (0)