import binascii import requests from decouple import config from pyotp import TOTP from etcd import EtcdKeyNotFound def check_otp(name, realm, seed): try: data = { "auth_name": config('AUTH_NAME', ''), "auth_token": TOTP(config('AUTH_SEED', '')).now(), "auth_realm": config('AUTH_REALM', ''), "name": name, "realm": realm, "token": TOTP(seed).now() } except binascii.Error: return 400 response = requests.post( "{OTP_SERVER}{OTP_VERIFY_ENDPOINT}".format( OTP_SERVER=config('OTP_SERVER', ''), OTP_VERIFY_ENDPOINT=config('OTP_VERIFY_ENDPOINT', 'verify/') ), data=data ) return response.status_code def get_next_id(client, path): try: r = client.read(path) except EtcdKeyNotFound: return 0 max_key_result = max(r.children, key=lambda x: int(strip_nondigit(x.key))) if max_key_result is None: # No key found return 0 max_key = strip_nondigit(max_key_result.key.split("/")[-1]) # Get the last portion of key return int(max_key) + 1 def strip_nondigit(s): return "".join([char for char in s if char.isdigit()])