Example #1
0
	def restart(self):
		if self._hydra is None:
			self._textListener("Starting ....", "note")
			if os.name == "nt":
				self._hydra = Hydra(os.path.abspath("../../build/assemble/bin/hydra.bat"))
			else:
				self._hydra = Hydra(os.path.abspath("../../build/assemble/bin/hydra"))
		else:
			self._textListener("Restarting ....", "note")
			self._hydra.shutdown()
		self.startHydra()
Example #2
0
	def start(self):
		if self._hydra is None:
			fname = fileDiag.askopenfilename(title="Hydra path")
			if fname != "":
				self._hydra = Hydra(fname)
				self._textListener("Starting ....", "note")
				self.startHydra()
Example #3
0
 def setUp(self):
     self.hydra = Hydra('http://localhost:4444', 'client', 'secret')
     self.client = Client(
         name='new-client',
         secret='client-secret',
         scopes=['devices', 'products'],
         redirect_uris=['http://localhost/callback'],
     )
Example #4
0
def test_coordinate_hydra():
    hx = Hydra([])
    hy = Hydra([])

    points = {
        'a': [0.123456, 0.56789],
        'b': [0.1234, 0.5678]
    }

    for point, xy in points.items():
        hx.insert_word(str(xy[0]), point)
        hy.insert_word(str(xy[1]), point)

    assert sorted(hx.get_level(str(0.1234)).keys()) == sorted(['_', '5'])
Example #5
0
 def setUp(self):
     self.hydra = Hydra('http://localhost:4444', 'client', 'secret')
     self.jti = '64c4f79e-e016-45b8-8c0e-d96c671c1e8a'
     self.exp = datetime.utcnow() + timedelta(minutes=10)
     self.ext = {'foo': 'bar'}
     self.aud = 'client'
     self.scp = ['core', 'hydra']
     self.challenge_data = {
         'aud': self.aud,
         'exp': self.exp,
         'jti': self.jti,
         'redir': 'https://192.168.99.100:4444/',
         'scp': self.scp,
     }
     jwk = self.hydra.jwk.get('hydra.consent.challenge', JWK.PRIVATE)
     self.challenge = jwt.encode(self.challenge_data,
                                 jwk.to_rsa(),
                                 algorithm='RS256')
Example #6
0
def test_hydra_add_multiple_entries_to_same_hydra():
    words = ['every', 'good', 'boy', 'does', 'fine', 'everything']
    hh = Hydra(words)

    for idx, word in enumerate(words):
        hh.insert_word(word, idx)
        hh.insert_word(word, idx*2)
        assert hh.lookup(word) == set([idx, idx*2])
Example #7
0
class ChallengeTestCase(unittest.TestCase):
    def setUp(self):
        self.hydra = Hydra('http://localhost:4444', 'client', 'secret')
        self.jti = '64c4f79e-e016-45b8-8c0e-d96c671c1e8a'
        self.exp = datetime.utcnow() + timedelta(minutes=10)
        self.ext = {'foo': 'bar'}
        self.aud = 'client'
        self.scp = ['core', 'hydra']
        self.challenge_data = {
            'aud': self.aud,
            'exp': self.exp,
            'jti': self.jti,
            'redir': 'https://192.168.99.100:4444/',
            'scp': self.scp,
        }
        jwk = self.hydra.jwk.get('hydra.consent.challenge', JWK.PRIVATE)
        self.challenge = jwt.encode(self.challenge_data,
                                    jwk.to_rsa(),
                                    algorithm='RS256')

    def test_can_decode_challenge(self):
        challenge = self.hydra.challenge_decode(self.challenge)
        self.assertEqual(challenge, self.challenge_data)

    def test_can_encode_challenge(self):
        response = self.hydra.challenge_encode(self.challenge_data,
                                               sub='foo',
                                               uname='bar',
                                               at_ext=self.ext)
        challenge = json.loads(
            base64.urlsafe_b64decode(response.split('.')[1] + '==').decode())
        self.assertEqual(challenge['sub'], 'foo')
        self.assertEqual(challenge['uname'], 'bar')
        self.assertIsNotNone(challenge['iat'])
        self.assertEqual(challenge['aud'], self.aud)
        self.assertEqual(challenge['at_ext'], self.ext)
        self.assertEqual(challenge['scp'], self.scp)
