def do_cd(self, line): #error handling ensures wrong directory path or permission denial will not crash shell try: if self.home in line: os.chdir('/' + line) else: os.chdir(os.getcwd() + '/' + line) except FileNotFoundError: print(Colours.red("Invalid directory: {}".format(line))) except Exception as e: print(e) #update the prompt to show the new directory cmd.Cmd.prompt = Colours.cyan('(KarlShell:') + Colours.pink( os.getcwd() + ') ')
def invoke(self, line): line = self.get_tokens(line) pid = os.fork() if pid > 0: wait_pid = os.waitpid(pid, 0) else: try: os.execvp(line[0], line) except FileNotFoundError: print( Colours.red( " '{}' not found. Type 'help' for shell documentation." .format(' '.join(line)))) self.do_quit('') except: print("Exception!") self.do_quit('')
class ReqCheck(): def __init__(self, conffile): self.conf = read_yaml(conffile) self.col = Colours() self.req = {} self.req['headers'] = {'user-agent': self.conf['ua']} self.s_in = self.session_login() self.s_out = requests.Session() def get(self, url, login=False): rqu = self.conf['urls']['base'] + url if login is False: return self.s_out.get(rqu, headers=self.req['headers']) else: return self.s_in.get(rqu, headers=self.req['headers']) def post(self, url, data=None, login=False): rqu = self.conf['urls']['base'] + url if login is False: return self.s_out.post(rqu, data=data, headers=self.req['headers']) else: return self.s_in.post(rqu, data=data, headers=self.req['headers']) def assert_page(self, url, rx, login=False): try: t = self.get(url, login) except requests.exceptions.ConnectionError: return [self.col.red('[fail]'), login, url, rx] else: b = bool(re.search(rx, t.text)) if b is True: return [self.col.gre('[good]'), login, url, rx] else: return [self.col.red('[fail]'), login, url, rx] def assert_source(self, src, rx): return bool(re.search(rx, src)) def assert_all(self): tab = [] for el in self.conf['request_check']: tab.append(self.assert_page(el['url'], el['exp_out'], login=False)) tab.append(self.assert_page(el['url'], el['exp_in'], login=True)) if el['url'].endswith('/'): rqu = el['url'][:-1] tab.append(self.assert_page(rqu, el['exp_out'], login=False)) tab.append(self.assert_page(rqu, el['exp_in'], login=True)) tab = sorted(tab, key=lambda x: (x[1], x[2])) return tab def session_login(self): sess = requests.Session() src = sess.get(self.conf['urls']['base'] + '/accounts/login/') formtoken = re.search(r'(csrfmiddlewaretoken.*value=")([a-zA-Z0-9]+)', src.text).group(2) csrftoken = sess.cookies['csrftoken'] login_data = { 'login': self.conf['cred']['user'], 'password': self.conf['cred']['pass'], 'csrfmiddlewaretoken': csrftoken, 'csrftoken': formtoken, 'next': '/query/' } src = sess.post(self.conf['urls']['base'] + self.conf['urls']['login'], data=login_data, headers=self.req['headers']) if bool(re.search(r'If you forgot your password', src.text)) is True: print( self.col.red('\nLogin failed. Please check your login data\n')) return sess def logout(self): self.post(self.conf['urls']['logout'])