Package org.parosproxy.paros

Source Code of org.parosproxy.paros.CommandLine

/*
*
* Paros and its related class files.
*
* Paros is an HTTP/HTTPS proxy for assessing web application security.
* Copyright (C) 2003-2004 Chinotec Technologies Company
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the Clarified Artistic License
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* Clarified Artistic License for more details.
*
* You should have received a copy of the Clarified Artistic License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package org.parosproxy.paros;

import java.util.Hashtable;
import java.util.Vector;

import org.parosproxy.paros.extension.CommandLineArgument;
import org.parosproxy.paros.network.HttpSender;

/**
*
* To change the template for this generated type comment go to Window -
* Preferences - Java - Code Generation - Code and Comments
*/
public class CommandLine {

  public static final String SESSION = "-session";
  public static final String NEW_SESSION = "-newsession";
  public static final String HELP = "-help";
  public static final String HELP2 = "-h";

  static final String NO_USER_AGENT = "-nouseragent";
  static final String SP = "-sp";

  private boolean GUI = true;
  private String[] args = null;
  private Hashtable<String, String> keywords = new Hashtable<String, String>();
  private Vector<CommandLineArgument[]> commandList = null;

  public CommandLine(String[] args) throws Exception {
    this.args = args;
    parseFirst(this.args);
  }

  private boolean checkPair(String[] args, String paramName, int i)
      throws Exception {
    String key = args[i];
    String value = null;
    if (key == null)
      return false;
    if (key.equalsIgnoreCase(paramName)) {
      value = args[i + 1];
      if (value == null)
        throw new Exception();
      keywords.put(paramName, value);
      args[i] = null;
      args[i + 1] = null;
      return true;
    }
    return false;
  }

  private boolean checkSwitch(String[] args, String paramName, int i)
      throws Exception {
    String key = args[i];
    if (key == null)
      return false;
    if (key.equalsIgnoreCase(paramName)) {
      keywords.put(paramName, "");
      args[i] = null;
      return true;
    }
    return false;
  }

  private void parseFirst(String[] args) throws Exception {
    for (int i = 0; i < args.length; i++) {

      if (parseSwitchs(args, i))
        continue;
      if (parseKeywords(args, i))
        continue;

    }
  }

  public void parse(Vector<CommandLineArgument[]> commandList) throws Exception {
    this.commandList = commandList;
    CommandLineArgument lastArg = null;
    boolean found = false;
    int remainingValueCount = 0;

    for (int i = 0; i < args.length; i++) {
      if (args[i] == null)
        continue;
      found = false;

      for (int j = 0; j < commandList.size() && !found; j++) {
        CommandLineArgument[] extArg = (CommandLineArgument[]) commandList.get(j);
        for (int k = 0; k < extArg.length && !found; k++)
          if (args[i].compareToIgnoreCase(extArg[k].getName()) == 0) {

            // check if previous keyword satisfied its required no.
            // of parameters
            if (remainingValueCount > 0) {
              throw new Exception(
                  "Missing parameters for keyword '"
                      + lastArg.getName() + "'.");
            }

            // process this keyword
            lastArg = extArg[k];
            lastArg.setEnabled(true);
            found = true;
            args[i] = null;
            remainingValueCount = lastArg.getNumOfArguments();
          }
      }

      // check if current string is a keyword preceded by '-'
      if (args[i] != null && args[i].startsWith("-")) {
        continue;
      }

      // check if there is no more expected param value
      if (lastArg != null && remainingValueCount == 0) {
        continue;
      }

      // check if consume remaining for last matched keywords
      if (!found && lastArg != null) {
        if (lastArg.getPattern() == null
            || lastArg.getPattern().matcher(args[i]).find()) {
          lastArg.getArguments().add(args[i]);
          if (remainingValueCount > 0) {
            remainingValueCount--;
          }
          args[i] = null;
        } else {
          throw new Exception(lastArg.getErrorMessage());
        }
      }

    }

    // check if the last keyword satified its no. of parameters.
    if (lastArg != null && remainingValueCount > 0) {
      throw new Exception("Missing parameters for keyword '"
          + lastArg.getName() + "'.");
    }

    // check if there is some unknown keywords
    for (int i = 0; i < args.length; i++) {
      if (args[i] != null) {
        throw new Exception("Unknown options: " + args[i]);
      }
    }
  }

  private boolean parseSwitchs(String[] args, int i) throws Exception {

    boolean result = false;

    if (checkSwitch(args, NO_USER_AGENT, i)) {
      HttpSender.setUserAgent("");
      Constant.setEyeCatcher("");
      result = true;
    } else if (checkSwitch(args, SP, i)) {
      Constant.setSP(true);
      result = true;
    } else if (checkSwitch(args, HELP, i)) {
      result = true;
      setGUI(false);
    } else if (checkSwitch(args, HELP2, i)) {
      result = true;
      setGUI(false);

    }

    return result;
  }

  private boolean parseKeywords(String[] args, int i) throws Exception {
    boolean result = false;
    if (checkPair(args, NEW_SESSION, i)) {
      setGUI(false);
      result = true;
    } else if (checkPair(args, SESSION, i)) {
      setGUI(false);
      result = true;
    }
    return result;
  }

  /**
   * @return Returns the noGUI.
   */
  public boolean isGUI() {
    return GUI;
  }

  /**
   * @param noGUI
   *            The noGUI to set.
   */
  public void setGUI(boolean GUI) {
    this.GUI = GUI;
  }

  public String getArgument(String keyword) {
    return (String) keywords.get(keyword);
  }

  // ZAP: Made public
  public static String getHelpGeneral() {
    String CRLF = "\r\n";
    String help = "GUI usage:" + CRLF
      + "\tjavaw andiparos.jar" + CRLF
      + "\tjava -jar andiparos.jar" + CRLF
      + "see java -jar andiparos.jar {-h|-help} for detail.\r\n\r\n";
    return help;
  }

  public String getHelp() {
    StringBuffer sb = new StringBuffer(getHelpGeneral());
    sb.append("Command line usage:\r\n");
    sb.append("java -jar andiparos.jar {-h|-help} {-newsession session_file_path} {options}\r\n");
    sb.append("options:\r\n\r\n");

    for (int i = 0; i < commandList.size(); i++) {
      CommandLineArgument[] extArg = (CommandLineArgument[]) commandList.get(i);
      for (int j = 0; j < extArg.length; j++) {
        sb.append(extArg[j].getHelpMessage() + "\r\n");
      }
    }

    return sb.toString();
  }

  public boolean isEnabled(String keyword) {

    Object obj = keywords.get(keyword);
    if (obj != null && obj instanceof String) {
      return true;
    }
    return false;
  }

}
TOP

Related Classes of org.parosproxy.paros.CommandLine

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.