From 1647e73e8d47913c9eaf1df00b343dcacde84ee1 Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Wed, 22 Mar 2017 08:49:16 +0000 Subject: [PATCH] Added creation of new admin user git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@146256 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../context/SecurityContextMapper.java | 8 ++-- .../dbinitialization/DatabaseEnvironment.java | 47 ++++++++++++++----- .../DatabaseIntializator.java | 18 +++++-- .../context/ContextManagementImplTest.java | 2 +- src/test/resources/logback-test.xml | 2 +- 5 files changed, 56 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/context/SecurityContextMapper.java b/src/main/java/org/gcube/informationsystem/resourceregistry/context/SecurityContextMapper.java index 6ef2f74..2c221b5 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/context/SecurityContextMapper.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/context/SecurityContextMapper.java @@ -25,9 +25,11 @@ public abstract class SecurityContextMapper { private static Logger logger = LoggerFactory .getLogger(SecurityContextMapper.class); + // Used to persist Schemas public static final String ADMIN_SECURITY_CONTEXT = "00000000-0000-0000-0000-000000000000"; public static final UUID ADMIN_SECURITY_CONTEXT_UUID = UUID.fromString(ADMIN_SECURITY_CONTEXT); + // Used to Persist Context and thei relations public static final String MANAGEMENT_SECURITY_CONTEXT = "ffffffff-ffff-ffff-ffff-ffffffffffff"; public static final UUID MANAGEMENT_SECURITY_CONTEXT_UUID = UUID.fromString(MANAGEMENT_SECURITY_CONTEXT); @@ -39,13 +41,13 @@ public abstract class SecurityContextMapper { logger.trace("Creating factory for {} connecting as {}", DatabaseEnvironment.DB_URI, - DatabaseEnvironment.DEFAULT_ADMIN_USERNAME); + DatabaseEnvironment.CHANGED_ADMIN_USERNAME); securityContextFactories = new HashMap<>(); OrientGraphFactory factory = new OrientGraphFactory( DatabaseEnvironment.DB_URI, - DatabaseEnvironment.DEFAULT_ADMIN_USERNAME, + DatabaseEnvironment.CHANGED_ADMIN_USERNAME, DatabaseEnvironment.CHANGED_ADMIN_PASSWORD) .setupPool(1, 10); @@ -55,7 +57,7 @@ public abstract class SecurityContextMapper { for (PermissionMode p : PermissionMode.values()) { OrientGraphFactory f = new OrientGraphFactory( DatabaseEnvironment.DB_URI, - DatabaseEnvironment.DEFAULT_ADMIN_USERNAME, + DatabaseEnvironment.CHANGED_ADMIN_USERNAME, DatabaseEnvironment.CHANGED_ADMIN_PASSWORD) .setupPool(1, 10); diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java index d12a7ef..ed5f37b 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java @@ -38,11 +38,22 @@ public class DatabaseEnvironment { public static final String DB; protected static final String DB_VARNAME = "DB"; - protected static final String USERNAME; - protected static final String USERNAME_VARNAME = "USERNAME"; + protected static final String ROOT_USERNAME; + protected static final String ROOT_USERNAME_VARNAME = "ROOT_USERNAME"; - protected static final String PASSWORD; - protected static final String PASSWORD_VARNAME = "PASSWORD"; + protected static final String ROOT_PASSWORD; + protected static final String ROOT_PASSWORD_VARNAME = "ROOT_PASSWORD"; + + protected static final String DEFAULT_ADMIN_USERNAME; + protected static final String DEFAULT_ADMIN_USERNAME_VARNAME = "DEFAULT_ADMIN_USERNAME"; + + protected static final String DEFAULT_ADMIN_ROLE = "admin"; + + public static final String CHANGED_ADMIN_USERNAME; + protected static final String CHANGED_ADMIN_USERNAME_VARNAME = "CHANGED_ADMIN_USERNAME"; + + protected static final String DEFAULT_ADMIN_PASSWORD; + protected static final String DEFAULT_ADMIN_PASSWORD_VARNAME = "DEFAULT_ADMIN_PASSWORD"; public static final String CHANGED_ADMIN_PASSWORD; protected static final String CHANGED_ADMIN_PASSWORD_VARNAME = "CHANGED_ADMIN_PASSWORD"; @@ -53,12 +64,6 @@ public class DatabaseEnvironment { protected static final String DEFAULT_CREATED_READER_USER_PASSWORD; protected static final String DEFAULT_CREATED_READER_USER_PASSWORD_VARNAME = "DEFAULT_CREATED_READER_USER_PASSWORD"; - public static final String DEFAULT_ADMIN_USERNAME; - protected static final String DEFAULT_ADMIN_USERNAME_VARNAME = "DEFAULT_ADMIN_USERNAME"; - - protected static final String DEFAULT_ADMIN_PASSWORD; - protected static final String DEFAULT_ADMIN_PASSWORD_VARNAME = "DEFAULT_ADMIN_PASSWORD"; - public static final Map DEFAULT_PASSWORDS; @@ -93,11 +98,29 @@ public class DatabaseEnvironment { SERVER_URI = REMOTE_PROTOCOL + HOSTS; DB_URI = SERVER_URI + "/" + DB; - USERNAME = properties.getProperty(USERNAME_VARNAME); - PASSWORD = properties.getProperty(PASSWORD_VARNAME); + ROOT_USERNAME = properties.getProperty(ROOT_USERNAME_VARNAME); + ROOT_PASSWORD = properties.getProperty(ROOT_PASSWORD_VARNAME); + + + String changedAdminUsername = null; + try { + changedAdminUsername = properties.getProperty(CHANGED_ADMIN_USERNAME_VARNAME); + if(changedAdminUsername==null){ + // To be compliant with old configuration.properties which does not have + // CHANGED_ADMIN_USERNAME property we use the db name as admin username + changedAdminUsername = DB; + } + }catch (Exception e) { + // To be compliant with old configuration.properties which does not have + // CHANGED_ADMIN_USERNAME property we use the db name as admin username + changedAdminUsername = DB; + } + CHANGED_ADMIN_USERNAME = changedAdminUsername; + CHANGED_ADMIN_PASSWORD = properties.getProperty(CHANGED_ADMIN_PASSWORD_VARNAME); + DEFAULT_CREATED_WRITER_USER_PASSWORD = properties.getProperty(DEFAULT_CREATED_WRITER_USER_PASSWORD_VARNAME); DEFAULT_CREATED_READER_USER_PASSWORD = properties.getProperty(DEFAULT_CREATED_READER_USER_PASSWORD_VARNAME); diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseIntializator.java b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseIntializator.java index fa34a41..95a7b1b 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseIntializator.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseIntializator.java @@ -16,6 +16,7 @@ import com.orientechnologies.orient.client.remote.OServerAdmin; import com.orientechnologies.orient.core.metadata.OMetadata; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OSchema; +import com.orientechnologies.orient.core.metadata.security.ORole; import com.orientechnologies.orient.core.metadata.security.OSecurity; import com.orientechnologies.orient.core.metadata.security.OUser; import com.tinkerpop.blueprints.impls.orient.OrientEdgeType; @@ -45,10 +46,10 @@ public class DatabaseIntializator { OLogManager.instance().setDebugEnabled(false); logger.trace("Connecting to {} as {} to create new DB", - DatabaseEnvironment.SERVER_URI, DatabaseEnvironment.USERNAME); + DatabaseEnvironment.SERVER_URI, DatabaseEnvironment.ROOT_USERNAME); OServerAdmin serverAdmin = new OServerAdmin(DatabaseEnvironment.SERVER_URI) - .connect(DatabaseEnvironment.USERNAME, - DatabaseEnvironment.PASSWORD); + .connect(DatabaseEnvironment.ROOT_USERNAME, + DatabaseEnvironment.ROOT_PASSWORD); if (!serverAdmin.existsDatabase(DatabaseEnvironment.DB, STORAGE_MODE)) { @@ -74,10 +75,19 @@ public class DatabaseIntializator { logger.trace("Changing {} password", DatabaseEnvironment.DEFAULT_ADMIN_USERNAME); + OUser admin = oSecurity .getUser(DatabaseEnvironment.DEFAULT_ADMIN_USERNAME); admin.setPassword(DatabaseEnvironment.CHANGED_ADMIN_PASSWORD); admin.save(); + + + logger.trace("Creating new admin named '{}'", + DatabaseEnvironment.CHANGED_ADMIN_USERNAME); + ORole adminRole = oSecurity.getRole(DatabaseEnvironment.DEFAULT_ADMIN_ROLE); + OUser newAdminUser = oSecurity.createUser(DatabaseEnvironment.CHANGED_ADMIN_USERNAME, + DatabaseEnvironment.CHANGED_ADMIN_PASSWORD, adminRole); + newAdminUser.save(); for (PermissionMode permissionMode : DatabaseEnvironment.DEFAULT_PASSWORDS .keySet()) { @@ -103,7 +113,7 @@ public class DatabaseIntializator { orientGraphNoTx.shutdown(); factory.close(); - + return true; } diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java index 13f7846..3eaed04 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java @@ -194,7 +194,7 @@ public class ContextManagementImplTest { logger.debug("The DB should be now clean"); } - // @Test + @Test public void createDevContext() throws Exception { String gcubeJson = contextManagementImpl.create(null, "gcube"); Context gcubeContext = ISMapper.unmarshal(Context.class, gcubeJson); diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index b30f7fb..7ac795d 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -10,7 +10,7 @@ - +