def run_interactive_shell(command_database):
	web_shell = WebShell(command_database)
	print '-' * 80
	print 'Welcome to the AWebShell Console.'
	print 
	print "Type 'webbrowser=disabled' if you wish to disable browser control."
	print '-' * 80
	print
	print
	webbrowser_enabled = True
	try:
		while (True): #loop forever (well, until an exception...)
			raw_query = raw_input('> ')
			
			if (raw_query.strip() == 'webbrowser=enabled'):
				webbrowser_enabled = True
			elif (raw_query.strip() == 'webbrowser=disabled'):
				webbrowser_enabled = False
			elif (raw_query.strip() == 'burn-new-test-db-csv-to-gql'):
				burn_new_test_db_csv_to_gql()
			elif (raw_query.strip() == 'burn-live-db-gql-to-csv'):
				burn_live_db_gql_to_csv()
			else:
			
				try:
					evaluated_url, can_inline = web_shell.evaluate(raw_query)
					if (evaluated_url):
						print
						
						if (webbrowser_enabled):
							print 'GOTO', evaluated_url
							webbrowser.open(evaluated_url)
						else:
							print 'RESULT:', evaluated_url
							print 'CAN_INLINE:', can_inline
						
						print
					
					
					
					
				except WebShellError, wse:
					print
					print 'ERROR: ' + wse.__class__.__name__ + ': ' + str(wse)
					print
				
			
	except EOFError:
		pass
	except KeyboardInterrupt:
		pass
Example #2
0
def run_test_cases(command_database_filename, test_cases_filename):
    test_command_database = CSVCommandDatabase("test_web_shell_command_database.csv")
    web_shell = WebShell(test_command_database)

    csv_file = open(test_cases_filename, "r")
    csv_reader = csv.reader(csv_file)
    row_number = 1
    successes = 0
    failures = 0
    first_line_passed = False
    for row in csv_reader:
        if not first_line_passed:
            first_line_passed = True
            continue

        if row[0].strip():
            command = row[0].strip()
            if (
                command.find("\xc2") != -1 or command.find("\xa0") != -1
            ):  # detects some garbage that LibreOffice Calc or MS Excel left in the .csv file.
                raise Exception("bad command string in input file (bad characters): " + repr(command))
            expected_result = row[1].strip()

        try:
            actual_result, can_inline = web_shell.evaluate(command)

            if expected_result != actual_result:
                print "--------------MISMATCH! ROW %i--------------------------------" % row_number
                print "COMMAND:", repr(command)
                print "EXPECTED:", expected_result
                print "  ACTUAL:", actual_result
                print

                failures += 1
            else:
                successes += 1

        except WebShellError, wse:
            print "--------------MISMATCH! ROW %i--------------------------------" % row_number
            print "COMMAND:", repr(command)
            print "ERROR: " + wse.__class__.__name__ + ": " + str(wse)
            print

            failures += 1

        row_number += 1
Example #3
0
class ParseHandler(webapp2.RequestHandler):
	def __init__(self, *args, **kwargs):
		webapp2.RequestHandler.__init__(self, *args, **kwargs)
		self.__command_database = GqlCommandDatabase()
		self.__web_shell = WebShell(self.__command_database)
	def get(self, enteredCommand):
		if self.request.get('q'):
			enteredCommand = self.request.get('q') # Use q= gttp get var if supplied.

		#enteredCommand = enteredCommand.replace('+', ' ')
		#enteredCommand = enteredCommand.replace('+', ' ')
		#enteredCommand = enteredCommand.replace('%20', ' ')

		enteredCommandString = urllib.quote(enteredCommand.encode('utf-8'), ' /') # Store string of entered command.
		enteredCommand = enteredCommand.split() # Split entered command into separate words.

		if len(enteredCommand) > 0:
			if enteredCommand[0].lower() == 'create': # User wants to create a command, let's try.
				self.response.write(create_new_command(enteredCommand))
			elif enteredCommand[0].lower() == 'ls': # User is performing a command search.
				search = enteredCommandString[3:]
				self.redirect('/ls/' + search)
			else: # User is performing a command, convert it into a URI and redirect to it.
				# Send hit to Google Analytics, since we're not displaying a page...
				thisUUID = uuid.uuid4()
				httplib.HTTPConnection('www.google-analytics.com/collect/?v=1&tid=UA-34105964-1&cid=thisUUID&an=awebshell&t=event&ec=parse&ea=redirected', 80, timeout=10)
				
				try:
					logging.info('enteredCommandString = ' + repr(enteredCommandString))
					final_url, can_inline = self.__web_shell.evaluate(enteredCommandString)
					self.redirect(final_url.encode('utf-8'))
				except WebShellError, web_shell_error:
					exception_name = web_shell_error.__class__.__name__
					error_message = str(web_shell_error)
					logging.info('ERROR: ' + exception_name + ': ' + error_message)
					#TODO: do something about error, like display the error message and offer a new command entry
					
					
					self.redirect('http://google.com/search?q=' + urllib.quote(enteredCommandString)) #ZZZ default to google search on error.
				
				# logging.info("Redirecting to: " + redirectURI)
				# self.redirect(str(redirectURI))
		else:
Example #4
0
	def __init__(self, *args, **kwargs):
		webapp2.RequestHandler.__init__(self, *args, **kwargs)
		self.__command_database = GqlCommandDatabase()
		self.__web_shell = WebShell(self.__command_database)
def run_one_command(command_database, command_text):
	web_shell = WebShell(command_database)
	final_url, can_inline = web_shell.evaluate(command)
	webbrowser.open(final_url)