Example #8
0
class HydraTestCase(unittest.TestCase):
    def setUp(self):
        self.hydra = Hydra('http://localhost:4444', 'client', 'secret')

    def test_can_retrieve_access_token(self):
        token = self.hydra.get_access_token()
        self.assertIsNotNone(token)

    def test_can_instropect_token(self):
        token = self.hydra.get_access_token('hydra')
        result = self.hydra.instrospect_token(token)
        self.assertIsNotNone(result)
        self.assertTrue(result['active'])

    def test_can_revoke_token(self):
        token = self.hydra.get_access_token('hydra')
        instrospection = self.hydra.instrospect_token(token)
        self.assertTrue(instrospection['active'])

        response = self.hydra.revoke_token(token)

        self.assertTrue(response)
        instrospection = self.hydra.instrospect_token(token)
        self.assertFalse(instrospection['active'])
Example #9
0
def test_negative_hydra_lookup_a_word_that_is_not_in_hydra():
    hh = Hydra([])

    hh.insert_word('someword', 'marker')
    assert hh.lookup('anotherword') == None
Example #10
0
 def setUp(self):
     self.hydra = Hydra('http://localhost:4444', 'client', 'secret')
Example #11
0
class TyphonGUI():
	
	def __init__(self):
		
		self._hydra = None
		self._gradlePath = os.path.abspath("../../")
		self._typhonPath = os.getcwd()
	
		self._wHnd = Tk()
		self._wHnd.title("Hydra")
		self._wHnd.columnconfigure(0, weight=1)
		self._wHnd.rowconfigure(0, weight=1)
		
		self._cmdVar = StringVar()
		
		self._mMenu = Menu(self._wHnd)
		self._fMenu = Menu(self._mMenu, tearoff=0)
		self._gMenu = Menu(self._mMenu, tearoff=0)
		
		self._fMenu.add_command(label="Start", command=self.start, accelerator="Ctrl+s")
		self._fMenu.add_command(label="Restart", command=self.restart, accelerator="Ctrl+r")
		self._fMenu.add_command(label="Shutdown", command=self.stop)
		self._fMenu.add_command(label="Quit", command=self.close, accelerator="Ctrl+q")
		
		self._gMenu.add_command(label="all", command=lambda:self._gradle("build dist -x test javadoc"), accelerator="Ctrl+a")
		self._gMenu.add_command(label="build", command=lambda:self._gradle("build"), accelerator="Ctrl+b")
		self._gMenu.add_command(label="dist", command=lambda:self._gradle("dist"), accelerator="Ctrl+d")
		self._gMenu.add_command(label="clean", command=lambda:self._gradle("clean"), accelerator="Ctrl+c")
		self._gMenu.add_command(label="test", command=lambda:self._gradle("test"), accelerator="Ctrl+t")
		self._gMenu.add_command(label="custom", command=lambda:self._gradle(), accelerator="Ctrl+g")
		
		self._logText = ScrollText(self._wHnd)
		self._command = Entry(self._wHnd, textvariable=self._cmdVar)
		self._send = Button(self._wHnd, text="Send", command=self.execute)
		
		
		self._logText.tagEdit("in", foreground="blue")
		self._logText.tagEdit("err", foreground="red")
		self._logText.tagEdit("note", foreground="yellow", background="red")
		
		self._mMenu.add_cascade(label="Hydra", menu=self._fMenu)
		self._mMenu.add_cascade(label="Gradle", menu=self._gMenu)
		
		self._wHnd.config(menu=self._mMenu)
		
		self._logText.grid(row=0, column=0, columnspan=2, sticky=N+S+W+E)
		self._command.grid(row=1, column=0, sticky=W+E)
		self._send.grid(row=1, column=1)
		
		self._wHnd.protocol("WM_DELETE_WINDOW", self.close)
		self._wHnd.bind("<Control-q>", lambda e:self.close() )
		self._wHnd.bind("<Control-s>", lambda e:self.start() )
		self._wHnd.bind("<Control-r>", lambda e:self.restart() )
		self._wHnd.bind("<Control-a>", lambda e:self._gradle("build dist -x test javadoc"))
		self._wHnd.bind("<Control-b>", lambda e:self._gradle("build -x test javadoc"))
		self._wHnd.bind("<Control-d>", lambda e:self._gradle("dist"))
		self._wHnd.bind("<Control-c>", lambda e:self._gradle("clean"))
		self._wHnd.bind("<Control-t>", lambda e:self._gradle("test"))
		self._wHnd.bind("<Control-g>", lambda e:self._gradle())
		self._command.bind("<Return>", lambda e:self.execute() )
		
				
	def execute(self, text = None):
		if text is None:
			text = self._cmdVar.get()
		self._cmdVar.set("")
		self._logText.append("> "+text, "in")
		self._hydra.write(text)
		
	def _gradleInit(self, args):
		self._textListener("Starting: gradlew {}".format(args), "note")
		 
	def _gradleFinish(self):
		self._textListener(" ... gradlew has finished", "note")
		
	def _gradle(self, args=None):
		if self._gradlePath is None or not os.path.exists(os.path.abspath(self._gradlePath + "/gradlew")):
			fname = fileDiag.askdirectory(title="Hydra root directory")
			if fname != "":
				self._gradlePath = fname
			else:
				self._gradlePath = None
		if self._gradlePath is not None:
			if args is None:
				args = str(OptionDialog(self._wHnd, "Gradle arguments", "Custom arguments:", "").result)
			if os.name == "nt":
				p = os.path.abspath(self._gradlePath +"/gradlew.bat")+" "+args
			else:
				p = os.path.abspath(self._gradlePath +"/gradlew")+" "+args
			proc = subprocess.Popen(p, shell=True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, cwd=self._gradlePath, universal_newlines=True)
			listener = StreamListener( 
				process = proc,
				name = "gradlew listener",
				startCallback=lambda: self._gradleInit(args), 
				endCallback = lambda: self._gradleFinish()
			)
			listener.listen(proc.stdout, listener=self._textListener)
		
			
	
	def _textListener(self, text, type = "out"):
		self._logText.append("< "+text, type)
		
	def close(self):
		if self._hydra is not None:
			if mbox.askokcancel("Quit", "This will shutdown the hydra.\n Do you wish to continue?"):
				self._hydra.shutdown()
				print "Awaiting for process termination"
				time.sleep(1)
				self._wHnd.destroy()
		else:
			self._wHnd.destroy()
	
	def start(self):
		if self._hydra is None:
			fname = fileDiag.askopenfilename(title="Hydra path")
			if fname != "":
				self._hydra = Hydra(fname)
				self._textListener("Starting ....", "note")
				self.startHydra()
			
	def restart(self):
		if self._hydra is None:
			self._textListener("Starting ....", "note")
			if os.name == "nt":
				self._hydra = Hydra(os.path.abspath("../../build/assemble/bin/hydra.bat"))
			else:
				self._hydra = Hydra(os.path.abspath("../../build/assemble/bin/hydra"))
		else:
			self._textListener("Restarting ....", "note")
			self._hydra.shutdown()
		self.startHydra()
			
	def startHydra(self):
		self._hydra.start()
		self._hydra.listen("out", self._hydra.stdout(), lambda t: self._textListener(t, "out") )
		self._hydra.listen("err", self._hydra.stderr(), lambda t: self._textListener(t, "err") )
		
	def stop(self):
		if self._hydra is not None:
			self._textListener("Stopping ....", "note")
			self._hydra.shutdown()
			self._hydra = None
		
	def show(self):
		self._wHnd.mainloop()