You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2017/09/28 21:18:21 UTC
[1/2] airavata git commit: AIRAVATA-2508 Set admin password in
Keycloak, gateway profile
Repository: airavata
Updated Branches:
refs/heads/develop 430001c28 -> a27a82964
AIRAVATA-2508 Set admin password in Keycloak, gateway profile
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/52d92380
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/52d92380
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/52d92380
Branch: refs/heads/develop
Commit: 52d923807d672c54923a25b4b138b2efd21e8bc2
Parents: 6488090
Author: Marcus Christie <ma...@apache.org>
Authored: Tue Sep 19 12:11:21 2017 -0400
Committer: Marcus Christie <ma...@apache.org>
Committed: Tue Sep 19 12:39:57 2017 -0400
----------------------------------------------------------------------
.../core/impl/TenantManagementKeycloakImpl.java | 11 ++---
.../interfaces/TenantManagementInterface.java | 3 +-
.../services/core/tests/SetupNewGateway.java | 2 +-
.../handlers/IamAdminServicesHandler.java | 13 +++--
.../handlers/TenantProfileServiceHandler.java | 50 ++++++++++++++++++++
.../templates/airavata-server.properties.j2 | 1 -
.../common/utils/ApplicationSettings.java | 4 --
.../airavata/common/utils/ServerSettings.java | 1 -
.../main/resources/airavata-server.properties | 1 -
.../service/handler/RegistryServerHandler.java | 15 ++++++
10 files changed, 81 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/impl/TenantManagementKeycloakImpl.java
----------------------------------------------------------------------
diff --git a/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/impl/TenantManagementKeycloakImpl.java b/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/impl/TenantManagementKeycloakImpl.java
index e3ac6a3..344f2eb 100644
--- a/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/impl/TenantManagementKeycloakImpl.java
+++ b/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/impl/TenantManagementKeycloakImpl.java
@@ -154,7 +154,7 @@ public class TenantManagementKeycloakImpl implements TenantManagementInterface {
}
@Override
- public boolean createTenantAdminAccount(PasswordCredential isSuperAdminPasswordCreds, Gateway gatewayDetails) throws IamAdminServicesException{
+ public boolean createTenantAdminAccount(PasswordCredential isSuperAdminPasswordCreds, Gateway gatewayDetails, String tenantAdminPassword) throws IamAdminServicesException{
Keycloak client = null;
try{
client = TenantManagementKeycloakImpl.getClient(ServerSettings.getIamServerUrl(), this.superAdminRealmId, isSuperAdminPasswordCreds);
@@ -165,9 +165,6 @@ public class TenantManagementKeycloakImpl implements TenantManagementInterface {
user.setEmail(gatewayDetails.getGatewayAdminEmail());
user.setEmailVerified(true);
user.setEnabled(true);
- List<String> requiredActionList = new ArrayList<>();
- requiredActionList.add("UPDATE_PASSWORD");
- user.setRequiredActions(requiredActionList);
Response httpResponse = client.realm(gatewayDetails.getGatewayId()).users().create(user);
logger.info("Tenant Admin account creation exited with code : " + httpResponse.getStatus()+" : " +httpResponse.getStatusInfo());
if (httpResponse.getStatus() == 201) { //HTTP code for record creation: HTTP 201
@@ -184,8 +181,8 @@ public class TenantManagementKeycloakImpl implements TenantManagementInterface {
CredentialRepresentation credential = new CredentialRepresentation();
credential.setType(CredentialRepresentation.PASSWORD);
- credential.setValue(ServerSettings.getGatewayAdminTempPwd());
- credential.setTemporary(true);
+ credential.setValue(tenantAdminPassword);
+ credential.setTemporary(false);
retrievedUser.resetPassword(credential);
List<ClientRepresentation> realmClients = client.realm(gatewayDetails.getGatewayId()).clients().findAll();
String realmManagementClientId=null;
@@ -234,8 +231,6 @@ public class TenantManagementKeycloakImpl implements TenantManagementInterface {
pgaClient.setServiceAccountsEnabled(true);
pgaClient.setFullScopeAllowed(true);
pgaClient.setClientAuthenticatorType("client-secret");
- String[] defaultRoles = {"gateway-user"};
- pgaClient.setDefaultRoles(defaultRoles);
List<String> redirectUris = new ArrayList<>();
if(gatewayDetails.getGatewayURL()!=null){
String gatewayURL = gatewayDetails.getGatewayURL();
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/interfaces/TenantManagementInterface.java
----------------------------------------------------------------------
diff --git a/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/interfaces/TenantManagementInterface.java b/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/interfaces/TenantManagementInterface.java
index e181900..429453c 100644
--- a/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/interfaces/TenantManagementInterface.java
+++ b/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/interfaces/TenantManagementInterface.java
@@ -44,9 +44,10 @@ public interface TenantManagementInterface {
*
* @param isSuperAdminPasswordCreds identity server super admin credentials
* @param gatewayDetails gateway details from workspace catalog
+ * @param gatewayAdminPassword password to use when creating tenant admin account
* @return Gateway object.
*/
- boolean createTenantAdminAccount(PasswordCredential isSuperAdminPasswordCreds, Gateway gatewayDetails) throws IamAdminServicesException;
+ boolean createTenantAdminAccount(PasswordCredential isSuperAdminPasswordCreds, Gateway gatewayDetails, String gatewayAdminPassword) throws IamAdminServicesException;
/**
* Method to configure application client in Identity Server
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/airavata-services/profile-service/iam-admin-services-core/src/test/java/org/apache/airavata/service/profile/iam/admin/services/core/tests/SetupNewGateway.java
----------------------------------------------------------------------
diff --git a/airavata-services/profile-service/iam-admin-services-core/src/test/java/org/apache/airavata/service/profile/iam/admin/services/core/tests/SetupNewGateway.java b/airavata-services/profile-service/iam-admin-services-core/src/test/java/org/apache/airavata/service/profile/iam/admin/services/core/tests/SetupNewGateway.java
index 1f1c915..3b9fae1 100644
--- a/airavata-services/profile-service/iam-admin-services-core/src/test/java/org/apache/airavata/service/profile/iam/admin/services/core/tests/SetupNewGateway.java
+++ b/airavata-services/profile-service/iam-admin-services-core/src/test/java/org/apache/airavata/service/profile/iam/admin/services/core/tests/SetupNewGateway.java
@@ -37,7 +37,7 @@ public class SetupNewGateway {
TenantManagementKeycloakImpl client = new TenantManagementKeycloakImpl();
try {
client.addTenant(superAdminCreds, testGateway);
- if (!client.createTenantAdminAccount(superAdminCreds, testGateway)) {
+ if (!client.createTenantAdminAccount(superAdminCreds, testGateway, "Test@123")) {
logger.error("Admin account creation failed !!, please refer error logs for reason");
}
Gateway gatewayWithIdAndSecret = client.configureClient(superAdminCreds, testGateway);
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/IamAdminServicesHandler.java
----------------------------------------------------------------------
diff --git a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/IamAdminServicesHandler.java b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/IamAdminServicesHandler.java
index 7b8a1e5..6ad75f3 100644
--- a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/IamAdminServicesHandler.java
+++ b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/IamAdminServicesHandler.java
@@ -71,14 +71,21 @@ public class IamAdminServicesHandler implements IamAdminServices.Iface {
PasswordCredential isSuperAdminCredentials = getSuperAdminPasswordCredential();
try {
keycloakclient.addTenant(isSuperAdminCredentials, gateway);
- if (!keycloakclient.createTenantAdminAccount(isSuperAdminCredentials, gateway)) {
+
+ // Load the tenant admin password stored in gateway request
+ CredentialStoreService.Client credentialStoreClient = getCredentialStoreServiceClient();
+ // Admin password token should already be stored under requested gateway's gatewayId
+ PasswordCredential tenantAdminPasswordCredential = credentialStoreClient.getPasswordCredential(gateway.getIdentityServerPasswordToken(), gateway.getGatewayId());
+
+ if (!keycloakclient.createTenantAdminAccount(isSuperAdminCredentials, gateway, tenantAdminPasswordCredential.getPassword())) {
logger.error("Admin account creation failed !!, please refer error logs for reason");
}
Gateway gatewayWithIdAndSecret = keycloakclient.configureClient(isSuperAdminCredentials, gateway);
return gatewayWithIdAndSecret;
- } catch (IamAdminServicesException ex) {
+ } catch (TException|ApplicationSettingsException ex) {
logger.error("Gateway Setup Failed, reason: " + ex.getMessage(), ex);
- throw ex;
+ IamAdminServicesException iamAdminServicesException = new IamAdminServicesException(ex.getMessage());
+ throw iamAdminServicesException;
}
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/TenantProfileServiceHandler.java
----------------------------------------------------------------------
diff --git a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/TenantProfileServiceHandler.java b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/TenantProfileServiceHandler.java
index 61601c3..ba894b9 100644
--- a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/TenantProfileServiceHandler.java
+++ b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/TenantProfileServiceHandler.java
@@ -20,8 +20,15 @@
*/
package org.apache.airavata.service.profile.handlers;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.Constants;
import org.apache.airavata.common.utils.DBEventManagerConstants;
import org.apache.airavata.common.utils.DBEventService;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.credential.store.client.CredentialStoreClientFactory;
+import org.apache.airavata.credential.store.cpi.CredentialStoreService;
+import org.apache.airavata.credential.store.exception.CredentialStoreException;
+import org.apache.airavata.model.credential.store.PasswordCredential;
import org.apache.airavata.model.dbevent.CrudType;
import org.apache.airavata.model.dbevent.EntityType;
import org.apache.airavata.model.error.AuthorizationException;
@@ -76,6 +83,10 @@ public class TenantProfileServiceHandler implements TenantProfileService.Iface {
// Assign UUID to gateway
gateway.setAiravataInternalGatewayId(UUID.randomUUID().toString());
if (!checkDuplicateGateway(gateway)) {
+ // If admin password, copy it in the credential store under the requested gateway's gatewayId
+ if (gateway.getIdentityServerPasswordToken() != null) {
+ copyAdminPasswordToGateway(authzToken, gateway);
+ }
gateway = tenantProfileRepository.create(gateway);
if (gateway != null) {
logger.info("Added Airavata Gateway with Id: " + gateway.getGatewayId());
@@ -108,6 +119,15 @@ public class TenantProfileServiceHandler implements TenantProfileService.Iface {
@SecurityCheck
public boolean updateGateway(AuthzToken authzToken, Gateway updatedGateway) throws TenantProfileServiceException, AuthorizationException, TException {
try {
+
+ // if admin password token changes then copy the admin password and store under this gateway id and then update the admin password token
+ Gateway existingGateway = tenantProfileRepository.getGateway(updatedGateway.getAiravataInternalGatewayId());
+ if (updatedGateway.getIdentityServerPasswordToken() != null
+ && (existingGateway.getIdentityServerPasswordToken() == null
+ || !existingGateway.getIdentityServerPasswordToken().equals(updatedGateway.getIdentityServerPasswordToken()))) {
+ copyAdminPasswordToGateway(authzToken, updatedGateway);
+ }
+
if (tenantProfileRepository.update(updatedGateway) != null) {
logger.debug("Updated gateway-profile with ID: " + updatedGateway.getGatewayId());
// replicate tenant at end-places
@@ -223,4 +243,34 @@ public class TenantProfileServiceHandler implements TenantProfileService.Iface {
throw exception;
}
}
+
+ // admin passwords are stored in credential store in the super portal gateway and need to be
+ // copied to a credential that is stored in the requested/newly created gateway
+ private void copyAdminPasswordToGateway(AuthzToken authzToken, Gateway gateway) throws TException, ApplicationSettingsException {
+ CredentialStoreService.Client csClient = getCredentialStoreServiceClient();
+ try {
+ String requestGatewayId = authzToken.getClaimsMap().get(Constants.GATEWAY_ID);
+ PasswordCredential adminPasswordCredential = csClient.getPasswordCredential(gateway.getIdentityServerPasswordToken(), requestGatewayId);
+ adminPasswordCredential.setGatewayId(gateway.getGatewayId());
+ String newAdminPasswordCredentialToken = csClient.addPasswordCredential(adminPasswordCredential);
+ gateway.setIdentityServerPasswordToken(newAdminPasswordCredentialToken);
+ } finally {
+ if (csClient.getInputProtocol().getTransport().isOpen()) {
+ csClient.getInputProtocol().getTransport().close();
+ }
+ if (csClient.getOutputProtocol().getTransport().isOpen()) {
+ csClient.getOutputProtocol().getTransport().close();
+ }
+ }
+ }
+
+ private CredentialStoreService.Client getCredentialStoreServiceClient() throws TException, ApplicationSettingsException {
+ final int serverPort = Integer.parseInt(ServerSettings.getCredentialStoreServerPort());
+ final String serverHost = ServerSettings.getCredentialStoreServerHost();
+ try {
+ return CredentialStoreClientFactory.createAiravataCSClient(serverHost, serverPort);
+ } catch (CredentialStoreException e) {
+ throw new TException("Unable to create credential store client...", e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/dev-tools/ansible/roles/api-orch/templates/airavata-server.properties.j2
----------------------------------------------------------------------
diff --git a/dev-tools/ansible/roles/api-orch/templates/airavata-server.properties.j2 b/dev-tools/ansible/roles/api-orch/templates/airavata-server.properties.j2
index ab0ee9f..a3bee29 100644
--- a/dev-tools/ansible/roles/api-orch/templates/airavata-server.properties.j2
+++ b/dev-tools/ansible/roles/api-orch/templates/airavata-server.properties.j2
@@ -325,7 +325,6 @@ profile.service.validationQuery=SELECT 1
# Iam Admin services Configuration
###########################################################################
iam.server.url={{ iam_server_url }}
-new.gateway.admin.temp.password=Password@123
iam.server.super.admin.username={{ iam_server_super_admin_username }}
iam.server.super.admin.password={{ iam_server_super_admin_password }}
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
index 30a0691..bbf5102 100644
--- a/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
@@ -435,10 +435,6 @@ public class ApplicationSettings {
return getSetting(ServerSettings.IAM_SERVER_URL);
}
- public static String getGatewayAdminTempPwd() throws ApplicationSettingsException {
- return getSetting(ServerSettings.NEW_GATEWAY_ADMIN_TEMP_PASSWORD);
- }
-
/**
* @deprecated use {{@link #getSetting(String)}}
* @return
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
index 8824eda..94cfe8f 100644
--- a/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
@@ -132,7 +132,6 @@ public class ServerSettings extends ApplicationSettings {
// Iam Server Constants
public static final String IAM_SERVER_URL = "iam.server.url";
- public static final String NEW_GATEWAY_ADMIN_TEMP_PASSWORD="new.gateway.admin.temp.password";
public static final String IAM_SERVER_SUPER_ADMIN_USERNAME = "iam.server.super.admin.username";
public static final String IAM_SERVER_SUPER_ADMIN_PASSWORD = "iam.server.super.admin.password";
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties
index bf0bc6f..a0d0cd9 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -347,7 +347,6 @@ profile.service.jdbc.password=airavata
# Iam Admin services Configuration
###########################################################################
iam.server.url=https://iam.scigap.org/auth
-new.gateway.admin.temp.password=Password@123
iam.server.super.admin.username=admin
iam.server.super.admin.password=password
http://git-wip-us.apache.org/repos/asf/airavata/blob/52d92380/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java b/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
index cd4368a..d90c20b 100644
--- a/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
+++ b/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
@@ -3532,6 +3532,14 @@ public class RegistryServerHandler implements RegistryService.Iface {
throw exception;
}
experimentCatalog.update(ExperimentCatalogModelType.GATEWAY, updatedGateway, gatewayId);
+
+ // check if gatewayprofile exists and check if the identity server password token equals the admin password token, if not update
+ GatewayResourceProfile existingGwyResourceProfile = appCatalog.getGatewayProfile().getGatewayProfile(gatewayId);
+ if (existingGwyResourceProfile.getIdentityServerPwdCredToken() == null
+ || !existingGwyResourceProfile.getIdentityServerPwdCredToken().equals(updatedGateway.getIdentityServerPasswordToken())) {
+ existingGwyResourceProfile.setIdentityServerPwdCredToken(updatedGateway.getIdentityServerPasswordToken());
+ appCatalog.getGatewayProfile().updateGatewayResourceProfile(gatewayId, existingGwyResourceProfile);
+ }
logger.debug("Airavata update gateway with gateway id : " + gatewayId);
return true;
} catch (RegistryException e) {
@@ -3539,6 +3547,11 @@ public class RegistryServerHandler implements RegistryService.Iface {
RegistryServiceException exception = new RegistryServiceException();
exception.setMessage("Error while updating the gateway. More info : " + e.getMessage());
throw exception;
+ } catch (AppCatalogException e) {
+ logger.error("Error while updating gateway profile", e);
+ RegistryServiceException exception = new RegistryServiceException();
+ exception.setMessage("Error while updating gateway profile. More info : " + e.getMessage());
+ throw exception;
}
}
@@ -3573,6 +3586,8 @@ public class RegistryServerHandler implements RegistryService.Iface {
// add gatewayresourceprofile in appCatalog
GatewayResourceProfile gatewayResourceProfile = new GatewayResourceProfile();
gatewayResourceProfile.setGatewayID(gatewayId);
+ gatewayResourceProfile.setIdentityServerTenant(gatewayId);
+ gatewayResourceProfile.setIdentityServerPwdCredToken(gateway.getIdentityServerPasswordToken());
appCatalog.getGatewayProfile().addGatewayResourceProfile(gatewayResourceProfile);
logger.debug("Airavata added gateway with gateway id : " + gateway.getGatewayId());
return gatewayId;
[2/2] airavata git commit: Merge branch 'AIRAVATA-2508' into develop
Posted by ma...@apache.org.
Merge branch 'AIRAVATA-2508' into develop
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/a27a8296
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/a27a8296
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/a27a8296
Branch: refs/heads/develop
Commit: a27a82964094111b4e93bf5a9ed90ebfc76b61f7
Parents: 430001c 52d9238
Author: Marcus Christie <ma...@apache.org>
Authored: Thu Sep 28 17:16:47 2017 -0400
Committer: Marcus Christie <ma...@apache.org>
Committed: Thu Sep 28 17:16:47 2017 -0400
----------------------------------------------------------------------
.../core/impl/TenantManagementKeycloakImpl.java | 11 ++---
.../interfaces/TenantManagementInterface.java | 3 +-
.../services/core/tests/SetupNewGateway.java | 2 +-
.../handlers/IamAdminServicesHandler.java | 13 +++--
.../handlers/TenantProfileServiceHandler.java | 50 ++++++++++++++++++++
.../templates/airavata-server.properties.j2 | 1 -
.../common/utils/ApplicationSettings.java | 4 --
.../airavata/common/utils/ServerSettings.java | 1 -
.../main/resources/airavata-server.properties | 1 -
.../service/handler/RegistryServerHandler.java | 15 ++++++
10 files changed, 81 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/a27a8296/airavata-services/profile-service/iam-admin-services-core/src/main/java/org/apache/airavata/service/profile/iam/admin/services/core/impl/TenantManagementKeycloakImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/a27a8296/dev-tools/ansible/roles/api-orch/templates/airavata-server.properties.j2
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/a27a8296/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/a27a8296/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------