Get first otp checks running

This commit is contained in:
Nico Schottelius 2018-10-26 18:27:58 +02:00
parent cdc9da6bdc
commit de4469d148
1 changed files with 58 additions and 2 deletions

View File

@ -4,7 +4,9 @@ from nameko.rpc import rpc
import json
from nameko.web.handlers import http
from nameko.timer import timer
from nameko.rpc import rpc, RpcProxy
import pyotp
class ServiceA:
@ -45,10 +47,9 @@ class HttpService:
class ServiceTimer:
name ="servicetimer"
dispatch = EventDispatcher()
@timer(interval=1)
@timer(interval=3)
def ping(self):
# method executed every second
print("pong")
@ -61,3 +62,58 @@ class LoggerService:
@event_handler("servicetimer", "ping")
def handle_event(self, payload):
print("timing receive in logger: ", payload)
class OTPClient:
name = "generic-service-using-otp"
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
otp = RpcProxy("otp")
@timer(interval=3)
def auth(self):
token = self.totp.now()
print("Verifying using {}".format(token))
print("Auth1: {}".format(self.otp.verify("app1", token)))
print("Auth-wrongapp: {}".format(self.otp.verify("app2", token)))
print("Auth-noapp: {}".format(self.otp.verify("appNOAPP", token)))
class OTPSeed:
name = "generic-service-using-otp-seed"
otp = RpcProxy("otp")
@timer(interval=10)
def auth(self):
seed = otp.get_seed("app1")
totp = pyotp.TOTP(seed)
print("seed / token: {} {}".format(seed, token))
class OTPService:
name = "otp"
otp_tokens = {
'app1': 'JBSWY3DPEHPK3PXP',
'app2': 'AIEIU3IAAA'
}
@rpc
def get_seed(self, appid):
if appid in self.otp_tokens:
return self.otp_tokens[appid]
else:
return "NO SEED"
@rpc
def verify(self, appid, token):
if not appid in self.otp_tokens:
return "NO SUCH APP {}".format(appid)
totp = pyotp.TOTP(self.otp_tokens[appid])
if totp.verify(token, valid_window=3):
return "OK"
else:
return "FAIL"