- In order to access the requested services, the Life Science Login needs to transfer your personal data to a country outside EU/EEA.
- We cannot guarantee that this country offers an adequately high level of personal data protection as EU/EEA countries.
-
+
+
+ This service is${' '}
+ provided by an international organization.
+ in ${jurisdiction}
+
+
+
+ In order to access the requested services, the Life Science Login needs to transfer your personal data to an international organization outside EU/EEA jurisdictions.
+ Please be aware that upon transfer your personal data will be protected by EMBL’s Internal Policy 68 on General Data Protection.
+
+
+ In order to access the requested services, the Life Science Login needs to transfer your personal data to a country outside EU/EEA.
+ We cannot guarantee that this country offers an adequately high level of personal data protection as EU/EEA countries.
+
+
- Please, read the ">Privacy Policy of the service provider to learn more about its commitments to protect your data.
+ Please, read the ">Privacy Policy of the service provider to learn more about its commitments to protect your data.
-
-
-
diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/controller/OAuthConfirmationController.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/controller/OAuthConfirmationController.java
index 3de64b5df..84624691f 100644
--- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/controller/OAuthConfirmationController.java
+++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/controller/OAuthConfirmationController.java
@@ -28,7 +28,10 @@ import cz.muni.ics.oauth2.model.ClientDetailsEntity;
import cz.muni.ics.oauth2.model.SystemScope;
import cz.muni.ics.oauth2.service.ClientDetailsEntityService;
import cz.muni.ics.oauth2.service.SystemScopeService;
+import cz.muni.ics.oidc.models.Facility;
+import cz.muni.ics.oidc.models.PerunAttributeValue;
import cz.muni.ics.oidc.saml.SamlPrincipal;
+import cz.muni.ics.oidc.server.adapters.PerunAdapter;
import cz.muni.ics.oidc.server.configurations.PerunOidcConfig;
import cz.muni.ics.oidc.web.WebHtmlClasses;
import cz.muni.ics.oidc.web.controllers.ControllerUtils;
@@ -108,6 +111,8 @@ public class OAuthConfirmationController {
private PerunOidcConfig perunOidcConfig;
private WebHtmlClasses htmlClasses;
+ private PerunAdapter perunAdapter;
+
@Autowired
public OAuthConfirmationController(ClientDetailsEntityService clientService,
SystemScopeService scopeService,
@@ -115,7 +120,8 @@ public class OAuthConfirmationController {
UserInfoService userInfoService,
RedirectResolver redirectResolver,
PerunOidcConfig perunOidcConfig,
- WebHtmlClasses htmlClasses) {
+ WebHtmlClasses htmlClasses,
+ PerunAdapter perunAdapter) {
this.clientService = clientService;
this.scopeService = scopeService;
@@ -124,6 +130,7 @@ public class OAuthConfirmationController {
this.redirectResolver = redirectResolver;
this.perunOidcConfig = perunOidcConfig;
this.htmlClasses = htmlClasses;
+ this.perunAdapter = perunAdapter;
}
public OAuthConfirmationController(ClientDetailsEntityService clientService) {
@@ -200,15 +207,37 @@ public class OAuthConfirmationController {
if (perunOidcConfig.getTheme().equalsIgnoreCase(LSAAI)) {
model.put("getsOfflineAccess", authRequest.getScope().contains("offline_access"));
model.put("jurisdiction", getJurisdiction(client));
+ model.put("isTestSp", isTestSp(client));
return "lsaai/approve";
}
return THEMED_APPROVE;
}
+ private boolean isTestSp(ClientDetailsEntity client) {
+ if (client == null || !StringUtils.hasText(client.getClientId())) {
+ return true;
+ }
+ Facility facility = perunAdapter.getFacilityByClientId(client.getClientId());
+ if (facility == null || facility.getId() == null) {
+ return true;
+ }
+
+ PerunAttributeValue attrValue = perunAdapter.getFacilityAttributeValue(facility.getId(), "urn:perun:facility:attribute-def:def:isTestSp");
+ if (attrValue == null) {
+ return false;
+ } else if (attrValue.valueAsBoolean()) {
+ return attrValue.valueAsBoolean();
+ }
+ return false;
+ }
+
private String getJurisdiction(ClientDetailsEntity client) {
if (!StringUtils.hasText(client.getJurisdiction()) || euEaa.contains(client.getJurisdiction())) {
return "";
} else if (client.getJurisdiction().length() > 2) {
+ if ("EMBL".equalsIgnoreCase(client.getJurisdiction())) {
+ return "EMBL";
+ }
return "INT";
}
diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/endpoint/DeviceEndpoint.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/endpoint/DeviceEndpoint.java
index 3555bcca6..168c920bb 100644
--- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/endpoint/DeviceEndpoint.java
+++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/web/endpoint/DeviceEndpoint.java
@@ -24,7 +24,10 @@ import cz.muni.ics.oauth2.service.ClientDetailsEntityService;
import cz.muni.ics.oauth2.service.DeviceCodeService;
import cz.muni.ics.oauth2.service.SystemScopeService;
import cz.muni.ics.oauth2.token.DeviceTokenGranter;
+import cz.muni.ics.oidc.models.Facility;
+import cz.muni.ics.oidc.models.PerunAttributeValue;
import cz.muni.ics.oidc.saml.SamlPrincipal;
+import cz.muni.ics.oidc.server.adapters.PerunAdapter;
import cz.muni.ics.oidc.server.configurations.PerunOidcConfig;
import cz.muni.ics.oidc.server.userInfo.PerunUserInfo;
import cz.muni.ics.oidc.web.WebHtmlClasses;
@@ -137,6 +140,8 @@ public class DeviceEndpoint {
private final ScopeClaimTranslationService scopeClaimTranslationService;
private final UserInfoService userInfoService;
+ private final PerunAdapter perunAdapter;
+
@Autowired
public DeviceEndpoint(ClientDetailsEntityService clientService,
SystemScopeService scopeService,
@@ -145,7 +150,8 @@ public class DeviceEndpoint {
PerunOidcConfig perunOidcConfig,
WebHtmlClasses htmlClasses,
ScopeClaimTranslationService scopeClaimTranslationService,
- UserInfoService userInfoService)
+ UserInfoService userInfoService,
+ PerunAdapter perunAdapter)
{
this.clientService = clientService;
this.scopeService = scopeService;
@@ -155,6 +161,7 @@ public class DeviceEndpoint {
this.htmlClasses = htmlClasses;
this.scopeClaimTranslationService = scopeClaimTranslationService;
this.userInfoService = userInfoService;
+ this.perunAdapter = perunAdapter;
}
@PostMapping(value = ENDPOINT_URL, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
@@ -447,15 +454,37 @@ public class DeviceEndpoint {
if (perunOidcConfig.getTheme().equalsIgnoreCase("lsaai")) {
model.put("getsOfflineAccess", dc.getScope().contains("offline_access"));
model.put("jurisdiction", getJurisdiction(client));
+ model.put("isTestSp", isTestSp(client));
return "lsaai/" + APPROVE_DEVICE;
}
return THEMED_APPROVE_DEVICE;
}
+ private boolean isTestSp(ClientDetailsEntity client) {
+ if (client == null || !StringUtils.hasText(client.getClientId())) {
+ return true;
+ }
+ Facility facility = perunAdapter.getFacilityByClientId(client.getClientId());
+ if (facility == null || facility.getId() == null) {
+ return true;
+ }
+
+ PerunAttributeValue attrValue = perunAdapter.getFacilityAttributeValue(facility.getId(), "urn:perun:facility:attribute-def:def:isTestSp");
+ if (attrValue == null) {
+ return false;
+ } else if (attrValue.valueAsBoolean()) {
+ return attrValue.valueAsBoolean();
+ }
+ return false;
+ }
+
private String getJurisdiction(ClientDetailsEntity client) {
if (!StringUtils.hasText(client.getJurisdiction()) || euEaa.contains(client.getJurisdiction())) {
return "";
} else if (client.getJurisdiction().length() > 2) {
+ if ("EMBL".equalsIgnoreCase(client.getJurisdiction())) {
+ return "EMBL";
+ }
return "INT";
}