You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ADN-DMR-Peer-Server/API.py

86 lines
2.3 KiB

from hashlib import blake2b
from spyne import ServiceBase, rpc, Integer, Decimal, UnsignedInteger32, Unicode, Iterable, error
from dmr_utils3.utils import bytes_3
class FD_APIUserDefinedContext(object):
def __init__(self,CONFIG,APIQUEUE,BRIDGES):
self.CONFIG = CONFIG
self.APIQUEUE = APIQUEUE
self.BRIDGES = BRIDGES
def getconfig(self):
return self.CONFIG
def getapiqueue(self):
return self.APIQUEUE
def getbridges(self):
return self.BRIDGES
def validateKey(self,dmrid,key):
systems = self.CONFIG['SYSTEMS']
dmrid = bytes_3(dmrid)
for system in systems:
for peerid in systems[system]['PEERS']:
if peerid == dmrid:
if key == _hash:
return(systems[system]['_opt_key'])
else:
return(False)
def reset(self,system):
self.CONFIG['SYSTEMS'][system]['_reset'] = True
def queue(self,system,options):
self.APIQUEUE.append((system,options))
class FD_API(ServiceBase):
_version = 0.1
#def validateHMAC(_hmac,_system):
# self._config = self._CONFIG['SYSTEMS'][_system]
# _h = blake2b(key=self._config['_opt_key'], digest_size=16)
# _h.update('validate')
# _hash = _h.digest()
# if _hash == _hmac:
# return(True)
# else:
# return(False)
#return API version
@rpc(Unicode, _returns=Decimal())
def version(ctx, sessionid):
return(FD_API._version)
@rpc(Unicode,Unicode, _returns=Unicode())
def reset(ctx,dmrid,key):
system = ctx.udc.validateKey(dmrid,key)
if system:
ctx.udc.reset(system)
else:
raise error.InvalidCredentialsError()
@rpc(UnsignedInteger32,UnsignedInteger32,Unicode,_returns=Unicode())
def setoptions(ctx,dmrid,key,options):
system = ctx.udc.validateKey(dmrid,key)
if system:
ctx.udc.queue(system,options)
else:
raise error.InvalidCredentialsError()
@rpc(UnsignedInteger32,_returns=(Unicode()))
def killserver(ctx,killkey):
pass
@rpc(_returns=Unicode())
def getconfig(ctx):
return ctx.udc.getconfig()
@rpc(_returns=Unicode())
def getbridges(ctx):
return ctx.udc.getbridges()

Powered by TurnKey Linux.