From 32dc26241e80f67d718d8a484af06ef2af5b2a0a Mon Sep 17 00:00:00 2001 From: Reshmi V Nair <54312456+reshmi-nair@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:30:15 +0530 Subject: [PATCH] LR-521 Merging from Release 5.2.0 to master (#1166) * feat: ED-1175 Standalone helm chart for Learner service (#1159) * Issue #LR-101 feat: Moved cassandra.cql to sunbird-utils repo as V1.0_cassandra.cql in cassandra-migration module. And removing sunbirdplugin references. (#1161) * LR-329 - Test Automation for CSP (#1160) --------- Signed-off-by: Keshav Prasad Co-authored-by: Keshav Prasad Co-authored-by: Anil Gupta Co-authored-by: Bharathwaj <32808916+BharathwajShankar@users.noreply.github.com> --- .github/workflows/static.yml | 42 + .gitignore | 1 + .../src/main/resources/elasticsearch.conf | 14 - core/platform-common/pom.xml | 2 +- .../org/sunbird/util/CloudStorageUtil.java | 8 +- .../resources/externalresource.properties | 2 +- .../sunbird/util/CloudStorageUtilTest.java | 73 +- helm/learner/.helmignore | 24 + helm/learner/Chart.lock | 9 + helm/learner/Chart.yaml | 32 + .../charts/common_opa_policies-0.1.0.tgz | Bin 0 -> 10062 bytes .../charts/learner_opa_policies-0.1.0.tgz | Bin 0 -> 2533 bytes helm/learner/learner_sample_values.yaml | 138 +++ helm/learner/templates/configmap.yaml | 404 ++++++++ helm/learner/templates/deployment.yaml | 138 +++ helm/learner/templates/envoy-config.yaml | 115 +++ helm/learner/templates/service.yaml | 24 + helm/learner/values.yaml | 325 +++++++ helm/learner_opa_policies/.helmignore | 24 + helm/learner_opa_policies/Chart.yaml | 24 + .../service-policies/policies.rego | 307 ++++++ .../service-policies/policies_test.rego | 920 ++++++++++++++++++ .../templates/configmap.yaml | 8 + helm/learner_opa_policies/values.yaml | 1 + index.yaml | 32 + learner-0.1.0.tgz | Bin 0 -> 21349 bytes learner_opa_policies-0.1.0.tgz | Bin 0 -> 2533 bytes service/src/main/resources/cassandra.cql | 562 ----------- 28 files changed, 2629 insertions(+), 600 deletions(-) create mode 100644 .github/workflows/static.yml create mode 100644 helm/learner/.helmignore create mode 100644 helm/learner/Chart.lock create mode 100644 helm/learner/Chart.yaml create mode 100644 helm/learner/charts/common_opa_policies-0.1.0.tgz create mode 100644 helm/learner/charts/learner_opa_policies-0.1.0.tgz create mode 100644 helm/learner/learner_sample_values.yaml create mode 100644 helm/learner/templates/configmap.yaml create mode 100644 helm/learner/templates/deployment.yaml create mode 100644 helm/learner/templates/envoy-config.yaml create mode 100644 helm/learner/templates/service.yaml create mode 100644 helm/learner/values.yaml create mode 100644 helm/learner_opa_policies/.helmignore create mode 100644 helm/learner_opa_policies/Chart.yaml create mode 100644 helm/learner_opa_policies/service-policies/policies.rego create mode 100644 helm/learner_opa_policies/service-policies/policies_test.rego create mode 100644 helm/learner_opa_policies/templates/configmap.yaml create mode 100644 helm/learner_opa_policies/values.yaml create mode 100644 index.yaml create mode 100644 learner-0.1.0.tgz create mode 100644 learner_opa_policies-0.1.0.tgz delete mode 100644 service/src/main/resources/cassandra.cql diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000000..44985131d3 --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,42 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["helm-sub-chart"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/.gitignore b/.gitignore index 683ea4bb6c..7e99a28fe9 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ RUNNING_PID /.target/ /bin/ /logs +.vscode diff --git a/core/es-utils/src/main/resources/elasticsearch.conf b/core/es-utils/src/main/resources/elasticsearch.conf index 4691424b95..9e18c715f4 100644 --- a/core/es-utils/src/main/resources/elasticsearch.conf +++ b/core/es-utils/src/main/resources/elasticsearch.conf @@ -46,20 +46,6 @@ "type" = "_doc" } }, - sunbirdplugin = { - announcementtype = { - index = "announcementtype", - "type" = "_doc" - }, - announcement = { - index = "announcement", - "type" = "_doc" - }, - metrics = { - index = "metrics", - "type" = "_doc" - } - }, sbtestindex = { sbtesttype = { index = "sbtestindex", diff --git a/core/platform-common/pom.xml b/core/platform-common/pom.xml index 92ff7f9491..0c6bcab3fe 100644 --- a/core/platform-common/pom.xml +++ b/core/platform-common/pom.xml @@ -114,7 +114,7 @@ org.sunbird cloud-store-sdk - 1.4.3 + 1.4.4 com.sun.jersey diff --git a/core/platform-common/src/main/java/org/sunbird/util/CloudStorageUtil.java b/core/platform-common/src/main/java/org/sunbird/util/CloudStorageUtil.java index dceb38ff75..c930eeccaf 100644 --- a/core/platform-common/src/main/java/org/sunbird/util/CloudStorageUtil.java +++ b/core/platform-common/src/main/java/org/sunbird/util/CloudStorageUtil.java @@ -30,16 +30,16 @@ public static String upload( public static String getSignedUrl( String storageType, String container, String objectKey) { IStorageService storageService = getStorageService(storageType); - return getSignedUrl(storageService, container, objectKey); + return getSignedUrl(storageService, container, objectKey,storageType); } public static String getSignedUrl( IStorageService storageService, String container, - String objectKey) { + String objectKey,String cloudType) { int timeoutInSeconds = getTimeoutInSeconds(); - return storageService.getSignedURL( - container, objectKey, Some.apply(timeoutInSeconds), Some.apply("r")); + return storageService.getSignedURLV2( + container, objectKey, Some.apply(timeoutInSeconds), Some.apply("r"), Some.apply("application/pdf")); } private static IStorageService getStorageService(String storageType) { diff --git a/core/platform-common/src/main/resources/externalresource.properties b/core/platform-common/src/main/resources/externalresource.properties index 12df4613f2..097af1a741 100644 --- a/core/platform-common/src/main/resources/externalresource.properties +++ b/core/platform-common/src/main/resources/externalresource.properties @@ -36,7 +36,7 @@ sunbird_otp_allowed_attempt=2 #Telemetry producer related info telemetry_pdata_id=local.sunbird.learning.service telemetry_pdata_pid=learning-service -telemetry_pdata_ver=5.1.0 +telemetry_pdata_ver=5.2.0 #elastic search top n result count for telemetry searchTopN=5 ekstep.channel.update.api.url=/channel/v3/update diff --git a/core/platform-common/src/test/java/org/sunbird/util/CloudStorageUtilTest.java b/core/platform-common/src/test/java/org/sunbird/util/CloudStorageUtilTest.java index 18fce8442e..975a5299cc 100644 --- a/core/platform-common/src/test/java/org/sunbird/util/CloudStorageUtilTest.java +++ b/core/platform-common/src/test/java/org/sunbird/util/CloudStorageUtilTest.java @@ -6,38 +6,33 @@ import static org.powermock.api.mockito.PowerMockito.when; import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.sunbird.cloud.storage.BaseStorageService; import org.sunbird.cloud.storage.factory.StorageServiceFactory; +import org.sunbird.keys.JsonKey; import scala.Option; @RunWith(PowerMockRunner.class) @PowerMockIgnore({ - "javax.management.*", - "javax.net.ssl.*", - "javax.security.*", - "jdk.internal.reflect.*" + "javax.management.*", + "javax.net.ssl.*", + "javax.security.*", + "jdk.internal.reflect.*" }) @PrepareForTest({StorageServiceFactory.class, CloudStorageUtil.class, PropertiesCache.class}) public class CloudStorageUtilTest { private static final String SIGNED_URL = "singedUrl"; private static final String UPLOAD_URL = "uploadUrl"; + private static final String PUT_SIGNED_URL = "gcpSignedUrl"; @Before public void initTest() { - PowerMockito.mockStatic(PropertiesCache.class); - PropertiesCache propertiesCache = mock(PropertiesCache.class); - when(PropertiesCache.getInstance()).thenReturn(propertiesCache); - PowerMockito.when(propertiesCache.getProperty(Mockito.anyString())).thenReturn("anyString"); - BaseStorageService service = mock(BaseStorageService.class); mockStatic(StorageServiceFactory.class); @@ -52,14 +47,46 @@ public void initTest() { Mockito.any(Option.class), Mockito.any(Option.class), Mockito.any(Option.class))) - .thenReturn(UPLOAD_URL); + .thenReturn(UPLOAD_URL); when(service.getSignedURL( Mockito.anyString(), Mockito.anyString(), Mockito.any(Option.class), Mockito.any(Option.class))) - .thenReturn(SIGNED_URL); + .thenReturn(SIGNED_URL); + + when(service.getPutSignedURL( + Mockito.anyString(), + Mockito.anyString(), + Mockito.any(Option.class), + Mockito.any(Option.class), + Mockito.any(Option.class))) + .thenReturn(PUT_SIGNED_URL); + + when(service.getSignedURLV2( + Mockito.eq("azurecontainer"), + Mockito.anyString(), + Mockito.any(Option.class), + Mockito.any(Option.class), + Mockito.any(Option.class))) + .thenReturn(SIGNED_URL); + + when(service.getSignedURLV2( + Mockito.eq("gcpcontainer"), + Mockito.anyString(), + Mockito.any(Option.class), + Mockito.any(Option.class), + Mockito.any(Option.class))) + .thenReturn(PUT_SIGNED_URL); + + when(service.getSignedURLV2( + Mockito.eq("awscontainer"), + Mockito.anyString(), + Mockito.any(Option.class), + Mockito.any(Option.class), + Mockito.any(Option.class))) + .thenReturn(SIGNED_URL); } catch (Exception e) { Assert.fail(e.getMessage()); @@ -67,17 +94,27 @@ public void initTest() { } @Test - // @Ignore public void testUploadSuccess() { String result = - CloudStorageUtil.upload("azure", "container", "key", "/file/path"); + CloudStorageUtil.upload("azure", "container", "key", "/file/path"); assertTrue(UPLOAD_URL.equals(result)); } @Test - @Ignore - public void testGetSignedUrlSuccess() { - String signedUrl = CloudStorageUtil.getSignedUrl("azure", "container", "key"); + public void testGetSignedUrlAZURESuccess() { + String signedUrl = CloudStorageUtil.getSignedUrl("azure", "azurecontainer", "key"); + assertTrue(SIGNED_URL.equals(signedUrl)); + } + + @Test + public void testGetSignedUrlGCPSuccess() { + String signedUrl = CloudStorageUtil.getSignedUrl("gcloud", "gcpcontainer", "key"); + assertTrue(PUT_SIGNED_URL.equals(signedUrl)); + } + + @Test + public void testGetSignedUrlAWSSuccess() { + String signedUrl = CloudStorageUtil.getSignedUrl("aws", "awscontainer", "key"); assertTrue(SIGNED_URL.equals(signedUrl)); } } diff --git a/helm/learner/.helmignore b/helm/learner/.helmignore new file mode 100644 index 0000000000..086d3bedf3 --- /dev/null +++ b/helm/learner/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +*_test.rego \ No newline at end of file diff --git a/helm/learner/Chart.lock b/helm/learner/Chart.lock new file mode 100644 index 0000000000..e5e77ea3eb --- /dev/null +++ b/helm/learner/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: common_opa_policies + repository: https://keshavprasadms.github.io/sunbird-helmchart-templates + version: 0.1.0 +- name: learner_opa_policies + repository: https://keshavprasadms.github.io/sunbird-lms-service + version: 0.1.0 +digest: sha256:1d739f27fd24f4b32e2b3c2438886d369107bd65c85b99ef9151a0b6ae51b63a +generated: "2023-02-19T08:47:55.332813+05:30" diff --git a/helm/learner/Chart.yaml b/helm/learner/Chart.yaml new file mode 100644 index 0000000000..e7c267ba31 --- /dev/null +++ b/helm/learner/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +name: learner +description: A helm chart for learner service + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "5.0.0" + +dependencies: + - name: common_opa_policies + repository: https://keshavprasadms.github.io/sunbird-helmchart-templates + version: 0.1.0 + - name: learner_opa_policies + repository: https://keshavprasadms.github.io/sunbird-lms-service + version: 0.1.0 \ No newline at end of file diff --git a/helm/learner/charts/common_opa_policies-0.1.0.tgz b/helm/learner/charts/common_opa_policies-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..216c1ac6cee313287151cfd0985be12c76ad692f GIT binary patch literal 10062 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 CWagOw literal 0 HcmV?d00001 diff --git a/helm/learner/charts/learner_opa_policies-0.1.0.tgz b/helm/learner/charts/learner_opa_policies-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..eb561ee5e6c4e8e16820b19d74fab82519c1ce40 GIT binary patch literal 2533 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 literal 0 HcmV?d00001 diff --git a/helm/learner/learner_sample_values.yaml b/helm/learner/learner_sample_values.yaml new file mode 100644 index 0000000000..a7112e8de2 --- /dev/null +++ b/helm/learner/learner_sample_values.yaml @@ -0,0 +1,138 @@ +## This section has mandatory variables +## You must provide a value for these +## If you don't provide a value for these variables, the chart installation will not proceed + +## The domain name or Public IP address +## The domain name should start with http or https +## For example https://example.com +domain: "https://abc.com" + +## Can be one of - azure, aws, gcloud +cloud_service_provider: "aws" + +## Public storage bucket details +cloud_public_storage_accountname: "public" +cloud_public_storage_secret: "publicsecret" + +## Private storage bucket details +cloud_private_storage_accountname: "private" +cloud_private_storage_secret: "privatesecret" + + +## This section has optional variables +## It is strongly recommended to provide a value for these +## If you don't provide a value for these variables, they will default to empty values +## If these variables are empty, some features on the application might not work as expected +google_captcha_mobile_private_key: "" +google_captcha_private_key: "" +sunbird_mail_server_from_email: "" +sunbird_mail_server_host: "" +sunbird_mail_server_password: "" +sunbird_mail_server_port: "" +sunbird_mail_server_username: "" +sunbird_msg_91_auth: "" +sunbird_msg_sender: "" +sunbird_url_shortner_access_token: "" + + +## The merge domain name or Public IP address +## The merge domain name should start with http or https +## For example https://merge.example.com +merge_domain: "" + +## This section has optional variables +## If you provide a value to the variable, then that will have the highest precedence +## If you don't provide a value, then it's fetched from kubernetes secret or subchart template +## If the value is empty or nil, installation will be halted +ekstep_authorization: "EKSTEP_AUTHORIZATION_KEY" +sunbird_authorization: "SUNBIRD_AUTHORIZATION_KEY" +sunbird_keycloak_user_federation_provider_id: "SUNBIRD_KEYCLOAK_USER_FEDERATION_PROVIDER_ID" +sunbird_pg_user: "SUNBIRD_PG_USER" +sunbird_pg_password: "SUNBIRD_PG_PASSWORD" +sunbird_sso_client_secret: "SUNBIRD_SSO_CLIENT_SECRET" +sunbird_sso_publickey: "SUNBIRD_SSO_PUBLICKEY" + +# Subchart variables and values +global: + keycloak_sunbird_realm_kid: "ABCDEFGHIKLMN" + keycloak_sunbird_realm_public_key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoHJ4vh0HbIGsqDBDHBLIXJtla+a00jGd7UYHFOPpp7+Pcieu6ujYf/kvh2i66aYB9P2lZjaGVoy1bYhI8+ny33r616AvfwP8H2kujboFRxEGdIkrVgmx+YcWU6SjmpcE9nvRpo2HqxiCggk6HB/yM8VQBSh5v8Gk13JaK6qAH737ybtIBW/0CEN2aF64JpPmcri8fFdl+xeycYOq+ueSZ7NXRyOL4CLSk+M5StHn4mz14m/RqNtdIgaTc42F74+pgWt0o4T9kkMbjZI7ujjZN+eJBBdjdRUl/gYLDGbG1gF+gCndicd2InpSFFfTugmSc3jsAGjZ4jiSv1uxm+QihwIDAQAB" + user_access_private_keys: + accessv1_key1: | + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5GDQK2PSrnojv + g3vYBuJuHslvgv+IdqtnFhMEwQrfJJd4PNkxATR69/OO2OO4xd8tC+bQYkPcImO0 + Y3ynvsVwbJ2che2dS6RvsZh5Es7dpcf7UVp9AQb4QPTvGDYagrekf3cpdy3CoeZm + lb1jOmJKP6YS4PIqmeO4dfsz0p2rNraeg42Dpgt6wcievSvyXIf6QqDwCpp/HnK4 + Kso2yL9XSUE87Khhb6itbAos9TnRpraVZYho2WuDTXQYfYZHEr8EzX1mS8dQhJTr + N6Nl7PVteVfxFqQR41a1WB/w5Lx3iYawhmuI1eSuAmZT3PoeRTXFalJlyNJb74je + DgOYCYiTAgMBAAECggEAM4DkmlAcZNTMTblMcKQZxYKTko/lAtfigeDGkgAVQlow + O6jS1qv7KmxsPUdktjl5DFPPehSdxVdcXwl/2j1fOxU+Fhu+LpKpwtqsDqSJI2vJ + 5ciRYU8z3UhV32HhTCcran59bfBXr1zVe54XANFyIC7tyzsEp44Cq4VIzPbCIK2z + oSYul4ydJmuJ6THsDNdWSWGyE/1iNGD94JnlIuQZ+0r/GXRf9BDLnNPKVfj2lcO5 + OuNTZE5jkrgSC+TXoHV7m32V/4XQRpJZ2aAr2LrBCW4iy+3/IbgFmKr6HfQIoHWY + K9Vgk8wdcBnfcTdoCHVE42fzHqIom/R8STRFVNHswQKBgQDdy3AcFhW9TFRw0Sa+ + JOG2qXgKLQWyKxaH5jfdGsQw0nUT08fgTlDCxcC64ByIzmc02l4kB23a6XzViR4v + /K3519A5iKfC1alfMFcDokDjPRkdiZ5hHaPfWBrLp+KL0GtoAogR6qyE9i47XFqQ + VC/zAPoRoBjwFFO6RGkTkuwcCQKBgQDVo9N9I7vtG2G2+LcXoCxUFcZw8ogpYmrT + m1DKAMQxid5rc/0P1OSdudtjYMpdXPKXeyztHhFxBwlvZG5kiPz/yRO0jHJTQbZP + yP/hZOf2Dcwmf0RyIFbynBD8Vkla/ChjDbZM6Sv+6GkXU4DvjAQdh1Um5923EZML + OKkraggeuwKBgQDVXivI6ToatL6bFaomzAZUGi4/49YR87+mF0RwsZpBuYUmANvN + Hqo05dcmMAljVuUUhGqCUJ9PNMWCC3n+AiBANWy8nIl/NtrMlw1ukn3H3fQ2ZTj3 + BnOqnfCRMT4Q8P0SvzS1v8Qd2VLailsZc9P4+1yW7iRvea6eh8dqLDJ2OQKBgCbO + Gxwf4YKv9o/FnXwtG+AqFGFvrEvYFI9bJtGKUhitcjkSWGUHxn7fw3nJmvhaabYa + KY7oZ0KghJY3J9YbC9lqLKoe2KVGylazq8bFDV0kJHDZrRUNyr1Gm8853RkptCxJ + 0VMnB1bF4FDcWg8o35Z9fnoSo7Mc/hiLsi6wk8kBAoGAVaojV+zrC07VDcLKNtsh + R+87iJCNldFV1X2rfPYFMLDWyLubd0g1v8ulYlk3KRv2MNYftaNHT4PXNSZuhfJy + mg13rZDoFKFB5DRpfv6ybZIaGxrZ9R+2lV2pFCgFuTExtAufN/JeXM6hNzdAzRgK + dhMts6drDP0QTO0yK99dPa4= + -----END PRIVATE KEY----- + accessv1_key2: | + -----BEGIN PRIVATE KEY----- + MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDoxlV1cR2IXQtj + 3kEpgnTySHWncmdtBOeNKVBQetZ14CSqVadLHsK+sZgeRm0zY6GURn6IxWaxUbhG + sHhc6WKKOhKFOOgjv38E7eDq6llnH2hOA8Lypu63Ijdbc2ifYCpuyfwRT9vEpbFo + vE1SqSZmplkOh1+zFjzf2TypZcdLLRABkGd/0ZelOG9qx7bM2th8nOcH/uVsFO5R + YELvRkEUUegNvIUq6MtVRH4A1hE3a5EYtPQD9KV8VcyMVET883MgL5tSI8Mhu2nL + mNY6Q7Stnp6VemuCCe5hd9SRnfr0ytV0K9JaA4zAS4isEHwcP97oyhNs6IhL64iw + 7FQwshxnAgMBAAECggEBAIq/bcELI6dcjqWAnSa49CxWtIqSzsNU4RBrR8ww7BRm + /nPpikZkl4BDK4EgSYcQJAfV3SZ5Q7T+GPFJzvTSyEHMS63NNdHZG0U85YwhFBk7 + x1h5NYKdrjzK0GRabkpRb/mJvA41o7GbchwT4aMb4B/fl8XpO0nsP2zOeDIg0KIl + nxiZToaZocwJh4IkfYMnOhSp617ZBbLb25cdRAIEQaGLRuoqibfmB+cBMmQUGFNB + O9/efJLVTAWk5NvmOWMZ2Wgs6cjIWZPVDXXbAzz+XWQqi4+6He3NGaJ+vq2NdXGc + hw3V8BwJGsh9/3usoc2lS9QXDkX771N7WFzmOw3u/EECgYEA9P+cUJNTsvuy0RJC + ZhewTidY15WkwxBPoUqmTOnfFEMw/DO4jC6JWXFb45lANuooFiQwb8svM6Y+o6hP + NkPaxt426fEU0F4beBid1vUrOk/4a6SRFUdwPzDaDUwc2+Wwo0QxNlXG6mKPtC12 + dnOtF139edQ24uNdi6oegR2qsu0CgYEA8zo0bEZ0gZdBcMNJtVEoQHAv4DSDGieL + HghLKaqLsVBWFDysV4w7y8Tqy8GPRUG4MCKIa1zhjY0AY92afdvwYStVhyNj+BWT + qvTTTYsFvvnUO0MUV5ewwX1QcPLns27SGteN/p5PrEOsJ5R9NDLUJWCGOk3QYscd + dI7cWNcXfiMCgYBpDt8x8is3GhWw75qHeusAaIEBWUsg1nK/IGq1mqgtYS61R1yA + yEffkeusaoANzFVKQVR/6+oexNAhj7//7hL3qjx0Dww02dX/ptawYcuaosZNKnGI + ZWztu/4VK6lIZnNbX5eWzCuTQJaM1d3xp2L3HTffsS+kFYl8pYOVLGqRdQKBgEH0 + F4EAvdjiFfmoytTi0+JdSW4nbyFpdZzILPF4cHa9TQohxa3btd80X2Ku8tWZ04Mh + 6hIK1pKWmHN8BMd6Gz2ODZweaZ4845To3F9bgkxd3EHRl7OEy4Y8H9Lw2wlZ1Jk4 + uCVB8mLI2ubEqgq8ebBE80DeFtKiIYeYsYFZmeI3AoGBAKUWA7KqJ+Gw5QIbJ680 + bZqKZliuCzI4HkXeNNFYv9+8ec+P6prbfP6WlAsjLsPVJj5gV1A/55syhvPzfSXw + GAcMqQqWTYIyoLJ+idyitJVuFmXi/eAaNDIh001Itz8R6uPWIR/KqIJUagc8ZzcS + S/euzu2m6qX8poTQAo+NoUp2 + -----END PRIVATE KEY---- + user_access_public_keys: + accessv1_key1: | + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuRg0Ctj0q56I74N72Abi + bh7Jb4L/iHarZxYTBMEK3ySXeDzZMQE0evfzjtjjuMXfLQvm0GJD3CJjtGN8p77F + cGydnIXtnUukb7GYeRLO3aXH+1FafQEG+ED07xg2GoK3pH93KXctwqHmZpW9Yzpi + Sj+mEuDyKpnjuHX7M9Kdqza2noONg6YLesHInr0r8lyH+kKg8Aqafx5yuCrKNsi/ + V0lBPOyoYW+orWwKLPU50aa2lWWIaNlrg010GH2GRxK/BM19ZkvHUISU6zejZez1 + bXlX8RakEeNWtVgf8OS8d4mGsIZriNXkrgJmU9z6HkU1xWpSZcjSW++I3g4DmAmI + kwIDAQAB + -----END PUBLIC KEY----- + accessv1_key2: | + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6MZVdXEdiF0LY95BKYJ0 + 8kh1p3JnbQTnjSlQUHrWdeAkqlWnSx7CvrGYHkZtM2OhlEZ+iMVmsVG4RrB4XOli + ijoShTjoI79/BO3g6upZZx9oTgPC8qbutyI3W3Non2Aqbsn8EU/bxKWxaLxNUqkm + ZqZZDodfsxY839k8qWXHSy0QAZBnf9GXpThvase2zNrYfJznB/7lbBTuUWBC70ZB + FFHoDbyFKujLVUR+ANYRN2uRGLT0A/SlfFXMjFRE/PNzIC+bUiPDIbtpy5jWOkO0 + rZ6elXprggnuYXfUkZ369MrVdCvSWgOMwEuIrBB8HD/e6MoTbOiIS+uIsOxUMLIc + ZwIDAQAB + -----END PUBLIC KEY----- \ No newline at end of file diff --git a/helm/learner/templates/configmap.yaml b/helm/learner/templates/configmap.yaml new file mode 100644 index 0000000000..a29c069b05 --- /dev/null +++ b/helm/learner/templates/configmap.yaml @@ -0,0 +1,404 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }}-config + namespace: {{ .Release.Namespace }} +data: + {{- $ekstep_authorization := .Values.ekstep_authorization }} + + {{- if empty $ekstep_authorization }} + {{- $ekstep_authorization = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.kong.name "Key" .Values.external_secrets.kong.key) -}} + {{- end -}} + +{{/* Uncomment this after adding kong chart + {{- if empty $ekstep_authorization }} + {{- $ekstep_authorization = fromYaml (include (print .Subcharts.kong.Template.BasePath "/configmap.yaml") .Subcharts.kong) }} + {{- $ekstep_authorization = get $ekstep_authorization.data .Values.external_secrets.kong.key }} + {{- end }} +*/}} + + {{- if empty $ekstep_authorization }} + {{- printf "ERROR | %s | The ekstep_authorization value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + ekstep_authorization: {{ $ekstep_authorization }} + + {{- $sunbird_authorization := .Values.sunbird_authorization }} + + {{- if empty $sunbird_authorization }} + {{- $sunbird_authorization = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.kong.name "Key" .Values.external_secrets.kong.key) -}} + {{- end -}} + +{{/* Uncomment this after adding kong chart + {{- if empty $sunbird_authorization }} + {{- $sunbird_authorization = fromYaml (include (print .Subcharts.kong.Template.BasePath "/configmap.yaml") .Subcharts.kong) }} + {{- $sunbird_authorization = get $sunbird_authorization.data .Values.external_secrets.kong.key }} + {{- end }} +*/}} + + {{- if empty $sunbird_authorization }} + {{- printf "ERROR | %s | The sunbird_authorization value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + sunbird_authorization: {{ $sunbird_authorization }} + + sunbird_sso_url: {{ if .Values.domain }} + {{- .Values.domain }}{{ .Values.keycloak_auth_endpoint }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a value for \"domain\"" .Chart.Name | fail }} + {{- end }} + + sunbird_web_url: {{ if .Values.domain }} + {{- .Values.domain }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a value for \"domain\"" .Chart.Name | fail }} + {{- end }} + + sunbird_account_name: {{ if .Values.cloud_public_storage_accountname }} + {{- .Values.cloud_public_storage_accountname }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a value for \"cloud_public_storage_accountname\"" .Chart.Name | fail }} + {{- end }} + + sunbird_account_key: {{ if .Values.cloud_public_storage_secret }} + {{- .Values.cloud_public_storage_secret }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a value for \"cloud_public_storage_secret\"" .Chart.Name | fail }} + {{- end }} + + sunbird_analytics_blob_account_name: {{ if .Values.cloud_private_storage_accountname }} + {{- .Values.cloud_private_storage_accountname }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a value for \"cloud_private_storage_accountname\"" .Chart.Name | fail }} + {{- end }} + + sunbird_analytics_blob_account_key: {{ if .Values.cloud_private_storage_secret }} + {{- .Values.cloud_private_storage_secret }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a value for \"cloud_private_storage_secret\"" .Chart.Name | fail }} + {{- end }} + + sunbird_cloud_service_provider: {{ if eq (include "common.csp.validation" .Values.cloud_service_provider) "true" }} + {{- .Values.cloud_service_provider }} + {{- else -}} + {{- printf "ERROR | %s | Please provide a valid value for \"cloud_service_provider\". Accepted values are \"%s\"" .Chart.Name (include "common.valid.csps" .) | fail }} + {{- end }} + + {{- $sunbird_keycloak_user_federation_provider_id := .Values.sunbird_keycloak_user_federation_provider_id }} + + {{- if empty $sunbird_keycloak_user_federation_provider_id }} + {{- $sunbird_keycloak_user_federation_provider_id = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.keycloak_federation.name "Key" .Values.external_secrets.keycloak_federation.key) -}} + {{- end -}} + +{{/* Uncomment this after adding keycloak chart + {{- if empty $sunbird_keycloak_user_federation_provider_id }} + {{- $sunbird_keycloak_user_federation_provider_id = fromYaml (include (print .Subcharts.keycloak.Template.BasePath "/configmap.yaml") .Subcharts.keycloak) }} + {{- $sunbird_keycloak_user_federation_provider_id = get $sunbird_keycloak_user_federation_provider_id.data .Values.external_secrets.keycloak_federation.key }} + {{- end }} +*/}} + + {{- if empty $sunbird_keycloak_user_federation_provider_id }} + {{- printf "ERROR | %s | The sunbird_keycloak_user_federation_provider_id value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + sunbird_keycloak_user_federation_provider_id: {{ $sunbird_keycloak_user_federation_provider_id }} + + {{- $sunbird_pg_user := .Values.sunbird_pg_user }} + + {{- if empty $sunbird_pg_user }} + {{- $sunbird_pg_user = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.postgresql_user.name "Key" .Values.external_secrets.postgresql_user.key) -}} + {{- end -}} + +{{/* Uncomment this after adding postgresql chart + {{- if empty $sunbird_pg_user }} + {{- $sunbird_pg_user = fromYaml (include (print .Subcharts.postgresql.Template.BasePath "/configmap.yaml") .Subcharts.postgresql) }} + {{- $sunbird_pg_user = get $sunbird_pg_user.data .Values.external_secrets.postgresql_user.key }} + {{- end }} +*/}} + + {{- if empty $sunbird_pg_user }} + {{- printf "ERROR | %s | The sunbird_pg_user value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + sunbird_pg_user: {{ $sunbird_pg_user }} + + {{- $sunbird_pg_password := .Values.sunbird_pg_password }} + + {{- if empty $sunbird_pg_password }} + {{- $sunbird_pg_password = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.postgresql_password.name "Key" .Values.external_secrets.postgresql_password.key) -}} + {{- end -}} + +{{/* Uncomment this after adding postgresql chart + {{- if empty $sunbird_pg_password }} + {{- $sunbird_pg_password = fromYaml (include (print .Subcharts.postgresql.Template.BasePath "/configmap.yaml") .Subcharts.postgresql) }} + {{- $sunbird_pg_password = get $sunbird_pg_password.data .Values.external_secrets.postgresql_password.key }} + {{- end }} +*/}} + + {{- if empty $sunbird_pg_password }} + {{- printf "ERROR | %s | The sunbird_pg_password value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + sunbird_pg_password: {{ $sunbird_pg_password }} + + {{- $sunbird_sso_client_secret := .Values.sunbird_sso_client_secret }} + + {{- if empty $sunbird_sso_client_secret }} + {{- $sunbird_sso_client_secret = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.keycloak_client_secret.name "Key" .Values.external_secrets.keycloak_client_secret.key) -}} + {{- end -}} + +{{/* Uncomment this after adding keycloak chart + {{- if empty $sunbird_sso_client_secret }} + {{- $sunbird_sso_client_secret = fromYaml (include (print .Subcharts.keycloak.Template.BasePath "/configmap.yaml") .Subcharts.keycloak) }} + {{- $sunbird_sso_client_secret = get $sunbird_sso_client_secret.data .Values.external_secrets.keycloak_client_secret.key }} + {{- end }} +*/}} + + {{- if empty $sunbird_sso_client_secret }} + {{- printf "ERROR | %s | The sunbird_sso_client_secret value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + sunbird_sso_client_secret: {{ $sunbird_sso_client_secret }} + + {{- $sunbird_sso_publickey := .Values.sunbird_sso_publickey }} + + {{- if empty $sunbird_sso_publickey }} + {{- $sunbird_sso_publickey = include "common.read.secret" (dict "ChartName" .Chart.Name "Namespace" .Release.Namespace "Name" .Values.external_secrets.keycloak_realm_public_key.name "Key" .Values.external_secrets.keycloak_realm_public_key.key) -}} + {{- end -}} + +{{/* Uncomment this after adding keycloak chart + {{- if empty $sunbird_sso_publickey }} + {{- $sunbird_sso_publickey = fromYaml (include (print .Subcharts.keycloak.Template.BasePath "/configmap.yaml") .Subcharts.keycloak) }} + {{- $sunbird_sso_publickey = get $sunbird_sso_publickey.data .Values.external_secrets.keycloak_realm_public_key.key }} + {{- end }} +*/}} + + {{- if empty $sunbird_sso_publickey }} + {{- printf "ERROR | %s | The sunbird_sso_publickey value could not be found in values.yaml or in secrets or in subcharts" .Chart.Name | fail }} + {{- end }} + + sunbird_sso_publickey: {{ $sunbird_sso_publickey }} + + sunbird_subdomain_keycloak_base_url: {{ if .Values.merge_domain }} + {{- .Values.merge_domain }}{{ .Values.keycloak_auth_endpoint }} + {{- end }} + google_captcha_mobile_private_key: {{ .Values.google_captcha_mobile_private_key | quote }} + google_captcha_private_key: {{ .Values.google_captcha_private_key | quote }} + sunbird_mail_server_from_email: {{ .Values.sunbird_mail_server_from_email | quote }} + sunbird_mail_server_host: {{ .Values.sunbird_mail_server_host | quote }} + sunbird_mail_server_password: {{ .Values.sunbird_mail_server_password | quote }} + sunbird_mail_server_port: {{ .Values.sunbird_mail_server_port | quote }} + sunbird_mail_server_username: {{ .Values.sunbird_mail_server_username | quote }} + sunbird_msg_91_auth: {{ .Values.sunbird_msg_91_auth | quote }} + sunbird_msg_sender: {{ .Values.sunbird_msg_sender | quote }} + sunbird_url_shortner_access_token: {{ .Values.sunbird_url_shortner_access_token | quote }} + ENV_NAME: {{ .Values.ENV_NAME }} + PORTAL_SERVICE_PORT: {{ .Values.PORTAL_SERVICE_PORT }} + SUNBIRD_KAFKA_URL: {{ .Values.SUNBIRD_KAFKA_URL }} + accesstoken.publickey.basepath: {{ .Values.accesstoken.publickey.basepath }} + actor_hostname: {{ .Values.actor_hostname }} + api_actor_provider: {{ .Values.api_actor_provider }} + background_actor_provider: {{ .Values.background_actor_provider }} + bind_hostname: {{ .Values.bind_hostname }} + ekstep_api_base_url: {{ .Values.ekstep_api_base_url }} + feed_limit: {{ .Values.feed_limit | quote }} + form_api_endpoint: {{ .Values.form_api_endpoint }} + isMultiDCEnabled: {{ .Values.isMultiDCEnabled | quote }} + kafka_urls: {{ .Values.kafka_urls }} + learner_in_memory_cache_ttl: {{ .Values.learner_in_memory_cache_ttl | quote }} + notification_service_base_url: {{ .Values.notification_service_base_url }} + org_index_alias: {{ .Values.org_index_alias }} + quartz_shadow_user_migration_timer: {{ .Values.quartz_shadow_user_migration_timer }} + sunbird_analytics_api_base_url: {{ .Values.sunbird_analytics_api_base_url }} + sunbird_api_base_url: {{ .Values.sunbird_api_base_url }} + sunbird_api_mgr_base_url: {{ .Values.sunbird_api_mgr_base_url }} + sunbird_app_name: {{ .Values.sunbird_app_name }} + sunbird_cache_enable: {{ .Values.sunbird_cache_enable | quote }} + sunbird_cassandra_consistency_level: {{ .Values.sunbird_cassandra_consistency_level }} + sunbird_cassandra_host: {{ .Values.sunbird_cassandra_host }} + sunbird_cassandra_password: {{ .Values.sunbird_cassandra_password }} + sunbird_cassandra_port: {{ .Values.sunbird_cassandra_port | quote }} + sunbird_cassandra_username: {{ .Values.sunbird_cassandra_username }} + sunbird_cert_service_base_url: {{ .Values.sunbird_cert_service_base_url }} + sunbird_content_azure_storage_container: {{ .Values.sunbird_content_azure_storage_container }} + sunbird_course_batch_notification_enabled: {{ .Values.sunbird_course_batch_notification_enabled | quote }} + sunbird_course_batch_notification_signature: {{ .Values.sunbird_course_batch_notification_signature }} + sunbird_cs_base_url: {{ .Values.sunbird_cs_base_url }} + sunbird_cs_search_path: {{ .Values.sunbird_cs_search_path }} + sunbird_default_channel: {{ .Values.sunbird_default_channel }} + sunbird_email_max_recipients_limit: {{ .Values.sunbird_email_max_recipients_limit | quote }} + sunbird_encryption_key: {{ .Values.sunbird_encryption_key }} + sunbird_encryption_mode: {{ .Values.sunbird_encryption_mode }} + sunbird_env_logo_url: {{ .Values.sunbird_env_logo_url }} + sunbird_environment: {{ .Values.sunbird_environment }} + sunbird_es_host: {{ .Values.sunbird_es_host }} + sunbird_es_port: {{ .Values.sunbird_es_port | quote }} + sunbird_fuzzy_search_threshold: {{ .Values.sunbird_fuzzy_search_threshold |quote }} + sunbird_gzip_enable: {{ .Values.sunbird_gzip_enable | quote }} + sunbird_gzip_size_threshold: {{ .Values.sunbird_gzip_size_threshold | quote }} + sunbird_health_check_enable: {{ .Values.sunbird_health_check_enable | quote }} + sunbird_installation: {{ .Values.sunbird_installation }} + sunbird_installation_display_name: {{ .Values.sunbird_installation_display_name }} + sunbird_installation_display_name_for_sms: {{ .Values.sunbird_installation_display_name_for_sms }} + sunbird_installation_email: {{ .Values.sunbird_installation_email }} + sunbird_instance: {{ .Values.sunbird_instance }} + sunbird_keycloak_required_action_link_expiration_seconds: {{ .Values.sunbird_keycloak_required_action_link_expiration_seconds | quote }} + sunbird_mw_system_host: {{ .Values.sunbird_mw_system_host }} + sunbird_mw_system_port: {{ .Values.sunbird_mw_system_port | quote }} + sunbird_open_saber_bridge_enable: {{ .Values.sunbird_open_saber_bridge_enable | quote }} + sunbird_otp_allowed_attempt: {{ .Values.sunbird_otp_allowed_attempt | quote }} + sunbird_otp_expiration: {{ .Values.sunbird_otp_expiration | quote }} + sunbird_otp_length: {{ .Values.sunbird_otp_length | quote }} + sunbird_pg_db: {{ .Values.sunbird_pg_db }} + sunbird_pg_host: {{ .Values.sunbird_pg_host }} + sunbird_pg_port: {{ .Values.sunbird_pg_port | quote }} + sunbird_quartz_mode: {{ .Values.sunbird_quartz_mode }} + sunbird_redis_host: {{ .Values.sunbird_redis_host }} + sunbird_redis_port: {{ .Values.sunbird_redis_port | quote }} + sunbird_registry_service_baseurl: {{ .Values.sunbird_registry_service_baseurl }} + sunbird_remote_bg_req_router_path: {{ .Values.sunbird_remote_bg_req_router_path }} + sunbird_remote_req_router_path: {{ .Values.sunbird_remote_req_router_path }} + sunbird_reset_pass_msg: {{ .Values.sunbird_reset_pass_msg | quote }} + sunbird_search_service_api_base_url: {{ .Values.sunbird_search_service_api_base_url }} + sunbird_sso_client_id: {{ .Values.external_secrets.keycloak_client_secret.key }} + sunbird_sso_lb_ip: {{ .Values.sunbird_sso_lb_ip }} + sunbird_sso_realm: {{ .Values.external_secrets.keycloak_realm_public_key.key }} + sunbird_sso_username: {{ .Values.sunbird_sso_username }} + sunbird_sso_password: {{ .Values.sunbird_sso_password }} + sunbird_telemetry_base_url: {{ .Values.sunbird_telemetry_base_url }} + sunbird_time_zone: {{ .Values.sunbird_time_zone }} + sunbird_url_shortner_enable: {{ .Values.sunbird_url_shortner_enable | quote }} + sunbird_user_bulk_upload_size: {{ .Values.sunbird_user_bulk_upload_size | quote }} + sunbird_user_cert_kafka_topic: {{ .Values.sunbird_user_cert_kafka_topic }} + sunbird_user_profile_field_default_visibility: {{ .Values.sunbird_user_profile_field_default_visibility }} + telemetry_pdata_id: {{ .Values.telemetry_pdata_id }} + telemetry_pdata_pid: {{ .Values.telemetry_pdata_pid }} + telemetry_queue_threshold_value: {{ .Values.telemetry_queue_threshold_value | quote }} + user_index_alias: {{ .Values.user_index_alias }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }}-logback-config + namespace: {{ .Release.Namespace }} +data: + logback.xml: |- + + + + + + + + + + + + timestamp + msg + lname + tname + [ignore] + [ignore] + exception + + + 30 + 2048 + sun\.reflect\..*\.invoke.* + true + true + + + + + + + + + + + + + yyyy-MM-dd'T'HH:mm:ss.SSSX + Etc/UTC + + timestamp + msg + lname + tname + [ignore] + [ignore] + + + + + + + + + + timestamp + msg + lname + tname + [ignore] + [ignore] + exception + + + 30 + 2048 + sun\.reflect\..*\.invoke.* + true + true + + + + + + + + %msg + + + ${ENV_NAME}.telemetry.raw + + + + + + + + + bootstrap.servers=${SUNBIRD_KAFKA_URL} + + acks=0 + + linger.ms=15000 + + max.block.ms=0 + + client.id=${HOSTNAME}-${CONTEXT_NAME}-logback-relaxed + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helm/learner/templates/deployment.yaml b/helm/learner/templates/deployment.yaml new file mode 100644 index 0000000000..dad6c450a1 --- /dev/null +++ b/helm/learner/templates/deployment.yaml @@ -0,0 +1,138 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + annotations: + reloader.stakater.com/auto: "true" +spec: + replicas: {{ .Values.replicaCount }} + strategy: + rollingUpdate: + maxSurge: {{ .Values.strategy.maxSurge }} + maxUnavailable: {{ .Values.strategy.maxUnavailable }} + selector: + matchLabels: + app: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + spec: +{{- if .Values.imagePullSecrets }} + imagePullSecrets: + - name: {{ .Values.imagePullSecrets }} +{{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: Always + env: + - name: JAVA_OPTIONS + value: {{ .Values.javaOptions }} + - name: _JAVA_OPTIONS + value: -Dlog4j2.formatMsgNoLookups=true + envFrom: + - configMapRef: + name: {{ .Chart.Name }}-config + resources: +{{ toYaml .Values.resources | indent 10 }} + ports: + - containerPort: {{ .Values.port }} + livenessProbe: +{{ toYaml .Values.livenessProbe | indent 10 }} + readinessProbe: +{{ toYaml .Values.readinessProbe | indent 10 }} + volumeMounts: + - name: {{ .Chart.Name }}-logback-config + mountPath: /home/sunbird/learner/learning-service-1.0-SNAPSHOT/config + - mountPath: {{ .Values.accesstoken.publickey.basepath }} + name: {{ .Values.external_configmaps.access_public_keys.name }} +{{- if .Values.opa_sidecar }} + - args: + - envoy + - --config-path + - /config/envoy-config.yaml + env: + - name: ENVOY_UID + value: "1111" + image: envoyproxy/envoy:v1.20.0 + imagePullPolicy: IfNotPresent + name: envoy + livenessProbe: +{{ toYaml .Values.envoy_livenessProbe | indent 10 }} + readinessProbe: +{{ toYaml .Values.envoy_readinessProbe | indent 10 }} + resources: +{{ toYaml .Values.envoy_resources | indent 10 }} + volumeMounts: + - mountPath: /config + name: {{ .Chart.Name }}-envoy-config + readOnly: true + - args: + - run + - --server + - /policies + - --addr=localhost:8181 + - --diagnostic-addr=0.0.0.0:8282 + - --set=plugins.envoy_ext_authz_grpc.addr=:9191 + - --set=plugins.envoy_ext_authz_grpc.path=main/allow + - --set=decision_logs.plugin=print_decision_logs_on_failure + - --set=plugins.print_decision_logs_on_failure.stdout=true + - --log-level=error + - --ignore=.* + image: sunbird/opa:0.34.2-envoy + imagePullPolicy: IfNotPresent + name: opa + livenessProbe: +{{ toYaml .Values.opa_livenessProbe | indent 10 }} + readinessProbe: +{{ toYaml .Values.opa_readinessProbe | indent 10 }} + resources: +{{ toYaml .Values.opa_resources | indent 10 }} + volumeMounts: + - mountPath: /policies + name: opa-policies + readOnly: true + initContainers: + - args: + - -p + - "9999" + - -u + - "1111" + - -w + - "8282,10000" + image: openpolicyagent/proxy_init:v5 + imagePullPolicy: IfNotPresent + name: proxy-init + resources: +{{ toYaml .Values.initcontainer_resources | indent 10 }} + securityContext: + capabilities: + add: + - NET_ADMIN + runAsNonRoot: false + runAsUser: 0 +{{- end }} + volumes: + - name: {{ .Chart.Name }}-logback-config + configMap: + name: {{ .Chart.Name }}-logback-config + - name: {{ .Values.external_configmaps.access_public_keys.name }} + secret: + secretName: {{ .Values.external_configmaps.access_public_keys.name }} +{{- if .Values.opa_sidecar }} + - name: {{ .Chart.Name }}-envoy-config + configMap: + name: {{ .Chart.Name }}-envoy-config + - name: opa-policies + projected: + sources: + - configMap: + name: {{ .Values.external_configmaps.common_opa_policies_keys.name }} + - configMap: + name: {{ .Values.external_configmaps.common_opa_policies.name }} + - configMap: + name: {{ .Chart.Name }}-opa-policies +{{- end }} \ No newline at end of file diff --git a/helm/learner/templates/envoy-config.yaml b/helm/learner/templates/envoy-config.yaml new file mode 100644 index 0000000000..b286f1100a --- /dev/null +++ b/helm/learner/templates/envoy-config.yaml @@ -0,0 +1,115 @@ +--- +{{- if .Values.opa_sidecar }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }}-envoy-config + namespace: {{ .Release.Namespace }} +data: + envoy-config.yaml: | + static_resources: + listeners: + - name: listener_0 + address: + socket_address: + address: 0.0.0.0 + port_value: 9999 + per_connection_buffer_limit_bytes: 62914560 + filter_chains: + - filters: + - name: envoy.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + codec_type: auto + stat_prefix: ingress_http + access_log: + - name: envoy.access_loggers.stdout + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog + log_format: + text_format: "%DOWNSTREAM_DIRECT_REMOTE_ADDRESS_WITHOUT_PORT% - - [%START_TIME(%d/%b/%Y:%H:%M:%S %z)%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\" \"%REQ(X-DEVICE-ID)%\" \"%REQ(X-CHANNEL-ID)%\" \"%REQ(X-APP-ID)%\" \"%REQ(X-APP-VER)%\" \"%REQ(X-SESSION-ID)%\" \"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\"\n" + route_config: + name: local_route + virtual_hosts: + - name: backend + domains: + - "*" + routes: + - match: + prefix: "/opa/metrics" + route: + prefix_rewrite: "/metrics" + cluster: opa + typed_per_filter_config: + envoy.filters.http.ext_authz: + "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute + disabled: true + - match: + prefix: "{{ .Values.livenessProbe.httpGet.path }}" + route: + cluster: service + typed_per_filter_config: + envoy.filters.http.ext_authz: + "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute + disabled: true + - match: + prefix: "{{ .Values.readinessProbe.httpGet.path }}" + route: + cluster: service + typed_per_filter_config: + envoy.filters.http.ext_authz: + "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute + disabled: true + - match: + prefix: "/" + route: + cluster: service + timeout: 60s + http_filters: + - name: envoy.filters.http.ext_authz + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz + transport_api_version: V3 + with_request_body: + max_request_bytes: 62914560 + allow_partial_message: true + failure_mode_allow: true + grpc_service: + google_grpc: + target_uri: 127.0.0.1:9191 + stat_prefix: ext_authz + timeout: 5s + - name: envoy.filters.http.router + clusters: + - name: service + connect_timeout: 5s + per_connection_buffer_limit_bytes: 62914560 + type: static + load_assignment: + cluster_name: service + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: {{ .Values.targetPort }} + - name: opa + connect_timeout: 5s + type: static + load_assignment: + cluster_name: opa + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8181 + admin: + access_log_path: "/dev/stdout" + address: + socket_address: + address: 0.0.0.0 + port_value: 10000 +{{ end }} \ No newline at end of file diff --git a/helm/learner/templates/service.yaml b/helm/learner/templates/service.yaml new file mode 100644 index 0000000000..00902f00c7 --- /dev/null +++ b/helm/learner/templates/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }}-service + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Chart.Name }} +spec: + ports: + - name: http-{{ .Chart.Name }} + protocol: TCP + port: {{ .Values.targetPort }} +{{- if .Values.opa_sidecar }} + - name: opa-metrics + port: 8181 + protocol: TCP + targetPort: 8181 + - name: envoy-metrics + port: 10000 + protocol: TCP + targetPort: 10000 +{{- end }} + selector: + app: {{ .Chart.Name }} \ No newline at end of file diff --git a/helm/learner/values.yaml b/helm/learner/values.yaml new file mode 100644 index 0000000000..4cab240af3 --- /dev/null +++ b/helm/learner/values.yaml @@ -0,0 +1,325 @@ +## This section has mandatory variables +## You must provide a value for these +## If you don't provide a value for these variables, the chart installation will not proceed + +## The domain name or Public IP address +## The domain name should start with http or https +## For example https://example.com +domain: "" + +## Can be one of - azure, aws, gcloud +cloud_service_provider: "" + +## Public storage bucket details +cloud_public_storage_accountname: "" +cloud_public_storage_secret: "" + +## Private storage bucket details +cloud_private_storage_accountname: "" +cloud_private_storage_secret: "" + + +## This section has optional variables +## It is strongly recommended to provide a value for these +## If you don't provide a value for these variables, they will default to empty values +## If these variables are empty, some features on the application might not work as expected +google_captcha_mobile_private_key: "" +google_captcha_private_key: "" +sunbird_mail_server_from_email: "" +sunbird_mail_server_host: "" +sunbird_mail_server_password: "" +sunbird_mail_server_port: "" +sunbird_mail_server_username: "" +sunbird_msg_91_auth: "" +sunbird_msg_sender: "" +sunbird_url_shortner_access_token: "" + + +## The merge domain name or Public IP address +## The merge domain name should start with http or https +## For example https://merge.example.com +merge_domain: "" + + +## This section has optional variables +## If you provide a value to the variable, then that will have the highest precedence +## If you don't provide a value, then it's auto generated + + +## This section has optional variables +## If you provide a value to the variable, then that will have the highest precedence +## If you don't provide a value, then it's fetched from kubernetes secret or subchart template +## If the value is empty or nil, installation will be halted +ekstep_authorization: "" +sunbird_authorization: "" +sunbird_keycloak_user_federation_provider_id: "" +sunbird_pg_user: "" +sunbird_pg_password: "" +sunbird_sso_publickey: "" +sunbird_sso_client_secret: "" + +## This section has variables with default values +## These are standard defaults that work well +## You can override these if you have a use case for it +ENV_NAME: dev +PORTAL_SERVICE_PORT: http://player.ed.svc.cluster.local:3000 +SUNBIRD_KAFKA_URL: http://kafka.lern.svc.cluster.local:9092 +accesstoken: + publickey: + basepath: /keys/ +actor_hostname: actor-service +api_actor_provider: local +background_actor_provider: local +bind_hostname: 0.0.0.0 +ekstep_api_base_url: http://learning.knowlg.svc.cluster.local:8080/learning-service +feed_limit: 30 +form_api_endpoint: /plugin/v1/form/read +isMultiDCEnabled: false +kafka_urls: http://kafka.lern.svc.cluster.local:9092 +learner_in_memory_cache_ttl: 600 +notification_service_base_url: http://notification-service.lern.svc.cluster.local:9000 +org_index_alias: org_alias +quartz_shadow_user_migration_timer: 0 0 1 1/1 * ? * +sunbird_analytics_api_base_url: http://analytics-service.obsrv.svc.cluster.local:9000 +sunbird_api_base_url: http://knowledge-mw-service.knowlg.svc.cluster.local:5000 +sunbird_api_mgr_base_url: http://knowledge-mw-service.knowlg.svc.cluster.local:5000 +sunbird_app_name: sunbird +sunbird_cache_enable: true +sunbird_cassandra_consistency_level: local_quorum +sunbird_cassandra_host: http://cassandra.lern.svc.cluster.local +sunbird_cassandra_password: passwod +sunbird_cassandra_port: 9042 +sunbird_cassandra_username: admin +sunbird_cert_service_base_url: http://cert-service.lern.svc.cluster.local:9000 +## Storage bucket name where the contents are stores +sunbird_content_azure_storage_container: contents +sunbird_course_batch_notification_enabled: true +sunbird_course_batch_notification_signature: sunbird +sunbird_cs_base_url: http://knowledge-mw-service.knowlg.svc.cluster.local:5000 +sunbird_cs_search_path: /v1/content/search +sunbird_default_channel: sunbird +sunbird_email_max_recipients_limit: 100 +sunbird_encryption_key: encryptionkey +sunbird_encryption_mode: local +sunbird_env_logo_url: "" +sunbird_environment: dev +sunbird_es_host: http://elasticsearch.lern.svc.cluster.local +sunbird_es_port: 9300 +sunbird_fuzzy_search_threshold: 0.5 +sunbird_gzip_enable: true +sunbird_gzip_size_threshold: 262144 +sunbird_health_check_enable: false +sunbird_installation: sunbird +sunbird_installation_display_name: sunbirddev +sunbird_installation_display_name_for_sms: sunbird +sunbird_installation_email: info@sunbird.org +sunbird_instance: sunbird +sunbird_keycloak_required_action_link_expiration_seconds: "2592000" +sunbird_mw_system_host: learner-service +sunbird_mw_system_port: 8088 +sunbird_open_saber_bridge_enable: false +sunbird_otp_allowed_attempt: 2 +sunbird_otp_expiration: 1800 +sunbird_otp_length: 6 +sunbird_pg_db: quartz +sunbird_pg_host: postgresql.lern.svc.cluster.local +sunbird_pg_port: 5432 +sunbird_quartz_mode: cluster +sunbird_redis_host: redis.lern.svc.cluster.local +sunbird_redis_port: 6379 +sunbird_registry_service_baseurl: http://registry-service.registry.svc.cluster.local:8081/ +sunbird_remote_bg_req_router_path: akka.tcp://SunbirdMWSystem@actor-service:8088/user/BackgroundRequestRouter +sunbird_remote_req_router_path: akka.tcp://SunbirdMWSystem@actor-service:8088/user/RequestRouter +sunbird_reset_pass_msg: 'You have requested to reset password. Click on the link to set a password: {0}' +sunbird_search_service_api_base_url: http://search-service.knowlg.svc.cluster.local:9000 +sunbird_sso_lb_ip: http://keycloak.lern.svc.cluster.local:8080 +sunbird_telemetry_base_url: http://telemetry-service.obsrv.svc.cluster.local:9001 +sunbird_time_zone: Asia/Kolkata +sunbird_url_shortner_enable: false +sunbird_user_bulk_upload_size: 1001 +sunbird_user_cert_kafka_topic: cert +sunbird_user_profile_field_default_visibility: private +telemetry_pdata_id: learner +telemetry_pdata_pid: learner-service +telemetry_queue_threshold_value: 100 +user_index_alias: user_alias + + +## Variables that can be deprecated +## Need a review with the team +sunbird_sso_username: "" +sunbird_sso_password: "" + +## Helper variables which are used to construct other variables +keycloak_auth_endpoint: "/auth/" +sunbird_encryption_key_length: 10 +external_secrets: + kong: + name: kong-api-tokens + key: learner-api-token + keycloak_federation: + name: keycloak-federation + key: cassandra-storage-provider + keycloak_client_secret: + name: keycloak-clients + key: lms + keycloak_realm_public_key: + name: keycloak-realms + key: sunbird + postgresql_user: + name: postgresql + key: postgres-user + postgresql_password: + name: postgresql + key: postgresql-password + +external_configmaps: + common_opa_policies: + name: common-opa-policies + common_opa_policies_keys: + name: common-opa-policies-public-keys + access_public_keys: + name: user-access-keys-public + + +## This section has other kubernetes variables +## These are standard defaults that work well +## You can override these if you have a use case for it +image: + registry: docker.io + repository: keshavprasad/learner + tag: release-5.0.0 + +replicaCount: 1 + +strategy: + maxSurge: 25% + maxUnavailable: 25% + +imagePullSecrets: "" + +javaOptions: -Xmx600m + +resources: + requests: + cpu: 100m + memory: 100M + limits: + cpu: 1 + memory: 1G + +port: 9000 + +targetPort: 9000 + +livenessProbe: + failureThreshold: 2 + httpGet: + path: /service/health + port: 9000 + initialDelaySeconds: 15 + periodSeconds: 15 + timeoutSeconds: 5 + +readinessProbe: + failureThreshold: 2 + httpGet: + path: /service/health + port: 9000 + initialDelaySeconds: 15 + periodSeconds: 15 + timeoutSeconds: 5 + +opa_sidecar: true + +envoy_livenessProbe: + failureThreshold: 2 + httpGet: + path: /ready + port: 10000 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + timeoutSeconds: 5 + +envoy_readinessProbe: + failureThreshold: 2 + httpGet: + path: /ready + port: 10000 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + timeoutSeconds: 5 + +opa_livenessProbe: + failureThreshold: 2 + httpGet: + path: /health?plugins + port: 8282 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + timeoutSeconds: 5 + +opa_readinessProbe: + failureThreshold: 2 + httpGet: + path: /health?bundle=true + port: 8282 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + timeoutSeconds: 5 + +envoy_resources: + requests: + cpu: 100m + memory: 100M + limits: + cpu: 1 + memory: 1G + +opa_resources: + requests: + cpu: 100m + memory: 100M + limits: + cpu: 1 + memory: 1G + +initcontainer_resources: + requests: + cpu: 100m + memory: 100M + limits: + cpu: 100m + memory: 100M + + +## List of variables that are accepted by the service but not being referenced in configmap +## The value for these variables will be constructed using other variables, so you cannot pass a value to these +## If you want to provide values to them and override, you will need to change the configmap to reference these vars +## This list is shown here only for reference + +# Refers to domain/auth +# sunbird_sso_url: "" +# sunbird_subdomain_keycloak_base_url: "" + +# Refers to domain +# sunbird_web_url: "" + +## Refers to cloud_service_provider +# sunbird_cloud_service_provider: "" + +## Refers to public storage bucket details +# sunbird_account_name: "" +# sunbird_account_key: "" + +## Refers to private storage bucket details +# sunbird_analytics_blob_account_name: "" +# sunbird_analytics_blob_account_key: "" + +## Uses the keycloak lms client from sunbird realm +#sunbird_sso_client_id: lms +#sunbird_sso_realm: sunbird \ No newline at end of file diff --git a/helm/learner_opa_policies/.helmignore b/helm/learner_opa_policies/.helmignore new file mode 100644 index 0000000000..086d3bedf3 --- /dev/null +++ b/helm/learner_opa_policies/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +*_test.rego \ No newline at end of file diff --git a/helm/learner_opa_policies/Chart.yaml b/helm/learner_opa_policies/Chart.yaml new file mode 100644 index 0000000000..e0cbf623c8 --- /dev/null +++ b/helm/learner_opa_policies/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: learner_opa_policies +description: A helm chart for learner opa policies + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "5.0.0" \ No newline at end of file diff --git a/helm/learner_opa_policies/service-policies/policies.rego b/helm/learner_opa_policies/service-policies/policies.rego new file mode 100644 index 0000000000..20e7dc7a35 --- /dev/null +++ b/helm/learner_opa_policies/service-policies/policies.rego @@ -0,0 +1,307 @@ +package policies + +import data.common as super +import future.keywords.in +import input.attributes.request.http as http_request + +urls_to_action_mapping := { + "/v1/user/tnc/accept": "acceptTermsAndCondition", + "/v1/user/update": "updateUser", + "/v1/user/assign/role": "assignRole", + "/v2/user/assign/role": "assignRoleV2", + "/v1/user/read": "getUserProfile", + "/v2/user/read": "getUserProfileV2", + "/v3/user/read": "getUserProfileV3", + "/v4/user/read": "getUserProfileV4", + "/v5/user/read": "getUserProfileV5", + "/v1/user/feed": "userFeed", + "/v1/user/feed/create": "userFeedCreate", + "/v1/user/feed/delete": "userFeedDelete", + "/v1/user/feed/update": "userFeedUpdate", + "/v2/user/update": "updateUserV2", + "/v3/user/update": "updateUserV3", + "/v1/user/declarations": "updateUserDeclarations", + "/v1/manageduser/create": "managedUserV1Create", + "/v1/user/managed": "searchManagedUser", + "/v1/user/consent/read": "readUserConsent", + "/v1/user/consent/update": "updateUserConsent", + "/v2/org/preferences/read": "readTenantPreferences", + "/v2/org/preferences/create": "createTenantPreferences", + "/v2/org/preferences/update": "updateTenantPreferences" +} + +# Tnc API policy updates to handle different scenarios as explained below +# When some or all payloads are missing: +# 1. Missing userid and tnc type +# 2. Missing tnc type +# 3. Missing userid and tnc type not as orgAdminTnc / reportViewerTnc +# 4. Missing userid but tnc type as orgAdminTnc / reportViewerTnc +# When all payloads are present: +# 5. Both userid, tnc type present and tnc type not as orgAdminTnc / reportViewerTnc +# 6. Both userid, tnc type present and tnc type as orgAdminTnc / reportViewerTnc +# Issue identified as part of - +# - https://project-sunbird.atlassian.net/browse/SB-29723 +# - https://project-sunbird.atlassian.net/browse/SB-29996 + +# Point #1 +acceptTermsAndCondition { + super.public_role_check + not input.parsed_body.request.userId + not input.parsed_body.request.tncType +} + +# Point #2 +acceptTermsAndCondition { + super.public_role_check + input.parsed_body.request.userId == super.userid + not input.parsed_body.request.tncType +} + +# Point #3 +acceptTermsAndCondition { + super.public_role_check + not input.parsed_body.request.userId + not input.parsed_body.request.tncType in ["orgAdminTnc", "reportViewerTnc"] +} + +# Point #4 - As orgAdminTnc +acceptTermsAndCondition { + acls := ["acceptTnc"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) + not input.parsed_body.request.userId + "orgAdminTnc" == input.parsed_body.request.tncType +} + +# Point #4 - As reportViewerTnc +acceptTermsAndCondition { + acls := ["acceptTnc"] + roles := ["REPORT_VIEWER", "REPORT_ADMIN"] + super.acls_check(acls) + super.role_check(roles) + not input.parsed_body.request.userId + "reportViewerTnc" == input.parsed_body.request.tncType +} + +# Point #5 +acceptTermsAndCondition { + super.public_role_check + input.parsed_body.request.userId == super.userid + not input.parsed_body.request.tncType in ["orgAdminTnc", "reportViewerTnc"] +} + +# Point #6 - As orgAdminTnc +acceptTermsAndCondition { + acls := ["acceptTnc"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) + input.parsed_body.request.userId == super.userid + "orgAdminTnc" == input.parsed_body.request.tncType +} + +# Point #6 - As reportViewerTnc +acceptTermsAndCondition { + acls := ["acceptTnc"] + roles := ["REPORT_VIEWER", "REPORT_ADMIN"] + super.acls_check(acls) + super.role_check(roles) + input.parsed_body.request.userId == super.userid + "reportViewerTnc" == input.parsed_body.request.tncType +} + +updateUser { + super.public_role_check + input.parsed_body.request.userId == super.userid +} + +assignRole { + acls := ["assignRole"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + # Org check will do an implicit role check so there is no need to invoke super.role_check(roles) + token_organisationids := super.org_check(roles) + input.parsed_body.request.organisationId in token_organisationids +} + +assignRoleV2 { + acls := ["assignRole"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + # Org check will do an implicit role check so there is no need to invoke super.role_check(roles) + token_orgs := super.org_check(roles) + + # In the below code, we use sets and compare them + # This can be done using arrays also + # Take a look at the audience check (commented out) in common.rego which uses the array logic + + payload_orgs := {ids | ids := input.parsed_body.request.roles[_].scope[_].organisationId} + matching_orgs := {orgs | some i; payload_orgs[i] in token_orgs; orgs := i} + payload_orgs == matching_orgs +} + +# https://project-sunbird.atlassian.net/browse/SB-30186 +# Allow the request to go through if the organisationId is an array type in order to receive a 400 Bad Request error from backend +assignRoleV2 { + acls := ["assignRole"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + type_name(input.parsed_body.request.roles[_].scope[_].organisationId) == "array" +} + +getUserProfile { + super.public_role_check + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +getUserProfileV2 { + super.public_role_check + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +getUserProfileV3 { + super.public_role_check + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +getUserProfileV4 { + super.public_role_check + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +getUserProfileV5 { + super.public_role_check + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +# Org admin is allowed to retrive any user info using the /v5/user/read endpoint +getUserProfileV5 { + acls := ["getUserProfileV5"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) +} + +# Allow the API call when using ?withTokens=true as query param - https://project-sunbird.atlassian.net/browse/SB-29676 +getUserProfileV5 { + super.public_role_check + contains(http_request.path, "?withTokens=true") +} + +userFeed { + super.public_role_check + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +# https://project-sunbird.atlassian.net/browse/SB-29951 +# Temporary fix as all feed url's begin with /v1/user/feed +# Having only the userFeed (/v1/user/feed/:userid) block is causing issues for other similar routes like /v1/user/feed/create, /v1/user/feed/delete and /v1/user/feed/update +# Adding the other url blocks below and making them a pass through to avoid rejecting the API incorrectly + +userFeedCreate { + true +} + +userFeedDelete { + true +} + +userFeedUpdate { + true +} + +updateUserV2 { + super.public_role_check + input.parsed_body.request.userId == super.userid +} + +# Org admin is allowed to update any user info using the /v2/user/update endpoint +updateUserV2 { + acls := ["updateUserV2"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) +} + +updateUserV3 { + super.public_role_check + input.parsed_body.request.userId == super.userid +} + +updateUserDeclarations { + super.public_role_check + payload_userids := {ids | ids := input.parsed_body.request.declarations[_].userId} + count(payload_userids) == 1 + payload_userids[super.userid] == super.userid +} + +# If for token exists, check request.managedBy matches for_token_parentid +managedUserV1Create { + super.public_role_check + input.parsed_body.request.managedBy == super.for_token_parentid +} + +# If for token doesn't exist, check request.managedBy matches userid +managedUserV1Create { + super.public_role_check + input.parsed_body.request.managedBy == super.userid +} + +# If for token exists, check userid in url matches for token parent id +searchManagedUser { + super.public_role_check + super.for_token_exists + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.for_token_parentid +} + +# If for token doesn't exist, check userid in url matches the x-authenticated-user-token userid +searchManagedUser { + super.public_role_check + not super.for_token_exists + user_id := split(http_request.path, "/")[4] + split(user_id, "?")[0] == super.userid +} + +readUserConsent { + super.public_role_check + input.parsed_body.request.consent.filters.userId == super.userid +} + +# Org admin is allowed to read any user's consent using the /v1/user/consent/read endpoint +readUserConsent { + acls := ["readUserConsent"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) +} + +updateUserConsent { + super.public_role_check + input.parsed_body.request.consent.userId == super.userid +} + +readTenantPreferences { + super.public_role_check +} + +createTenantPreferences { + acls := ["createTenantPreferences"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) +} + +updateTenantPreferences { + acls := ["updateTenantPreferences"] + roles := ["ORG_ADMIN"] + super.acls_check(acls) + super.role_check(roles) +} \ No newline at end of file diff --git a/helm/learner_opa_policies/service-policies/policies_test.rego b/helm/learner_opa_policies/service-policies/policies_test.rego new file mode 100644 index 0000000000..d3ab7c4913 --- /dev/null +++ b/helm/learner_opa_policies/service-policies/policies_test.rego @@ -0,0 +1,920 @@ +package tests + +# The tokens used in test cases expire on 1640236102 +# So we set the current_time to a few minutes earlier than the expiry +# This will ensure the test cases succeed + +current_time := 1640235102 +iss := "https://sunbirded.org/auth/realms/sunbird" + +test_accept_terms_and_conditions_as_org_admin { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "tncType": "orgAdminTnc", + "version": "4.7.0" + } + } + } +} + +test_accept_terms_and_conditions_as_org_admin_with_userid { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "tncType": "orgAdminTnc", + "version": "4.7.0" + } + } + } +} + +test_accept_terms_and_conditions_as_report_viewer { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "tncType": "reportViewerTnc", + "version": "4.7.0" + } + } + } +} + +test_accept_terms_and_conditions_as_report_viewer_with_userid { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "tncType": "reportViewerTnc", + "version": "4.7.0" + } + } + } +} + +test_accept_terms_and_conditions_as_public_user { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiUFVCTElDIiwic2NvcGUiOltdfV0sImlzcyI6Imh0dHBzOi8vc3VuYmlyZGVkLm9yZy9hdXRoL3JlYWxtcy9zdW5iaXJkIiwibmFtZSI6ImRlbW8iLCJ0eXAiOiJCZWFyZXIiLCJleHAiOjE2NDAyMzYxMDIsImlhdCI6MTY0MDE0OTcwNX0.iyFqdJG_9xF07S94bkfVDiWHmDWAmhCEmapu37Mto78s5OkOJQy-agXFjtQtgV5rFudHiVRukNpKXqlJ8GhasmW7fSEPL-fDKMilMIi4JCZi7d19AkFeq8mX0rI31m3zjCv-TcMPPWWNM4udR7kSj-tUOB-vupGZ1iRAtQU2lqrUCl1A84UYDqnJTokz6RVlr_Z4lRCzFn__aGsDZXO8h7juM4mAepVMy3wVhmbKR2R5WF5xQIvVjzEveRYj8P26VUg73wo_RtyRI5mQjbxyBaIX287pWe3kCu1KKwYQkBlRLx9da39g9TKZWXxD5ArCYMC83EmEeFI0LJicYDTXFg" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "version": "v8" + } + } + } +} + +test_accept_terms_and_conditions_as_public_user_without_userid { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiUFVCTElDIiwic2NvcGUiOltdfV0sImlzcyI6Imh0dHBzOi8vc3VuYmlyZGVkLm9yZy9hdXRoL3JlYWxtcy9zdW5iaXJkIiwibmFtZSI6ImRlbW8iLCJ0eXAiOiJCZWFyZXIiLCJleHAiOjE2NDAyMzYxMDIsImlhdCI6MTY0MDE0OTcwNX0.iyFqdJG_9xF07S94bkfVDiWHmDWAmhCEmapu37Mto78s5OkOJQy-agXFjtQtgV5rFudHiVRukNpKXqlJ8GhasmW7fSEPL-fDKMilMIi4JCZi7d19AkFeq8mX0rI31m3zjCv-TcMPPWWNM4udR7kSj-tUOB-vupGZ1iRAtQU2lqrUCl1A84UYDqnJTokz6RVlr_Z4lRCzFn__aGsDZXO8h7juM4mAepVMy3wVhmbKR2R5WF5xQIvVjzEveRYj8P26VUg73wo_RtyRI5mQjbxyBaIX287pWe3kCu1KKwYQkBlRLx9da39g9TKZWXxD5ArCYMC83EmEeFI0LJicYDTXFg" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "version": "v8" + } + } + } +} + +test_accept_terms_and_conditions_as_public_user_without_userid_other_tnc_types { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiUFVCTElDIiwic2NvcGUiOltdfV0sImlzcyI6Imh0dHBzOi8vc3VuYmlyZGVkLm9yZy9hdXRoL3JlYWxtcy9zdW5iaXJkIiwibmFtZSI6ImRlbW8iLCJ0eXAiOiJCZWFyZXIiLCJleHAiOjE2NDAyMzYxMDIsImlhdCI6MTY0MDE0OTcwNX0.iyFqdJG_9xF07S94bkfVDiWHmDWAmhCEmapu37Mto78s5OkOJQy-agXFjtQtgV5rFudHiVRukNpKXqlJ8GhasmW7fSEPL-fDKMilMIi4JCZi7d19AkFeq8mX0rI31m3zjCv-TcMPPWWNM4udR7kSj-tUOB-vupGZ1iRAtQU2lqrUCl1A84UYDqnJTokz6RVlr_Z4lRCzFn__aGsDZXO8h7juM4mAepVMy3wVhmbKR2R5WF5xQIvVjzEveRYj8P26VUg73wo_RtyRI5mQjbxyBaIX287pWe3kCu1KKwYQkBlRLx9da39g9TKZWXxD5ArCYMC83EmEeFI0LJicYDTXFg" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "version": "v8", + "tncType": "groupsTnc" + } + } + } +} + +test_accept_terms_and_conditions_as_public_user_with_userid_other_tnc_types { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiUFVCTElDIiwic2NvcGUiOltdfV0sImlzcyI6Imh0dHBzOi8vc3VuYmlyZGVkLm9yZy9hdXRoL3JlYWxtcy9zdW5iaXJkIiwibmFtZSI6ImRlbW8iLCJ0eXAiOiJCZWFyZXIiLCJleHAiOjE2NDAyMzYxMDIsImlhdCI6MTY0MDE0OTcwNX0.iyFqdJG_9xF07S94bkfVDiWHmDWAmhCEmapu37Mto78s5OkOJQy-agXFjtQtgV5rFudHiVRukNpKXqlJ8GhasmW7fSEPL-fDKMilMIi4JCZi7d19AkFeq8mX0rI31m3zjCv-TcMPPWWNM4udR7kSj-tUOB-vupGZ1iRAtQU2lqrUCl1A84UYDqnJTokz6RVlr_Z4lRCzFn__aGsDZXO8h7juM4mAepVMy3wVhmbKR2R5WF5xQIvVjzEveRYj8P26VUg73wo_RtyRI5mQjbxyBaIX287pWe3kCu1KKwYQkBlRLx9da39g9TKZWXxD5ArCYMC83EmEeFI0LJicYDTXFg" + }, + "path": "/v1/user/tnc/accept" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "version": "v8", + "tncType": "groupsTnc" + } + } + } +} + +test_update_user { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/update" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be" + } + } + } +} + +test_assign_role { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/assign/role" + } + } + }, + "parsed_body": { + "request": { + "organisationId": "01369878797503692810", + "userId": "fcae65a6-8a48-11ec-8c82-c7075e84952d", + "roles": ["CONTENT_REVIEWER"] + } + } + } +} + +test_assign_role_v2 { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/user/assign/role" + } + } + }, + "parsed_body": { + "request": { + "userId": "fcae65a6-8a48-11ec-8c82-c7075e84952d", + "roles": [{ + "role": "COURSE_CREATOR", + "operation":"remove", + "scope": [{ + "organisationId": "01369878797503692810" + }] + }, + { + "role": "CONTENT_CREATOR", + "operation":"add", + "scope": [{ + "organisationId": "01471923567812345678" + }] + }] + } + } + } +} + +test_assign_role_v2 { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/user/assign/role" + } + } + }, + "parsed_body": { + "request": { + "userId": "fcae65a6-8a48-11ec-8c82-c7075e84952d", + "roles": [{ + "role": "COURSE_CREATOR", + "operation":"remove", + "scope": [{ + "organisationId": "01369878797503692810" + }] + }, + { + "role": "CONTENT_CREATOR", + "operation":"add", + "scope": [{ + "organisationId": ["01471923567812345678"] + }] + }] + } + } + } +} + +test_get_user_profile { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/read/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?fields=organisations,roles,locations,declarations,externalIds" + } + } + } + } +} + +test_get_user_profile_v2 { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/user/read/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?fields=organisations,roles,locations,declarations,externalIds" + } + } + } + } +} + +test_get_user_profile_v3 { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v3/user/read/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?fields=organisations,roles,locations,declarations,externalIds" + } + } + } + } +} + +test_get_user_profile_v4 { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v4/user/read/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?fields=organisations,roles,locations,declarations,externalIds" + } + } + } + } +} + +test_get_user_profile_v5_as_public_user { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v5/user/read/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?fields=organisations,roles,locations,declarations,externalIds" + } + } + } + } +} + +test_get_user_profile_v5_as_org_admin { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v5/user/read/81c28eac-bf0f-11ec-8e6f-4f07103b952d?fields=organisations,roles,locations,declarations,externalIds" + } + } + } + } +} + +test_get_user_profile_v5_with_tokens_in_query_params { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v5/user/read/81c28eac-bf0f-11ec-8e6f-4f07103b952d?withTokens=true" + } + } + } + } +} + +test_get_user_feed { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/feed/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be" + } + } + } + } +} + +test_get_user_feed_create { + data.main.allow.allowed + with input as + { + "attributes": { + "request": { + "http": { + "path": "/v1/user/feed/create" + } + } + } + } +} + + +test_get_user_feed_delete { + data.main.allow.allowed + with input as + { + "attributes": { + "request": { + "http": { + "path": "/v1/user/feed/delete" + } + } + } + } +} + + +test_get_user_feed_update { + data.main.allow.allowed + with input as + { + "attributes": { + "request": { + "http": { + "path": "/v1/user/feed/update" + } + } + } + } +} + + +test_update_user_v2_as_public_user { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/user/update" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be" + } + } + } +} + +test_update_user_v2_as_org_admin { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/user/update" + } + } + }, + "parsed_body": { + "request": { + "userId": "81c28eac-bf0f-11ec-8e6f-4f07103b952d" + } + } + } +} + +test_update_user_v3 { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v3/user/update" + } + } + }, + "parsed_body": { + "request": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be" + } + } + } +} + +test_update_user_declarations { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/declarations" + } + } + }, + "parsed_body": { + "params": {}, + "request": { + "declarations": [ + { + "operation": "add", + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "orgId": "01297544481264435214", + "persona": "teacher", + "info": { + "declared-school-name": "mgm21", + "declared-email": "abc@gmail.com", + "declared-phone": 99999999, + "declared-school-udise-code": 190923 + } + } + ] + } + } + } +} + +test_managed_user_v1_create_with_for_token { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww", + "x-authenticated-for": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTUifQ.eyJwYXJlbnRJZCI6IjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInN1YiI6IjgwYzM0YzdmLTViYXktNTY0ZS05MDhiLWJmYzA0MTAzODEwZCIsImV4cCI6MTcwMTUxNDA4NSwiaWF0IjoxNjM4NDQyMDg1fQ.skXXt_p2N_0EYQ500Z-xAwdZxoS3MzmVWBhsfSw7ff_QzHciKw21ICDNVnHHOXd_Akf2IA9jUP1lyrBLPRtFrLfYMLjlZB65L2r34QGpBTgkaLhacA_yv7h0neHNHT3D_KO3YKDAdycdAGzTDQZ9BJ1iDtBLc8Qu9VEdRZOQvQf11jotHZf3UEvY3zrpIrghYAfUbTR3kPFp2W_1CJDixWiKgm8IfEJSpzzCHH2RPKPDdyIbY-9eEHGkeTPqtyCNx_vgOLZg5ieJGwyvhH6KRMJ5y1fgXXv0kadZsp7h3nrDSkd3uONStFxdUdIzIIjvJHqjpDFa5NkQbbY0iIULvw" + }, + "path": "/v1/manageduser/create" + } + } + }, + "parsed_body": { + "request": { + "firstName": "My Child", + "managedBy": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "profileLocation": [ + { + "code": "02,", + "type": "state" + }, + { + "code": "0211,", + "type": "district" + } + ] + } + } + } +} + +test_managed_user_v1_create_without_for_token { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/manageduser/create" + } + } + }, + "parsed_body": { + "request": { + "firstName": "My Child", + "managedBy": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "profileLocation": [ + { + "code": "02,", + "type": "state" + }, + { + "code": "0211,", + "type": "district" + } + ] + } + } + } +} + +test_search_managed_user_with_for_token { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww", + "x-authenticated-for": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTUifQ.eyJwYXJlbnRJZCI6IjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInN1YiI6IjgwYzM0YzdmLTViYXktNTY0ZS05MDhiLWJmYzA0MTAzODEwZCIsImV4cCI6MTcwMTUxNDA4NSwiaWF0IjoxNjM4NDQyMDg1fQ.skXXt_p2N_0EYQ500Z-xAwdZxoS3MzmVWBhsfSw7ff_QzHciKw21ICDNVnHHOXd_Akf2IA9jUP1lyrBLPRtFrLfYMLjlZB65L2r34QGpBTgkaLhacA_yv7h0neHNHT3D_KO3YKDAdycdAGzTDQZ9BJ1iDtBLc8Qu9VEdRZOQvQf11jotHZf3UEvY3zrpIrghYAfUbTR3kPFp2W_1CJDixWiKgm8IfEJSpzzCHH2RPKPDdyIbY-9eEHGkeTPqtyCNx_vgOLZg5ieJGwyvhH6KRMJ5y1fgXXv0kadZsp7h3nrDSkd3uONStFxdUdIzIIjvJHqjpDFa5NkQbbY0iIULvw" + }, + "path": "/v1/user/managed/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?sortBy=createdDate&order=desc" + } + } + } + } +} + +test_search_managed_user_without_for_token { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/managed/28b0d08f-c2ea-40d1-bcd0-8ae00fca66be?sortBy=createdDate&order=desc" + } + } + } + } +} + +test_read_user_consent_as_public_user { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/consent/read" + } + } + }, + "parsed_body": { + "request": { + "consent": { + "filters": { + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "consumerId": "0126632859575746566", + "objectId": "0126632859575746566" + } + } + } + } + } +} + +test_read_user_consent_as_org_admin { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/consent/read" + } + } + }, + "parsed_body": { + "request": { + "consent": { + "filters": { + "userId": "81c28eac-bf0f-11ec-8e6f-4f07103b952d", + "consumerId": "0126632859575746566", + "objectId": "0126632859575746566" + } + } + } + } + } +} + +test_update_user_consent { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v1/user/consent/update" + } + } + }, + "parsed_body": { + "request": { + "consent": { + "status": "ACTIVE", + "userId": "28b0d08f-c2ea-40d1-bcd0-8ae00fca66be", + "consumerId": "0126632859575746566", + "objectId": "0126632859575746566", + "objectType": "Organisation" + } + } + } + } +} + +test_read_tenant_preferences { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/org/preferences/read" + } + } + }, + "parsed_body": { + "request": { + "orgId": "all", + "key": "selfdeclarations" + } + } + } +} + +test_create_tenant_preferences { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/org/preferences/create" + } + } + }, + "parsed_body": { + "request": { + "orgId": "all", + "key": "selfdeclarations", + "data": "Tenant preference data" + } + } + } +} + +test_update_tenant_preferences { + data.main.allow.allowed + with data.common.current_time as current_time + with data.common.iss as iss + with input as + { + "attributes": { + "request": { + "http": { + "headers": { + "x-authenticated-user-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc3YxX2tleTEifQ.eyJhdWQiOiJodHRwczovL3N1bmJpcmRlZC5vcmcvYXV0aC9yZWFsbXMvc3VuYmlyZCIsInN1YiI6ImY6NWJiNmM4N2MtN2M4OC00ZDJiLWFmN2UtNTM0YTJmZWY5NzhkOjI4YjBkMDhmLWMyZWEtNDBkMS1iY2QwLThhZTAwZmNhNjZiZSIsInJvbGVzIjpbeyJyb2xlIjoiQk9PS19DUkVBVE9SIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPTlRFTlRfQ1JFQVRPUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJDT05URU5UX1JFVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6IkNPVVJTRV9NRU5UT1IiLCJzY29wZSI6W3sib3JnYW5pc2F0aW9uSWQiOiIwMTM2OTg3ODc5NzUwMzY5MjgxMCJ9XX0seyJyb2xlIjoiUFJPR1JBTV9ERVNJR05FUiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn1dfSx7InJvbGUiOiJSRVBPUlRfVklFV0VSIiwic2NvcGUiOlt7Im9yZ2FuaXNhdGlvbklkIjoiMDEzNjk4Nzg3OTc1MDM2OTI4MTAifV19LHsicm9sZSI6Ik9SR19BRE1JTiIsInNjb3BlIjpbeyJvcmdhbmlzYXRpb25JZCI6IjAxMzY5ODc4Nzk3NTAzNjkyODEwIn0seyJvcmdhbmlzYXRpb25JZCI6IjAxNDcxOTIzNTY3ODEyMzQ1Njc4In1dfSx7InJvbGUiOiJQVUJMSUMiLCJzY29wZSI6W119XSwiaXNzIjoiaHR0cHM6Ly9zdW5iaXJkZWQub3JnL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJuYW1lIjoiZGVtbyIsInR5cCI6IkJlYXJlciIsImV4cCI6MTY0MDIzNjEwMiwiaWF0IjoxNjQwMTQ5NzA1fQ.B3-TSdYSOlawPHjFdiRjXwvRbYQ_eH_HTiLKlH7vGS0rCOJ6HQbYyWOhZ7vbZPb3virkuyfhykFcYCEHBCkHY-fwGAeU58Pmhi0dnNJkR59Fa9y_75W98JXZW68HROp62ntEAKCA1oot_U4tYi-8UNoR17Gszj9iYzFEBc6TZA4Lrom_9gqhBOYzL0ISFWSS6oG94EaaKDYHyWzCSjU2nYRB_fn-tODmnVJ12GRJAc1oM9y54o8neNYsl4T_xPyD34v-CinUJM8jzDjFqK5_O3HnAbcmXvkZjFRgfk4mF1V4s5hlsTJGyhi2JOPh90C5N-HbAY8QsPBnzgYFQU_sww" + }, + "path": "/v2/org/preferences/update" + } + } + }, + "parsed_body": { + "request": { + "orgId": "all", + "key": "selfdeclarations", + "data": "Tenant preference data" + } + } + } +} \ No newline at end of file diff --git a/helm/learner_opa_policies/templates/configmap.yaml b/helm/learner_opa_policies/templates/configmap.yaml new file mode 100644 index 0000000000..14f8f40e47 --- /dev/null +++ b/helm/learner_opa_policies/templates/configmap.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name | replace "_" "-" }} + namespace: {{ .Release.Namespace }} +data: +{{ (.Files.Glob "service-policies/*").AsConfig | indent 2 }} \ No newline at end of file diff --git a/helm/learner_opa_policies/values.yaml b/helm/learner_opa_policies/values.yaml new file mode 100644 index 0000000000..0fd2eda729 --- /dev/null +++ b/helm/learner_opa_policies/values.yaml @@ -0,0 +1 @@ +## Learner service opa policies chart \ No newline at end of file diff --git a/index.yaml b/index.yaml new file mode 100644 index 0000000000..2ac6e65d2b --- /dev/null +++ b/index.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +entries: + learner: + - apiVersion: v2 + appVersion: 5.0.0 + created: "2023-02-19T09:22:38.550173+05:30" + dependencies: + - name: common_opa_policies + repository: https://keshavprasadms.github.io/sunbird-helmchart-templates + version: 0.1.0 + - name: learner_opa_policies + repository: https://keshavprasadms.github.io/sunbird-lms-service + version: 0.1.0 + description: A helm chart for learner service + digest: 8098cbd245b4bfdc875afabc987a1d347a10fbecff387b082bde5135fdd67a95 + name: learner + type: application + urls: + - https://keshavprasadms.github.io/sunbird-lms-service/learner-0.1.0.tgz + version: 0.1.0 + learner_opa_policies: + - apiVersion: v2 + appVersion: 5.0.0 + created: "2023-02-19T09:22:38.550687+05:30" + description: A helm chart for learner opa policies + digest: 929dbbe76e53388411b44be79d0eff8b67a9c1f133abbf04e978f898e7471026 + name: learner_opa_policies + type: application + urls: + - https://keshavprasadms.github.io/sunbird-lms-service/learner_opa_policies-0.1.0.tgz + version: 0.1.0 +generated: "2023-02-19T09:22:38.547125+05:30" diff --git a/learner-0.1.0.tgz b/learner-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f37d1ae40500928bf6828038dc6655e660914f4b GIT binary patch literal 21349 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 literal 0 HcmV?d00001 diff --git a/learner_opa_policies-0.1.0.tgz b/learner_opa_policies-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..eb561ee5e6c4e8e16820b19d74fab82519c1ce40 GIT binary patch literal 2533 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 literal 0 HcmV?d00001 diff --git a/service/src/main/resources/cassandra.cql b/service/src/main/resources/cassandra.cql deleted file mode 100644 index 6b5906d48f..0000000000 --- a/service/src/main/resources/cassandra.cql +++ /dev/null @@ -1,562 +0,0 @@ -CREATE KEYSPACE IF NOT EXISTS sunbird WITH replication = {'class':'SimpleStrategy','replication_factor':1}; - -//to change cluster name -//UPDATE system.local SET cluster_name = 'sunbird' where key='local'; -//ALTER USER cassandra WITH PASSWORD 'password'; -USE sunbird; - -/* -creation of id= one way hash of (userId##courseId) here courseId is identifier of course mgmt table -toc url we have to generate through json of content id from ekStep -here status is (default(0),inProgress(1),completed(2)) -progress is no of content completed -*/ -CREATE TABLE IF NOT EXISTS sunbird.course_enrollment(id text, courseId text, courseName text,userId text,enrolledDate text, -description text,tocUrl text,status int,active boolean,delta text,grade text,progress int,lastReadContentId text, -lastReadContentStatus int,addedBy text,courseLogoUrl text,dateTime timestamp,contentId text,PRIMARY KEY (id)); - -CREATE INDEX inx_ce_userId ON sunbird.course_enrollment (userId); -CREATE INDEX inx_ce_courseId ON sunbird.course_enrollment (courseId); -CREATE INDEX inx_ce_course_name ON sunbird.course_enrollment (courseName); -CREATE INDEX inx_ce_status ON sunbird.course_enrollment (status); - -/* -creation of id = one way hash of (userId##contentId##courseId##batchId) -status is (default(0),inProgress(1),completed(2)) -*/ -CREATE TABLE IF NOT EXISTS sunbird.content_consumption(id text, contentId text, courseId text, userId text,viewPosition text,viewCount int,lastAccessTime text, -contentVersion text,completedCount int,status int,result text,score text,grade text,lastUpdatedTime text,lastCompletedTime text,dateTime timestamp,PRIMARY KEY (id)); - -CREATE INDEX inx_cc_userId ON sunbird.content_consumption (userId); -CREATE INDEX inx_cc_contentId ON sunbird.content_consumption (contentId); -CREATE INDEX inx_cc_status ON sunbird.content_consumption (status); -CREATE INDEX inx_cc_courseId ON sunbird.content_consumption (courseId); - -/* -creation of id = using timestamp and env - id and courseId both are same -content id is from ekstep -status DRAFT("draft"), LIVE("live"), RETIRED("retired") -contentType (pdf,video,word doc etc) -tutor map -*/ -CREATE TABLE IF NOT EXISTS sunbird.course_management(id text, courseId text, contentId text, courseName text,courseType text, -facultyId text,facultyName text,organisationId text,organisationName text,enrollementStartDate text,enrollementEndDate text, -courseDuration text,description text,status text,addedBy text,addedByName text,publishedBy text,publishedByName text,createdDate text, -publishedDate text,updatedDate text,updatedBy text,updatedByName text,contentType text,createdfor list,noOfLectures int,tocUrl text, -tutor map,courseLogoUrl text,courseRating text,userCount int,PRIMARY KEY (id)); - -CREATE INDEX inx_cm_facultyId ON sunbird.course_management (facultyId); -CREATE INDEX inx_cm_organisationId ON sunbird.course_management (organisationId); -CREATE INDEX inx_cm_courseId ON sunbird.course_management (courseId); -CREATE INDEX inx_cm_course_name ON sunbird.course_management (courseName); -CREATE INDEX inx_cm_status ON sunbird.course_management (status); -CREATE INDEX inx_cm_contentId ON sunbird.course_management (contentId); - -/* -creation of id = one way hash of userName -here id and userId both are same - currently username and email is same -email and username is unique -*/ -CREATE TABLE IF NOT EXISTS sunbird.user(id text,userId text,userName text, email text,phone text,aadhaarNo text,createdDate text,updatedDate text,updatedBy text, -lastLoginTime text,status int,firstName text,lastName text,password text,avatar text,gender text,language list,subject list,grade list,regOrgId text, -dob text,thumbnail text,PRIMARY KEY (id)); - -CREATE INDEX inx_u_email ON sunbird.user (email); -CREATE INDEX inx_u_phone ON sunbird.user (phone); -CREATE INDEX inx_u_status ON sunbird.user (status); -CREATE INDEX inx_u_userId ON sunbird.user (userId); -CREATE INDEX inx_u_userName ON sunbird.user (userName); - -//user_auth -//id is auth token -CREATE TABLE IF NOT EXISTS sunbird.user_auth(id text, userId text,createdDate text,updatedDate text,source text,PRIMARY KEY (id)); -CREATE INDEX inx_ua_userId ON sunbird.user_auth (userId); -CREATE INDEX inx_ua_source ON sunbird.user_auth (source); - -//organisation -CREATE TABLE IF NOT EXISTS sunbird.organisation(id text, orgName text, description text,communityId text,createdBy text,createdDate text, -updatedDate text,updatedBy text,status int,parentOrgId text,orgType text,orgCode text,dateTime timestamp,PRIMARY KEY (id)); - -CREATE INDEX inx_org_orgName ON sunbird.organisation (orgName); -CREATE INDEX inx_org_status ON sunbird.organisation (status); -//page_management -//id= using timestamp and env -CREATE TABLE IF NOT EXISTS sunbird.page_management(id text, name text, appMap text,portalMap text,createdDate text,createdBy text, -updatedDate text,updatedBy text,organisationId text,PRIMARY KEY (id)); - -CREATE INDEX inx_pm_pageName ON sunbird.page_management (name); -CREATE INDEX inx_vm_organisationId ON sunbird.page_management (organisationId); - -//page_section -//id= using timestamp and env -CREATE TABLE IF NOT EXISTS sunbird.page_section(id text, name text, sectionDataType text,description text,display text, -searchQuery text,createdDate text,createdBy text,updatedDate text,updatedBy text,imgUrl text,alt text,status int,PRIMARY KEY (id)); -CREATE INDEX inx_ps_sectionDataType ON sunbird.page_section (sectionDataType); -CREATE INDEX inx_ps_sectionName ON sunbird.page_section (name); - -//Assessment Eval -//id= using timestamp and env -CREATE TABLE IF NOT EXISTS sunbird.assessment_eval(id text, contentId text, courseId text, userId text, -createdDate text,result text,score text,attemptId text,attemptedCount int,PRIMARY KEY (id)); - -CREATE INDEX inx_ae_userId ON sunbird.assessment_eval (userId); -CREATE INDEX inx_ae_contentId ON sunbird.assessment_eval (contentId); -CREATE INDEX inx_ae_courseId ON sunbird.assessment_eval (courseId); - -//Assessment item -//id= using timestamp and userId -CREATE TABLE IF NOT EXISTS sunbird.assessment_item(id text, contentId text, courseId text, userId text,assessmentItemId text, -assessmentType text,attemptedDate text,createdDate text,timeTaken int,result text,score text,maxScore text,answers text, -evaluationStatus boolean,processingStatus boolean,attemptId text,PRIMARY KEY (id)); - -CREATE INDEX inx_ai_userId ON sunbird.assessment_item (userId); -CREATE INDEX inx_ai_contentId ON sunbird.assessment_item (contentId); -CREATE INDEX inx_ai_assessmentItemId ON sunbird.assessment_item (assessmentItemId); -CREATE INDEX inx_ai_courseId ON sunbird.assessment_item (courseId); -CREATE INDEX inx_ai_processingStatus ON sunbird.assessment_item (processingStatus); - -DROP INDEX IF EXISTS sunbird.inx_ai_processingStatus; -DROP INDEX IF EXISTS sunbird.inx_ae_assessmentitemid; - - -CREATE TABLE IF NOT EXISTS sunbird.user_external_identity(id text, userId text, externalId text,source text,isVerified boolean,PRIMARY KEY (id)); -CREATE INDEX inx_uei_userid ON sunbird.user_external_identity (userId); -CREATE INDEX inx_uei_externalId ON sunbird.user_external_identity (externalId); -CREATE INDEX inx_uei_source ON sunbird.user_external_identity (source); - -//Address Type values(permanent, current, office, home) -CREATE TABLE IF NOT EXISTS sunbird.address(id text, userId text, country text,state text,city text,zipCode text,addType text,createdDate text,createdBy text,updatedDate text,updatedBy text, PRIMARY KEY (id)); -CREATE INDEX inx_add_userid ON sunbird.address (userId); -CREATE INDEX inx_add_addType ON sunbird.address (addType); - -CREATE TABLE IF NOT EXISTS sunbird.user_education(id text, userId text, courseName text,duration int,yearOfPassing int,percentage double,grade text,name text,boardOrUniversity text,addressId text,createdDate text,createdBy text,updatedDate text,updatedBy text, PRIMARY KEY (id)); -CREATE INDEX inx_ueu_userid ON sunbird.user_education (userId); - -CREATE TABLE IF NOT EXISTS sunbird.user_job_profile(id text, userId text, jobName text,role text,joiningDate text,endDate text,orgName text,orgId text,subject list,addressId text,boardName text,isVerified boolean,isRejected boolean,verifiedDate text,verifiedBy text,createdDate text,createdBy text,updatedDate text,updatedBy text, PRIMARY KEY (id)); -CREATE INDEX inx_ujp_userid ON sunbird.user_job_profile (userId); - -CREATE TABLE IF NOT EXISTS sunbird.user_org(id text, userId text, role text,orgId text,orgJoinDate text,orgLeftDate text,isApproved boolean, -isRejected boolean,approvedBy text,approvalDate text,updatedDate text,updatedBy text, PRIMARY KEY (id)); -CREATE INDEX inx_uorg_userid ON sunbird.user_org(userId); -CREATE INDEX inx_uorg_orgId ON sunbird.user_org(orgId); - -CREATE TABLE IF NOT EXISTS sunbird.subject(id text, name text, PRIMARY KEY (id)); -CREATE INDEX inx_sb_name ON sunbird.subject(name); - - -ALTER TABLE sunbird.organisation ADD imgUrl text; -ALTER TABLE sunbird.organisation ADD thumbnail text; -ALTER TABLE sunbird.organisation ADD channel text; -ALTER TABLE sunbird.organisation ADD preferredLanguage text; -ALTER TABLE sunbird.organisation ADD homeUrl text; -ALTER TABLE sunbird.organisation ADD isRootOrg boolean; -ALTER TABLE sunbird.organisation ADD addId text; -ALTER TABLE sunbird.organisation ADD noOfmembers int; -ALTER TABLE sunbird.organisation ADD isApproved boolean; -ALTER TABLE sunbird.organisation ADD approvedBy text; -ALTER TABLE sunbird.organisation ADD approvedDate text; - - -CREATE INDEX inx_org_channel ON sunbird.organisation(channel); -CREATE INDEX inx_org_orgType ON sunbird.organisation(orgType); -CREATE INDEX inx_org_orgCode ON sunbird.organisation(orgCode); - -CREATE TABLE IF NOT EXISTS sunbird.org_type(id text, name text, PRIMARY KEY (id)); -CREATE INDEX inx_ot_name ON sunbird.org_type(name); - -CREATE TABLE IF NOT EXISTS sunbird.org_mapping(id text, orgIdOne text,relation text,orgIdTwo text, PRIMARY KEY (id)); -CREATE INDEX inx_om_orgIdOne ON sunbird.org_mapping(orgIdOne); -CREATE INDEX inx_om_orgIdTwo ON sunbird.org_mapping(orgIdTwo); - -ALTER TABLE sunbird.user ADD rootOrgId text; -ALTER TABLE sunbird.address ADD addressLine1 text; -ALTER TABLE sunbird.address ADD addressLine2 text; -ALTER TABLE sunbird.user_education ADD degree text; - -CREATE TABLE IF NOT EXISTS sunbird.master_action(id text, name text, PRIMARY KEY (id)); -CREATE INDEX inx_ma_name ON sunbird.master_action(name); - -CREATE TABLE IF NOT EXISTS sunbird.action_group(id text, actionId list,groupName text, PRIMARY KEY (id)); -CREATE INDEX inx_uacg_groupName ON sunbird.action_group(groupName); - -CREATE TABLE IF NOT EXISTS sunbird.user_action_role(id text, actionGroupId list,roleId text, PRIMARY KEY (id)); -CREATE INDEX inx_uactr_roleId ON sunbird.user_action_role(roleId); - - -insert into sunbird.action_group(id,actionId,groupName) values ('ag_12',['1','2'],'SYSTEM_ADMINISTRATION'); -insert into sunbird.action_group(id,actionId,groupName) values ('ag_13',['3','4','7','8','5'],'ORG_MANAGEMENT'); -insert into sunbird.action_group(id,actionId,groupName) values ('ag_14',['6','9','10'],'MEMBERSHIP_MANAGEMENT'); - -insert into sunbird.action_group(id,actionId,groupName) values ('ag_15',['11','12','13','14'],'CONTENT_CREATION'); -insert into sunbird.action_group(id,actionId,groupName) values ('ag_16',['15','16'],'CONTENT_REVIEW'); -insert into sunbird.action_group(id,actionId,groupName) values ('ag_17',['17','18','10'],'CONTENT_CURATION'); -insert into sunbird.action_group(id,actionId,groupName) values ('ag_17',['19','20','21','22','23','24','25','26'],'PUBLIC'); - -ALTER TABLE sunbird.user ADD loginId text; -ALTER TABLE sunbird.user ADD provider text; -ALTER TABLE sunbird.user_external_identity ADD idType text; - -insert into sunbird.user_action_role(id,actiongroupid,roleid) values ('uar_1',['ag_17'],'r_107'); -insert into sunbird.user_action_role(id,actiongroupid,roleid) values ('uar_2',['ag_13'],'r_102'); -insert into sunbird.user_action_role(id,actiongroupid,roleid) values ('uar_3',['ag_14'],'r_103'); - insert into sunbird.user_action_role(id,actiongroupid,roleid) values ('uar_3',['ag_15'],'r_104'); - insert into sunbird.user_action_role(id,actiongroupid,roleid) values ('uar_3',['ag_16'],'r_105'); - insert into sunbird.user_action_role(id,actiongroupid,roleid) values ('uar_3',['ag_12'],'r_101'); - -ALTER TABLE sunbird.organisation DROP addId; -ALTER TABLE sunbird.organisation ADD addressId text; -ALTER TABLE sunbird.user ADD roles List; - - - CREATE TABLE IF NOT EXISTS sunbird.role_group(id text, name text, PRIMARY KEY (id)); - insert into sunbird.role_group (id,name) values ('SYSTEM_ADMINISTRATION','System Administration'); - insert into sunbird.role_group (id,name) values ('ORG_MANAGEMENT','Org Management'); - insert into sunbird.role_group (id,name) values ('MEMBERSHIP_MANAGEMENT','Membership Management'); - insert into sunbird.role_group (id,name) values ('CONTENT_CREATION','Content Creation'); - insert into sunbird.role_group (id,name) values ('CONTENT_CURATION','Content Curation'); - insert into sunbird.role_group (id,name) values ('CONTENT_REVIEW','Content Review'); - -CREATE TABLE IF NOT EXISTS sunbird.role(id text, name text,roleGroupId List,status int, PRIMARY KEY (id)); -CREATE INDEX inx_ro_master_name ON sunbird.role(name); - insert into sunbird.role (id,name,rolegroupid,status) values ('ADMIN','Admin',['SYSTEM_ADMINISTRATION','ORG_MANAGEMENT'],1); - insert into sunbird.role (id,name,rolegroupid,status) values ('ORG_ADMIN','Org Admin',['ORG_MANAGEMENT','MEMBERSHIP_MANAGEMENT'],1); - insert into sunbird.role (id,name,rolegroupid,status) values ('ORG_MODERATOR','Org Moderator',['MEMBERSHIP_MANAGEMENT'],1); - insert into sunbird.role (id,name,rolegroupid,status) values ('CONTENT_CREATOR','Content Creator',['CONTENT_CREATION'],1); - insert into sunbird.role (id,name,rolegroupid,status) values ('CONTENT_REVIEWER','Content Reviewer',['CONTENT_CREATION','CONTENT_CURATION','CONTENT_REVIEW'],1); - - CREATE TABLE IF NOT EXISTS sunbird.url_action(id text, url list,name text, PRIMARY KEY (id)); - CREATE INDEX inx_ua_name ON sunbird.url_action(name); -CREATE INDEX inx_ua_url ON sunbird.url_action(url); - -insert into sunbird.url_action (id,name) values ('suspendOrg','suspendOrg'); - insert into sunbird.url_action (id,name) values ('suspendUser','suspendUser'); - insert into sunbird.url_action (id,name) values ('createOrg','createOrg'); - insert into sunbird.url_action (id,name) values ('updateOrg','updateOrg'); - insert into sunbird.url_action (id,name) values ('removeOrg','removeOrg'); - insert into sunbird.url_action (id,name) values ('createUser','createUser'); - insert into sunbird.url_action (id,name) values ('updateUser','updateUser'); - insert into sunbird.url_action (id,name) values ('ORG_MANAGEMENT','Org Management'); - insert into sunbird.url_action (id,name) values ('createOrg','createOrg'); - insert into sunbird.url_action (id,name) values ('addMember','addMember'); - insert into sunbird.url_action (id,name) values ('removeMember','removeMember'); - insert into sunbird.url_action (id,name) values ('suspendMember','suspendMember'); - insert into sunbird.url_action (id,name) values ('createCourse','createCourse'); - insert into sunbird.url_action (id,name) values ('updateCourse','updateCourse'); - insert into sunbird.url_action (id,name) values ('createContent','createContent'); - insert into sunbird.url_action (id,name) values ('updateContent','updateContent'); - insert into sunbird.url_action (id,name) values ('flagCourse','flagCourse'); - insert into sunbird.url_action (id,name) values ('flagContent','flagContent'); - insert into sunbird.url_action (id,name) values ('publishCourse','publishCourse'); - insert into sunbird.url_action (id,name) values ('publishContent','publishContent'); - ALTER table sunbird.role_group add url_action_ids list; - - update sunbird.role_group set url_action_ids=['addMember','removeMember','suspendMember'] where id='MEMBERSHIP_MANAGEMENT'; - update sunbird.role_group set url_action_ids=['createCourse','updateCourse','createContent','updateContent'] where id='CONTENT_CREATION'; - update sunbird.role_group set url_action_ids=['suspendOrg','suspendUser'] where id='SYSTEM_ADMINISTRATION'; - update sunbird.role_group set url_action_ids=['publishCourse','publishContent'] where id='CONTENT_REVIEW'; - update sunbird.role_group set url_action_ids=['createOrg','updateOrg','removeOrg','createUser','updateUser'] where id='ORG_MANAGEMENT'; - update sunbird.role_group set url_action_ids=['flagCourse','flagContent'] where id='CONTENT_CURATION'; - - update sunbird.url_action set url=['/v1/course/publish'] where id='publishContent'; -update sunbird.url_action set url=['/v1/user/create'] where id='addMember'; - update sunbird.url_action set url=['v1/course/create'] where id='createCourse'; -update sunbird.url_action set url=['/v1/user/create'] where id='createUser'; - update sunbird.url_action set url=['/v1/course/publish'] where id='publishCourse'; -update sunbird.url_action set url=['/v1/organisation/update'] where id='updateOrg'; - -drop index inx_uorg_orgid; -ALTER TABLE sunbird.user_org DROP orgid; -ALTER TABLE sunbird.user_org ADD organisationid text; -ALTER TABLE sunbird.user_org ADD addedby text; -ALTER TABLE sunbird.user_org ADD addedbyname text; -CREATE INDEX inx_uorg_orgid ON sunbird.user_org (organisationid); - - -/* -creation of id= one way hash of (userId##courseId##batchId) here courseId is identifier of EkStep course -toc url is generated from ekStep -here status is (default(0),inProgress(1),completed(2)) -progress is no of content completed -*/ -CREATE TABLE IF NOT EXISTS sunbird.user_courses(id text, courseId text, courseName text, userId text, batchId text, enrolledDate text, -description text,tocUrl text,status int,active boolean,delta text,grade text,progress int,lastReadContentId text, -lastReadContentStatus int,addedBy text,courseLogoUrl text, dateTime timestamp, contentId text, PRIMARY KEY (id)); - -CREATE INDEX inx_ucs_userId ON sunbird.user_courses (userId); -CREATE INDEX inx_ucs_courseId ON sunbird.user_courses (courseId); -CREATE INDEX inx_ucs_batchId ON sunbird.user_courses (batchId); -CREATE INDEX inx_ucs_course_name ON sunbird.user_courses (courseName); -CREATE INDEX inx_ucs_status ON sunbird.user_courses (status); - -DROP INDEX IF EXISTS inx_uei_source; -ALTER TABLE sunbird.user_external_identity DROP source; -ALTER TABLE sunbird.user_external_identity ADD provider text; -ALTER TABLE sunbird.user_external_identity ADD externalIdValue text; -CREATE INDEX inx_uei_provider ON sunbird.user_external_identity (provider); - -//changes 7 July 2017 updated organization table -ALTER TABLE sunbird.organisation ADD rootOrgID text; -ALTER TABLE sunbird.org_mapping ADD rootOrgID text; -CREATE TABLE IF NOT EXISTS sunbird.org_type(id text, name text, PRIMARY KEY (id)); -DROP INDEX sunbird.inx_org_status; -ALTER TABLE sunbird.organisation DROP status ; -ALTER TABLE sunbird.organisation ADD status text; - -CREATE INDEX inx_org_status ON sunbird.organisation (status); - -CREATE INDEX inx_u_loginId ON sunbird.user(loginId); - -ALTER TABLE sunbird.user_job_profile ADD isCurrentJob boolean; -ALTER TABLE sunbird.content_consumption ADD progress int; -ALTER TABLE sunbird.content_consumption DROP viewPosition; - -//changes on 12th july 2017 -ALTER TABLE sunbird.user_job_profile ADD isDeleted boolean; -ALTER TABLE sunbird.user_education ADD isDeleted boolean; -ALTER TABLE sunbird.address ADD isDeleted boolean; -ALTER TABLE sunbird.user_org ADD isDeleted boolean; -ALTER TABLE sunbird.user ADD profileSummary text; - -ALTER TABLE sunbird.organisation ADD source text; -ALTER TABLE sunbird.organisation ADD externalId text; - -ALTER TABLE sunbird.user_org drop role; -ALTER TABLE sunbird.user_org ADD roles list; - -//to export data from csv to cassandra table run below command(for page_section and page_management table) -// change the path of csv file -//COPY sunbird.page_management(id, appmap,createdby ,createddate ,name ,organisationid ,portalmap ,updatedby ,updateddate ) FROM '/tmp/cql/pageMgmt.csv'; - -//COPY sunbird.page_section(id, alt,createdby ,createddate ,description ,display ,imgurl ,name,searchquery , sectiondatatype ,status , updatedby ,updateddate) FROM '/tmp/cql/pageSection.csv'; - -// insert default root organisation -- July 15,2017 -ALTER TABLE sunbird.organisation ADD isDefault boolean; - -ALTER TABLE sunbird.user_courses ADD leafNodesCount int; -// change organisation status field from text to int -- July 19,2017 -drop index inx_org_status; -ALTER TABLE sunbird.organisation DROP status ; -ALTER TABLE sunbird.organisation ADD status int; -CREATE INDEX inx_org_status ON sunbird.organisation (status); - - -// add isdeleted field to user table -- July 31,2017 -ALTER TABLE sunbird.user ADD isDeleted boolean; - -//added for course batch -CREATE TABLE IF NOT EXISTS sunbird.course_batch(id text, courseId text,courseCreator text,createdBy text,createdOn text,enrollmentType text,startDate text,endDate text,name text,description text,status int,lastUpdatedOn text,mentors List,participants List,createdFor List,PRIMARY KEY (id)); -CREATE INDEX inx_cou_bat_status ON sunbird.course_batch (status); -CREATE INDEX inx_cou_bat_courseId ON sunbird.course_batch (courseId); -CREATE INDEX inx_cou_bat_courseCreator ON sunbird.course_batch (courseCreator); -CREATE INDEX inx_cou_bat_createdBy ON sunbird.course_batch (createdBy); -CREATE INDEX inx_cou_bat_enrolmentType ON sunbird.course_batch (enrollmentType); -ALTER TABLE sunbird.course_batch DROP createdon; -ALTER TABLE sunbird.course_batch ADD createdDate text; -ALTER TABLE sunbird.course_batch DROP lastupdatedon; -ALTER TABLE sunbird.course_batch ADD updatedDate text; - -ALTER TABLE sunbird.organisation add provider text; -ALTER TABLE sunbird.organisation DROP source; -//Id is courseId -CREATE TABLE IF NOT EXISTS sunbird.course_publish_status(id text,submitDate text,status int,PRIMARY KEY (id)); - -// convert data type of participants from List to map -- Aug 7,2017 -ALTER TABLE sunbird.course_batch DROP participants; -ALTER TABLE sunbird.course_batch ADD participant map; - -ALTER TABLE sunbird.course_batch ADD courseAdditionalInfo map; - -// adding the batchId column to content consumption table -- Aug 8,2017 -ALTER TABLE sunbird.content_consumption ADD batchId text; - -CREATE TABLE IF NOT EXISTS sunbird.bulk_upload_process(id text, status int,data text,successResult text,failureResult text,uploadedBy text,uploadedDate text,processStartTime text,processEndTime text,ObjectType text,organisationId text, PRIMARY KEY (id)); -CREATE INDEX inx_status ON sunbird.bulk_upload_process(status); -insert into sunbird.role_group (id,name) values ('COURSE_MENTOR','Course Mentor'); -update sunbird.role_group set url_action_ids=['courseMentor'] where id='COURSE_MENTOR'; - -ALTER TABLE sunbird.course_batch ADD countIncrementStatus boolean; -ALTER TABLE sunbird.course_batch ADD countIncrementDate text; -ALTER TABLE sunbird.course_batch ADD countDecrementStatus boolean; -ALTER TABLE sunbird.course_batch ADD countDecrementDate text; - -CREATE INDEX inx_org_provider ON sunbird.organisation (provider); -CREATE INDEX inx_org_externalId ON sunbird.organisation (externalId); - -insert into sunbird.url_action (id,name) values ('orgupload','orgupload'); -update sunbird.role_group set url_action_ids=['suspendOrg','suspendUser','orgupload'] where id='SYSTEM_ADMINISTRATION'; -update sunbird.url_action set url=['/v1/org/suspend'] where id='suspendOrg'; -update sunbird.url_action set url=['/v1/user/block'] where id='suspendUser'; -update sunbird.url_action set url=['/v1/org/upload'] where id='orgupload'; -insert into sunbird.role (id,name,rolegroupid,status) values ('COURSE_MENTOR','Course Mentor',['COURSE_MENTOR'],1); - -// changes on Aug 16,2017 -ALTER TABLE sunbird.organisation ADD slug text; -ALTER TABLE sunbird.organisation ADD hashTagId text; -ALTER TABLE sunbird.organisation ADD theme text; -ALTER TABLE sunbird.user_org ADD position text; -ALTER TABLE sunbird.course_batch ADD hashTagId text; -CREATE INDEX inx_cps_status ON sunbird.course_publish_status (status); -ALTER TABLE sunbird.user ADD location text; -ALTER TABLE sunbird.organisation ADD contactDetails map; -insert into sunbird.role_group (id,name) values ('FLAG_REVIEWER ','Flag Reviewer'); -insert into sunbird.url_action (id,name) values ('FLAG_REVIEWER','flag Review'); -insert into sunbird.role (id,name,rolegroupid,status) values ('FLAG_REVIEWER','Flag Reviewer',['FLAG_REVIEWER'],1); -update sunbird.role_group set url_action_ids=['flagReview'] where id='FLAG_REVIEWER'; -ALTER TABLE sunbird.organisation DROP contactdetails; -ALTER TABLE sunbird.organisation ADD contactdetail text; - -//update course_batch set countdecrementstatus=false ,countincrementstatus=false where id in ('01231295903433523233', '01231300152093900880', '01231362610791219226', '012311485318971392184', '012311507396763648187', '01231446621414195215', '012311399697334272167', '012310182931898368117', '01231437156529766411', '0123143731552501769', '012315729890295808125', '01231515693522124824', '012315105801404416176', '012315113121030144181', '0123156336446914560', '0123152537517178880', '012311452395159552176', '012310182079651840116', '01231365904918118428', '012315115229880320201', '01231297804052070441', '01231295967369625632', '01231437649992908813', '01231298538289561658', '01231290682958643227', '012310176900218880115', '012311394333097984166', '012311400451145728168', '01231513667683942421', '012315115088601088183', '0123153123053158404', '01231363201368064027', '01231290412171264026', '0123151248760258560', '01231514986607411223', '012311580166266880203', '01231217800957952058', '01231304911540224098', '0123152769465384961', '012310190924496896119', '01231569596413542494', '01231299360593510461', '01231437480674099212', '012310195742662656126', '012311489586135040185', '01231298390404300857', '012311415973486592169', '01231298670022656060', '01231569429976678493', '01231294824787148831', '012310173385113600114', '01231385960518451255', '012315785629794304137', '01231296418316288037', '012310193544601600118', '012311447751262208177', '012311507213688832188', '01231437595463680010', '0123156778024960005', '012311505273479168186', '01231300602153369682', '01231298422152396859', '0123152820520222722', '012311511755972608189', '012315179912159232103', '012315751464787968136', '012315736241045504130', '01231288911727001615', '01231514371529113622', '01231366031184691229', '01231383864920473645', '012315107363119104182', '012311574182944768202', '01231516784369664088', '01231443633637785614', '01231300661683814481' ); -insert into sunbird.role_group (id,name) values ('COURSE_ADMIN','Course Admin'); -update sunbird.role_group set url_action_ids=['courseAdmin'] where id='COURSE_ADMIN'; -insert into sunbird.role (id,name,rolegroupid,status) values ('COURSE_ADMIN','Course Admin',['COURSE_ADMIN'],1); -insert into sunbird.role_group (id,name) values ('COURSE_CREATOR','Course Creator'); -update sunbird.role_group set url_action_ids=['courseCreator'] where id='COURSE_CREATOR'; -insert into sunbird.role (id,name,rolegroupid,status) values ('COURSE_CREATOR','Course Creator',['COURSE_CREATOR'],1); -update sunbird.role_group set name='Flag Reviewer' where id='FLAG_REVIEWER'; -//changes on Aug 29,2017 -CREATE TABLE IF NOT EXISTS sunbird.badge(id text, name text, description text, isActive boolean, PRIMARY KEY (id)); -CREATE TABLE IF NOT EXISTS sunbird.user_badge(id text, createdDate text, createdBy text, updatedDate text,updatedBy text,badgeTypeId text,receivedDate text,receiverId text,providerId text,providerName text,providerEmail text,providerPhone text,description text,validityDate int,expiryDate text,image text,isVerified boolean,isExpired boolean,isRevoked boolean,revocationReason text,revocationDate text,revokedBy text,verifiedBy text,verifiedDate text ,PRIMARY KEY (id)); - CREATE INDEX inx_usr_badg ON sunbird.user_badge (badgeTypeId); - insert into sunbird.badge (id,name,description,isactive) values ('0123206539020943360','President''s Gold Medal','Gold medal provided by President',true); - CREATE INDEX inx_usr_badg_receiverid ON sunbird.user_badge (receiverid); -CREATE INDEX inx_uei_externalIdValue ON sunbird.user_external_identity (externalIdValue); - -//adding for report tracking -CREATE TABLE IF NOT EXISTS sunbird.report_tracking(id text, status int,type text,createdDate text,userId text,uploadedDate text,email text,fileUrl text,emailTryCount int, PRIMARY KEY (id)); -CREATE INDEX inx_report_tracking_status ON sunbird.report_tracking(status); -CREATE INDEX inx_report_tracking_userId ON sunbird.report_tracking(userId); -ALTER TABLE sunbird.report_tracking ADD firstName text; -ALTER TABLE sunbird.report_tracking ADD batchId text; -ALTER TABLE sunbird.report_tracking ADD period text; -ALTER TABLE sunbird.report_tracking ADD data text; -insert into sunbird.role_group (id,name) values ('PUBLIC','Public'); -update sunbird.role_group set url_action_ids=['public'] where id='PUBLIC'; -insert into sunbird.role (id,name,rolegroupid,status) values ('PUBLIC','Public',['PUBLIC'],1); -ALTER TABLE sunbird.report_tracking ADD tryCount int; -ALTER TABLE sunbird.report_tracking DROP emailTryCount; -ALTER TABLE sunbird.report_tracking ADD updatedDate text; - -//Changes on Aug 31st 2017 -ALTER TABLE sunbird.report_tracking DROP batchId; -ALTER TABLE sunbird.report_tracking ADD resourceId text; - -// adding fileFormat for dashboard metrics report tracking -- Sep 1,2017 -ALTER TABLE sunbird.report_tracking ADD format text; - -ALTER TABLE sunbird.user DROP aadhaarno; -update organisation set channel='ROOT_ORG' where id='ORG_001'; - -// Sept 18th 2017 -ALTER TABLE sunbird.org_type ADD createdDate text; -ALTER TABLE sunbird.org_type ADD createdBy text; -ALTER TABLE sunbird.org_type ADD updatedDate text; -ALTER TABLE sunbird.org_type ADD updatedBy text; -//Adding table user_notes --Sep 13th 2017 -CREATE TABLE IF NOT EXISTS sunbird.user_notes(id text, userId text, courseId text, -contentId text, title text, note text, tags list, createdDate text, createdBy text, -updatedDate text, updatedBy text, isDeleted boolean, PRIMARY KEY (id)); -CREATE INDEX inx_un_userId ON sunbird.user_notes(userId); -CREATE INDEX inx_un_courseId ON sunbird.user_notes(courseId); -CREATE INDEX inx_un_contentId ON sunbird.user_notes(contentId); -ALTER TABLE sunbird.user ADD createdBy text; - -//Adding changes related to social media in user table -ALTER TABLE sunbird.user ADD webpages list>>; -CREATE TABLE IF NOT EXISTS sunbird.media_type(id text, name text, PRIMARY KEY (id)); - -insert into media_type(id,name) values('fb', 'facebook'); -insert into media_type(id,name) values('twitter','twitter'); -insert into media_type(id,name) values('in','linkedin'); -insert into media_type(id,name) values('blog','blog'); -//Oct 12th -ALTER TABLE sunbird.user ADD tempPassword text; -ALTER TABLE sunbird.user ADD currentLoginTime text; -//Oct 18th -UPDATE sunbird.media_type SET name = 'Facebook' where id = 'fb'; -UPDATE sunbird.media_type SET name = 'Twitter' where id = 'twitter'; -UPDATE sunbird.media_type SET name = 'LinkedIn' where id = 'in'; -UPDATE sunbird.media_type SET name = 'Blog' where id = 'blog'; - -ALTER TABLE sunbird.bulk_upload_process ADD retryCount int; - -// userSkill table to store the user skills - Oct 18, 2017 --- -/* -creation of id = one way hash of (userId##skillnametolowercase) -*/ -CREATE TABLE IF NOT EXISTS sunbird.user_skills(id text, userId text, skillname text,skillnametolowercase text, addedby text, addedat text, endorsementcount int ,endorsers Map, PRIMARY KEY (id)); -CREATE INDEX inx_us_userId ON sunbird.user_skills(userId); - -// skills table - Oct 18, 2017 --- -/* -creation of id = one way hash of (userId##skillnametolowercase) -*/ -CREATE TABLE IF NOT EXISTS sunbird.skills(id text,skills list, PRIMARY KEY (id)); - -//25th Oct -ALTER TABLE sunbird.organisation ADD orgTypeId text; - -//Announcement apis -27th Oct -CREATE KEYSPACE IF NOT EXISTS sunbirdplugin WITH replication = {'class':'SimpleStrategy','replication_factor':1}; -//CREATE TYPE IF NOT EXISTS sunbirdplugin.attachment (id text,filename text,mimetype text); -CREATE TABLE sunbirdplugin.announcement (id text,userid text,sourceid text,details map,links list,attachments list,target text,sentcount int,priority text,expiry text,status text,createddate text,updateddate text, PRIMARY KEY (id)); -CREATE TABLE sunbirdplugin.attachment (id text,file text,filename text,mimetype text,createdby text,status text,createddate text, PRIMARY KEY (id)); -CREATE TABLE sunbirdplugin.metrics (id text,userid text,announcementid text,activity text,channel text,createddate text, PRIMARY KEY (id)); -CREATE TABLE sunbirdplugin.announcementtype (id text,rootorgid text,name text,status text,createddate text, PRIMARY KEY (id)); -CREATE TABLE sunbirdplugin.announcementauth (id text,userid text,rootorgid text,permissions map,status text,createddate text, PRIMARY KEY (id)); - -insert into sunbird.role_group (id,name) values ('ANNOUNCEMENT_SENDER','Announcement Sender'); -update sunbird.role_group set url_action_ids=['Announcement Sender'] where id='ANNOUNCEMENT_SENDER'; -insert into sunbird.role (id,name,rolegroupid,status) values ('ANNOUNCEMENT_SENDER','Announcement Sender',['ANNOUNCEMENT_SENDER'],1); - -//mongodb import , env var is taken from group_vars -//COPY sunbird.user_notes(id, userid,courseid,contentid,title,note,tags,createddate,updateddate,isdeleted) FROM '/tmp/notes-{{env}}.csv'; -//2nd Nov -CREATE TABLE IF NOT EXISTS sunbird.tenant_preference(id text,tenantName text,orgId text,role text, data text, PRIMARY KEY (id)); -CREATE INDEX inx_tp_userId ON sunbird.tenant_preference(orgId); -ALTER TABLE sunbird.user ADD tcstatus text; -//CLIENT_INFO table for master key -CREATE TABLE IF NOT EXISTS sunbird.client_info(id text, clientname text, masterkey text, createddate text, updateddate text, PRIMARY KEY (id)); -CREATE INDEX inx_ci_clientname ON sunbird.client_info(clientname); -// Geo Location - Oct 31,2017 - -ALTER TABLE sunbird.user ADD tcupdateddate text; - -CREATE TABLE IF NOT EXISTS sunbird.geo_location(id text,locationName text,rootOrgId text,type text, createdDate text,createdBy text,updatedDate text,updatedBy text,topicName text,topicId text, PRIMARY KEY (id)); -CREATE INDEX inx_gl_rootOrgId ON sunbird.geo_location(rootOrgId); -ALTER TABLE sunbird.geo_location DROP topicId ; -ALTER TABLE sunbird.geo_location DROP topicName ; -ALTER TABLE sunbird.geo_location ADD topic text; -ALTER TABLE sunbird.geo_location DROP locationName ; -ALTER TABLE sunbird.geo_location ADD location text; -// 3rd Nov 2017 -ALTER TABLE sunbird.organisation ADD locationId text; - -ALTER TABLE sunbird.user ADD profileVisibility map; - -// 9th Nov 2017 -ALTER TABLE sunbirdplugin.announcement DROP target ; -ALTER TABLE sunbirdplugin.announcement ADD target map>>>>; -//adding default one Skills. -insert into skills (id,skills) values ('001',['java']); -ALTER TABLE sunbird.user_skills drop endorsers; -ALTER TABLE sunbird.user_skills ADD endorsersList frozen>>; -// 16th Nov 2017 -ALTER TABLE sunbird.user ADD emailVerified boolean; - -// 23rd Nov 2017 -ALTER TABLE sunbird.user ADD countryCode text; -CREATE TABLE IF NOT EXISTS sunbird.system_settings (id text ,field text ,value text ,PRIMARY KEY (id)); - -// Dec 5th 2017 - -ALTER TABLE sunbird.geo_location ADD userCount int; - -insert into sunbird.system_settings (id,field,value) values ('phoneUnique','phoneUnique','false'); -insert into sunbird.system_settings (id,field,value) values ('emailUnique','emailUnique','false'); -// Dec 6th 2017 -ALTER TABLE sunbird.geo_location ADD userCountTTL text; -// adding new column in client-info to save the channel -ALTER TABLE sunbird.client_info ADD channel text; -CREATE INDEX inx_ci_clientchannel ON sunbird.client_info(channel);