Package hudson.plugins.accurev.cmd

Source Code of hudson.plugins.accurev.cmd.Login

package hudson.plugins.accurev.cmd;

import hudson.FilePath;
import hudson.Launcher;
import hudson.model.TaskListener;
import hudson.util.ArgumentListBuilder;

import hudson.plugins.accurev.AccurevSCM.AccurevSCMDescriptor;
import hudson.plugins.accurev.AccurevSCM.AccurevServer;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import hudson.plugins.accurev.AccurevLauncher;
import hudson.plugins.accurev.ParseInfoToLoginName;

public class Login extends Command {
   private static final Logger logger = Logger.getLogger(Login.class.getName());
     
   /**
    * @return The currently logged in user "Principal" name, which may be
    *         "(not logged in)" if not logged in.<br>
    *         Returns null on failure.
    */
   private static String getLoggedInUsername(//
           final AccurevServer server, //
           final Map<String, String> accurevEnv, //
           final FilePath workspace, //
           final TaskListener listener, //
           final String accurevPath, //
           final Launcher launcher) {
       final String commandDescription = "info command";
       final ArgumentListBuilder cmd = new ArgumentListBuilder();
       cmd.add(accurevPath);
       cmd.add("info");
       addServer(cmd, server);
       final String username = AccurevLauncher.runCommand(commandDescription, launcher, cmd, null, null, accurevEnv,
               workspace, listener, logger, new ParseInfoToLoginName(), null);
       return username;
   }

   public static boolean ensureLoggedInToAccurev(AccurevServer server, Map<String, String> accurevEnv, FilePath pathToRunCommandsIn, TaskListener listener,
         String accurevPath, Launcher launcher) throws IOException, InterruptedException {
    
      if (server == null) {
         return false;
      }
      final String requiredUsername = server.getUsername();
      if (requiredUsername == null || requiredUsername.trim().length() == 0) {
         listener.getLogger().println("Authentication failure");
         return false;
      }
      AccurevSCMDescriptor.lock();
      try {
         final boolean loginRequired;
         if (server.isMinimiseLogins()) {
            final String currentUsername = getLoggedInUsername(server, accurevEnv, pathToRunCommandsIn, listener, accurevPath, launcher);
            if (currentUsername == null) {
               loginRequired = true;
               listener.getLogger().println("Not currently authenticated with Accurev server");
            } else {
               loginRequired = !currentUsername.equals(requiredUsername);
               listener.getLogger().println(
                     "Currently authenticated with Accurev server as '" + currentUsername + (loginRequired ? "', login required" : "', not logging in again."));
            }
         } else {
            loginRequired = true;
         }
         if (loginRequired) {
            return accurevLogin(server, accurevEnv, pathToRunCommandsIn, listener, accurevPath, launcher);
         }
      } finally {
         AccurevSCMDescriptor.unlock();
      }
      return true;
   }

   private static boolean accurevLogin(//
         final AccurevServer server, //
         final Map<String, String> accurevEnv, //
         final FilePath workspace, //
         final TaskListener listener, //
         final String accurevPath, //
         final Launcher launcher) throws IOException, InterruptedException {
      listener.getLogger().println("Authenticating with Accurev server...");
      final boolean[] masks;
      final ArgumentListBuilder cmd = new ArgumentListBuilder();
      cmd.add(accurevPath);
      cmd.add("login");
      addServer(cmd, server);
      if (server.isUseNonexpiringLogin()) {
         cmd.add("-n");
      }
      cmd.add(server.getUsername());
      if (server.getPassword() == null || "".equals(server.getPassword())) {
         cmd.addQuoted("");
         masks = new boolean[cmd.toCommandArray().length];
      } else {
         cmd.add(server.getPassword());
         masks = new boolean[cmd.toCommandArray().length];
         masks[masks.length - 1] = true;
      }
      final boolean success = AccurevLauncher.runCommand("login", launcher, cmd, masks, null, accurevEnv, workspace, listener, logger);
      if (success) {
         listener.getLogger().println("Authentication completed successfully.");
         return true;
      } else {
         return false;
      }
   }
  
  
   /**
    * This method is called from dofillstreams and dofilldepots while configuring the job
    *        
    */
   public static boolean accurevLoginfromGlobalConfig(//
           final AccurevServer server,
           final String accurevPath,
           final Logger descriptorlogger) throws IOException, InterruptedException {
    
         final ArgumentListBuilder cmd = new ArgumentListBuilder();
         List<String> logincommand = new ArrayList<String>();
         cmd.add(accurevPath);
         cmd.add("login");
        addServer(cmd, server);

        if (server.isUseNonexpiringLogin()) {
          cmd.add("-n");
        }
        cmd.add(server.getUsername());
        // If the password is blank, "" should be passed
        cmd.add(server.getPassword().length() == 0 ? "\"\"" : server.getPassword());
        logincommand = cmd.toList();
        ProcessBuilder processBuilder = new ProcessBuilder(logincommand);
        processBuilder.redirectErrorStream(true);

        Process loginprocess;
        InputStream stdout = null;
               
        try {
            loginprocess = processBuilder.start();
            stdout = loginprocess.getInputStream();
            String logincmdoutputdata = convertStreamToString(stdout);
            loginprocess.waitFor();
            if (loginprocess.exitValue() == 0) {
              return true;
            }
            else{
              descriptorlogger.warning("AccuRev Server: "+server.getName()+". "+logincmdoutputdata);               
              return false;
            }
        }
        finally {
            try {
              if(stdout!=null){
                stdout.close();
              }
            } catch (IOException e) {
            }
         }
   }
}
TOP

Related Classes of hudson.plugins.accurev.cmd.Login

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.