From d33283603da503835613e8df14dd70f63cd68c71 Mon Sep 17 00:00:00 2001 From: Felipe Date: Fri, 5 Jul 2013 06:54:15 -0400 Subject: [PATCH] Added comments to functions --- README.md | 2 +- tests.py | 5 +++++ yubikey.py | 8 ++++++++ yubikey.pyc | Bin 0 -> 7263 bytes 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests.py create mode 100644 yubikey.pyc diff --git a/README.md b/README.md index ebd5cc0..474bdb2 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ pip install python-yubikey ## Register for an API key ``` -import yubikey +from yubikey import Yubikey yubi = Yubikey() yubi.register('') diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..d59be43 --- /dev/null +++ b/tests.py @@ -0,0 +1,5 @@ +from yubikey import Yubikey + + +yubi = Yubikey(123) +yubi.verify('asdadadasdasdadadadadasdasdadsasdadadsadadad') \ No newline at end of file diff --git a/yubikey.py b/yubikey.py index 0f4c24b..7efa2f9 100644 --- a/yubikey.py +++ b/yubikey.py @@ -38,6 +38,7 @@ class YubicoWS(object): self.api_ws = self._api_ws % choice(self._servers) def register_api_key(self, email, otp): + "Registers an API Key with the servers" data = { 'email': email, 'otp': str.lower(otp) @@ -50,6 +51,7 @@ class YubicoWS(object): return ws_response def verify(self, yubikey_id, otp, key=None): + "Verifies the provided OTP with the server" endpoint = 'verify' url = self.api_ws + endpoint @@ -86,9 +88,11 @@ class YubicoWS(object): return ws_response def sign_otp(self, data, key): + "Signs the OTP with the provided key" return data def parse_ws_response(self, text): + "Parses the API key=value response into a dict" data = {} for line in text.strip().split('\n'): key, value = line.split('=', 1) @@ -96,6 +100,7 @@ class YubicoWS(object): return data def generate_nonce(self): + "Generates a random string" chars = string.ascii_lowercase + string.digits return ''.join(choice(chars) for x in range(40)) @@ -115,6 +120,7 @@ class Yubikey(object): self.key = key def register(self, email, otp): + "Registers this yubikey" result = False if not self.id: credentials = self.ws.register_api_key(email, otp) @@ -126,6 +132,7 @@ class Yubikey(object): return result def verify(self, otp): + "Verify an OTP to check if its valid" result = False if self.id: self.get_prefix(otp) @@ -137,6 +144,7 @@ class Yubikey(object): return result def get_prefix(self, otp): + "Get prefix from an OTP if present" if len(otp) > 32: self.prefix = str.lower(otp[:-32]) diff --git a/yubikey.pyc b/yubikey.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce6b2dcaa86a9ec3b1e7ccc46eb7a09f4afb2e4b GIT binary patch literal 7263 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