feat: Implement API client and token models with hashing and JWT authentication

- Added ApiClientModel and ApiTokenModel for managing API clients and tokens.
- Introduced ConfigurationDefinitionModel and ConfigurationValueModel for configuration management.
- Created CredentialSecretModel for storing credential secrets.
- Developed DeploymentArtifactModel and DeploymentBatchModel for deployment management.
- Enhanced DeploymentTargetModel and DeploymentTemplateSelectionModel to support template revisions.
- Added TemplateRevisionModel and TemplateVersionModel for versioning templates.
- Implemented ApiClientSecretHasher for secure secret hashing.
- Created ApiTokenService for generating and validating JWT tokens.
- Updated QueueJobService to handle deployment requests with artifacts.
- Configured authentication settings in appsettings.json for JWT and Negotiate authentication.
This commit is contained in:
Torsten Brendgen
2026-07-09 14:44:38 +02:00
parent 1aa2adac08
commit dc93ea0813
72 changed files with 32906 additions and 516 deletions

View File

@@ -190,12 +190,26 @@ namespace Microsoft.SelfService.Portal.Core.API.Controllers
if (!_deploymentBatchInterface.CheckDeploymentBatchById(id))
return NotFound();
if (!_context.TemplateVersions.Any(version => version.Id == templateSelection.TemplateVersionId))
var templateVersion = _context.TemplateVersions
.Include(version => version.TemplateRevisions)
.FirstOrDefault(version => version.Id == templateSelection.TemplateVersionId);
if (templateVersion == null)
{
ModelState.AddModelError(nameof(templateSelection.TemplateVersionId), "Template version was not found.");
return BadRequest(ModelState);
}
var templateRevisionId = templateSelection.TemplateRevisionId
?? templateVersion.TemplateRevisions.FirstOrDefault(revision => revision.IsCurrent)?.Id;
if (templateRevisionId.HasValue
&& !templateVersion.TemplateRevisions.Any(revision => revision.Id == templateRevisionId.Value))
{
ModelState.AddModelError(nameof(templateSelection.TemplateRevisionId), "Template revision was not found in this template version.");
return BadRequest(ModelState);
}
var sortOrder = templateSelection.SortOrder > 0
? templateSelection.SortOrder
: GetNextTemplateSelectionSortOrder(id);
@@ -210,6 +224,7 @@ namespace Microsoft.SelfService.Portal.Core.API.Controllers
model.Id = Guid.NewGuid();
model.DeploymentGroupId = id;
model.SortOrder = sortOrder;
model.TemplateRevisionId = templateRevisionId;
_context.DeploymentTemplateSelections.Add(model);
_context.SaveChanges();