Get first otp checks running

This commit is contained in:
Nico Schottelius 2018-10-26 18:27:58 +02:00
parent cdc9da6bdc
commit de4469d148

View file

@ -4,7 +4,9 @@ from nameko.rpc import rpc
import json import json
from nameko.web.handlers import http from nameko.web.handlers import http
from nameko.timer import timer from nameko.timer import timer
from nameko.rpc import rpc, RpcProxy
import pyotp
class ServiceA: class ServiceA:
@ -45,10 +47,9 @@ class HttpService:
class ServiceTimer: class ServiceTimer:
name ="servicetimer" name ="servicetimer"
dispatch = EventDispatcher() dispatch = EventDispatcher()
@timer(interval=1) @timer(interval=3)
def ping(self): def ping(self):
# method executed every second # method executed every second
print("pong") print("pong")
@ -61,3 +62,58 @@ class LoggerService:
@event_handler("servicetimer", "ping") @event_handler("servicetimer", "ping")
def handle_event(self, payload): def handle_event(self, payload):
print("timing receive in logger: ", 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"