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()
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)
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)
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()
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()
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)
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()