fix: align all downapikey operations to actual table schema (id,dappid,userid,apikey,enabled_date,expired_date)
This commit is contained in:
parent
5c527c1bb2
commit
e6d9f02dd4
76
dapi/dapi.py
76
dapi/dapi.py
@ -156,20 +156,20 @@ def return_success(data):
|
|||||||
}
|
}
|
||||||
|
|
||||||
async def get_orgid_by_dorgid(sor, dappid, dorgid):
|
async def get_orgid_by_dorgid(sor, dappid, dorgid):
|
||||||
d = {
|
"""检查外部机构ID(dorgid)在本系统中是否已存在。
|
||||||
'dappid':dappid,
|
|
||||||
'dorgid':dorgid
|
dorgid 即为本系统 orgid,直接检查 organization 表。
|
||||||
}
|
"""
|
||||||
recs = await sor.R('downapikey', d)
|
recs = await sor.R('organization', {'id': dorgid})
|
||||||
if len(recs) < 1:
|
if len(recs) < 1:
|
||||||
return None
|
return None
|
||||||
return recs[0].orgid
|
return dorgid
|
||||||
|
|
||||||
async def check_duserid_exists(sor, dappid, dorgid, duserid):
|
async def check_duserid_exists(sor, dappid, duserid):
|
||||||
|
"""检查用户(dappid+duserid)是否已存在apikey"""
|
||||||
d = {
|
d = {
|
||||||
'dappid': dappid,
|
'dappid': dappid,
|
||||||
'duserid': duserid,
|
'userid': duserid,
|
||||||
'dorgid': dorgid
|
|
||||||
}
|
}
|
||||||
recs = await sor.R('downapikey', d)
|
recs = await sor.R('downapikey', d)
|
||||||
if len(recs):
|
if len(recs):
|
||||||
@ -188,18 +188,19 @@ async def add_user(sor, user):
|
|||||||
await create_user(sor, user, roles=user.get('roles'))
|
await create_user(sor, user, roles=user.get('roles'))
|
||||||
return id
|
return id
|
||||||
|
|
||||||
async def add_apikey(sor, dappid, dorgid, duserid, orgid, userid):
|
async def add_apikey(sor, dappid, userid):
|
||||||
|
"""为用户创建apikey。
|
||||||
|
|
||||||
|
downapikey表字段: id, dappid, userid, apikey, enabled_date, expired_date
|
||||||
|
duserid = 本系统 userid,直接存入 userid 字段。
|
||||||
|
"""
|
||||||
apikey = getID()
|
apikey = getID()
|
||||||
d = {
|
d = {
|
||||||
'id': getID(),
|
'id': getID(),
|
||||||
'dappid': dappid,
|
'dappid': dappid,
|
||||||
'dorgid': dorgid,
|
|
||||||
'duserid': duserid,
|
|
||||||
'orgid': orgid,
|
|
||||||
'userid': userid,
|
'userid': userid,
|
||||||
'apikey': apikey,
|
'apikey': apikey,
|
||||||
'enabled': '1',
|
'enabled_date': curDateString(),
|
||||||
'created_at': curDateString(),
|
|
||||||
'expired_date': '9999-12-31'
|
'expired_date': '9999-12-31'
|
||||||
}
|
}
|
||||||
await sor.C('downapikey', d)
|
await sor.C('downapikey', d)
|
||||||
@ -219,45 +220,32 @@ async def create_user_apikey(sor, dappid, user_id, user_orgid, **kwargs):
|
|||||||
dict: {'status': 'success'|'error', 'apikey': str, 'message': str}
|
dict: {'status': 'success'|'error', 'apikey': str, 'message': str}
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 检查apikey是否已存在
|
# downapikey表实际字段: id, dappid, userid, apikey, enabled_date, expired_date
|
||||||
|
# 按(dappid, userid)唯一性查询
|
||||||
existing = await sor.R('downapikey', {
|
existing = await sor.R('downapikey', {
|
||||||
'dappid': dappid,
|
'dappid': dappid,
|
||||||
'duserid': user_id,
|
'userid': user_id,
|
||||||
'dorgid': user_orgid
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if existing:
|
if existing:
|
||||||
# 验证关联的 users 记录是否仍然存在
|
# 返回现有apikey
|
||||||
user_records = await sor.R('users', {'id': existing[0].userid})
|
f = get_serverenv('password_decode')
|
||||||
if not user_records:
|
apikey = f(existing[0].apikey)
|
||||||
# downapikey 有记录但 users 表无对应用户(脏数据),清理后重新创建
|
return {
|
||||||
debug(f'create_user_apikey: downapikey exists but user {existing[0].userid} not found, recreating')
|
'status': 'success',
|
||||||
await sor.D('downapikey', {'id': existing[0].id})
|
'apikey': apikey,
|
||||||
else:
|
'user_id': user_id,
|
||||||
# 返回现有apikey
|
'message': '用户apikey已存在'
|
||||||
f = get_serverenv('password_decode')
|
}
|
||||||
apikey = f(existing[0].apikey)
|
|
||||||
return {
|
|
||||||
'status': 'success',
|
|
||||||
'apikey': apikey,
|
|
||||||
'user_id': user_id,
|
|
||||||
'message': '用户apikey已存在'
|
|
||||||
}
|
|
||||||
|
|
||||||
# 创建新apikey
|
# 创建新apikey
|
||||||
apikey_id = getID()
|
|
||||||
apikey_value = getID()
|
apikey_value = getID()
|
||||||
|
|
||||||
ns = {
|
ns = {
|
||||||
'id': apikey_id,
|
'id': getID(),
|
||||||
'dappid': dappid,
|
'dappid': dappid,
|
||||||
'dorgid': user_orgid,
|
|
||||||
'duserid': user_id,
|
|
||||||
'orgid': user_orgid,
|
|
||||||
'userid': user_id,
|
'userid': user_id,
|
||||||
'apikey': password_encode(apikey_value),
|
'apikey': password_encode(apikey_value),
|
||||||
'enabled': '1',
|
'enabled_date': curDateString(),
|
||||||
'created_at': curDateString(),
|
|
||||||
'expired_date': '9999-12-31'
|
'expired_date': '9999-12-31'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,13 +291,13 @@ async def sync_user(request, params_kw, *args, **kw):
|
|||||||
return return_error(-2)
|
return return_error(-2)
|
||||||
u['orgid'] = o['id']
|
u['orgid'] = o['id']
|
||||||
u['roles'] = roles
|
u['roles'] = roles
|
||||||
exists = check_duserid_exists(sor, dappid, dorgid, duserid)
|
exists = check_duserid_exists(sor, dappid, duserid)
|
||||||
if exists:
|
if exists:
|
||||||
return return_error(-1)
|
return return_error(-1)
|
||||||
userid = await add_user(sor, u)
|
userid = await add_user(sor, u)
|
||||||
if userid is None:
|
if userid is None:
|
||||||
return return_error(-3)
|
return return_error(-3)
|
||||||
apikey = await add_apikey(sor, dappid, orgid, userid, u)
|
apikey = await add_apikey(sor, dappid, userid)
|
||||||
if apikey is None:
|
if apikey is None:
|
||||||
return return_error(-4)
|
return return_error(-4)
|
||||||
ret_users.append({
|
ret_users.append({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user