001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.deployment.cli;
019
020 import java.io.BufferedInputStream;
021 import java.io.BufferedOutputStream;
022 import java.io.File;
023 import java.io.FileInputStream;
024 import java.io.FileOutputStream;
025 import java.io.IOException;
026 import java.io.InputStream;
027 import java.io.OutputStream;
028 import java.util.Properties;
029
030 import org.apache.geronimo.cli.deployer.CommandArgs;
031 import org.apache.geronimo.common.DeploymentException;
032 import org.apache.geronimo.crypto.EncryptionManager;
033 import jline.ConsoleReader;
034
035 /**
036 * The CLI deployer logic to start.
037 *
038 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
039 */
040 public class CommandLogin extends AbstractCommand {
041
042 public void execute(ConsoleReader consoleReader, ServerConnection connection, CommandArgs commandArgs) throws DeploymentException {
043 try {
044 File authFile = new File(System.getProperty("user.home"), ".geronimo-deployer");
045 if(!authFile.exists()) {
046 if(!authFile.createNewFile()) {
047 throw new DeploymentException("Unable to create "+authFile.getAbsolutePath()+" to hold saved logins");
048 }
049 }
050 if(!authFile.canRead() || !authFile.canWrite()) {
051 throw new DeploymentException("Saved login file "+authFile.getAbsolutePath()+" is not readable or not writable");
052 }
053 Properties props = new Properties();
054 InputStream authIn = new BufferedInputStream(new FileInputStream(authFile));
055 props.load(authIn);
056 authIn.close();
057 props.setProperty("login."+connection.getServerURI(), EncryptionManager.encrypt(connection.getAuthentication()));
058 OutputStream save = new BufferedOutputStream(new FileOutputStream(authFile));
059 props.store(save, "Saved authentication information to connect to Geronimo servers");
060 save.flush();
061 save.close();
062 consoleReader.printString(DeployUtils.reformat("Saved login for: "+connection.getServerURI(), 4, 72));
063 consoleReader.printNewline();
064 } catch (IOException e) {
065 throw new DeploymentException("Unable to save authentication to login file", e);
066 }
067 }
068 }