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