/* * Copyright 2015-2016 OpenCB * * Licensed 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.opencb.opencga.app.cli.admin; import org.opencb.commons.datastore.core.ObjectMap; import org.opencb.commons.datastore.core.QueryOptions; import org.opencb.commons.datastore.core.QueryResult; import org.opencb.opencga.catalog.db.api.UserDBAdaptor; import org.opencb.opencga.catalog.exceptions.CatalogException; import org.opencb.opencga.catalog.managers.CatalogManager; import org.opencb.opencga.catalog.models.User; import javax.naming.NamingException; import java.io.IOException; import java.util.Collections; import java.util.List; /** * Created by imedina on 02/03/15. */ public class UsersCommandExecutor extends AdminCommandExecutor { private AdminCliOptionsParser.UsersCommandOptions usersCommandOptions; public UsersCommandExecutor(AdminCliOptionsParser.UsersCommandOptions usersCommandOptions) { super(usersCommandOptions.commonOptions); this.usersCommandOptions = usersCommandOptions; } @Override public void execute() throws Exception { logger.debug("Executing variant command line"); String subCommandString = usersCommandOptions.getParsedSubCommand(); switch (subCommandString) { case "create": create(); break; case "import": importUsers(); break; case "delete": delete(); break; case "quota": setQuota(); break; default: logger.error("Subcommand not valid"); break; } } private void importUsers() throws CatalogException, NamingException { AdminCliOptionsParser.ImportUserCommandOptions executor = usersCommandOptions.importUserCommandOptions; if (executor.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(executor.databaseUser); } if (executor.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(executor.databasePassword); } if (executor.prefix != null) { configuration.setDatabasePrefix(executor.prefix); } if (executor.databaseHost != null) { configuration.getCatalog().getDatabase().setHosts(Collections.singletonList(executor.databaseHost)); } if (executor.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(executor.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert the OpenCGA admin password."); } if (executor.groups != null) { throw new CatalogException("Groups option is pending. Use users instead."); } if (executor.users == null) { throw new CatalogException("At least, users or groups should be provided to start importing."); } try (CatalogManager catalogManager = new CatalogManager(configuration)) { ObjectMap params = new ObjectMap(); params.putIfNotNull("users", executor.users); params.putIfNotNull("groups", executor.groups); params.putIfNotNull("expirationDate", executor.expDate); params.putIfNotNull("studies", executor.studies); List<QueryResult<User>> resultList = catalogManager.getUserManager().importFromExternalAuthOrigin(executor.authOrigin, executor.type, params, configuration.getAdmin().getPassword()); System.out.println("\n" + resultList.size() + " users have been imported"); // Print the user names if less than 10 users have been imported. if (resultList.size() <= 10) { for (QueryResult<User> userQueryResult : resultList) { if (userQueryResult.getNumResults() == 0) { System.out.println(userQueryResult.getErrorMsg()); } else { System.out.println(userQueryResult.first().getName() + " user account created."); } } } } } private void create() throws CatalogException, IOException { if (usersCommandOptions.createUserCommandOptions.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(usersCommandOptions.createUserCommandOptions.databaseUser); } if (usersCommandOptions.createUserCommandOptions.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(usersCommandOptions.createUserCommandOptions.databasePassword); } if (usersCommandOptions.createUserCommandOptions.prefix != null) { configuration.setDatabasePrefix(usersCommandOptions.createUserCommandOptions.prefix); } if (usersCommandOptions.createUserCommandOptions.databaseHost != null) { configuration.getCatalog().getDatabase() .setHosts(Collections.singletonList(usersCommandOptions.createUserCommandOptions.databaseHost)); } if (usersCommandOptions.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(usersCommandOptions.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert the OpenCGA admin password."); } long userQuota; if (usersCommandOptions.createUserCommandOptions.userQuota != null) { userQuota = usersCommandOptions.createUserCommandOptions.userQuota; } else { userQuota = configuration.getUserDefaultQuota(); } try (CatalogManager catalogManager = new CatalogManager(configuration)) { catalogManager.getUserManager().validatePassword("admin", configuration.getAdmin().getPassword(), true); User user = catalogManager.getUserManager().create(usersCommandOptions.createUserCommandOptions.userId, usersCommandOptions.createUserCommandOptions.userName, usersCommandOptions.createUserCommandOptions.userEmail, usersCommandOptions.createUserCommandOptions.userPassword, usersCommandOptions.createUserCommandOptions.userOrganization, userQuota, usersCommandOptions.createUserCommandOptions.type, null).first(); System.out.println("The user has been successfully created: " + user.toString() + "\n"); } } private void delete() throws CatalogException, IOException { if (usersCommandOptions.deleteUserCommandOptions.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(usersCommandOptions.deleteUserCommandOptions.databaseUser); } if (usersCommandOptions.deleteUserCommandOptions.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(usersCommandOptions.deleteUserCommandOptions.databasePassword); } if (usersCommandOptions.deleteUserCommandOptions.prefix != null) { configuration.setDatabasePrefix(usersCommandOptions.deleteUserCommandOptions.prefix); } if (usersCommandOptions.deleteUserCommandOptions.databaseHost != null) { configuration.getCatalog().getDatabase() .setHosts(Collections.singletonList(usersCommandOptions.deleteUserCommandOptions.databaseHost)); } if (usersCommandOptions.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(usersCommandOptions.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert your password."); } try (CatalogManager catalogManager = new CatalogManager(configuration)) { catalogManager.getUserManager().validatePassword("admin", configuration.getAdmin().getPassword(), true); List<QueryResult<User>> deletedUsers = catalogManager.getUserManager() .delete(usersCommandOptions.deleteUserCommandOptions.userId, new QueryOptions("force", true), null); for (QueryResult<User> deletedUser : deletedUsers) { User user = deletedUser.first(); if (user != null) { System.out.println("The user has been successfully deleted from the database: " + user.toString()); } else { System.out.println(deletedUser.getErrorMsg()); } } } } private void setQuota() throws CatalogException { if (usersCommandOptions.QuotaUserCommandOptions.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(usersCommandOptions.QuotaUserCommandOptions.databaseUser); } if (usersCommandOptions.QuotaUserCommandOptions.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(usersCommandOptions.QuotaUserCommandOptions.databasePassword); } if (usersCommandOptions.QuotaUserCommandOptions.prefix != null) { configuration.setDatabasePrefix(usersCommandOptions.QuotaUserCommandOptions.prefix); } if (usersCommandOptions.QuotaUserCommandOptions.databaseHost != null) { configuration.getCatalog().getDatabase() .setHosts(Collections.singletonList(usersCommandOptions.QuotaUserCommandOptions.databaseHost)); } if (usersCommandOptions.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(usersCommandOptions.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert your password."); } try (CatalogManager catalogManager = new CatalogManager(configuration)) { catalogManager.getUserManager().validatePassword("admin", configuration.getAdmin().getPassword(), true); User user = catalogManager.modifyUser(usersCommandOptions.QuotaUserCommandOptions.userId, new ObjectMap(UserDBAdaptor.QueryParams.QUOTA.key(), usersCommandOptions.QuotaUserCommandOptions.quota * 1073741824), null).first(); System.out.println("The disk quota has been properly updated: " + user.toString()); } } }