Compare commits
13 Commits
main
...
feature/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
33c0cd2642 | ||
| 8ac0eb0bf0 | |||
| 8d954c9a09 | |||
| f82ebb5e69 | |||
|
|
44ccda0736 | ||
| fd31d5dd00 | |||
|
|
57f0f39614 | ||
|
|
3acdf880f6 | ||
|
|
4fdd80db55 | ||
|
|
5b3cd5589d | ||
|
|
042588097e | ||
|
|
37dc22a114 | ||
|
|
e761335737 |
@@ -1,95 +0,0 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="PermissionAdapter.cs">
|
||||
// Heath
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Cerberos.Adapters.Common.Constants;
|
||||
using Core.Cerberos.Adapters.Common.Enums;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter for representing a permission.
|
||||
/// </summary>
|
||||
public class PermissionAdapter
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the ID of the entity.
|
||||
/// </summary>
|
||||
[BsonId]
|
||||
[BsonElement("_id")]
|
||||
[BsonRepresentation(BsonType.ObjectId)]
|
||||
[JsonPropertyName("id")]
|
||||
public string Id { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("name")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("name")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the description of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("description")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity object.
|
||||
/// </summary>
|
||||
[BsonElement("accessLevel")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("accessLevel")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public AccessLevelEnum? AccessLevel { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the entity was created.
|
||||
/// </summary>
|
||||
[BsonElement("createdAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("createdAt")]
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who created the entity.
|
||||
/// </summary>
|
||||
[BsonElement("createdBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("createdBy")]
|
||||
public string? CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the entity was last updated.
|
||||
/// </summary>
|
||||
[BsonElement("updatedAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("updatedAt")]
|
||||
public DateTime? UpdatedAt { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who last updated the entity.
|
||||
/// </summary>
|
||||
[BsonElement("updatedBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("updatedBy")]
|
||||
public string? UpdatedBy { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("status")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("status")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public StatusEnum Status { get; set; } = StatusEnum.Active;
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="RoleAdapter.cs">
|
||||
// Heath
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Cerberos.Adapters.Common.Enums;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter representing a role.
|
||||
/// </summary>
|
||||
public class RoleAdapter
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the unique identifier of the role.
|
||||
/// </summary>
|
||||
[BsonId]
|
||||
[BsonElement("_id")]
|
||||
[BsonRepresentation(BsonType.ObjectId)]
|
||||
[JsonPropertyName("id")]
|
||||
public string Id { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the role.
|
||||
/// </summary>
|
||||
[BsonElement("name")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("name")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the description of the role.
|
||||
/// </summary>
|
||||
[BsonElement("description")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("applications")]
|
||||
[JsonPropertyName("applications")]
|
||||
[JsonConverter(typeof(EnumArrayJsonConverter<ApplicationsEnum>))]
|
||||
public ApplicationsEnum[]? Applications { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the modules of the role.
|
||||
/// </summary>
|
||||
[BsonElement("modules")]
|
||||
[JsonPropertyName("modules")]
|
||||
public string[] Modules { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the permissions of the role.
|
||||
/// </summary>
|
||||
[BsonElement("permissions")]
|
||||
[JsonPropertyName("permissions")]
|
||||
public string[] Permissions { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the entity was created.
|
||||
/// </summary>
|
||||
[BsonElement("createdAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("createdAt")]
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who created the entity.
|
||||
/// </summary>
|
||||
[BsonElement("createdBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("createdBy")]
|
||||
public string? CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the entity was last updated.
|
||||
/// </summary>
|
||||
[BsonElement("updatedAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("updatedAt")]
|
||||
public DateTime? UpdatedAt { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who last updated the entity.
|
||||
/// </summary>
|
||||
[BsonElement("updatedBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("updatedBy")]
|
||||
public string? UpdatedBy { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("status")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("status")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public StatusEnum Status { get; set; } = StatusEnum.Active;
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
using Azure.Identity;
|
||||
using Core.Cerberos.Adapters.Common.Constants;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Helpers
|
||||
{
|
||||
public static class AuthHelper
|
||||
{
|
||||
private static readonly ILogger logger = LoggerFactory.Create(builder =>
|
||||
{
|
||||
builder.AddConsole();
|
||||
}).CreateLogger("AuthHelper");
|
||||
|
||||
|
||||
public static AuthSettings GetAuthSettings(WebApplicationBuilder builder, string appConfigLabel)
|
||||
{
|
||||
builder.Configuration.AddAzureAppConfiguration(options =>
|
||||
{
|
||||
var endpoint = builder.Configuration.GetSection("Endpoints:AppConfigurationURI").Value;
|
||||
|
||||
if (string.IsNullOrEmpty(endpoint))
|
||||
throw new ArgumentException("The app configuration is missing");
|
||||
|
||||
options.Connect(new Uri(endpoint), new DefaultAzureCredential())
|
||||
.Select(KeyFilter.Any, "cerberos_common")
|
||||
.Select(KeyFilter.Any, appConfigLabel);
|
||||
|
||||
options.ConfigureKeyVault(keyVaultOptions =>
|
||||
{
|
||||
keyVaultOptions.SetCredential(new DefaultAzureCredential());
|
||||
});
|
||||
});
|
||||
|
||||
return new AuthSettings
|
||||
{
|
||||
AzureADInstance = builder.Configuration.GetSection(Secrets.AzureADInstance).Value,
|
||||
AzureADTenantId = builder.Configuration.GetSection(Secrets.AzureADTenantId).Value,
|
||||
AzureADClientId = builder.Configuration.GetSection(Secrets.AzureADClientId).Value,
|
||||
AzureADClientSecret = builder.Configuration.GetSection(Secrets.AzureADClientSecret).Value,
|
||||
HeathCerberosAppAuthorizationUrl = builder.Configuration.GetSection(Secrets.HeathCerberosAppAuthorizationUrl).Value,
|
||||
HeathCerberosAppTokenUrl = builder.Configuration.GetSection(Secrets.HeathCerberosAppTokenUrl).Value,
|
||||
HeathCerberosAppClientId = builder.Configuration.GetSection(Secrets.HeathCerberosAppClientId).Value,
|
||||
HeathCerberosAppScope = builder.Configuration.GetSection(Secrets.HeathCerberosAppScope).Value,
|
||||
PrivateKey = builder.Configuration.GetSection(Secrets.PrivateKey).Value,
|
||||
PublicKey = builder.Configuration.GetSection(Secrets.PublicKey).Value,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.10.34928.147
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Cerberos.Adapters", "Core.Cerberos.Adapters\Core.Cerberos.Adapters.csproj", "{C902AB37-E6D1-4CE7-B271-0E3969C989F3}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Thalos.BuildingBlocks", "Core.Thalos.BuildingBlocks\Core.Thalos.BuildingBlocks.csproj", "{C902AB37-E6D1-4CE7-B271-0E3969C989F3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -5,7 +5,7 @@ using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
public class BaseAdapterResponse
|
||||
{
|
||||
@@ -1,30 +1,23 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="ModuleAdapter.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Cerberos.Adapters.Common.Enums;
|
||||
using Core.Blueprint.Mongo;
|
||||
using Core.Thalos.Adapters.Common.Enums;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter for representing a module.
|
||||
/// </summary>
|
||||
public class ModuleAdapter
|
||||
[CollectionAttributeName("Modules")]
|
||||
public class ModuleAdapter : Document
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the ID of the module.
|
||||
/// </summary>
|
||||
[BsonId]
|
||||
[BsonElement("_id")]
|
||||
[BsonRepresentation(BsonType.ObjectId)]
|
||||
[JsonPropertyName("id")]
|
||||
public string Id { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the module.
|
||||
/// </summary>
|
||||
@@ -73,46 +66,5 @@ namespace Core.Cerberos.Adapters
|
||||
[JsonPropertyName("application")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public ApplicationsEnum? Application { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the module was created.
|
||||
/// </summary>
|
||||
[BsonElement("createdAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("createdAt")]
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who created the module.
|
||||
/// </summary>
|
||||
[BsonElement("createdBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("createdBy")]
|
||||
public string? CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the module was last updated.
|
||||
/// </summary>
|
||||
[BsonElement("updatedAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("updatedAt")]
|
||||
public DateTime? UpdatedAt { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who last updated the module.
|
||||
/// </summary>
|
||||
[BsonElement("updatedBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("updatedBy")]
|
||||
public string? UpdatedBy { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the module.
|
||||
/// </summary>
|
||||
[BsonElement("status")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("status")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public StatusEnum Status { get; set; } = StatusEnum.Active;
|
||||
}
|
||||
}
|
||||
46
Core.Thalos.BuildingBlocks/Adapters/PermissionAdapter.cs
Normal file
46
Core.Thalos.BuildingBlocks/Adapters/PermissionAdapter.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="PermissionAdapter.cs">
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Blueprint.Mongo;
|
||||
using Core.Thalos.Adapters.Common.Constants;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter for representing a permission.
|
||||
/// </summary>
|
||||
[CollectionAttributeName("Permissions")]
|
||||
public class PermissionAdapter : Document
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("name")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("name")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the description of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("description")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity object.
|
||||
/// </summary>
|
||||
[BsonElement("accessLevel")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("accessLevel")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public AccessLevelEnum? AccessLevel { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
59
Core.Thalos.BuildingBlocks/Adapters/RoleAdapter.cs
Normal file
59
Core.Thalos.BuildingBlocks/Adapters/RoleAdapter.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="RoleAdapter.cs">
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Blueprint.Mongo;
|
||||
using Core.Thalos.Adapters.Common.Enums;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter representing a role.
|
||||
/// </summary>
|
||||
[CollectionAttributeName("Roles")]
|
||||
public class RoleAdapter : Document
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the role.
|
||||
/// </summary>
|
||||
[BsonElement("name")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("name")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the description of the role.
|
||||
/// </summary>
|
||||
[BsonElement("description")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("applications")]
|
||||
[JsonPropertyName("applications")]
|
||||
[JsonConverter(typeof(EnumArrayJsonConverter<ApplicationsEnum>))]
|
||||
public ApplicationsEnum[]? Applications { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the modules of the role.
|
||||
/// </summary>
|
||||
[BsonElement("modules")]
|
||||
[JsonPropertyName("modules")]
|
||||
public string[] Modules { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the permissions of the role.
|
||||
/// </summary>
|
||||
[BsonElement("permissions")]
|
||||
[JsonPropertyName("permissions")]
|
||||
public string[] Permissions { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="TokenAdapter.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
public class TokenAdapter
|
||||
{
|
||||
@@ -13,6 +13,6 @@ namespace Core.Cerberos.Adapters
|
||||
public RoleAdapter? Role { get; set; }
|
||||
|
||||
public IEnumerable<PermissionAdapter>? Permissions { get; set; }
|
||||
public IEnumerable<ModuleAdapter>? Modules { get; set; }
|
||||
public IEnumerable<ModuleAdapter> Modules { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +1,21 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="UserAdapter.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
using Core.Cerberos.Adapters.Common.Enums;
|
||||
using Core.Blueprint.Mongo;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter representing a user.
|
||||
/// </summary>
|
||||
public class UserAdapter : BaseAdapterResponse
|
||||
[CollectionAttributeName("Users")]
|
||||
public class UserAdapter : Document
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the unique identifier of the user.
|
||||
/// </summary>
|
||||
[BsonId]
|
||||
[BsonElement("_id")]
|
||||
[BsonRepresentation(BsonType.ObjectId)]
|
||||
[JsonPropertyName("id")]
|
||||
public string Id { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the guid of the user.
|
||||
/// </summary>
|
||||
@@ -126,46 +118,5 @@ namespace Core.Cerberos.Adapters
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("token")]
|
||||
public string? Token { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the entity was created.
|
||||
/// </summary>
|
||||
[BsonElement("createdAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("createdAt")]
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who created the entity.
|
||||
/// </summary>
|
||||
[BsonElement("createdBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("createdBy")]
|
||||
public string? CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date and time when the entity was last updated.
|
||||
/// </summary>
|
||||
[BsonElement("updatedAt")]
|
||||
[BsonRepresentation(BsonType.DateTime)]
|
||||
[JsonPropertyName("updatedAt")]
|
||||
public DateTime? UpdatedAt { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user who last updated the entity.
|
||||
/// </summary>
|
||||
[BsonElement("updatedBy")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("updatedBy")]
|
||||
public string? UpdatedBy { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the entity.
|
||||
/// </summary>
|
||||
[BsonElement("status")]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
[JsonPropertyName("status")]
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public StatusEnum Status { get; set; } = StatusEnum.Active;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Core.Cerberos.Adapters
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
public class Permission
|
||||
{
|
||||
@@ -2,7 +2,7 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Attributes
|
||||
namespace Core.Thalos.Adapters.Attributes
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom authorization attribute that checks if the user has any of the required permissions.
|
||||
@@ -1,12 +1,12 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="AccessLevelEnum.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Specifies different access level for a permission.
|
||||
@@ -1,9 +1,9 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="AzureAd.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants for Azure Active Directory.
|
||||
@@ -1,9 +1,9 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="Claims.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants for claims used in JWT tokens.
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
public static class CollectionNames
|
||||
{
|
||||
@@ -1,10 +1,10 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="EnvironmentVariables.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants of the environment variables for this service.
|
||||
@@ -1,9 +1,9 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="KeyVaultConfiguration.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants for Key Vault configuration.
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
using System.Globalization;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants for the mime types.
|
||||
@@ -1,10 +1,10 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="Routes.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants of the routes of this service.
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants for schemes.
|
||||
@@ -6,9 +6,9 @@
|
||||
public class Schemes
|
||||
{
|
||||
/// <summary>
|
||||
/// The heath scheme.
|
||||
/// The default scheme.
|
||||
/// </summary>
|
||||
public const string HeathScheme = "HeathScheme";
|
||||
public const string DefaultScheme = "DefaultScheme";
|
||||
|
||||
/// <summary>
|
||||
/// The azure scheme.
|
||||
@@ -1,9 +1,9 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="AppSettings.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
namespace Core.Cerberos.Adapters.Common.Constants
|
||||
namespace Core.Thalos.Adapters.Common.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Constants for secrets in azure key vault.
|
||||
@@ -49,11 +49,11 @@ namespace Core.Cerberos.Adapters.Common.Constants
|
||||
public const string AzureADTenantId = "B2C:TenantId";
|
||||
public const string AzureADClientId = "B2C:ClientId";
|
||||
public const string AzureADClientSecret = "B2C:ClientSecret";
|
||||
public const string HeathCerberosAppAuthorizationUrl = "Swagger:AuthorizationUri";
|
||||
public const string HeathCerberosAppTokenUrl = "Swagger:TokenUri";
|
||||
public const string HeathCerberosAppClientId = "Swagger:ClientId";
|
||||
public const string HeathCerberosAppScope = "Swagger:Scope";
|
||||
public const string PrivateKey = "B2C:JwtIssuerOptions:TokenPrivateKey";
|
||||
public const string PublicKey = "B2C:JwtIssuerOptions:TokenPublicKey";
|
||||
public const string ThalosAppAuthorizationUrl = "Swagger:AuthorizationUri";
|
||||
public const string ThalosAppTokenUrl = "Swagger:TokenUri";
|
||||
public const string ThalosAppClientId = "Swagger:ClientId";
|
||||
public const string ThalosAppScope = "Swagger:Scope";
|
||||
public const string PrivateKey = "JwtTokenPrivateKey";
|
||||
public const string PublicKey = "JwtTokenPublicKey";
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="ApplicationsEnum.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Common.Enums
|
||||
namespace Core.Thalos.Adapters.Common.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines the applications associated with the role.
|
||||
@@ -15,28 +15,13 @@ namespace Core.Cerberos.Adapters.Common.Enums
|
||||
public enum ApplicationsEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// LSA Web Portal application.
|
||||
/// Thalos application.
|
||||
/// </summary>
|
||||
LSAWebPortal = 0,
|
||||
Thalos = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Customer DashBoard application.
|
||||
/// DreamViewer application.
|
||||
/// </summary>
|
||||
CustomerDashboard = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Discover application.
|
||||
/// </summary>
|
||||
Discover = 2,
|
||||
|
||||
/// <summary>
|
||||
/// LSA Mobile application.
|
||||
/// </summary>
|
||||
LSAMobile = 3,
|
||||
|
||||
/// <summary>
|
||||
/// BluePrint application.
|
||||
/// </summary>
|
||||
BluePrint = 4,
|
||||
DreamViewer = 1,
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="StatusEnum.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Common.Enums
|
||||
namespace Core.Thalos.Adapters.Common.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines the status of an entity.
|
||||
@@ -1,6 +1,6 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="EnumSchemaFilter.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="ITokenProvider.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
namespace Core.Cerberos.Adapters.Contracts
|
||||
namespace Core.Thalos.Adapters.Contracts
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface for token provider.
|
||||
@@ -1,13 +1,13 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="ITokenService.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Contracts
|
||||
namespace Core.Thalos.Adapters.Contracts
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface for authenticacion service.
|
||||
@@ -17,7 +17,7 @@ namespace Core.Cerberos.Adapters.Contracts
|
||||
/// <summary>
|
||||
/// Refreshes the access token.
|
||||
/// </summary>
|
||||
string GenerateAccessToken(TokenAdapter adapter);
|
||||
(string, IEnumerable<ModuleAdapter>) GenerateAccessToken(TokenAdapter adapter);
|
||||
|
||||
/// <summary>
|
||||
/// Refreshes the access token.
|
||||
@@ -8,23 +8,26 @@
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<VersionPrefix>1.0.2</VersionPrefix>
|
||||
<VersionSuffix>$(Date:yyyyMMddHHmm)</VersionSuffix>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
|
||||
<PackageReference Include="Core.Blueprint.Mongo" Version="1.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Identity.Web" Version="3.2.2" />
|
||||
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="3.2.2" />
|
||||
<PackageReference Include="MongoDB.Bson" Version="3.0.0" />
|
||||
<PackageReference Include="OpenTelemetry" Version="1.9.0" />
|
||||
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.9.0" />
|
||||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="8.2.0" />
|
||||
<PackageReference Include="Microsoft.Identity.Web" Version="3.9.1" />
|
||||
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="3.9.1" />
|
||||
<PackageReference Include="MongoDB.Bson" Version="3.4.0" />
|
||||
<PackageReference Include="OpenTelemetry" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.12.0" />
|
||||
<PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="8.0.5" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="8.1.1" />
|
||||
<PackageReference Include="System.Text.Json" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,14 +1,14 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="AuthExtension.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Cerberos.Adapters.Common.Constants;
|
||||
using Core.Cerberos.Adapters.Contracts;
|
||||
using Core.Cerberos.Adapters.Handlers;
|
||||
using Core.Cerberos.Adapters.Options;
|
||||
using Core.Cerberos.Adapters.Services;
|
||||
using Core.Thalos.Adapters.Common.Constants;
|
||||
using Core.Thalos.Adapters.Contracts;
|
||||
using Core.Thalos.Adapters.Handlers;
|
||||
using Core.Thalos.Adapters.Options;
|
||||
using Core.Thalos.Adapters.Services;
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
@@ -17,7 +17,7 @@ using Microsoft.Identity.Web;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Extensions
|
||||
namespace Core.Thalos.Adapters.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for configuring authentication with various Azure AD setups.
|
||||
@@ -68,7 +68,7 @@ namespace Core.Cerberos.Adapters.Extensions
|
||||
throw new InvalidOperationException("JwtIssuerOptions are not configured correctly.");
|
||||
|
||||
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
||||
.AddJwtBearer(Schemes.HeathScheme, x =>
|
||||
.AddJwtBearer(Schemes.DefaultScheme, x =>
|
||||
{
|
||||
x.TokenValidationParameters = new TokenValidationParameters
|
||||
{
|
||||
@@ -1,12 +1,12 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="SwaggerExtensions.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Asp.Versioning.ApiExplorer;
|
||||
using Core.Cerberos.Adapters.Common.Constants;
|
||||
using Core.Cerberos.Adapters.Extensions;
|
||||
using Core.Thalos.Adapters.Common.Constants;
|
||||
using Core.Thalos.Adapters.Extensions;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@@ -16,7 +16,7 @@ using Microsoft.OpenApi.Models;
|
||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
using Swashbuckle.AspNetCore.SwaggerUI;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Extensions
|
||||
namespace Core.Thalos.Adapters.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for configuring Swagger documentation and UI.
|
||||
@@ -53,11 +53,11 @@ namespace Core.Cerberos.Adapters.Extensions
|
||||
{
|
||||
AuthorizationCode = new OpenApiOAuthFlow
|
||||
{
|
||||
AuthorizationUrl = new Uri(authSettings.HeathCerberosAppAuthorizationUrl ?? string.Empty),
|
||||
TokenUrl = new Uri(authSettings.HeathCerberosAppTokenUrl ?? string.Empty),
|
||||
AuthorizationUrl = new Uri(authSettings.ThalosAppAuthorizationUrl ?? string.Empty),
|
||||
TokenUrl = new Uri(authSettings.ThalosAppTokenUrl ?? string.Empty),
|
||||
Scopes = new Dictionary<string, string>
|
||||
{
|
||||
{ authSettings.HeathCerberosAppScope ?? string.Empty, "Access API as User" }
|
||||
{ authSettings.ThalosAppScope ?? string.Empty, "Access API as User" }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,7 +70,7 @@ namespace Core.Cerberos.Adapters.Extensions
|
||||
{
|
||||
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "oauth2" }
|
||||
},
|
||||
new[] { authSettings.HeathCerberosAppScope }
|
||||
new[] { authSettings.ThalosAppScope }
|
||||
}
|
||||
});
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace Core.Cerberos.Adapters.Extensions
|
||||
app.UseSwaggerUI(options =>
|
||||
{
|
||||
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Custom Auth API with Azure AD v1");
|
||||
options.OAuthClientId(authSettings.HeathCerberosAppClientId);
|
||||
options.OAuthClientId(authSettings.ThalosAppClientId);
|
||||
options.OAuthUsePkce();
|
||||
options.OAuthScopeSeparator(" ");
|
||||
});
|
||||
@@ -4,7 +4,7 @@ using OpenTelemetry.Metrics;
|
||||
using OpenTelemetry.Resources;
|
||||
using OpenTelemetry.Trace;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Extensions
|
||||
namespace Core.Thalos.Adapters.Extensions
|
||||
{
|
||||
public static class TelemetryExtensions
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Extensions
|
||||
namespace Core.Thalos.Adapters.Extensions
|
||||
{
|
||||
public sealed class TrackingMechanismExtension : DelegatingHandler
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Handlers.Adapters
|
||||
namespace Core.Thalos.Adapters.Handlers.Adapters
|
||||
{
|
||||
public class PermissionsAuthorizationAdapter : IAuthorizationRequirement
|
||||
{
|
||||
@@ -1,12 +1,12 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="AuthenticatedHttpClientHandler.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Cerberos.Adapters.Contracts;
|
||||
using Core.Thalos.Adapters.Contracts;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Handlers
|
||||
namespace Core.Thalos.Adapters.Handlers
|
||||
{
|
||||
/// <summary>
|
||||
/// Class to inject the token in all requests.
|
||||
@@ -1,7 +1,7 @@
|
||||
using Core.Cerberos.Adapters.Handlers.Adapters;
|
||||
using Core.Thalos.Adapters.Handlers.Adapters;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Handlers
|
||||
namespace Core.Thalos.Adapters.Handlers
|
||||
{
|
||||
public class PermissionsAuthorizationHandler : AuthorizationHandler<PermissionsAuthorizationAdapter>
|
||||
{
|
||||
57
Core.Thalos.BuildingBlocks/Helpers/AuthHelper.cs
Normal file
57
Core.Thalos.BuildingBlocks/Helpers/AuthHelper.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using Azure.Identity;
|
||||
using Core.Thalos.Adapters.Common.Constants;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Core.Thalos.Adapters.Helpers
|
||||
{
|
||||
public static class AuthHelper
|
||||
{
|
||||
private static readonly ILogger logger = LoggerFactory.Create(builder =>
|
||||
{
|
||||
builder.AddConsole();
|
||||
}).CreateLogger("AuthHelper");
|
||||
|
||||
|
||||
public static AuthSettings GetAuthSettings(WebApplicationBuilder builder, string appConfigLabel)
|
||||
{
|
||||
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty;
|
||||
|
||||
if (environment != "Local")
|
||||
{
|
||||
builder.Configuration.AddAzureAppConfiguration(options =>
|
||||
{
|
||||
var endpoint = builder.Configuration.GetSection("Endpoints:AppConfigurationURI").Value;
|
||||
|
||||
if (string.IsNullOrEmpty(endpoint))
|
||||
throw new ArgumentException("The app configuration is missing");
|
||||
|
||||
options.Connect(new Uri(endpoint), new DefaultAzureCredential())
|
||||
.Select(KeyFilter.Any, "thalos_common")
|
||||
.Select(KeyFilter.Any, appConfigLabel);
|
||||
|
||||
options.ConfigureKeyVault(keyVaultOptions =>
|
||||
{
|
||||
keyVaultOptions.SetCredential(new DefaultAzureCredential());
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return new AuthSettings
|
||||
{
|
||||
AzureADInstance = builder.Configuration.GetSection(Secrets.AzureADInstance).Value,
|
||||
AzureADTenantId = builder.Configuration.GetSection(Secrets.AzureADTenantId).Value,
|
||||
AzureADClientId = builder.Configuration.GetSection(Secrets.AzureADClientId).Value,
|
||||
AzureADClientSecret = builder.Configuration.GetSection(Secrets.AzureADClientSecret).Value,
|
||||
ThalosAppAuthorizationUrl = builder.Configuration.GetSection(Secrets.ThalosAppAuthorizationUrl).Value,
|
||||
ThalosAppTokenUrl = builder.Configuration.GetSection(Secrets.ThalosAppTokenUrl).Value,
|
||||
ThalosAppClientId = builder.Configuration.GetSection(Secrets.ThalosAppClientId).Value,
|
||||
ThalosAppScope = builder.Configuration.GetSection(Secrets.ThalosAppScope).Value,
|
||||
PrivateKey = builder.Configuration.GetSection(Secrets.PrivateKey).Value,
|
||||
PublicKey = builder.Configuration.GetSection(Secrets.PublicKey).Value,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="RsaHelper.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
using Org.BouncyCastle.Crypto;
|
||||
@@ -10,7 +10,7 @@ using Org.BouncyCastle.Security;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Helpers
|
||||
namespace Core.Thalos.Adapters.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Handles all methods related to RSA encryption"/>.
|
||||
@@ -62,7 +62,7 @@ namespace Core.Cerberos.Adapters.Helpers
|
||||
/// <returns>The private key.</returns>
|
||||
private RSACryptoServiceProvider GetPrivateKeyFromPemFile()
|
||||
{
|
||||
using (TextReader privateKeyTextReader = new StringReader(File.ReadAllText(Path.Combine(exeDirectory, "HeathPrivateKey.pem"))))
|
||||
using (TextReader privateKeyTextReader = new StringReader(File.ReadAllText(Path.Combine(exeDirectory, "PrivateKey.pem"))))
|
||||
{
|
||||
AsymmetricCipherKeyPair readKeyPair = (AsymmetricCipherKeyPair)new PemReader(privateKeyTextReader).ReadObject();
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace Core.Cerberos.Adapters.Helpers
|
||||
/// <returns>The public key.</returns>
|
||||
public RSACryptoServiceProvider GetPublicKeyFromPemFile()
|
||||
{
|
||||
using (TextReader publicKeyTextReader = new StringReader(File.ReadAllText(Path.Combine(exeDirectory, "HeathPublicKey.pem"))))
|
||||
using (TextReader publicKeyTextReader = new StringReader(File.ReadAllText(Path.Combine(exeDirectory, "PublicKey.pem"))))
|
||||
{
|
||||
RsaKeyParameters publicKeyParam = (RsaKeyParameters)new PemReader(publicKeyTextReader).ReadObject();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Options
|
||||
namespace Core.Thalos.Adapters.Options
|
||||
{
|
||||
/// <summary>
|
||||
/// JWT token Issuer options (used for JWT Factory)
|
||||
@@ -1,11 +1,11 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="T5okenService.cs">
|
||||
// Heath
|
||||
// <copyright file="TokenService.cs">
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
using Core.Cerberos.Adapters.Common.Constants;
|
||||
using Core.Cerberos.Adapters.Contracts;
|
||||
using Core.Cerberos.Adapters.Options;
|
||||
using Core.Thalos.Adapters.Common.Constants;
|
||||
using Core.Thalos.Adapters.Contracts;
|
||||
using Core.Thalos.Adapters.Options;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
@@ -16,7 +16,7 @@ using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Core.Cerberos.Adapters.Services
|
||||
namespace Core.Thalos.Adapters.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// Service responsible for manage authenticacion.
|
||||
@@ -74,7 +74,7 @@ namespace Core.Cerberos.Adapters.Services
|
||||
/// </summary>
|
||||
/// <param name="user">The user data.</param>
|
||||
/// <returns>The user DTO with the generated token.</returns>
|
||||
public string GenerateAccessToken(TokenAdapter adapter)
|
||||
public (string, IEnumerable<ModuleAdapter>) GenerateAccessToken(TokenAdapter adapter)
|
||||
{
|
||||
|
||||
|
||||
@@ -95,9 +95,6 @@ namespace Core.Cerberos.Adapters.Services
|
||||
new Claim(Claims.Role, adapter?.Role?.Name ?? string.Empty),
|
||||
new Claim(Claims.RoleId, adapter?.Role?.Id ?? string.Empty),
|
||||
new Claim(Claims.Applications, JsonSerializer.Serialize(adapter?.Role?.Applications), JsonClaimValueTypes.JsonArray),
|
||||
new Claim(Claims.Modules, JsonSerializer.Serialize(adapter?.Modules?.Select(m => new { m.Name, m.Application, m.Route, m.Icon, m.Order }), jsonOptions), JsonClaimValueTypes.JsonArray),
|
||||
new Claim(Claims.Companies, JsonSerializer.Serialize(adapter?.User?.Companies), JsonClaimValueTypes.JsonArray),
|
||||
new Claim(Claims.Projects, JsonSerializer.Serialize(adapter?.User?.Projects), JsonClaimValueTypes.JsonArray),
|
||||
new Claim(Claims.Permissions, JsonSerializer.Serialize(adapter?.Permissions?.Select(p => $"{p.Name}.{p.AccessLevel}".Replace(" ", "")).ToArray()), JsonClaimValueTypes.JsonArray),
|
||||
}),
|
||||
|
||||
@@ -109,7 +106,7 @@ namespace Core.Cerberos.Adapters.Services
|
||||
|
||||
var token = tokenHandler.CreateEncodedJwt(tokenDescriptor);
|
||||
|
||||
return token;
|
||||
return (token, adapter.Modules);
|
||||
}
|
||||
|
||||
public ActionResult<TimeSpan> ValidateTokenExpiration(string tokenExpiration)
|
||||
@@ -1,6 +1,6 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="AuthSettings.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
@@ -12,11 +12,11 @@ public class AuthSettings
|
||||
public string? AzureADClientId { get; set; }
|
||||
public string? AzureADClientSecret { get; set; }
|
||||
|
||||
// Heath Cerberos App Settings
|
||||
public string? HeathCerberosAppAuthorizationUrl { get; set; }
|
||||
public string? HeathCerberosAppTokenUrl { get; set; }
|
||||
public string? HeathCerberosAppClientId { get; set; }
|
||||
public string? HeathCerberosAppScope { get; set; }
|
||||
//Thalos App Settings
|
||||
public string? ThalosAppAuthorizationUrl { get; set; }
|
||||
public string? ThalosAppTokenUrl { get; set; }
|
||||
public string? ThalosAppClientId { get; set; }
|
||||
public string? ThalosAppScope { get; set; }
|
||||
|
||||
// Token Keys
|
||||
public string? PrivateKey { get; set; }
|
||||
@@ -1,13 +1,13 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="HttpContextTokenProvider.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using Core.Cerberos.Adapters.Contracts;
|
||||
using Core.Thalos.Adapters.Contracts;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Core.Cerberos.Adapters.TokenProvider
|
||||
namespace Core.Thalos.Adapters.TokenProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Class to return the access token to controllers.
|
||||
@@ -1,12 +1,12 @@
|
||||
// ***********************************************************************
|
||||
// <copyright file="UserExistenceAdapter.cs">
|
||||
// Heath
|
||||
// AgileWebs
|
||||
// </copyright>
|
||||
// ***********************************************************************
|
||||
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Core.Cerberos.Adapters
|
||||
namespace Core.Thalos.Adapters
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapter representing a user.
|
||||
Reference in New Issue
Block a user