From 7eceff09ae56ba424dbcac99b8a43268f6cb4e48 Mon Sep 17 00:00:00 2001 From: Brian Major <brian.major@nrc-cnrc.gc.ca> Date: Thu, 23 Jul 2015 11:09:24 -0700 Subject: [PATCH] ac2release - Main class for the GMSClient --- .../ca/nrc/cadc/ac/client/GMSClientMain.java | 208 ++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClientMain.java diff --git a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClientMain.java b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClientMain.java new file mode 100644 index 00000000..961d6b99 --- /dev/null +++ b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClientMain.java @@ -0,0 +1,208 @@ +/* + ************************************************************************ + ******************* CANADIAN ASTRONOMY DATA CENTRE ******************* + ************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES ************** + * + * (c) 2014. (c) 2014. + * Government of Canada Gouvernement du Canada + * National Research Council Conseil national de recherches + * Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6 + * All rights reserved Tous droits réservés + * + * NRC disclaims any warranties, Le CNRC dénie toute garantie + * expressed, implied, or énoncée, implicite ou légale, + * statutory, of any kind with de quelque nature que ce + * respect to the software, soit, concernant le logiciel, + * including without limitation y compris sans restriction + * any warranty of merchantability toute garantie de valeur + * or fitness for a particular marchande ou de pertinence + * purpose. NRC shall not be pour un usage particulier. + * liable in any event for any Le CNRC ne pourra en aucun cas + * damages, whether direct or être tenu responsable de tout + * indirect, special or general, dommage, direct ou indirect, + * consequential or incidental, particulier ou général, + * arising from the use of the accessoire ou fortuit, résultant + * software. Neither the name de l'utilisation du logiciel. Ni + * of the National Research le nom du Conseil National de + * Council of Canada nor the Recherches du Canada ni les noms + * names of its contributors may de ses participants ne peuvent + * be used to endorse or promote être utilisés pour approuver ou + * products derived from this promouvoir les produits dérivés + * software without specific prior de ce logiciel sans autorisation + * written permission. préalable et particulière + * par écrit. + * + * This file is part of the Ce fichier fait partie du projet + * OpenCADC project. OpenCADC. + * + * OpenCADC is free software: OpenCADC est un logiciel libre ; + * you can redistribute it and/or vous pouvez le redistribuer ou le + * modify it under the terms of modifier suivant les termes de + * the GNU Affero General Public la “GNU Affero General Public + * License as published by the License” telle que publiée + * Free Software Foundation, par la Free Software Foundation + * either version 3 of the : soit la version 3 de cette + * License, or (at your option) licence, soit (à votre gré) + * any later version. toute version ultérieure. + * + * OpenCADC is distributed in the OpenCADC est distribué + * hope that it will be useful, dans l’espoir qu’il vous + * but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE + * without even the implied GARANTIE : sans même la garantie + * warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ + * or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF + * PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence + * General Public License for Générale Publique GNU Affero + * more details. pour plus de détails. + * + * You should have received Vous devriez avoir reçu une + * a copy of the GNU Affero copie de la Licence Générale + * General Public License along Publique GNU Affero avec + * with OpenCADC. If not, see OpenCADC ; si ce n’est + * <http://www.gnu.org/licenses/>. pas le cas, consultez : + * <http://www.gnu.org/licenses/>. + * + * $Revision: 4 $ + * + ************************************************************************ + */ + +package ca.nrc.cadc.ac.client; + +import java.net.URI; +import java.net.URL; +import java.security.PrivilegedAction; + +import javax.security.auth.Subject; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; + +import ca.nrc.cadc.auth.CertCmdArgUtil; +import ca.nrc.cadc.auth.HttpPrincipal; +import ca.nrc.cadc.reg.client.RegistryClient; +import ca.nrc.cadc.util.ArgumentMap; +import ca.nrc.cadc.util.Log4jInit; + +/** + * Prototype main class for the GMSClient. Currently + * only used for testing. Should not be used for production + * work. + */ +public class GMSClientMain implements PrivilegedAction<Object> +{ + + private static Logger log = Logger.getLogger(GMSClientMain.class); + + public static final String ARG_ADD_MEMBER = "add-member"; + + public static final String ARG_USERID = "userid"; + public static final String ARG_GROUP = "group"; + + public static final String ARG_HELP = "help"; + public static final String ARG_VERBOSE = "verbose"; + public static final String ARG_DEBUG = "debug"; + public static final String ARG_H = "h"; + public static final String ARG_V = "v"; + public static final String ARG_D = "d"; + + private GMSClient client; + private ArgumentMap argMap; + + private GMSClientMain() + { + RegistryClient regClient = new RegistryClient(); + URL acURL = null; + try + { + acURL = regClient.getServiceURL(new URI("ivo://cadc.nrc.ca/canfargms"), "https"); + } + catch (Exception e) + { + e.printStackTrace(); + } + log.debug("Using ac url: " + acURL); + client = new GMSClient(acURL.toString()); + } + + public static void main(String[] args) + { + ArgumentMap argMap = new ArgumentMap(args); + + if (argMap.isSet(ARG_HELP) || argMap.isSet(ARG_H)) + { + usage(); + System.exit(0); + } + + // Set debug mode + if (argMap.isSet(ARG_DEBUG) || argMap.isSet(ARG_D)) + { + Log4jInit.setLevel("ca.nrc.cadc.ac.client", Level.DEBUG); + Log4jInit.setLevel("ca.nrc.cadc.net", Level.DEBUG); + } + else if (argMap.isSet(ARG_VERBOSE) || argMap.isSet(ARG_V)) + { + Log4jInit.setLevel("ca.nrc.cadc.ac.client", Level.INFO); + } + else + Log4jInit.setLevel("ca", Level.WARN); + + GMSClientMain main = new GMSClientMain(); + main.argMap = argMap; + + Subject subject = CertCmdArgUtil.initSubject(argMap, true); + + Object response = null; + + if (subject != null) + response = Subject.doAs(subject, main); + else + response = main.run(); + + log.debug("Response: " + response); + } + + private String getCommand() + { + if (argMap.isSet(ARG_ADD_MEMBER)) + return ARG_ADD_MEMBER; + + throw new IllegalArgumentException("No valid commands"); + } + + private static void usage() + { + System.out.println("Usage TBD"); + } + + @Override + public Object run() + { + try + { + String command = getCommand(); + + if (command.equals(ARG_ADD_MEMBER)) + { + String group = argMap.getValue(ARG_GROUP); + String userID = argMap.getValue(ARG_USERID); + + if (group == null) + throw new IllegalArgumentException("No group specified"); + + if (userID == null) + throw new IllegalArgumentException("No userid specified"); + + client.addUserMember(group, new HttpPrincipal(userID)); + } + + return null; + } + catch (Throwable t) + { + log.error("ERROR", t); + return t; + } + } +} -- GitLab