Esempio n. 1
0
 def setup_gui(self):
     if self.options.gui:
         self.cui = ChopUI()
         self.cui.setup_core_ref(self.inq)
Esempio n. 2
0
class UiCommander:
    def __init__(self, inq, outq, dataq):
        self.inq = inq
        self.outq = outq
        self.dataq = dataq
        self.helpers = []
        self.panellist = []
        self.to_outs = {}
        self.dbgid = -1
        self.cui = None
        self.formats = {}

    def setup_opts(self, optparser):

        optparser.add_option("-g", "--gui", action="store_true", dest="gui", default=False, help="Enable ChopShop Gui")
        optparser.add_option("-D", "--debug", action="store_true", dest="debug", default=False, help="Enable Debug")
        optparser.add_option(
            "-S",
            "--stdout",
            action="store_true",
            dest="stdout",
            default=False,
            help="Explicitly enable output to stdout",
        )
        optparser.add_option(
            "-F", "--fileout", action="store", dest="fileout", type="string", default=None, help="Enable File Output"
        )
        optparser.add_option(
            "-s",
            "--savedir",
            action="store",
            dest="savedir",
            type="string",
            default="/tmp",
            help="Location to save carved files",
        )
        optparser.add_option(
            "-J", "--jsonout", action="store", dest="jsonout", type="string", default=None, help="Enable JSON Output"
        )

    def setup_var(self, options):
        status = ""

        if not options.gui and options.fileout is None and not options.stdout:
            self.to_outs["to_stdout"] = True
            status += "\tDefaulted to stdout output\n"

        if options.stdout:
            self.to_outs["to_stdout"] = True
            status += "\tEnabled stdout output\n"

        if options.gui:
            self.to_outs["to_ui"] = True
            status += "\tEnabled ui output\n"

        if options.fileout is not None:
            if options.fileout[0] == "-":
                print ("Ambiguous file format: '" + options.fileout + "' -- please fix and run again\n")
                sys.exit(-1)
            else:
                if __parse_filepath__(options.fileout, "placeholder") is None:
                    print ("Invalid syntax for file output\n")
                    sys.exit(-1)
                else:
                    status += "\tEnabled file output to '" + options.fileout + "'\n"
                    self.to_outs["to_file"] = True
                    self.formats["fileformat"] = options.fileout

        if options.jsonout is not None:
            if options.jsonout[0] == "-":
                print ("Ambigous json format: '" + options.jsonout + "' -- please fix and run again\n")
                sys.exit(-1)
            else:
                status += "\tEnabled json output to '" + options.jsonout + "'\n"
                self.to_outs["to_json"] = True
                self.formats["jsonformat"] = options.jsonout

                if __parse_filepath__(options.jsonout, "placeholder") is None:
                    print ("Invalid syntax for json output\n")
                    sys.exit(-1)

        # Check the format of savedir
        if options.savedir[0] == "-":
            print ("Ambigous savedir format: '" + options.savedir + "' -- please fix and run again\n")
            sys.exit(-1)
        else:
            status += "\tSet file save directory to '" + options.savedir + "'\n"
            self.to_outs["savedir"] = True
            self.formats["savedir"] = options.savedir

            if __parse_filepath__(options.savedir, "placeholder") is None:
                print ("Invalid syntax for savedir\n")
                sys.exit(-1)

        # Save the options we got for later use and create a printlock
        self.options = options
        self.printlock = Lock()

        # -1 removes the last \n since chop.print adds a \n
        return status[:-1]

    def setup_gui(self):
        if self.options.gui:
            self.cui = ChopUI()
            self.cui.setup_core_ref(self.inq)

    def setup_windows(self):
        data = self.inq.get()
        if data[0] != "ready":
            pass

        self.outq.put(["to_outs", self.to_outs])
        self.outq.put(["formats", self.formats])

        self.uihelper = UiHelper(self.dataq, self.to_outs, self.printlock, self.panellist)
        self.uihelper.setDaemon(True)
        self.uihelper.start()

        while True:
            data = self.inq.get()

            if data[0] == "window":
                self.setup_window(data[1])
            elif data[0] == "fini":
                break
        self.uihelper.set_dbgid(self.dbgid)

    def setup_window(self, name):
        self.__add_panel_(name)

    def start_gui(self):
        if self.options.gui:
            self.cui.go()

    def stop_gui(self):
        if self.options.gui:
            self.cui.stop()

    def join(self):
        if self.options.gui:
            self.cui.join()
        self.uihelper.stop()
        self.uihelper.join()

    ### Internal Functions ###

    def __add_panel_(self, name):
        mypan = None

        if self.options.gui:
            mypan = self.cui.new_panel(name)

        self.panellist.append(mypan)

        if name == "Debug":
            self.dbgid = len(self.panellist) - 1