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 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 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'], )
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'])
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_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])
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)
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'])
def test_negative_hydra_lookup_a_word_that_is_not_in_hydra(): hh = Hydra([]) hh.insert_word('someword', 'marker') assert hh.lookup('anotherword') == None
def setUp(self): self.hydra = Hydra('http://localhost:4444', 'client', 'secret')
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()