001    /*
002     * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org
003     * Copyright (C) 2011 NightLabs Consulting GmbH
004     *
005     * This program is free software: you can redistribute it and/or modify
006     * it under the terms of the GNU Affero General Public License as
007     * published by the Free Software Foundation, either version 3 of the
008     * License, or (at your option) any later version.
009     *
010     * This program is distributed in the hope that it will be useful,
011     * but WITHOUT ANY WARRANTY; without even the implied warranty of
012     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013     * GNU Affero General Public License for more details.
014     *
015     * You should have received a copy of the GNU Affero General Public License
016     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
017     */
018    package org.cumulus4j.keymanager.cli;
019    
020    import org.cumulus4j.keymanager.api.KeyManagerAPI;
021    import org.cumulus4j.keymanager.api.KeyManagerAPIConfiguration;
022    import org.kohsuke.args4j.Option;
023    
024    /**
025     * <p>
026     * Abstract {@link SubCommand} implementation for being subclassed when the {@link KeyManagerAPI} is used.
027     * </p>
028     * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
029     */
030    public abstract class SubCommandWithKeyManagerAPIWithAuth
031    extends SubCommandWithKeyManagerAPI
032    {
033            @Option(name="-authUserName", required=true, usage="The authenticated user authorizing this action. If the very first user is created, this value is ignored.")
034            private String authUserName;
035    
036            public String getAuthUserName()
037            {
038                    return authUserName;
039            }
040    
041            @Option(name="-authPassword", required=false, usage="The password for authenticating the user specified by -authUserName. If the very first user is created, this value is ignored. If omitted, the user will be asked interactively (if required, i.e. if not creating the very first user).")
042            private String authPassword;
043    
044            public char[] getAuthPasswordAsCharArray()
045            {
046                    return authPassword == null ? null : authPassword.toCharArray();
047            }
048    
049            public String getAuthPassword()
050            {
051                    return authPassword;
052            }
053    
054            @Override
055            public void prepare() throws Exception
056            {
057                    super.prepare();
058                    if (authPassword == null)
059                            authPassword = promptPassword("authPassword: ");
060    
061                    KeyManagerAPIConfiguration configuration = new KeyManagerAPIConfiguration(getKeyManagerAPI().getConfiguration());
062                    configuration.setAuthUserName(authUserName);
063                    configuration.setAuthPassword(getAuthPasswordAsCharArray());
064                    getKeyManagerAPI().setConfiguration(configuration);
065            }
066    
067    }