From 9553afeb77a4861d829fc8f3924a00b6d5896d6f Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 5 Aug 2025 14:24:24 +0800 Subject: [PATCH] bugfix --- models/uapi.xlsx | Bin 17327 -> 17308 bytes models/uapiset.xlsx | Bin 16602 -> 16643 bytes models/upapp.xlsx | Bin 16838 -> 16756 bytes uapi/appapi.py | 136 ++++++++++++++------------------------------ 4 files changed, 42 insertions(+), 94 deletions(-) diff --git a/models/uapi.xlsx b/models/uapi.xlsx index 1e775a51db38cf00aa5c5ba6bb24e26ad59d6d14..03aa6ecf250a669992b14c7f58d4b9050e4fef1f 100644 GIT binary patch delta 4158 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 F{|BtwfM@^! diff --git a/models/uapiset.xlsx b/models/uapiset.xlsx index cdf493933f5bc34dfcf50bf90dd3d0880c94c9d2..db318360d041471060d7cf4a2e739b76f7850116 100644 GIT binary patch delta 3658 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 delta 3627 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 n!R7KERa0nGi^*{Ch0X5pa AIsgCw diff --git a/models/upapp.xlsx b/models/upapp.xlsx index 140e410877349846541d00522ad30a2900267459..946c6c69566d1bc325d22ccd5f20f4b83ddc14d6 100644 GIT binary patch delta 4187 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 Wx0JDl+8Pug*hFnrV6OV#^8W#QNZX45 delta 4305 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 diff --git a/uapi/appapi.py b/uapi/appapi.py index 3cabe6d..da330a5 100644 --- a/uapi/appapi.py +++ b/uapi/appapi.py @@ -15,7 +15,7 @@ def get_dbname(): dbname = f('uapi') return dbname -def build_manisdata(appid, apikey, secretkey): +def build_deererdata(appid, apikey, secretkey): """ this appid is isusses by upapp we connect to, secretkey is with the appid, is s fixed key from upapp @@ -29,17 +29,16 @@ def build_manisdata(appid, apikey, secretkey): def build_dearerdata(apikey): return f'Dearer {apikey}' -async def get_apikeys(sor, appid, orgid, userid): +async def get_apikeys(sor, appid, userid): ns = { 'appid':appid, - 'orgid':orgid, 'userid':userid, 'today':curDateString() } - sql = """select a.myid, b.apikey, b.secretkey from upapp a, upapikey b -where a.upappid = ${appid}$ - and b.userid = ${userid}$ - and b.orgid = ${orgid}$ + sql = """select a.myid, b.apikey, b.secretkey from upapp a, upappkey b +where a.id = b.upappid + and a.id = ${appid}$ + and b.owner = ${userid}$ and b.expired_date > ${today}$ and b.enabled_date <= ${today}$""" recs = await sor.sqlExe(sql, ns) @@ -48,13 +47,14 @@ where a.upappid = ${appid}$ return r return r -async def sync_users(request, upappid, orgid): +async def sync_users(request, upappid, userid): db = DBPools() dbname = get_dbname() async with db.sqlorContext(dbname) as sor: upapp = await get_upapp(sor, upappid) -async def dearer_header(request, appid): + +async def bearer_header(request, appid): db = DBPools() dbname = get_dbname() async with db.sqlorContext(dbname) as sor: @@ -66,7 +66,7 @@ async def dearer_header(request, appid): return dearer return None -async def manis_header(request, appid): +async def deerer_header(request, appid): db = DBPools() dbname = get_dbname() async with db.sqlorContext(dbname) as sor: @@ -74,14 +74,15 @@ async def manis_header(request, appid): r = await get_apikeys(sor, appid, u.userorgid, u.userid) if r is None: return None - manis = build_manisdata(r.myid, r.apikey, r.secretkey) + manis = build_deererdata(r.myid, r.apikey, r.secretkey) return manis return None class UAPI: - def __init__(self, env={}): + def __init__(self, request, env=DictObject()): self.te = MyTemplateEngine([], env=env) self.env = env + self.env.request.request = request self.auth_api = None self.auth_ret = None @@ -93,28 +94,38 @@ class UAPI: te = MyTemplateEngine([], env=self.env) return te.renders(tmplstr, ns) - async def cvt_upappapi2uapi(self, upappapiid, callerid, params={}): + async def get_uapis(self, upappid, uapiid, callerid, params={}): self.env.update(params) db = DBPools() dbname = get_dbname() uapi = None auth_uapi = None async with db.sqlorContext(dbname) as sor: - upappapi = await self.get_upappapis(sor, upappapiid) - kinfo = await self.get_orgapikey(sor, upappapi.upappid, callerid) + recs = await sor.R('uapi', {'id':uapiid}) + if len(recs)==0: + return None, None + uapi = recs[0] + kinfo = await self.get_userapikey(sor, upappid, callerid) self.env.update(kinfo) + apisets = await sor.R('uapiset', {'id': uapi.usid}) + if len(apisets) == 0: + return None, None + apiset = apisets[0] auth_uapi = None - if kinfo.auth_apiid: - auth_upapi = await self.get_upappapis(sor, kinfo.auth_apiid) - auth_uapi = await self.get_uapi(sor, kinfo.auth_upapi.uapiid) - uapi = await self.get_uapi(sor, upappapi.uapiid) + if apiset.auth_apiid: + uapis = await sor.R('uapi', {'id': apiset.auth_apiid}) + if len(uapis) == 0: + e = Exceptions(f'{upappid=}, {uapiid=}, {callerid=} {apiset.auth_apiid=} auth_apiid not found') + exception(f'{e=}\n{format_exc()}') + raise e + auth_uapi = uapi[0] return auth_uapi, uapi return None, None - async def __call__(self, upapiid, callerid, params={}): + async def __call__(self, upappid, upapiid, callerid, params={}): """ """ - auth_uapi, uapi = await self.cvt_upappapi2uapi(upapiid, + auth_uapi, uapi = await self.get_uapis(upapiid, callerid, params=params) if uapi is None: return @@ -123,8 +134,8 @@ class UAPI: async for line in self.stream_gen(uapi): yield line - async def request(self, upapiid, callerid, params={}): - auth_uapi, uapi = await self.cvt_upappapi2uapi(upapiid, + async def request(self, upappid, upapiid, callerid, params={}): + auth_uapi, uapi = await self.get_uapis(upapiid, callerid, params=params) if auth_uapi: await self.do_auth(auth_uapi) @@ -203,23 +214,7 @@ class UAPI: exception(f'{line=}\n{e=},{format_exc()}') return None - async def get_upappapis(self, sor, upapiid): - recs = await sor.R('upappapis', {'id': upapiid}) - if len(recs) < 1: - e = Exception(f'{upapiid} not found in table(upappapis)') - exception(f'{e}\n{format_exc()}') - raise e - return recs[0] - - async def get_uapi(self, sor, uapiid): - recs = await sor.R('uapi', {'id': uapiid}) - if len(recs) < 1: - e = Exception(f'{uapiid} not found in table(uapi)') - exception(f'{e}\n{format_exc()}') - raise e - return recs[0] - - async def get_orgapikey(self, sor, upappid, callerid): + async def get_userapikey(self, sor, upappid, callerid): """ argumemts: upappid: upappid which will make call to @@ -230,15 +225,15 @@ class UAPI: """ sql = """select a.myappid, -a.apisetid, -a.auth_apiid, +a.ownerid as appownerid, a.baseurl, -b.* +b.apikey, +b.secretkey from upapp a, upappkey b where a.id = b.upappid and a.id = ${appid}$ - and b.ownerid = ${orgid}$""" - recs = await sor.sqlExe(sql, {'appid':upappid, 'orgid': callerid}) + and b.ownerid = ${ownerid}$""" + recs = await sor.sqlExe(sql, {'appid':upappid, 'ownerid': callerid}) if len(recs) < 1: e = Exception(f'{appid=}, {callerid=} has not apikey') exception(f'{e}, {format_exc()}') @@ -247,55 +242,8 @@ where a.id = b.upappid return DictObject(**{ 'apikey':password_decode(r.apikey), 'secretkey':password_decode(r.secretkey), - 'apisetid': r.apisetid, - 'auth_apiid': r.auth_apiid, + 'baseurl':r.baseurl, + 'appownerid': r.appownerid, 'myappid': r.myappid }) - async def get_authapi(self, sor): - sql = "select * from jsonhttpapi where name = 'auth' and appid=${appid}$" - recs = await sor.sqlExe(sql, {'appid': self.appid}) - if len(recs): - return recs[0] - return None - - async def get_apiinfo(self, orgids, apiname): - db = DBPools() - dbname = get_serverenv('get_module_dbname')('uapi') - async with db.sqlorContext(dbname) as sor: - sql = """select c.baseurl, -c.name as appname, -b.*, -a.apikey, -a.secretkey -from upappkey a, jsonhttpapi b, upapp c -where - a.upappid=b.appid - and a.upappid = c.id - and b.appid = ${appid}$ - and b.name = ${apiname}$ - and a.ownerid = ${orgid}$ -""" - for orgid in orgids: - ns = { - "orgid": orgid, - "apiname": appname, - "appid": self.appid - } - recs = await sor.sqlExe(sql, ns) - if len(recs) > 0: - rec = recs[0] - rec.apikey = password_decode(rec.apikey) - if rec.secretkey: - rec.secretkey = password_decode(rec.secretkey) - if rec.need_auth and self.auth_api is None: - self.auth_api = await self.get_authapi(sor) - if rec.need_auth and self.auth_api is None: - e = Exception(f'{rec.appname} app has not auth api but need') - exception(f'{e=}, {format_exc()}') - raise e - rec.auth_api = self.auth_api - rec.apikey_orgid = orgid - return recs[0] - return None -