From a5689f2c542a60ec21b28c5c6ace6fa9c210abdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20J=C3=B8rgen=20Skogstad?= Date: Thu, 20 Feb 2025 12:20:21 +0100 Subject: [PATCH] feat(webapi): Add flag for disabling SystemLabel reset (#1921) ## Description ## Related Issue(s) - #1905 ## Verification - [ ] **Your** code builds clean without any errors or warnings - [ ] Manual testing done (required) - [ ] Relevant automated test added (if you find this hard, leave it and we'll help out) ## Documentation - [ ] Documentation is updated (either in `docs`-directory, Altinnpedia or a separate linked PR in [altinn-studio-docs.](https://github.com/Altinn/altinn-studio-docs), if applicable) --- .../Common/Authorization/Constants.cs | 3 +++ .../Dialogs/Commands/Update/UpdateDialogCommand.cs | 12 +++++++++++- .../Create/CreateDialogActivityEndpoint.cs | 6 +++++- .../Create/CreateDialogTransmissionEndpoint.cs | 6 +++++- .../Dialogs/Patch/PatchDialogsController.cs | 4 +++- .../Dialogs/Update/UpdateDialogEndpoint.cs | 6 +++++- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/Digdir.Domain.Dialogporten.Application/Common/Authorization/Constants.cs b/src/Digdir.Domain.Dialogporten.Application/Common/Authorization/Constants.cs index d156a0339..d7c3f13a5 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Common/Authorization/Constants.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Common/Authorization/Constants.cs @@ -17,6 +17,9 @@ public static class Constants public const string DisableAltinnEventsRequiresAdminScope = "Disabling Altinn events requires service owner admin scope."; + public const string DisableSystemLabelResetRequiresAdminScope = + "Disabling SystemLabel reset requires service owner admin scope."; + public static readonly ImmutableArray SupportedResourceTypes = [ "GenericAccessResource", diff --git a/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs b/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs index ec224c7ae..10d66e29d 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs @@ -20,6 +20,7 @@ using MediatR; using Microsoft.EntityFrameworkCore; using OneOf; +using Constants = Digdir.Domain.Dialogporten.Application.Common.Authorization.Constants; namespace Digdir.Domain.Dialogporten.Application.Features.V1.ServiceOwner.Dialogs.Commands.Update; @@ -29,6 +30,7 @@ public sealed class UpdateDialogCommand : IRequest, IAltinnE public Guid? IfMatchDialogRevision { get; set; } public UpdateDialogDto Dto { get; set; } = null!; public bool DisableAltinnEvents { get; set; } + public bool DisableSystemLabelReset { get; set; } } [GenerateOneOf] @@ -66,6 +68,11 @@ public UpdateDialogCommandHandler( public async Task Handle(UpdateDialogCommand request, CancellationToken cancellationToken) { + if (request.DisableSystemLabelReset && !_userResourceRegistry.IsCurrentUserServiceOwnerAdmin()) + { + return new Forbidden(Constants.DisableSystemLabelResetRequiresAdminScope); + } + var resourceIds = await _userResourceRegistry.GetCurrentUserResourceIds(cancellationToken); var dialog = await _db.Dialogs @@ -164,7 +171,10 @@ public async Task Handle(UpdateDialogCommand request, Cancel return forbiddenResult; } - UpdateLabel(dialog); + if (!request.DisableSystemLabelReset) + { + UpdateLabel(dialog); + } var saveResult = await _unitOfWork .EnableConcurrencyCheck(dialog, request.IfMatchDialogRevision) diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogActivities/Create/CreateDialogActivityEndpoint.cs b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogActivities/Create/CreateDialogActivityEndpoint.cs index 6563d0ea2..687333354 100644 --- a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogActivities/Create/CreateDialogActivityEndpoint.cs +++ b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogActivities/Create/CreateDialogActivityEndpoint.cs @@ -66,7 +66,8 @@ await errors.Match( Id = req.DialogId, IfMatchDialogRevision = req.IfMatchDialogRevision, Dto = updateDialogDto, - DisableAltinnEvents = req.DisableAltinnEvents ?? false + DisableAltinnEvents = req.DisableAltinnEvents ?? false, + DisableSystemLabelReset = req.DisableSystemLabelReset ?? false }; var result = await _sender.Send(updateDialogCommand, ct); @@ -99,4 +100,7 @@ public sealed class CreateActivityRequest : ActivityDto [HideFromDocs] public bool? DisableAltinnEvents { get; init; } + + [HideFromDocs] + public bool? DisableSystemLabelReset { get; init; } } diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogTransmissions/Create/CreateDialogTransmissionEndpoint.cs b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogTransmissions/Create/CreateDialogTransmissionEndpoint.cs index 553f6bb8e..6cd6361f5 100644 --- a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogTransmissions/Create/CreateDialogTransmissionEndpoint.cs +++ b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/DialogTransmissions/Create/CreateDialogTransmissionEndpoint.cs @@ -66,7 +66,8 @@ await errors.Match( Id = req.DialogId, IfMatchDialogRevision = req.IfMatchDialogRevision, Dto = updateDialogDto, - DisableAltinnEvents = req.DisableAltinnEvents ?? false + DisableAltinnEvents = req.DisableAltinnEvents ?? false, + DisableSystemLabelReset = req.DisableSystemLabelReset ?? false }; var result = await _sender.Send(updateDialogCommand, ct); @@ -97,4 +98,7 @@ public sealed class CreateTransmissionRequest : TransmissionDto [HideFromDocs] public bool? DisableAltinnEvents { get; init; } + + [HideFromDocs] + public bool? DisableSystemLabelReset { get; init; } } diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Patch/PatchDialogsController.cs b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Patch/PatchDialogsController.cs index 851334fc5..6729a69e6 100644 --- a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Patch/PatchDialogsController.cs +++ b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Patch/PatchDialogsController.cs @@ -68,6 +68,7 @@ public async Task Patch( [FromHeader(Name = Constants.IfMatch)] Guid? etag, [FromBody] JsonPatchDocument patchDocument, [OpenApiIgnore][FromQuery] bool? disableAltinnEvents, + [OpenApiIgnore][FromQuery] bool? disableSystemLabelReset, CancellationToken ct) { var dialogQueryResult = await _sender.Send(new GetDialogQuery { DialogId = dialogId }, ct); @@ -93,7 +94,8 @@ public async Task Patch( Id = dialogId, IfMatchDialogRevision = etag, Dto = updateDialogDto, - DisableAltinnEvents = disableAltinnEvents ?? false + DisableAltinnEvents = disableAltinnEvents ?? false, + DisableSystemLabelReset = disableSystemLabelReset ?? false }; var result = await _sender.Send(command, ct); diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Update/UpdateDialogEndpoint.cs b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Update/UpdateDialogEndpoint.cs index 9bec5215f..2eba46d19 100644 --- a/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Update/UpdateDialogEndpoint.cs +++ b/src/Digdir.Domain.Dialogporten.WebApi/Endpoints/V1/ServiceOwner/Dialogs/Update/UpdateDialogEndpoint.cs @@ -39,7 +39,8 @@ public override async Task HandleAsync(UpdateDialogRequest req, CancellationToke Id = req.DialogId, IfMatchDialogRevision = req.IfMatchDialogRevision, Dto = req.Dto, - DisableAltinnEvents = req.DisableAltinnEvents ?? false + DisableAltinnEvents = req.DisableAltinnEvents ?? false, + DisableSystemLabelReset = req.DisableSystemLabelReset ?? false }; var updateDialogResult = await _sender.Send(command, ct); @@ -70,4 +71,7 @@ public sealed class UpdateDialogRequest [HideFromDocs] public bool? DisableAltinnEvents { get; init; } + + [HideFromDocs] + public bool? DisableSystemLabelReset { get; init; } }