1
+ import bcrypt
2
+ from Crypto .Cipher import AES
3
+ from Crypto .Util .Padding import pad , unpad
4
+ from binascii import b2a_hex , a2b_hex
1
5
from fastapi import APIRouter , Response
2
6
3
7
from core .ComikNetDB import AsyncMySQL
4
8
from models .requests import StandardResponse
5
9
from models .album import Origin
6
- from models .user import UserHistory
10
+ from models .user import UserHistory , Login_Form , Cloud_Reigister_Form
7
11
8
12
router = APIRouter (prefix = "/cloud" )
9
13
@@ -20,6 +24,44 @@ async def shutdown():
20
24
await db .close ()
21
25
22
26
27
+ @router .post ("/login" )
28
+ async def user_login (body : Login_Form ):
29
+ res = await db .search (
30
+ "UID, Password" ,
31
+ "user" ,
32
+ f'Username="{ body .username } "' ,
33
+ "1" ,
34
+ )
35
+
36
+ if res == ():
37
+ return StandardResponse (status_code = 401 , error_msg = "User not found" )
38
+
39
+ if bcrypt .checkpw (body .password .encode (), res [0 ]["Password" ].encode ()):
40
+ return StandardResponse (status_code = 200 , data = {"UID" : res [0 ]["UID" ]})
41
+ else :
42
+ return StandardResponse (status_code = 401 , error_msg = "Wrong password" )
43
+
44
+
45
+ @router .post ("/register" )
46
+ async def user_register (body : Cloud_Reigister_Form ):
47
+ cloud_hashed = bcrypt .hashpw (body .password .encode (), bcrypt .gensalt ()).decode ()
48
+ aes = AES .new (pad (body .password .encode (), 32 ), AES .MODE_ECB )
49
+ jm_encrypted_pwd = b2a_hex (
50
+ aes .encrypt (pad (body .jm_form .password .encode (), 32 ))
51
+ ).decode ()
52
+ pica_encrypted_pwd = b2a_hex (
53
+ aes .encrypt (pad (body .pica_form .password .encode (), 32 ))
54
+ ).decode ()
55
+
56
+ await db .insert (
57
+ "user" ,
58
+ "Username, Password, JM_Username, JM_Password, Pica_Username, Pica_Password" ,
59
+ f'"{ body .username } ","{ cloud_hashed } ","{ body .jm_form .username } ","{ jm_encrypted_pwd } ","{ body .pica_form .username } ","{ pica_encrypted_pwd } "' ,
60
+ )
61
+
62
+ return Response (status_code = 201 )
63
+
64
+
23
65
@router .get ("/history/user" )
24
66
async def get_history (
25
67
uid : str , page : int = 1 , isReverse : bool = False
@@ -46,18 +88,24 @@ async def delete_history(uid: str):
46
88
@router .post ("/record" )
47
89
async def update_history (uid : str , origin : Origin , aid : int , cid : int ):
48
90
res = await db .search (
49
- "*" , "history" , f"UID={ uid } AND Origin=\" { origin .value } \" AND AID={ aid } " , "1" , "update_time DESC"
91
+ "*" ,
92
+ "history" ,
93
+ f'UID={ uid } AND Origin="{ origin .value } " AND AID={ aid } ' ,
94
+ "1" ,
95
+ "update_time DESC" ,
50
96
)
51
97
52
98
if res == ():
53
99
await db .insert (
54
100
"history" ,
55
101
"UID, Origin, AID, CID, Update_Time" ,
56
- f" { uid } ,\ "{ origin .value } \ " ,{ aid } ,{ cid } ,NOW()" ,
102
+ f' { uid } ,"{ origin .value } ",{ aid } ,{ cid } ,NOW()' ,
57
103
)
58
104
else :
59
105
await db .update (
60
- "history" , f"CID={ cid } AND Origin=\" { origin .value } \" , update_time=NOW()" , f"UID={ uid } AND AID={ aid } "
106
+ "history" ,
107
+ f'CID={ cid } AND Origin="{ origin .value } ", update_time=NOW()' ,
108
+ f"UID={ uid } AND AID={ aid } " ,
61
109
)
62
110
63
111
return Response (status_code = 201 )
0 commit comments