This commit is contained in:
@@ -783,6 +783,9 @@ def write_user_data(user_data):
|
||||
password_salt=pwd_salt_b64,
|
||||
permission=perm_val,
|
||||
email=user_data.get('email'),
|
||||
registration_code=(user_data.get('registration_code') or None),
|
||||
can_manage_registration_codes=int(user_data.get('can_manage_registration_codes') or 0),
|
||||
registration_manage_keys=list(user_data.get('registration_manage_keys') or []),
|
||||
key=list(user_data.get('key') or []),
|
||||
manage_key=list(user_data.get('manage_key') or []),
|
||||
)
|
||||
@@ -836,6 +839,9 @@ def get_all_users():
|
||||
"username": hit.username,
|
||||
"permission": int(hit.permission),
|
||||
"email": getattr(hit, 'email', None),
|
||||
"registration_code": getattr(hit, 'registration_code', None),
|
||||
"can_manage_registration_codes": int(getattr(hit, 'can_manage_registration_codes', 0) or 0),
|
||||
"registration_manage_keys": list(getattr(hit, 'registration_manage_keys', []) or []),
|
||||
"key": list(getattr(hit, 'key', []) or []),
|
||||
"manage_key": list(getattr(hit, 'manage_key', []) or []),
|
||||
})
|
||||
@@ -857,6 +863,9 @@ def get_user_by_id(user_id):
|
||||
"username": hit.username,
|
||||
"permission": int(hit.permission),
|
||||
"email": getattr(hit, 'email', None),
|
||||
"registration_code": getattr(hit, 'registration_code', None),
|
||||
"can_manage_registration_codes": int(getattr(hit, 'can_manage_registration_codes', 0) or 0),
|
||||
"registration_manage_keys": list(getattr(hit, 'registration_manage_keys', []) or []),
|
||||
"key": list(getattr(hit, 'key', []) or []),
|
||||
"manage_key": list(getattr(hit, 'manage_key', []) or []),
|
||||
}
|
||||
@@ -880,7 +889,7 @@ def delete_user_by_id(user_id):
|
||||
print(f"删除用户失败: {str(e)}")
|
||||
return False
|
||||
|
||||
def update_user_by_id(user_id, username=None, permission=None, password=None, key=None):
|
||||
def update_user_by_id(user_id, username=None, permission=None, password=None, key=None, manage_key=None, registration_code=None, can_manage_registration_codes=None, registration_manage_keys=None):
|
||||
try:
|
||||
search = UserDocument.search()
|
||||
search = search.query("term", user_id=int(user_id))
|
||||
@@ -898,9 +907,118 @@ def update_user_by_id(user_id, username=None, permission=None, password=None, ke
|
||||
doc.password_salt = salt_b64
|
||||
if key is not None:
|
||||
doc.key = list(key)
|
||||
if manage_key is not None:
|
||||
doc.manage_key = list(manage_key)
|
||||
if registration_code is not None:
|
||||
doc.registration_code = str(registration_code) if str(registration_code).strip() else None
|
||||
if can_manage_registration_codes is not None:
|
||||
try:
|
||||
doc.can_manage_registration_codes = int(can_manage_registration_codes)
|
||||
except Exception:
|
||||
doc.can_manage_registration_codes = 0
|
||||
if registration_manage_keys is not None:
|
||||
doc.registration_manage_keys = list(registration_manage_keys)
|
||||
doc.save()
|
||||
return True
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"更新用户失败: {str(e)}")
|
||||
return False
|
||||
|
||||
def _rc_request_now_iso():
|
||||
return datetime.now(timezone.utc).isoformat()
|
||||
|
||||
def create_registration_code_manage_request(user_id: int, username: str, reason: str):
|
||||
try:
|
||||
rid = uuid.uuid4().hex
|
||||
doc = {
|
||||
"kind": "registration_code_manage_request",
|
||||
"request_id": rid,
|
||||
"user_id": int(user_id),
|
||||
"username": str(username or ""),
|
||||
"reason": str(reason or ""),
|
||||
"status": "pending",
|
||||
"created_at": _rc_request_now_iso(),
|
||||
}
|
||||
es.index(index=GLOBAL_INDEX_NAME, id=rid, body=doc)
|
||||
return rid
|
||||
except Exception as e:
|
||||
print(f"创建注册码管理申请失败: {str(e)}")
|
||||
return None
|
||||
|
||||
def find_pending_registration_code_manage_request(user_id: int):
|
||||
try:
|
||||
body = {
|
||||
"size": 1,
|
||||
"query": {
|
||||
"bool": {
|
||||
"must": [
|
||||
{"term": {"kind": "registration_code_manage_request"}},
|
||||
{"term": {"user_id": int(user_id)}},
|
||||
{"term": {"status": "pending"}},
|
||||
]
|
||||
}
|
||||
},
|
||||
"sort": [{"created_at": {"order": "desc"}}],
|
||||
}
|
||||
resp = es.search(index=GLOBAL_INDEX_NAME, body=body)
|
||||
hits = (resp.get("hits") or {}).get("hits") or []
|
||||
if not hits:
|
||||
return None
|
||||
h = hits[0]
|
||||
src = h.get("_source") or {}
|
||||
src["_id"] = h.get("_id")
|
||||
return src
|
||||
except Exception as e:
|
||||
print(f"查询注册码管理申请失败: {str(e)}")
|
||||
return None
|
||||
|
||||
def get_registration_code_manage_request(request_id: str):
|
||||
try:
|
||||
resp = es.get(index=GLOBAL_INDEX_NAME, id=str(request_id))
|
||||
src = resp.get("_source") or {}
|
||||
if (src.get("kind") or "") != "registration_code_manage_request":
|
||||
return None
|
||||
src["_id"] = resp.get("_id")
|
||||
return src
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def list_registration_code_manage_requests(status: str = None, limit: int = 200):
|
||||
try:
|
||||
must = [{"term": {"kind": "registration_code_manage_request"}}]
|
||||
if status:
|
||||
must.append({"term": {"status": str(status)}})
|
||||
body = {
|
||||
"size": max(1, min(int(limit or 200), 500)),
|
||||
"query": {"bool": {"must": must}},
|
||||
"sort": [{"created_at": {"order": "desc"}}],
|
||||
}
|
||||
resp = es.search(index=GLOBAL_INDEX_NAME, body=body)
|
||||
hits = (resp.get("hits") or {}).get("hits") or []
|
||||
out = []
|
||||
for h in hits:
|
||||
src = h.get("_source") or {}
|
||||
src["_id"] = h.get("_id")
|
||||
out.append(src)
|
||||
return out
|
||||
except Exception as e:
|
||||
print(f"列出注册码管理申请失败: {str(e)}")
|
||||
return []
|
||||
|
||||
def decide_registration_code_manage_request(request_id: str, status: str, reviewed_by: int, reviewer_note: str = None):
|
||||
try:
|
||||
sid = str(status or "").strip().lower()
|
||||
if sid not in ("approved", "rejected"):
|
||||
return False
|
||||
doc = {
|
||||
"status": sid,
|
||||
"reviewed_at": _rc_request_now_iso(),
|
||||
"reviewed_by": int(reviewed_by),
|
||||
"reviewer_note": str(reviewer_note or ""),
|
||||
}
|
||||
es.update(index=GLOBAL_INDEX_NAME, id=str(request_id), body={"doc": doc})
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"审批注册码管理申请失败: {str(e)}")
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user