示例#1
0
文件: shell.py 项目: alyxd/pride
 def handle_input(self, input):
     self.alert("Got user input {}".format(input), level='vvv')
     if self._raw_input_callback:
         callback = self._raw_input_callback
         self._raw_input_callback = None
         return callback(input)
     try:
         program_name, program_input = input.split(' ', 1)
     except ValueError:
         if input.strip() not in self.programs:
             component, method = self.default_program
             program_input = input
         else:
             component, method = self.programs[input]
             program_input = ''
     else:
         if (program_input != '\n' and program_input.split()[0]
                 in ("+", '-', '*', '%', '/', '//', '**', '=', '==', '+=',
                     '-=', '*=', '%=', '/=', '//=', '**=', '>>', '<<', '||',
                     '&&', '>>=', '<<=', '||=', '&&=', "and", "or", "not")):
             component, method = self.default_program
             program_input = input
         else:
             try:
                 component, method = self.programs[program_name]
             except KeyError:
                 component, method = self.default_program
                 program_input = input
     pride.Instruction(component, method, program_input).execute()
示例#2
0
文件: shell.py 项目: alyxd/pride
 def handle_idle(self):
     if self._idle and not self.screensaver:
         self._position = sys.stdout_log.tell()
         sys.stdout.logging_enabled = False
         self.alert(
             "Starting terminal screensaver; Press enter to resume... ")
         self.screensaver = self.create(self.screensaver_type).reference
     self._idle = True
     pride.Instruction(self.reference,
                       "handle_idle").execute(priority=self.idle_threshold)
示例#3
0
文件: rpc.py 项目: alyxd/pride
        def _make_rpc(self, *args, **kwargs):
            if callback_name:
                _callback = getattr(self, callback_name)
            else:
                _callback = callback or None

            instruction = pride.Instruction(self.target_service, call_name, *args, **kwargs)
            if not getattr(self, "logged_in", True) and call_name not in ("register", "login", "login_stage_two"):
                self.handle_not_logged_in(instruction, _callback)
            else:
                self.alert("Making request '{}.{}'".format(self.target_service, call_name),
                           level=self.verbosity.get(call_name, 'v'))
                self.session.execute(instruction, _callback)
示例#4
0
    def __init__(self, **kwargs):
        super(Program, self).__init__(**kwargs)
        for component_type in self.startup_components:
            component = self.create(component_type)
            setattr(self, component.__class__.__name__.lower(),
                    component.reference)
        try:
            self.rpc_server = self.create(self.rpc_server_type)
        except socket.error as exception:
            if exception.errno != 98 or not self.use_existing_server:
                raise
        self.setup_os_environ()

        # ephemeral keys for encrypted in memory only data storage
        self.session = self.create("pride.components.user.Session",
                                   username=os.urandom(16),
                                   auto_register=True,
                                   password=os.urandom(32),
                                   kdf_iterations=1)
        pride.objects["/Finalizer"].add_callback(
            (self.session.reference, "delete"), -1)

        machine_id, machine_password = self.get_machine_credentials()
        User = pride.components.user.User
        with pride.functions.contextmanagers.backup(User, "verbosity"):
            User.verbosity["login_success"] = "vv"
            user = User(username=machine_id,
                        password=machine_password,
                        auto_register=True,
                        kdf_iterations=1)
        assert user.reference == "/User"
        if not self.command:
            command = os.path.join((os.getcwd() if "__file__" not in globals()
                                    else pride.site_config.PRIDE_DIRECTORY),
                                   os.path.join("programs",
                                                "shell_launcher.py"))
        else:
            command = self.command
        source = ''
        if self.startup_definitions:
            source += self.startup_definitions + "\n"
        try:
            with open(command, 'r') as module_file:
                source += module_file.read()
        except IOError:
            self.alert("Unable to locate '{}';\nCWD: {}".format(
                command, os.getcwd()))
            raise SystemExit()
        pride.Instruction(self.interpreter, "_exec_command", source).execute()
示例#5
0
文件: shell.py 项目: alyxd/pride
    def __init__(self, **kwargs):
        self._idle = True
        self.screensaver = None
        super(Command_Line, self).__init__(**kwargs)

        self._new_thread()
        self.programs = self.programs or {}
        default_program = self.create(self.default_programs[0])
        self.set_default_program(default_program.name,
                                 (default_program.reference, "handle_input"),
                                 set_backup=True)

        for program in self.default_programs[1:]:
            self.create(program)

        pride.Instruction(self.reference,
                          "handle_idle").execute(priority=self.idle_threshold)

        self._new_thread()
        self.thread.start()
示例#6
0
文件: rpc.py 项目: alyxd/pride
 def check_idle(self):
     if time.time() - self._idle_timer >= self.idle_after:
         self.delete()
     else:
         pride.Instruction(self.reference, "check_idle").execute(priority=self.idle_after)
示例#7
0
文件: rpc.py 项目: alyxd/pride
 def on_ssl_authentication(self):
     if self.idle_after:
         self._idle_timer = time.time()
         pride.Instruction(self.reference, "check_idle").execute(priority=self.idle_after)
     return super(Rpc_Socket, self).on_ssl_authentication()