This is an automated email from the ASF dual-hosted git repository. smarru pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/airavata-custos.git
commit a08c0b1f7ec431469612d08065822a1631f8b799 Author: Aarushi <[email protected]> AuthorDate: Wed Aug 21 23:31:47 2019 -0400 added samples for end to end testing and junit test cases --- ...ava => AuthenticationServiceClientFactory.java} | 2 +- .../manager/KeyCloakSecurityManager.java | 3 +- .../src/main/resources/keystores/airavata.jks | Bin .../src/main/resources/keystores/airavata_sym.jks | Bin .../main/resources/keystores/client_truststore.jks | Bin .../user/handler/UserProfileServiceHandler.java | 10 +- .../test/java/TestUserProfileServiceHandler.java | 36 ++-- .../custos-authentication-service-samples/pom.xml | 15 ++ .../sample/CustosAuthenticationServiceSample.java | 108 +++++++++++ .../custos-profile-service-samples/pom.xml | 15 ++ .../service/samples/TenantProfileSample.java | 80 ++++++++ .../profile/service/samples/UserProfileSample.java | 211 +++++++++++++++++++++ .../samples/utils/ProfileServiceClientUtil.java | 63 ++++++ .../resources/profile-client-sample.properties | 29 +++ ide-integration/custos-services/pom.xml | 15 ++ .../server/start}/CustosAPIServerStarted.java | 4 +- .../src/main/resources/custos-server.properties | 2 +- .../database_scripts/init/01-databases.sql | 43 +++-- .../user-profile-catalog-derby.sql | 30 --- .../user-profile-catalog-mysql.sql | 30 --- .../src/main/resources/docker-compose.yml | 0 .../main/resources/keycloak/Default-export.json | 0 .../main/resources/keycloak/Default-export.json.bk | 0 .../src/main/resources/keycloak/standalone.xml | 0 .../src/main/resources/keystores/airavata.jks | Bin .../src/main/resources/keystores/airavata_sym.jks | Bin .../main/resources/keystores/client_truststore.jks | Bin ide-integration/pom.xml | 18 ++ 28 files changed, 614 insertions(+), 100 deletions(-) diff --git a/custos-client/src/main/java/org/apache/custos/client/authentication/service/AuthenticationServiceClient.java b/custos-client/src/main/java/org/apache/custos/client/authentication/service/AuthenticationServiceClientFactory.java similarity index 95% rename from custos-client/src/main/java/org/apache/custos/client/authentication/service/AuthenticationServiceClient.java rename to custos-client/src/main/java/org/apache/custos/client/authentication/service/AuthenticationServiceClientFactory.java index 4fc0444..734e55e 100644 --- a/custos-client/src/main/java/org/apache/custos/client/authentication/service/AuthenticationServiceClient.java +++ b/custos-client/src/main/java/org/apache/custos/client/authentication/service/AuthenticationServiceClientFactory.java @@ -8,7 +8,7 @@ import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException; -public class AuthenticationServiceClient { +public class AuthenticationServiceClientFactory { public static CustosAuthenticationService.Client createAuthenticationServiceClient(String serverHost, int serverPort) throws CustosAuthenticationServiceException { try { diff --git a/custos-connectors/src/main/java/org.apache.custos.security/manager/KeyCloakSecurityManager.java b/custos-connectors/src/main/java/org.apache.custos.security/manager/KeyCloakSecurityManager.java index e7f8b30..13c925e 100644 --- a/custos-connectors/src/main/java/org.apache.custos.security/manager/KeyCloakSecurityManager.java +++ b/custos-connectors/src/main/java/org.apache.custos.security/manager/KeyCloakSecurityManager.java @@ -95,6 +95,7 @@ public class KeyCloakSecurityManager implements CustosSecurityManager { String accessToken = authzToken.getAccessToken(); String gatewayId = authzToken.getClaimsMap().get(Constants.GATEWAY_ID); try { + initializeSecurityInfra(); if (ServerSettings.isAuthzCacheEnabled()) { //obtain an instance of AuthzCacheManager implementation. AuthzCacheManager authzCacheManager = AuthzCacheManagerFactory.getAuthzCacheManager(); @@ -138,6 +139,7 @@ public class KeyCloakSecurityManager implements CustosSecurityManager { @Override public AuthzToken getUserManagementServiceAccountAuthzToken(AuthzToken authzToken, String gatewayId) throws CustosSecurityException { try { + initializeSecurityInfra(); tenantProfileClient = getTenantProfileServiceClient(); Gateway gateway = tenantProfileClient.getGatewayUsingGatewayId(authzToken, gatewayId); String tokenURL = getTokenEndpoint(gatewayId); @@ -164,7 +166,6 @@ public class KeyCloakSecurityManager implements CustosSecurityManager { } private UserInfo getUserInfo(String gatewayId, String token) throws Exception { - //TODO: Confirm the difference between gatewayId and IdentityServerTenant, using gatewayId as of now String openIdConnectUrl = getOpenIDConfigurationUrl(gatewayId); JSONObject openIdConnectConfig = new JSONObject(getFromUrl(openIdConnectUrl, null)); String userInfoEndPoint = openIdConnectConfig.getString("userinfo_endpoint"); diff --git a/ide-integration/src/main/resources/keystores/airavata.jks b/custos-connectors/src/main/resources/keystores/airavata.jks similarity index 100% copy from ide-integration/src/main/resources/keystores/airavata.jks copy to custos-connectors/src/main/resources/keystores/airavata.jks diff --git a/ide-integration/src/main/resources/keystores/airavata_sym.jks b/custos-connectors/src/main/resources/keystores/airavata_sym.jks similarity index 100% copy from ide-integration/src/main/resources/keystores/airavata_sym.jks copy to custos-connectors/src/main/resources/keystores/airavata_sym.jks diff --git a/ide-integration/src/main/resources/keystores/client_truststore.jks b/custos-connectors/src/main/resources/keystores/client_truststore.jks similarity index 100% copy from ide-integration/src/main/resources/keystores/client_truststore.jks copy to custos-connectors/src/main/resources/keystores/client_truststore.jks diff --git a/custos-profile-service/user-profile-service/src/main/java/org/apache/custos/profile/user/handler/UserProfileServiceHandler.java b/custos-profile-service/user-profile-service/src/main/java/org/apache/custos/profile/user/handler/UserProfileServiceHandler.java index e29b39d..e3c9d07 100644 --- a/custos-profile-service/user-profile-service/src/main/java/org/apache/custos/profile/user/handler/UserProfileServiceHandler.java +++ b/custos-profile-service/user-profile-service/src/main/java/org/apache/custos/profile/user/handler/UserProfileServiceHandler.java @@ -103,7 +103,6 @@ public class UserProfileServiceHandler implements UserProfileService.Iface { try{ // Lowercase user id and internal id userProfile.setUserId(userProfile.getUserId().toLowerCase()); - userProfile.setCustosInternalUserId(userProfile.getUserId() + "@" + userProfile.getGatewayId()); userProfile = userProfileRepository.updateUserProfile(userProfile, getIAMUserProfileUpdater(authzToken, userProfile)); if (null != userProfile) { logger.info("Added UserProfile with userId: " + userProfile.getUserId()); @@ -232,4 +231,13 @@ public class UserProfileServiceHandler implements UserProfileService.Iface { throw ex; } } + + private void updateCustosInternalId(UserProfile userProfile){ + //TODO: check if other ids need to be changed + String internalId = userProfile.getUserId() + "@" + userProfile.getGatewayId(); + userProfile.setCustosInternalUserId(internalId); + if(userProfile.isSetNsfDemographics()){ + userProfile.setNsfDemographics(userProfile.getNsfDemographics().setCustosInternalUserId(internalId)); + } + } } diff --git a/custos-profile-service/user-profile-service/src/test/java/TestUserProfileServiceHandler.java b/custos-profile-service/user-profile-service/src/test/java/TestUserProfileServiceHandler.java index b88cee2..75bf90e 100644 --- a/custos-profile-service/user-profile-service/src/test/java/TestUserProfileServiceHandler.java +++ b/custos-profile-service/user-profile-service/src/test/java/TestUserProfileServiceHandler.java @@ -9,7 +9,6 @@ import org.apache.custos.profile.user.cpi.exception.UserProfileServiceException; import org.apache.custos.profile.user.handler.UserProfileServiceHandler; import org.apache.custos.security.manager.CustosSecurityManager; import org.apache.custos.security.manager.SecurityManagerFactory; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -40,10 +39,6 @@ public class TestUserProfileServiceHandler { authzToken.setClaimsMap(map); authzToken.setAccessToken("access token"); } - @After - public void cleanUp() { - - } @Test public void testInitializeUserProfileWhenUserProfileDoesNotExist(@Mocked CustosSecurityManager mockedSecurityManager) throws UserProfileServiceException, CustosSecurityException { UserInfo userInfo = new UserInfo(); @@ -64,21 +59,36 @@ public class TestUserProfileServiceHandler { } @Test public void testInitializeUserProfileWhenUserProfileExists(@Mocked CustosSecurityManager mockedSecurityManager) throws UserProfileServiceException, CustosSecurityException{ + //create a user UserInfo userInfo = new UserInfo(); userInfo.setUsername("test-username"); - userInfo.setEmailAddress("[email protected]"); - userInfo.setFirstName("someother-test-first-name"); - userInfo.setLastName("someother-test-last-name"); - String old_email_address = "[email protected]"; + userInfo.setEmailAddress("[email protected]"); + userInfo.setFirstName("test-first-name"); + userInfo.setLastName("test-last-name"); + //create a user with same username + UserInfo userInfoCopy = new UserInfo(); + userInfoCopy.setUsername("test-username"); + userInfoCopy.setEmailAddress("[email protected]"); + userInfoCopy.setFirstName("someother-test-first-name"); + userInfoCopy.setLastName("someother-test-last-name"); + AuthzToken authzTokenCopy = new AuthzToken(); + HashMap<String,String> map = new HashMap<>(); + map.put(Constants.GATEWAY_ID, GATEWAY_ID); + map.put(Constants.USER_NAME, userInfoCopy.getUsername()); + authzTokenCopy.setClaimsMap(map); + authzTokenCopy.setAccessToken("access token"); + new MockUp<SecurityManagerFactory>() { @Mock public CustosSecurityManager getSecurityManager(){return mockedSecurityManager;}; }; - new Expectations() {{ mockedSecurityManager.getUserInfoFromAuthzToken(authzToken); result = userInfo;}}; + new Expectations() {{ + mockedSecurityManager.getUserInfoFromAuthzToken(authzToken); result = userInfo; + mockedSecurityManager.getUserInfoFromAuthzToken(authzTokenCopy); result = userInfoCopy;}}; - UserProfile createdUserProfile = userProfileServiceHandler.initializeUserProfile(authzToken); - assertNotNull(createdUserProfile); - assertEquals(old_email_address,createdUserProfile.getEmails().get(0)); + userProfileServiceHandler.initializeUserProfile(authzToken); + UserProfile createdUserProfile = userProfileServiceHandler.initializeUserProfile(authzTokenCopy); + assertNotNull(createdUserProfile); assertEquals(userInfo.getUsername().toLowerCase(), createdUserProfile.getUserId()); assertEquals(GATEWAY_ID,createdUserProfile.getGatewayId()); } diff --git a/ide-integration/custos-authentication-service-samples/pom.xml b/ide-integration/custos-authentication-service-samples/pom.xml new file mode 100644 index 0000000..5a035cd --- /dev/null +++ b/ide-integration/custos-authentication-service-samples/pom.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>ide-integration</artifactId> + <groupId>org.apache.custos</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>custos-authentication-service-samples</artifactId> + + +</project> \ No newline at end of file diff --git a/ide-integration/custos-authentication-service-samples/src/main/java/org/apache/custos/authentication/service/sample/CustosAuthenticationServiceSample.java b/ide-integration/custos-authentication-service-samples/src/main/java/org/apache/custos/authentication/service/sample/CustosAuthenticationServiceSample.java new file mode 100644 index 0000000..ac2c122 --- /dev/null +++ b/ide-integration/custos-authentication-service-samples/src/main/java/org/apache/custos/authentication/service/sample/CustosAuthenticationServiceSample.java @@ -0,0 +1,108 @@ +package org.apache.custos.authentication.service.sample; + +import org.apache.custos.authentication.cpi.CustosAuthenticationService; +import org.apache.custos.client.authentication.service.AuthenticationServiceClientFactory; +import org.apache.custos.commons.exceptions.CustosSecurityException; +import org.apache.custos.commons.model.security.AuthzToken; +import org.apache.custos.commons.utils.Constants; +import org.apache.custos.security.manager.KeyCloakSecurityManager; +import org.apache.http.Consts; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.apache.thrift.TException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class CustosAuthenticationServiceSample { + + private static final Logger log = LoggerFactory.getLogger(CustosAuthenticationServiceSample.class); + //present in keycloak json configuration + public static String USERNAME = "default-admin"; + public static String GATEWAY_ID = "default"; + + public static void main(String[] args) throws Exception{ + + try { + //change this based on the port on which the server is started + String serverHost = "localhost"; + int serverPort = 9091; + CustosAuthenticationService.Client client = AuthenticationServiceClientFactory.createAuthenticationServiceClient(serverHost, serverPort); + testUserAuthentication(client); + }catch (TException e) { + throw new Exception(e); + }catch (Exception e){ + throw new Exception("Error setting up the authentication server", e); + } + } + + public static void testUserAuthentication(CustosAuthenticationService.Client client) throws TException, CustosSecurityException { + boolean authenticated = false; + new KeyCloakSecurityManager().initializeSecurityInfra(); + AuthzToken authzToken = new AuthzToken(); + HashMap<String, String> map_ = new HashMap<>(); + map_.put(Constants.GATEWAY_ID, GATEWAY_ID); + map_.put(Constants.USER_NAME, USERNAME); + authzToken.setClaimsMap(map_); + JSONObject json = getAccessToken(); + if(json.has("access_token")){ + String access_token = getAccessToken().get("access_token").toString(); + authzToken.setAccessToken(access_token); + authenticated = client.isUserAuthenticated(authzToken); + } + + assert (authenticated): "User authenticating failed"; + if(authenticated){ + log.info("User successfully authenticated"); + } + + } + + private static JSONObject getAccessToken() { + String password = "123456"; + String tokenEndPoint = "https://airavata.host:8443/auth/realms/default/protocol/openid-connect/token"; + String grant_type = "password"; + String client_id = "admin-cli"; + + CloseableHttpClient httpClient = HttpClients.createSystem(); + HttpPost httpPost = new HttpPost(tokenEndPoint); + ; + List<NameValuePair> formParams = new ArrayList<>(); + formParams.add(new BasicNameValuePair("grant_type", "password")); + formParams.add(new BasicNameValuePair("client_id", client_id)); + formParams.add(new BasicNameValuePair("username", USERNAME)); + formParams.add(new BasicNameValuePair("password", password)); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, Consts.UTF_8); + httpPost.setEntity(entity); + try { + CloseableHttpResponse response = httpClient.execute(httpPost); + try { + String responseBody = EntityUtils.toString(response.getEntity()); + JSONObject tokenInfo = new JSONObject(responseBody); + return tokenInfo; + } finally { + response.close(); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/ide-integration/custos-profile-service-samples/pom.xml b/ide-integration/custos-profile-service-samples/pom.xml new file mode 100644 index 0000000..070cda2 --- /dev/null +++ b/ide-integration/custos-profile-service-samples/pom.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>ide-integration</artifactId> + <groupId>org.apache.custos</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>custos-profile-service-samples</artifactId> + + +</project> \ No newline at end of file diff --git a/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/TenantProfileSample.java b/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/TenantProfileSample.java new file mode 100644 index 0000000..0e87e9a --- /dev/null +++ b/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/TenantProfileSample.java @@ -0,0 +1,80 @@ +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.custos.profile.service.samples; + +import org.apache.custos.client.profile.service.CustosProfileServiceClientFactory; +import org.apache.custos.commons.model.security.AuthzToken; +import org.apache.custos.profile.model.workspace.Gateway; +import org.apache.custos.profile.model.workspace.GatewayApprovalStatus; +import org.apache.custos.profile.service.samples.utils.ProfileServiceClientUtil; +import org.apache.custos.profile.tenant.cpi.TenantProfileService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by goshenoy on 3/30/17. + */ +public class TenantProfileSample { + private static final Logger logger = LoggerFactory.getLogger(TenantProfileSample.class); + private static TenantProfileService.Client tenantProfileClient; + private static Gateway testGateway = null; + private static AuthzToken authzToken = new AuthzToken("empy_token"); + + public static void main(String[] args) throws Exception { + try { + String profileServiceServerHost = ProfileServiceClientUtil.getProfileServiceServerHost(); + int profileServiceServerPort = ProfileServiceClientUtil.getProfileServiceServerPort(); + + tenantProfileClient = CustosProfileServiceClientFactory.createCustosTenantProfileServiceClient(profileServiceServerHost, profileServiceServerPort); + + // test addGateway + testGateway = tenantProfileClient.addGateway(authzToken, getGateway("465")); + assert (testGateway != null) : "Gateway creation failed!"; + System.out.println("Gateway created with gatewayId: " + testGateway); + + + } catch (Exception ex) { + logger.error("TenantProfile client-sample Exception: " + ex, ex); + } + } + + private static Gateway getGateway(String gatewayId) { + // get random value for userId + int gatewayIdValue = ThreadLocalRandom.current().nextInt(1000); + + if (gatewayId != null) { + gatewayIdValue = Integer.parseInt(gatewayId.replaceAll("test-gateway-", "")); + } + + Gateway gateway = new Gateway(); + gateway.setGatewayId("test-gateway-" + gatewayIdValue); + gateway.setGatewayApprovalStatus(GatewayApprovalStatus.APPROVED); + gateway.setGatewayName("test-gateway-name"); + gateway.setDomain("test-gateway-domain"); + gateway.setEmailAddress("test-gateway-" + gatewayIdValue + "@domain.com"); + gateway.setGatewayURL("test-gateway-" + gatewayIdValue + ".domain.com"); + gateway.setGatewayAdminFirstName("test-gateway-admin-fname"); + gateway.setGatewayAdminLastName("test-gateway-admin-lname"); + gateway.setGatewayAdminEmail("[email protected]"); + return gateway; + } +} diff --git a/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/UserProfileSample.java b/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/UserProfileSample.java new file mode 100644 index 0000000..41255fc --- /dev/null +++ b/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/UserProfileSample.java @@ -0,0 +1,211 @@ +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.custos.profile.service.samples; + +import org.apache.custos.client.profile.service.CustosProfileServiceClientFactory; +import org.apache.custos.commons.exceptions.CustosSecurityException; +import org.apache.custos.commons.model.security.AuthzToken; +import org.apache.custos.commons.utils.Constants; +import org.apache.custos.profile.model.user.*; +import org.apache.custos.profile.service.samples.utils.ProfileServiceClientUtil; +import org.apache.custos.profile.user.cpi.UserProfileService; +import org.apache.custos.security.manager.KeyCloakSecurityManager; +import org.apache.http.Consts; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by goshenoy on 3/23/17. + */ +public class UserProfileSample { + + private static final Logger logger = LoggerFactory.getLogger(UserProfileSample.class); + private static UserProfileService.Client userProfileClient; + private static UserProfile testUser = null; + private static String testGatewayId = "default"; + private static String username = "default-admin"; + private static AuthzToken authzToken; + + + /** + * Performs the following operations in sequence: + * 1. create new user + * 2. find user created + * 3. update created user's name + * 4. find all users in gateway + * 5. find created user by name + * 6. delete created user + * 7. check if user exists + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + try { + String profileServiceServerHost = ProfileServiceClientUtil.getProfileServiceServerHost(); + int profileServiceServerPort = ProfileServiceClientUtil.getProfileServiceServerPort(); + authzToken = initializeAuthzToken(); + userProfileClient = CustosProfileServiceClientFactory.createCustosUserProfileServiceClient(profileServiceServerHost, profileServiceServerPort); + + // test add-user-profile + testUser = userProfileClient.addUserProfile(authzToken, getUserProfile(username)); + assert (testUser != null) : "User creation failed. Null userId returned!"; + System.out.println("User created with userId: " + testUser); + + // test find-user-profile + UserProfile userProfile = userProfileClient.getUserProfileById(authzToken, testUser.getUserId(), testGatewayId); + assert (userProfile != null) : "Could not find user with userId: " + testUser + ", and gatewayID: " + testGatewayId; + System.out.println("UserProfile: " + userProfile); + + // test update-user-profile : update name + userProfile = getUserProfile(testUser.getUserId()); + String newFName = userProfile.getFirstName().replaceAll("fname", "fname-updated"); + userProfile.setFirstName(newFName); + UserProfile updatedUserProfile = userProfileClient.updateUserProfile(authzToken, userProfile); + boolean updateSuccess = updatedUserProfile != null; + assert (updateSuccess) : "User update with new firstName: [" + newFName + "], Failed!"; + System.out.println("User update with new firstName: [" + newFName + "], Successful!"); + + // test get-all-userprofiles + List<UserProfile> userProfileList = userProfileClient.getAllUserProfilesInGateway(authzToken, testGatewayId, 0, 5); + assert (userProfileList != null && !userProfileList.isEmpty()) : "Failed to retrieve users for gateway!"; + System.out.println("Printing userList retrieved.."); + for (UserProfile userProfile1 : userProfileList) { + System.out.println("\t [UserProfile] userId: " + userProfile1.getUserId()); + } + + // test delete-user-profile + boolean deleteSuccess = userProfileClient.deleteUserProfile(authzToken, testUser.getUserId(), testGatewayId) != null; + assert (deleteSuccess) : "Delete user failed for userId: " + testUser.getUserId(); + System.out.println("Successfully deleted user with userId: " + testUser.getUserId()); + + // test-check-user-exist + boolean userExists = userProfileClient.doesUserExist(authzToken, testUser.getUserId(), testGatewayId); + assert (!userExists) : "User should not exist, but it does."; + System.out.println("User was deleted, hence does not exist!"); + System.out.println("*** DONE ***"); + } catch (Exception ex) { + ex.printStackTrace(); + logger.error("UserProfile client-sample Exception: " + ex, ex); + } + } + + private static UserProfile getUserProfile(String userId) { + // get random value for userId + int userIdValue = ThreadLocalRandom.current().nextInt(1000); + + // construct userProfile object + UserProfile userProfile = new UserProfile(); + userProfile.setUserModelVersion("model-" + userIdValue); + userProfile.setCustosInternalUserId("test-user-internal-" + userIdValue); + userProfile.setUserId(userId); + userProfile.setFirstName("test-user-fname"); + userProfile.setLastName("test-user-lname"); + userProfile.setGatewayId(testGatewayId); + userProfile.addToEmails("test-user-" + userIdValue + "@domain1.com"); + userProfile.addToEmails("test-user-" + userIdValue + "@domain2.com"); + userProfile.setCreationTime(System.currentTimeMillis()); + userProfile.setLastAccessTime(System.currentTimeMillis()); + userProfile.setValidUntil(System.currentTimeMillis()); + userProfile.setState(Status.ACTIVE); + userProfile.setNsfDemographics(getNSFDemographics(userIdValue)); + return userProfile; + } + + private static NSFDemographics getNSFDemographics(int userIdValue) { + // construct nsfdemographics object + NSFDemographics nsfDemographics = new NSFDemographics(); + nsfDemographics.setCustosInternalUserId("test-user-internal-" + userIdValue); + nsfDemographics.setGender("male"); + nsfDemographics.setUsCitizenship(USCitizenship.US_CITIZEN); + nsfDemographics.addToEthnicities(ethnicity.NOT_HISPANIC_LATINO); + nsfDemographics.addToRaces(race.AMERICAN_INDIAN_OR_ALASKAN_NATIVE); + return nsfDemographics; + } + + private static AuthzToken initializeAuthzToken() throws Exception{ + authzToken = new AuthzToken(); + { + HashMap<String, String> map_ = new HashMap<>(); + map_.put(Constants.GATEWAY_ID, testGatewayId); + map_.put(Constants.USER_NAME, username); + JSONObject json = getAccessToken(); + if(json.has("access_token")) { + authzToken.setAccessToken(json.get("access_token").toString()); + } + else{ + throw new Exception("Cannot find access token for the user. Check if the user exists in the IDP"); + } + authzToken.setClaimsMap(map_); + return authzToken; + } + } + private static JSONObject getAccessToken() throws CustosSecurityException { + new KeyCloakSecurityManager().initializeSecurityInfra(); + String password = "123456"; + String tokenEndPoint = "https://airavata.host:8443/auth/realms/default/protocol/openid-connect/token"; + String grant_type = "password"; + String client_id = "admin-cli"; + + CloseableHttpClient httpClient = HttpClients.createSystem(); + HttpPost httpPost = new HttpPost(tokenEndPoint); + ; + List<NameValuePair> formParams = new ArrayList<>(); + formParams.add(new BasicNameValuePair("grant_type", "password")); + formParams.add(new BasicNameValuePair("client_id", client_id)); + formParams.add(new BasicNameValuePair("username", username)); + formParams.add(new BasicNameValuePair("password", password)); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, Consts.UTF_8); + httpPost.setEntity(entity); + try { + CloseableHttpResponse response = httpClient.execute(httpPost); + try { + String responseBody = EntityUtils.toString(response.getEntity()); + JSONObject tokenInfo = new JSONObject(responseBody); + return tokenInfo; + } finally { + response.close(); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/utils/ProfileServiceClientUtil.java b/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/utils/ProfileServiceClientUtil.java new file mode 100644 index 0000000..2ec4c92 --- /dev/null +++ b/ide-integration/custos-profile-service-samples/src/main/java/org/apache/custos/profile/service/samples/utils/ProfileServiceClientUtil.java @@ -0,0 +1,63 @@ +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.custos.profile.service.samples.utils; + +import java.net.URL; +import java.util.Properties; + +public class ProfileServiceClientUtil { + + private static final String PROFILE_SERVICE_SERVER_HOST = "profile.service.server.host"; + private static final String PROFILE_SERVICE_SERVER_PORT = "profile.service.server.port"; + private static final String PROFILE_CLIENT_SAMPLE_PROPERTIES = "profile-client-sample.properties"; + + private static Properties properties; + private static Exception propertyLoadException; + + static { + loadProperties(); + } + + private static void loadProperties() { + URL url = ProfileServiceClientUtil.class.getClassLoader().getResource(PROFILE_CLIENT_SAMPLE_PROPERTIES); + try { + properties = new Properties(); + properties.load(url.openStream()); + } catch (Exception ex) { + propertyLoadException = ex; + } + } + + public static String getProfileServiceServerHost() throws Exception { + validateSuccessfullPropertyLoad(); + return properties.getProperty(PROFILE_SERVICE_SERVER_HOST); + } + + public static int getProfileServiceServerPort() throws Exception { + validateSuccessfullPropertyLoad(); + return Integer.parseInt(properties.getProperty(PROFILE_SERVICE_SERVER_PORT)); + } + + private static void validateSuccessfullPropertyLoad() throws Exception { + if (propertyLoadException != null) { + throw new Exception(propertyLoadException.getMessage(), propertyLoadException); + } + } +} diff --git a/ide-integration/custos-profile-service-samples/src/main/resources/profile-client-sample.properties b/ide-integration/custos-profile-service-samples/src/main/resources/profile-client-sample.properties new file mode 100644 index 0000000..404d404 --- /dev/null +++ b/ide-integration/custos-profile-service-samples/src/main/resources/profile-client-sample.properties @@ -0,0 +1,29 @@ +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +################################################################################## +# +# This properties file provides configuration for profile-service sample client +# +################################################################################## + +profile.service.server.host=localhost +profile.service.server.port=8081 + diff --git a/ide-integration/custos-services/pom.xml b/ide-integration/custos-services/pom.xml new file mode 100644 index 0000000..db15484 --- /dev/null +++ b/ide-integration/custos-services/pom.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>ide-integration</artifactId> + <groupId>org.apache.custos</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>custos-services-start</artifactId> + + +</project> \ No newline at end of file diff --git a/ide-integration/src/main/java/CustosAPIServerStarted.java b/ide-integration/custos-services/src/main/java/org/apache/custos/server/start/CustosAPIServerStarted.java similarity index 92% rename from ide-integration/src/main/java/CustosAPIServerStarted.java rename to ide-integration/custos-services/src/main/java/org/apache/custos/server/start/CustosAPIServerStarted.java index 909374e..81dd02b 100644 --- a/ide-integration/src/main/java/CustosAPIServerStarted.java +++ b/ide-integration/custos-services/src/main/java/org/apache/custos/server/start/CustosAPIServerStarted.java @@ -1,3 +1,5 @@ +package org.apache.custos.server.start; + import org.apache.custos.authentication.server.CustosAuthenticationServer; import org.apache.custos.profile.server.ProfileServiceServer; @@ -8,7 +10,5 @@ public class CustosAPIServerStarted { custosAuthenticationServer.start(); custosProfileServer.start(); - - } } diff --git a/ide-integration/src/main/resources/custos-server.properties b/ide-integration/custos-services/src/main/resources/custos-server.properties similarity index 98% rename from ide-integration/src/main/resources/custos-server.properties rename to ide-integration/custos-services/src/main/resources/custos-server.properties index d9d59c3..2e07020 100644 --- a/ide-integration/src/main/resources/custos-server.properties +++ b/ide-integration/custos-services/src/main/resources/custos-server.properties @@ -54,7 +54,7 @@ in.memory.cache.size=1000 # Profile Service Configuration ########################################################################### profile.service.server.host=0.0.0.0 -profile.service.server.port=9092 +profile.service.server.port=8081 profile_service=org.apache.custos.profile.server.ProfileServiceServer # MariaDB properties diff --git a/ide-integration/src/main/resources/database_scripts/init/01-databases.sql b/ide-integration/custos-services/src/main/resources/database_scripts/init/01-databases.sql similarity index 88% rename from ide-integration/src/main/resources/database_scripts/init/01-databases.sql rename to ide-integration/custos-services/src/main/resources/database_scripts/init/01-databases.sql index dabf29c..710065d 100644 --- a/ide-integration/src/main/resources/database_scripts/init/01-databases.sql +++ b/ide-integration/custos-services/src/main/resources/database_scripts/init/01-databases.sql @@ -80,27 +80,27 @@ DROP TABLE IF EXISTS `GATEWAY`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `GATEWAY` ( - `CUSTOS_INTERNAL_GATEWAY_ID` varchar(255) NOT NULL, - `DECLINED_REASON` varchar(255) DEFAULT NULL, - `GATEWAY_DOMAIN` varchar(255) DEFAULT NULL, - `EMAIL_ADDRESS` varchar(255) DEFAULT NULL, - `GATEWAY_ACRONYM` varchar(255) DEFAULT NULL, - `GATEWAY_ADMIN_EMAIL` varchar(255) DEFAULT NULL, - `GATEWAY_ADMIN_FIRST_NAME` varchar(255) DEFAULT NULL, - `GATEWAY_ADMIN_LAST_NAME` varchar(255) DEFAULT NULL, - `GATEWAY_APPROVAL_STATUS` varchar(255) DEFAULT NULL, - `GATEWAY_ID` varchar(255) DEFAULT NULL, - `GATEWAY_NAME` varchar(255) DEFAULT NULL, - `GATEWAY_PUBLIC_ABSTRACT` varchar(255) DEFAULT NULL, - `GATEWAY_URL` varchar(255) DEFAULT NULL, - `IDENTITY_SERVER_PASSWORD_TOKEN` varchar(255) DEFAULT NULL, - `IDENTITY_SERVER_USERNAME` varchar(255) DEFAULT NULL, - `OAUTH_CLIENT_ID` varchar(255) DEFAULT NULL, - `OAUTH_CLIENT_SECRET` varchar(255) DEFAULT NULL, - `REQUEST_CREATION_TIME` bigint(20) DEFAULT NULL, - `REQUESTER_USERNAME` varchar(255) DEFAULT NULL, - `GATEWAY_REVIEW_PROPOSAL_DESCRIPTION` varchar(255) DEFAULT NULL, - PRIMARY KEY (`CUSTOS_INTERNAL_GATEWAY_ID`) + `CUSTOS_INTERNAL_GATEWAY_ID` varchar(255) NOT NULL, + `DECLINED_REASON` varchar(255) DEFAULT NULL, + `GATEWAY_DOMAIN` varchar(255) DEFAULT NULL, + `EMAIL_ADDRESS` varchar(255) DEFAULT NULL, + `GATEWAY_ACRONYM` varchar(255) DEFAULT NULL, + `GATEWAY_ADMIN_EMAIL` varchar(255) DEFAULT NULL, + `GATEWAY_ADMIN_FIRST_NAME` varchar(255) DEFAULT NULL, + `GATEWAY_ADMIN_LAST_NAME` varchar(255) DEFAULT NULL, + `GATEWAY_APPROVAL_STATUS` varchar(255) DEFAULT NULL, + `GATEWAY_ID` varchar(255) DEFAULT NULL, + `GATEWAY_NAME` varchar(255) DEFAULT NULL, + `GATEWAY_PUBLIC_ABSTRACT` varchar(255) DEFAULT NULL, + `GATEWAY_URL` varchar(255) DEFAULT NULL, + `IDENTITY_SERVER_PASSWORD_TOKEN` varchar(255) DEFAULT NULL, + `IDENTITY_SERVER_USERNAME` varchar(255) DEFAULT NULL, + `OAUTH_CLIENT_ID` varchar(255) DEFAULT NULL, + `OAUTH_CLIENT_SECRET` varchar(255) DEFAULT NULL, + `REQUEST_CREATION_TIME` bigint(20) DEFAULT NULL, + `REQUESTER_USERNAME` varchar(255) DEFAULT NULL, + `GATEWAY_REVIEW_PROPOSAL_DESCRIPTION` varchar(255) DEFAULT NULL, + PRIMARY KEY (`CUSTOS_INTERNAL_GATEWAY_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -110,6 +110,7 @@ CREATE TABLE `GATEWAY` ( LOCK TABLES `GATEWAY` WRITE; /*!40000 ALTER TABLE `GATEWAY` DISABLE KEYS */; +INSERT INTO `GATEWAY` VALUES ('default',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'APPROVED','default','default',NULL,NULL,NULL,NULL,'pga','9790c8c4-7d9b-4ccc-a820-ca5aac38d2ad','2019-02-25 18:40:06',NULL, NULL); /*!40000 ALTER TABLE `GATEWAY` ENABLE KEYS */; UNLOCK TABLES; diff --git a/ide-integration/src/main/resources/database_scripts/user-profile-catalog-derby.sql b/ide-integration/custos-services/src/main/resources/database_scripts/user-profile-catalog-derby.sql similarity index 81% rename from ide-integration/src/main/resources/database_scripts/user-profile-catalog-derby.sql rename to ide-integration/custos-services/src/main/resources/database_scripts/user-profile-catalog-derby.sql index 7600772..08566a2 100644 --- a/ide-integration/src/main/resources/database_scripts/user-profile-catalog-derby.sql +++ b/ide-integration/custos-services/src/main/resources/database_scripts/user-profile-catalog-derby.sql @@ -123,36 +123,6 @@ CREATE TABLE NSF_DEMOGRAPHIC_DISABILITY ( FOREIGN KEY (CUSTOS_INTERNAL_USER_ID) REFERENCES NSF_DEMOGRAPHIC(CUSTOS_INTERNAL_USER_ID) ON DELETE CASCADE ); -CREATE TABLE CUSTOMIZED_DASHBOARD ( - CUSTOS_INTERNAL_USER_ID VARCHAR (255) NOT NULL, - ENABLED_EXPERIMENT_ID VARCHAR (255), - ENABLED_NAME VARCHAR (255), - ENABLED_DESCRIPTION VARCHAR (255), - ENABLED_PROJECT VARCHAR (255), - ENABLED_OWNER VARCHAR (255), - ENABLED_APPLICATION VARCHAR (255), - ENABLED_COMPUTE_RESOURCE VARCHAR (255), - ENABLED_JOB_NAME VARCHAR (255), - ENABLED_JOB_ID VARCHAR (255), - ENABLED_JOB_STATUS VARCHAR (255), - ENABLED_JOB_CREATION_TIME VARCHAR (255), - ENABLED_NOTIFICATIONS_TO VARCHAR (255), - ENABLED_WORKING_DIR VARCHAR (255), - ENABLED_JOB_DESCRIPTION VARCHAR (255), - ENABLED_CREATION_TIME VARCHAR (255), - ENABLED_LAST_MODIFIED_TIME VARCHAR (255), - ENABLED_WALL_TIME VARCHAR (255), - ENABLED_CPU_COUNT VARCHAR (255), - ENABLED_NODE_COUNT VARCHAR (255), - ENABLED_QUEUE VARCHAR (255), - ENABLED_INPUTS VARCHAR (255), - ENABLED_OUTPUTS VARCHAR (255), - ENABLED_STORAGE_DIR VARCHAR (255), - ENABLED_ERRORS VARCHAR (255), - PRIMARY KEY (CUSTOS_INTERNAL_USER_ID), - FOREIGN KEY (CUSTOS_INTERNAL_USER_ID) REFERENCES USER_PROFILE(CUSTOS_INTERNAL_USER_ID) ON DELETE CASCADE -); - CREATE TABLE CONFIGURATION ( CONFIG_KEY VARCHAR(255) NOT NULL, diff --git a/ide-integration/src/main/resources/database_scripts/user-profile-catalog-mysql.sql b/ide-integration/custos-services/src/main/resources/database_scripts/user-profile-catalog-mysql.sql similarity index 82% rename from ide-integration/src/main/resources/database_scripts/user-profile-catalog-mysql.sql rename to ide-integration/custos-services/src/main/resources/database_scripts/user-profile-catalog-mysql.sql index 6da1c93..4be0b66 100644 --- a/ide-integration/src/main/resources/database_scripts/user-profile-catalog-mysql.sql +++ b/ide-integration/custos-services/src/main/resources/database_scripts/user-profile-catalog-mysql.sql @@ -123,36 +123,6 @@ CREATE TABLE IF NOT EXISTS NSF_DEMOGRAPHIC_DISABILITY ( FOREIGN KEY (CUSTOS_INTERNAL_USER_ID) REFERENCES NSF_DEMOGRAPHIC(CUSTOS_INTERNAL_USER_ID) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -CREATE TABLE IF NOT EXISTS CUSTOMIZED_DASHBOARD ( - CUSTOS_INTERNAL_USER_ID VARCHAR (255) NOT NULL, - ENABLED_EXPERIMENT_ID VARCHAR (255), - ENABLED_NAME VARCHAR (255), - ENABLED_DESCRIPTION VARCHAR (255), - ENABLED_PROJECT VARCHAR (255), - ENABLED_OWNER VARCHAR (255), - ENABLED_APPLICATION VARCHAR (255), - ENABLED_COMPUTE_RESOURCE VARCHAR (255), - ENABLED_JOB_NAME VARCHAR (255), - ENABLED_JOB_ID VARCHAR (255), - ENABLED_JOB_STATUS VARCHAR (255), - ENABLED_JOB_CREATION_TIME VARCHAR (255), - ENABLED_NOTIFICATIONS_TO VARCHAR (255), - ENABLED_WORKING_DIR VARCHAR (255), - ENABLED_JOB_DESCRIPTION VARCHAR (255), - ENABLED_CREATION_TIME VARCHAR (255), - ENABLED_LAST_MODIFIED_TIME VARCHAR (255), - ENABLED_WALL_TIME VARCHAR (255), - ENABLED_CPU_COUNT VARCHAR (255), - ENABLED_NODE_COUNT VARCHAR (255), - ENABLED_QUEUE VARCHAR (255), - ENABLED_INPUTS VARCHAR (255), - ENABLED_OUTPUTS VARCHAR (255), - ENABLED_STORAGE_DIR VARCHAR (255), - ENABLED_ERRORS VARCHAR (255), - PRIMARY KEY (CUSTOS_INTERNAL_USER_ID), - FOREIGN KEY (CUSTOS_INTERNAL_USER_ID) REFERENCES USER_PROFILE(CUSTOS_INTERNAL_USER_ID) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - CREATE TABLE CONFIGURATION ( CONFIG_KEY VARCHAR(255) NOT NULL, diff --git a/ide-integration/src/main/resources/docker-compose.yml b/ide-integration/custos-services/src/main/resources/docker-compose.yml similarity index 100% rename from ide-integration/src/main/resources/docker-compose.yml rename to ide-integration/custos-services/src/main/resources/docker-compose.yml diff --git a/ide-integration/src/main/resources/keycloak/Default-export.json b/ide-integration/custos-services/src/main/resources/keycloak/Default-export.json similarity index 100% rename from ide-integration/src/main/resources/keycloak/Default-export.json rename to ide-integration/custos-services/src/main/resources/keycloak/Default-export.json diff --git a/ide-integration/src/main/resources/keycloak/Default-export.json.bk b/ide-integration/custos-services/src/main/resources/keycloak/Default-export.json.bk similarity index 100% rename from ide-integration/src/main/resources/keycloak/Default-export.json.bk rename to ide-integration/custos-services/src/main/resources/keycloak/Default-export.json.bk diff --git a/ide-integration/src/main/resources/keycloak/standalone.xml b/ide-integration/custos-services/src/main/resources/keycloak/standalone.xml similarity index 100% rename from ide-integration/src/main/resources/keycloak/standalone.xml rename to ide-integration/custos-services/src/main/resources/keycloak/standalone.xml diff --git a/ide-integration/src/main/resources/keystores/airavata.jks b/ide-integration/custos-services/src/main/resources/keystores/airavata.jks similarity index 100% rename from ide-integration/src/main/resources/keystores/airavata.jks rename to ide-integration/custos-services/src/main/resources/keystores/airavata.jks diff --git a/ide-integration/src/main/resources/keystores/airavata_sym.jks b/ide-integration/custos-services/src/main/resources/keystores/airavata_sym.jks similarity index 100% rename from ide-integration/src/main/resources/keystores/airavata_sym.jks rename to ide-integration/custos-services/src/main/resources/keystores/airavata_sym.jks diff --git a/ide-integration/src/main/resources/keystores/client_truststore.jks b/ide-integration/custos-services/src/main/resources/keystores/client_truststore.jks similarity index 100% rename from ide-integration/src/main/resources/keystores/client_truststore.jks rename to ide-integration/custos-services/src/main/resources/keystores/client_truststore.jks diff --git a/ide-integration/pom.xml b/ide-integration/pom.xml index ee1a01d..a91f3dc 100644 --- a/ide-integration/pom.xml +++ b/ide-integration/pom.xml @@ -10,6 +10,12 @@ <modelVersion>4.0.0</modelVersion> <artifactId>ide-integration</artifactId> + <packaging>pom</packaging> + <modules> + <module>custos-profile-service-samples</module> + <module>custos-authentication-service-samples</module> + <module>custos-services</module> + </modules> <dependencies> <dependency> <groupId>org.slf4j</groupId> @@ -31,6 +37,18 @@ <artifactId>custos-authentication</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.custos</groupId> + <artifactId>custos-client</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>org.apache.custos</groupId> + <artifactId>custos-client</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> </dependencies>
