Updated confserver
Updated confserver to use tinydb and set users, tokens, authcodes
This commit is contained in:
parent
a4fec85717
commit
8806e804f0
4 changed files with 139 additions and 80 deletions
|
|
@ -54,17 +54,11 @@ def main():
|
|||
conf_server = bumper.ConfServer(
|
||||
conf_address_443,
|
||||
usessl=True,
|
||||
bumper_users=bumper.bumper_users_var,
|
||||
bumper_bots=bumper.bumper_bots_var,
|
||||
bumper_clients=bumper.bumper_clients_var,
|
||||
helperbot=mqtt_helperbot,
|
||||
)
|
||||
conf_server_2 = bumper.ConfServer(
|
||||
conf_address_8007,
|
||||
usessl=False,
|
||||
bumper_users=bumper.bumper_users_var,
|
||||
bumper_bots=bumper.bumper_bots_var,
|
||||
bumper_clients=bumper.bumper_clients_var,
|
||||
helperbot=mqtt_helperbot,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -67,37 +67,114 @@ class BumperUser(object):
|
|||
self.authcodes = []
|
||||
self.bots = []
|
||||
|
||||
def add_device(self, devid):
|
||||
if not devid in self.devices:
|
||||
self.devices.append(devid)
|
||||
def asdict(self):
|
||||
return {
|
||||
"userid": self.userid,
|
||||
"devices": self.devices,
|
||||
"tokens": self.tokens,
|
||||
"authcodes": self.authcodes,
|
||||
"bots": self.bots,
|
||||
}
|
||||
|
||||
def remove_device(self, devid):
|
||||
if devid in self.devices:
|
||||
self.devices.remove(devid)
|
||||
def user_add(userid):
|
||||
newuser = BumperUser()
|
||||
newuser.userid = userid
|
||||
|
||||
def add_token(self, token):
|
||||
if not token in self.tokens:
|
||||
self.tokens.append(token)
|
||||
user = user_get(userid)
|
||||
if not user:
|
||||
bumperlog.info("Adding new user with userid: {}".format(newuser.userid))
|
||||
user_full_upsert(newuser.asdict())
|
||||
|
||||
def revoke_token(self, token):
|
||||
if token in self.tokens:
|
||||
self.tokens.remove(token)
|
||||
def user_get(userid):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
return users.get(User.userid == userid)
|
||||
|
||||
def add_authcode(self, authcode):
|
||||
if not authcode in self.authcodes:
|
||||
self.authcodes.append(authcode)
|
||||
def user_full_upsert(user):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
users.upsert(user, User.did == user['userid'])
|
||||
|
||||
def revoke_authcode(self, authcode):
|
||||
if authcode in self.authcodes:
|
||||
self.authcodes.remove(authcode)
|
||||
def user_add_device(userid, devid):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
userdevices = list(user['devices'])
|
||||
if not devid in userdevices:
|
||||
userdevices.append(devid)
|
||||
|
||||
def add_bot(self, botdid):
|
||||
if not botdid in self.bots:
|
||||
self.bots.append(botdid)
|
||||
users.upsert({'devices': userdevices}, User.userid == userid)
|
||||
|
||||
def remove_bot(self, botdid):
|
||||
if botdid in self.bots:
|
||||
self.bots.remove(botdid)
|
||||
def user_remove_device(userid, devid):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
userdevices = list(user['devices'])
|
||||
if devid in userdevices:
|
||||
userdevices.remove(devid)
|
||||
|
||||
users.upsert({'devices': userdevices}, User.userid == userid)
|
||||
|
||||
def user_add_bot(userid, did):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
userbots = list(user['bots'])
|
||||
if not did in userbots:
|
||||
userbots.append(did)
|
||||
|
||||
users.upsert({'bots': userbots}, User.userid == userid)
|
||||
|
||||
def user_remove_bot(userid, did):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
userbots = list(user['bots'])
|
||||
if did in userbots:
|
||||
userbots.remove(did)
|
||||
|
||||
users.upsert({'bots': userbots}, User.userid == userid)
|
||||
|
||||
|
||||
def user_add_token(userid, token):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
usertokens = list(user['tokens'])
|
||||
if not token in usertokens:
|
||||
usertokens.append(token)
|
||||
|
||||
users.upsert({'tokens': usertokens}, User.userid == userid)
|
||||
|
||||
def user_revoke_token(userid, token):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
usertokens = list(user['tokens'])
|
||||
if token in usertokens:
|
||||
usertokens.remove(token)
|
||||
|
||||
users.upsert({'tokens': usertokens}, User.userid == userid)
|
||||
|
||||
def user_add_authcode(userid, authcode):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
userauthcodes = list(user['authcodes'])
|
||||
if not authcode in userauthcodes:
|
||||
userauthcodes.append(authcode)
|
||||
|
||||
users.upsert({'authcodes': userauthcodes}, User.userid == userid)
|
||||
|
||||
def user_revoke_authcode(userid, authcode):
|
||||
users = db_get().table('users')
|
||||
User = Query()
|
||||
user = users.get(User.userid == userid)
|
||||
userauthcodes = list(user['authcodes'])
|
||||
if authcode in userauthcodes:
|
||||
userauthcodes.remove(authcode)
|
||||
|
||||
users.upsert({'authcodes': userauthcodes}, User.userid == userid)
|
||||
|
||||
|
||||
class VacBotDevice(object):
|
||||
|
|
|
|||
|
|
@ -37,21 +37,13 @@ logging.getLogger("aiohttp.access").addFilter(aiohttp_filter())
|
|||
|
||||
|
||||
class ConfServer:
|
||||
bumper_clients = contextvars.ContextVar
|
||||
bumper_bots = contextvars.ContextVar
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
address,
|
||||
usessl=False,
|
||||
bumper_users=contextvars.ContextVar,
|
||||
bumper_bots=contextvars.ContextVar,
|
||||
bumper_clients=contextvars.ContextVar,
|
||||
helperbot=None,
|
||||
):
|
||||
self.bumper_users = bumper_users
|
||||
self.bumper_bots = bumper_bots
|
||||
self.bumper_clients = bumper_clients
|
||||
self.helperbot = helperbot
|
||||
self.usessl = usessl
|
||||
self.address = address
|
||||
|
|
@ -193,17 +185,17 @@ class ConfServer:
|
|||
if (
|
||||
not user_devid == ""
|
||||
): # Performing basic "auth" using devid, super insecure
|
||||
users = self.bumper_users.get()
|
||||
users = bumper.db_get().table('users').all()
|
||||
for user in users:
|
||||
if user_devid in user.devices:
|
||||
if user_devid in user['devices']:
|
||||
tmpaccesstoken = ""
|
||||
if "checkLogin" in request.path:
|
||||
if request.query[
|
||||
"accessToken"
|
||||
] in user.tokens and request.query[
|
||||
] in user['tokens'] and request.query[
|
||||
"uid"
|
||||
] == "fuid_{}".format(
|
||||
user.userid
|
||||
user['userid']
|
||||
):
|
||||
tmpaccesstoken = request.query["accessToken"]
|
||||
body = {
|
||||
|
|
@ -212,9 +204,9 @@ class ConfServer:
|
|||
"accessToken": tmpaccesstoken, # Random chars 32 length
|
||||
"country": countrycode,
|
||||
"email": "null@null.com",
|
||||
"uid": "fuid_{}".format(user.userid),
|
||||
"uid": "fuid_{}".format(user['userid']),
|
||||
"username": "fusername_{}".format(
|
||||
user.userid
|
||||
user['userid']
|
||||
),
|
||||
},
|
||||
"msg": "操作成功",
|
||||
|
|
@ -230,7 +222,7 @@ class ConfServer:
|
|||
else:
|
||||
if tmpaccesstoken == "":
|
||||
tmpaccesstoken = uuid.uuid4().hex
|
||||
user.add_token(tmpaccesstoken)
|
||||
bumper.user_add_token(user['userid'],tmpaccesstoken)
|
||||
|
||||
body = {
|
||||
"code": bumper.RETURN_API_SUCCESS,
|
||||
|
|
@ -238,13 +230,12 @@ class ConfServer:
|
|||
"accessToken": tmpaccesstoken, # Random chars 32 length
|
||||
"country": countrycode,
|
||||
"email": "null@null.com",
|
||||
"uid": "fuid_{}".format(user.userid),
|
||||
"username": "fusername_{}".format(user.userid),
|
||||
"uid": "fuid_{}".format(user['userid']),
|
||||
"username": "fusername_{}".format(user['userid']),
|
||||
},
|
||||
"msg": "操作成功",
|
||||
"time": bumper.get_milli_time(time.time()),
|
||||
}
|
||||
self.bumper_users.set(users)
|
||||
|
||||
return web.json_response(body)
|
||||
|
||||
|
|
@ -270,31 +261,31 @@ class ConfServer:
|
|||
countrycode = country
|
||||
|
||||
tmpaccesstoken = ""
|
||||
users = self.bumper_users.get()
|
||||
bots = self.bumper_bots.get()
|
||||
users = bumper.db_get().table('users').all()
|
||||
bots = bumper.db_get().table('bots').all()
|
||||
|
||||
if len(users) > 0:
|
||||
tmpuser = users[0]
|
||||
tmpuser.add_device(user_devid)
|
||||
bumper.user_add_device(tmpuser['userid'], user_devid)
|
||||
else:
|
||||
tmpuser = bumper.BumperUser("tmpuser")
|
||||
users.append(tmpuser)
|
||||
tmpuser.add_device(user_devid)
|
||||
bumper.user_add("tmpuser")
|
||||
tmpuser = bumper.user_get("tmpuser")
|
||||
bumper.user_add_device(tmpuser['userid'], user_devid)
|
||||
|
||||
for bot in bots:
|
||||
tmpuser.add_bot(bot.did)
|
||||
bumper.user_add_bot(tmpuser['userid'], bot['did'])
|
||||
|
||||
if "checkLogin" in request.path:
|
||||
tmpaccesstoken = request.query["accessToken"]
|
||||
tmpuser.add_token(tmpaccesstoken)
|
||||
bumper.user_add_token(tmpuser['userid'], tmpaccesstoken)
|
||||
body = {
|
||||
"code": bumper.RETURN_API_SUCCESS,
|
||||
"data": {
|
||||
"accessToken": tmpaccesstoken, # Random chars 32 length
|
||||
"country": countrycode,
|
||||
"email": "null@null.com",
|
||||
"uid": "fuid_{}".format(tmpuser.userid),
|
||||
"username": "fusername_{}".format(tmpuser.userid),
|
||||
"uid": "fuid_{}".format(tmpuser['userid']),
|
||||
"username": "fusername_{}".format(tmpuser['userid']),
|
||||
},
|
||||
"msg": "操作成功",
|
||||
"time": bumper.get_milli_time(time.time()),
|
||||
|
|
@ -302,7 +293,7 @@ class ConfServer:
|
|||
else:
|
||||
if tmpaccesstoken == "":
|
||||
tmpaccesstoken = uuid.uuid4().hex
|
||||
tmpuser.add_token(tmpaccesstoken)
|
||||
bumper.user_add_token(tmpuser['userid'], tmpaccesstoken)
|
||||
|
||||
body = {
|
||||
"code": bumper.RETURN_API_SUCCESS,
|
||||
|
|
@ -310,13 +301,12 @@ class ConfServer:
|
|||
"accessToken": tmpaccesstoken, # Random chars 32 length
|
||||
"country": countrycode,
|
||||
"email": "null@null.com",
|
||||
"uid": "fuid_{}".format(tmpuser.userid),
|
||||
"username": "fusername_{}".format(tmpuser.userid),
|
||||
"uid": "fuid_{}".format(tmpuser['userid']),
|
||||
"username": "fusername_{}".format(tmpuser['userid']),
|
||||
},
|
||||
"msg": "操作成功",
|
||||
"time": bumper.get_milli_time(time.time()),
|
||||
}
|
||||
self.bumper_users.set(users)
|
||||
|
||||
return body
|
||||
|
||||
|
|
@ -327,15 +317,15 @@ class ConfServer:
|
|||
try:
|
||||
user_devid = request.match_info.get("devid", "")
|
||||
if not user_devid == "":
|
||||
users = self.bumper_users.get()
|
||||
|
||||
users = bumper.db_get().table('users').all()
|
||||
for user in users:
|
||||
if user_devid in user.devices:
|
||||
if user_devid in user['devices']:
|
||||
if (
|
||||
request.query["uid"] == "fuid_{}".format(user.userid)
|
||||
and request.query["accessToken"] in user.tokens
|
||||
request.query["uid"] == "fuid_{}".format(user['userid'])
|
||||
and request.query["accessToken"] in user['tokens']
|
||||
):
|
||||
user.revoke_token(request.query["accessToken"])
|
||||
self.bumper_users.set(users)
|
||||
bumper.user_revoke_token(user['userid'],request.query["accessToken"])
|
||||
|
||||
body = {
|
||||
"code": bumper.RETURN_API_SUCCESS,
|
||||
|
|
@ -354,16 +344,16 @@ class ConfServer:
|
|||
|
||||
user_devid = request.match_info.get("devid", "")
|
||||
if not user_devid == "":
|
||||
users = self.bumper_users.get()
|
||||
users = bumper.db_get().table('users').all()
|
||||
if len(users) > 0:
|
||||
for user in users:
|
||||
if (
|
||||
user_devid in user.devices
|
||||
and request.query["accessToken"] in user.tokens
|
||||
user_devid in user['devices']
|
||||
and request.query["accessToken"] in user['tokens']
|
||||
):
|
||||
countrycode = request.match_info.get("country", "us")
|
||||
tmpauthcode = "{}_{}".format(countrycode, uuid.uuid4().hex)
|
||||
user.add_authcode(tmpauthcode)
|
||||
bumper.user_add_authcode(user['userid'], tmpauthcode)
|
||||
|
||||
body = {
|
||||
"code": bumper.RETURN_API_SUCCESS,
|
||||
|
|
@ -374,7 +364,6 @@ class ConfServer:
|
|||
"msg": "操作成功",
|
||||
"time": bumper.get_milli_time(time.time()),
|
||||
}
|
||||
self.bumper_users.set(users)
|
||||
return web.json_response(body)
|
||||
|
||||
body = {
|
||||
|
|
@ -552,11 +541,11 @@ class ConfServer:
|
|||
body = {"result": "ok", "ip": "47.88.66.164", "port": 8005}
|
||||
elif todo == "loginByItToken":
|
||||
|
||||
users = self.bumper_users.get()
|
||||
users = bumper.db_get().table('users').all()
|
||||
for user in users:
|
||||
if (
|
||||
postbody["userId"] == "fuid_{}".format(user.userid)
|
||||
and postbody["token"] in user.authcodes
|
||||
postbody["userId"] == "fuid_{}".format(user['userid'])
|
||||
and postbody["token"] in user['authcodes']
|
||||
):
|
||||
body = {
|
||||
"resource": postbody["resource"],
|
||||
|
|
@ -586,7 +575,6 @@ class ConfServer:
|
|||
"\r\n POST: {} \r\n Response: {}".format(postbody, body)
|
||||
)
|
||||
|
||||
|
||||
return web.json_response(body)
|
||||
|
||||
except Exception as e:
|
||||
|
|
|
|||
|
|
@ -404,7 +404,7 @@ class BumperMQTTServer_Plugin:
|
|||
clientresource = didsplit[1].split("/")[1]
|
||||
client = bumper.client_get(clientresource)
|
||||
if client:
|
||||
bumper.client_set_mqtt(client['userid'], False)
|
||||
bumper.client_set_mqtt(client['resource'], False)
|
||||
|
||||
except Exception as e:
|
||||
mqttserverlog.exception("{}".format(e))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue