diff --git a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs index b708a8ad6..fa2886325 100644 --- a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs +++ b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs @@ -1,74 +1,84 @@ -using System.Text.Json.Serialization; -using Altinn.AccessManagement.Core.Enums; +#nullable enable +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; using Altinn.AccessManagement.Core.Enums.ResourceRegistry; namespace Altinn.AccessManagement.Core.Models.ResourceRegistry { /// - /// Model describing a complete resource from the resource registry. + /// Model describing a complete resource from the resrouce registry /// public class ServiceResource { /// /// The identifier of the resource /// - public string Identifier { get; set; } + [Required] + public string? Identifier { get; set; } + + /// + /// The version of the resource + /// + public string? Version { get; set; } /// /// The title of service /// - public Dictionary Title { get; set; } + [Required] + public Dictionary? Title { get; set; } /// /// Description /// - public Dictionary Description { get; set; } + [Required] + public Dictionary? Description { get; set; } /// /// Description explaining the rights a recipient will receive if given access to the resource /// - public Dictionary RightDescription { get; set; } + public Dictionary? RightDescription { get; set; } /// /// The homepage /// - public string Homepage { get; set; } + public string? Homepage { get; set; } /// /// The status /// - public string Status { get; set; } + public string? Status { get; set; } /// /// spatial coverage /// This property represents that area(s) a Public Service is likely to be available only within, typically the area(s) covered by a particular public authority. /// - public List Spatial { get; set; } + public List? Spatial { get; set; } /// /// List of possible contact points /// - public List ContactPoints { get; set; } + [Required] + public List? ContactPoints { get; set; } /// /// Linkes to the outcome of a public service /// - public List Produces { get; set; } + public List? Produces { get; set; } /// /// IsPartOf /// - public string IsPartOf { get; set; } + public string? IsPartOf { get; set; } /// /// ThematicAreas /// - public List ThematicAreas { get; set; } + public List? ThematicAreas { get; set; } /// /// ResourceReference /// - public List ResourceReferences { get; set; } + public List? ResourceReferences { get; set; } /// /// Is this resource possible to delegate to others or not @@ -83,12 +93,13 @@ public class ServiceResource /// /// HasCompetentAuthority /// - public CompetentAuthority HasCompetentAuthority { get; set; } + [Required] + public CompetentAuthority? HasCompetentAuthority { get; set; } /// /// Keywords /// - public List Keywords { get; set; } + public List? Keywords { get; set; } /// /// Sets the access list mode for the resource @@ -115,22 +126,37 @@ public class ServiceResource /// /// Available for type defines which type of entity / person that resource targets /// - public List AvailableForType { get; set; } + public List? AvailableForType { get; set; } /// /// List of autorizationReference attributes to reference this resource in authorization API /// - public List AuthorizationReference { get; set; } + public List? AuthorizationReference { get; set; } + + /// + /// Consent template defines which template to use if resource is a consent resource + /// + public string? ConsentTemplate { get; set; } + + /// + /// Consent text is markdown text used if resource is a consent resource + /// + public Dictionary? ConsentText { get; set; } + + /// + /// Defines consentmetadata for consent resources + /// + public Dictionary? ConsentMetadata { get; set; } /// - /// Defines consentmendtata for consent resources + /// Defines if consent resource is used for one time consents, or consents with an expiry date /// - public Dictionary ConsentMetadata { get; set; } + public bool IsOneTimeConsent { get; set; } /// - /// The consent template that is used for this resource. + /// Gets or sets the unique identifier for the version of the entity. /// - public string ConsentTemplate { get; set; } + public int VersionId { get; set; } /// /// Writes key information when this object is written to Log. diff --git a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs index d10cdc7d8..e70f0ca07 100644 --- a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs +++ b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs @@ -732,7 +732,8 @@ private static void ValidateContext(ConsentContext context, ref ValidationErrorB } else { - ServiceResource resourceDetails = await _resourceRegistryClient.GetResource(consentRight.Resource[0].Value, cancelactionToken); + ConsentResourceAttribute consentResourceAttribute = consentRight.Resource[0]; + ServiceResource resourceDetails = await _resourceRegistryClient.GetResource(consentResourceAttribute.Value, cancelactionToken); if (resourceDetails == null) { problemsBuilder.Add(Problems.InvalidConsentResource); @@ -744,6 +745,7 @@ private static void ValidateContext(ConsentContext context, ref ValidationErrorB else { ValidateConsentMetadata(ref problemsBuilder, rightIndex, consentRight, resourceDetails); + consentResourceAttribute.Version = resourceDetails.VersionId.ToString(); } if (resourceDetails != null && string.IsNullOrEmpty(templateId)) diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs index 03cdb2b68..abd4d14b3 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs @@ -477,6 +477,8 @@ public async Task GetConsent_Valid() Assert.Equal("d5b861c8-8e3b-44cd-9952-5315e5990cf5", consentRequest.From.ValueSpan); Assert.Equal("8ef5e5fa-94e1-4869-8635-df86b6219181", consentRequest.To.ValueSpan); // TODO FIx Assert.Equal("urn:altinn:resource", consentRequest.ConsentRights[0].Resource[0].Type); + Assert.Equal("1", consentRequest.ConsentRights[0].Resource[0].Version); + Assert.Equal("4", consentRequest.ConsentRights[1].Resource[0].Version); Assert.Equal(consentContextExternal.Language, consentRequest.Context.Language); } diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json index 5459fe9ec..3f9515217 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json @@ -1,4 +1,4 @@ -{ +{ "iD": "a4253d59-b40f-409a-a3f7-c6395f065192", "from": "urn:altinn:party:uuid:d5b861c8-8e3b-44cd-9952-5315e5990cf5", "to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181", @@ -17,7 +17,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_skattegrunnlag" + "value": "ttd_skattegrunnlag", + "version": "1" } ], "metadata": { @@ -32,7 +33,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_inntektsopplysninger" + "value": "ttd_inntektsopplysninger", + "version": "4" } ], "metadata": { diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json index c6a332778..c1b99201c 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json @@ -1,4 +1,4 @@ -{ +{ "iD": "e2071c55-6adf-487b-af05-9198a230ed44", "from": "urn:altinn:party:uuid:d5b861c8-8e3b-44cd-9952-5315e5990cf5", "to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181", @@ -16,7 +16,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_skattegrunnlag" + "value": "ttd_skattegrunnlag", + "version": "1" } ], "metadata": { @@ -31,7 +32,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_inntektsopplysninger" + "value": "ttd_inntektsopplysninger", + "version": "4" } ], "metadata": { diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json index e78868ddf..55ac579c7 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json @@ -16,7 +16,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_skattegrunnlag" + "value": "ttd_skattegrunnlag", + "version": "1" } ], "metadata": { @@ -31,7 +32,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_inntektsopplysninger" + "value": "ttd_inntektsopplysninger", + "version": "4" } ], "metadata": { diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json index f527b608e..8f44aad56 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json @@ -1,4 +1,4 @@ -{ +{ "iD": "e2071c55-6adf-487b-af05-9198a230ed77", "from": "urn:altinn:party:uuid:00000000-0000-0000-0005-000000006078", "to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181", @@ -16,7 +16,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_skattegrunnlag" + "value": "ttd_skattegrunnlag", + "version": "1" } ], "metadata": { @@ -31,7 +32,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_inntektsopplysninger" + "value": "ttd_inntektsopplysninger", + "version": "4" } ], "metadata": { diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json index d2e9a80b1..7330ff785 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json @@ -1,4 +1,4 @@ -{ +{ "iD": "e579b7a2-7994-4636-9aca-59e114915b70", "from": "urn:altinn:party:uuid:d5b861c8-8e3b-44cd-9952-5315e5990cf5", "to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181", @@ -12,7 +12,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_skattegrunnlag" + "value": "ttd_skattegrunnlag", + "version": "1" } ], "metadata": { @@ -27,7 +28,8 @@ "resource": [ { "type": "urn:altinn:resource", - "value": "ttd_inntektsopplysninger" + "value": "ttd_inntektsopplysninger", + "version": "4" } ], "metadata": { diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json index 4e4609c4f..688f6e567 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json @@ -1,4 +1,4 @@ -{ +{ "identifier": "ttd_inntektsopplysninger", "title": { "en": "Consent Income Resource ", @@ -45,5 +45,6 @@ "value": "ttd_inntektsopplysninger" } ], - "consentTemplate": "sblanesoknad" + "consentTemplate": "sblanesoknad", + "versionId": 4 } diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json index 4755cb431..4caa39a22 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json @@ -1,4 +1,4 @@ -{ +{ "identifier": "ttd_navnescore", "title": { "en": "Consent Income Resource ", @@ -42,5 +42,6 @@ "value": "ttd_skattegrunnlag" } ], - "consentTemplate": "default" + "consentTemplate": "default", + "versionId": 3 } diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json index 2721c53e5..691acbd7a 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json @@ -1,4 +1,4 @@ -{ +{ "identifier": "ttd_skattegrunnlag", "title": { "en": "Consent Income Resource ", @@ -46,5 +46,6 @@ "value": "ttd_skattegrunnlag" } ], - "consentTemplate": "sblanesoknad" + "consentTemplate": "sblanesoknad", + "versionId": 1 } diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json index bf66d83ae..9f74b4c4e 100644 --- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json +++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json @@ -1,4 +1,4 @@ -{ +{ "identifier": "ttd_skattegrunnlag2", "title": { "en": "Consent Income Resource ", @@ -46,5 +46,6 @@ "value": "ttd_skattegrunnlag" } ], - "consentTemplate": "sblanesoknad2" + "consentTemplate": "sblanesoknad2", + "versionId": 2 }