From 2e62f81e80b9f4a2e92901b539263bb49424a341 Mon Sep 17 00:00:00 2001
From: ManosAngelidis <angelidis@fortiss.org>
Date: Tue, 27 Apr 2021 09:35:34 +0200
Subject: [PATCH] [NRRPLT-8250] Added GDPR status set and get functions

- Implements the communication with the proxy

- GET function that receives whether the user has accepted the GPDR terms.
  On the proxy side checks the GDPR table in the storage

- SET function that sets the accepted status (only positive) when the user
  has accepted the GDPR terms. On the proxy side adds the status in the
  GDPR table
---
 src/mocks/handlers.js                          | 11 ++++++++++-
 src/mocks/mock_gdpr.json                       |  3 +++
 .../proxy/__tests__/nrp-user-service.test.js   |  8 ++++++++
 src/services/proxy/data/endpoints.json         |  3 ++-
 src/services/proxy/nrp-user-service.js         | 18 +++++++++++++++++-
 5 files changed, 40 insertions(+), 3 deletions(-)
 create mode 100644 src/mocks/mock_gdpr.json

diff --git a/src/mocks/handlers.js b/src/mocks/handlers.js
index c6ca5a9..fefc3d9 100644
--- a/src/mocks/handlers.js
+++ b/src/mocks/handlers.js
@@ -9,6 +9,7 @@ import MockServerConfig from './mock_server-config.json';
 import MockUsers from './mock_users.json';
 import MockSimulations from './mock_simulations.json';
 import MockUserGroups from './mock_user-groups.json';
+import MockGDPR from './mock_gdpr.json';
 
 import ImageAI from '../assets/images/Artificial_Intelligence_2.jpg';
 
@@ -48,7 +49,15 @@ export const handlers = [
   rest.get(`${config.api.proxy.url}${endpoints.proxy.identity.me.groups.url}`, (req, res, ctx) => {
     return res(ctx.json(MockUserGroups));
   }),
+  rest.get(`${config.api.proxy.url}${endpoints.proxy.identity.url}${endpoints.proxy.identity.gdpr}`,
+    (req, res, ctx) => {
+      return res(ctx.json(MockGDPR));
+    }),
   rest.get(`${config.api.proxy.url}${endpoints.proxy.identity.url}/:userID`, (req, res, ctx) => {
     return res(ctx.json(MockUsers[1]));
-  })
+  }),
+  rest.post(`${config.api.proxy.url}${endpoints.proxy.identity.url}${endpoints.proxy.identity.gdpr}`,
+    (req, res, ctx) => {
+      return res(ctx.json({"status":"success"}));
+    })
 ];
\ No newline at end of file
diff --git a/src/mocks/mock_gdpr.json b/src/mocks/mock_gdpr.json
new file mode 100644
index 0000000..5f7e96e
--- /dev/null
+++ b/src/mocks/mock_gdpr.json
@@ -0,0 +1,3 @@
+{
+    "gdpr": false
+}
\ No newline at end of file
diff --git a/src/services/proxy/__tests__/nrp-user-service.test.js b/src/services/proxy/__tests__/nrp-user-service.test.js
index 7561dcf..b3c184e 100644
--- a/src/services/proxy/__tests__/nrp-user-service.test.js
+++ b/src/services/proxy/__tests__/nrp-user-service.test.js
@@ -71,4 +71,12 @@ test('can determine group membership for administrators', async () => {
 
 test('can retrieve cluster reservations', async () => {
   expect(await NrpUserService.instance.getReservation()).toBe(undefined);
+});
+
+test('can retrieve false gdpr status', async () => {
+  expect(await NrpUserService.instance.getGdpr()).toEqual({"gdpr": false});
+});
+
+test('can set gdpr status', async () => {
+  expect(await NrpUserService.instance.setGdpr()).toEqual({"status":"success"});
 });
\ No newline at end of file
diff --git a/src/services/proxy/data/endpoints.json b/src/services/proxy/data/endpoints.json
index 2ab2653..d1ced87 100644
--- a/src/services/proxy/data/endpoints.json
+++ b/src/services/proxy/data/endpoints.json
@@ -16,7 +16,8 @@
                 "groups": {
                     "url": "/identity/me/groups"
                 }
-            }
+            },
+            "gdpr": "/gdpr"
         },
         "server": {
             "url": "/server"
diff --git a/src/services/proxy/nrp-user-service.js b/src/services/proxy/nrp-user-service.js
index 58d8ac2..5bd1c50 100644
--- a/src/services/proxy/nrp-user-service.js
+++ b/src/services/proxy/nrp-user-service.js
@@ -14,7 +14,7 @@ const PROXY_URL = config.api.proxy.url;
 const IDENTITY_BASE_URL = `${PROXY_URL}${endpoints.proxy.identity.url}`;
 const IDENTITY_ME_URL = `${PROXY_URL}${endpoints.proxy.identity.me.url}`;
 const IDENTITY_ME_GROUPS_URL = `${PROXY_URL}${endpoints.proxy.identity.me.groups.url}`;
-
+const GDPR_URL = `${IDENTITY_BASE_URL}${endpoints.proxy.identity.gdpr}`;
 /**
  * Service managing all data related to NRP users.
  */
@@ -112,6 +112,22 @@ class NrpUserService extends HttpService {
   getReservation() {
     return window.sessionStorage.getItem('clusterReservation');
   }
+
+  /**
+   * Get the GDPR status for current user.
+   * @returns {promise} Contains the GDPR status for the current user
+   */
+  async getGdpr() {
+    return await (await this.httpRequestGET(GDPR_URL)).json();
+  }
+
+  /**
+   * Set the accepted GDPR status for current user.
+   * @returns {promise} Response for the current user
+   */
+  async setGdpr() {
+    return await (await this.httpRequestPOST(GDPR_URL)).json();
+  }
 }
 
 export default NrpUserService;
-- 
GitLab