From 74226f71baf31d9d96bb4d670f6281987909e967 Mon Sep 17 00:00:00 2001 From: Kum1ta Date: Sat, 3 Aug 2024 17:21:40 +0200 Subject: [PATCH] Websocket : - New class "User" in server - Doing the auth --- site/module_livechat/listError.txt | 4 +- site/module_livechat/server/Class/User.py | 82 ++++++++++++++++++ .../Class/__pycache__/User.cpython-312.pyc | Bin 0 -> 4414 bytes site/module_livechat/server/main.py | 46 ++++------ .../getPrivateListUser.cpython-310.pyc | Bin 1118 -> 0 bytes .../getPrivateListUser.cpython-312.pyc | Bin 0 -> 1210 bytes .../__pycache__/login.cpython-310.pyc | Bin 533 -> 0 bytes .../__pycache__/login.cpython-312.pyc | Bin 0 -> 3871 bytes .../server/typeRequets/getPrivateListUser.py | 20 +++-- .../server/typeRequets/login.py | 77 ++++++++++++++-- site/module_livechat/site/main.js | 36 ++++---- .../site/typeResponse/typePrivateListUser.js | 13 ++- site/module_livechat/site/websocket.js | 22 ++++- 13 files changed, 228 insertions(+), 72 deletions(-) create mode 100644 site/module_livechat/server/Class/User.py create mode 100644 site/module_livechat/server/Class/__pycache__/User.cpython-312.pyc delete mode 100644 site/module_livechat/server/typeRequets/__pycache__/getPrivateListUser.cpython-310.pyc create mode 100644 site/module_livechat/server/typeRequets/__pycache__/getPrivateListUser.cpython-312.pyc delete mode 100644 site/module_livechat/server/typeRequets/__pycache__/login.cpython-310.pyc create mode 100644 site/module_livechat/server/typeRequets/__pycache__/login.cpython-312.pyc diff --git a/site/module_livechat/listError.txt b/site/module_livechat/listError.txt index c12a44b..4c34cb0 100644 --- a/site/module_livechat/listError.txt +++ b/site/module_livechat/listError.txt @@ -6,4 +6,6 @@ - 9002 : Invalid json - 9003 : Invalid path - 9004 : Invalid type -- 9005 : Invalid request \ No newline at end of file +- 9005 : Invalid request +- 9006 : Invalid login type +- 9007 : Invalid username or password diff --git a/site/module_livechat/server/Class/User.py b/site/module_livechat/server/Class/User.py new file mode 100644 index 0000000..1d1f304 --- /dev/null +++ b/site/module_livechat/server/Class/User.py @@ -0,0 +1,82 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# User.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: edbernar pTqRi9&Gilpxa-lZBKhvy=lq zr!1yivSW^<+_Dp(B)b55WH&&sECKY%9)Nz?3ouX;!ahU%mZqo^NrOE72egdPaw;-~ z-_{s_c~T)c=yx{Nt6R(y5Pr#Gl#&XqkhHy9iG+n@Io5YM{?%7cPE{hjg_6q6&@>z$ zI$bOjl#H&(A#2`GbCBLGX370MOiT%*VSx6H>8`&6|I=Lrs!e85H%%#RYm(~ zcvdL1{f*fB#VIAG$Z{!mrkI(YQVO~jI}IDe-kNyxY)s4QN^GhqPv@0%K6^vSyg#YO zfQK838athz)U+5XBznDMxYOxuA*-j;Wj~*4pa=0Z1T&=W^xQ7Y7M?KoBWbM067_xk zGe^H4-GW7uY1j-ATa_mP*;SRk&Z;aCQ+-jcz9CzE$W=(rYMEWMC#Y^XO_cyVq^cJ> z4S5Qw;KjsnrPH#K2kCs4bQ~K%s$Kx?!i_#=V;hXP_NxI{%h(nN1Vi8!d|N*U@CJA) zgaHNX3$k#JeUE|Hv?>B!)6~hIp)WKm4F#`_s6qyP; z3=em_Gw6ui)zIq-vLWWQV!?38(^J>Au*mgmxTX|Mn|x1EUw~f?7gD@4scIr%A!w%N zCH(y?9$XG^-P`z!K&K@D{Fyuh1MKf#?ETHr72oL0U|n$Dj(rsSbhw(R2?KSv?~}mY zz`DC{#oc%B%>DBV=O5f$>yNFu~_>Yc7YbxTERlm%QcBEqAo$3D2|WzkgbD zzg;{d4Bp}5-XSEPqT_~L>H+A~9sq_YXEQqY0TnL*^$>zS0AYdKU)>L5>n7s1=455b zw(=mZUjbkm*fQ#1b*Lr;pEx~thHp*%NMCjK)g}KY19u13rT!JE|K7y?)Iw^}wHA!8 zNki*wXoU@Z*-B8ouqGW_XUA69u?+_iPdxjQ9oyE9!ZEXn7sj1*`2Zak#N~rWaD0l6 zi{kQYP8feKQh;qffp+B4JPQNcCt$p@Rp_;0kfjTBzjFz2nQ}kqgVol%!lIOgX7qQk zgIIEa6`b4(&ZLTNTK2zQxG|Z}$|1dYO(|rS{!DEH~vRp-H~srM7B!H8v#YS&`VniO4U(MK#=_jJKD zDm=EWq3_O~9HqaauZh2Qjna%A5U_xk7OG+EMS$}}+AWpdg=^7N+*~urWTD~ul(fvU z3eB~i0o!Bi6sEEWv>n2+Bdr5yJ6x?DX`RjBh3nphA<^KqBfZTsFJ60Cao9`XTkqOOh-{Xf`#&%au$h3~zv+P%}3 zSjQZJ6x>3$uPNUpSp5#WL?AKuBvo{Q9rYqF7gZ&rK-DIPRON$dMbpiK(W)2AT^QV$ zXw5cK?&3k;z(X+cx@==GfCa9S3^xMPc+K1 z2}!tMCp+yQ4`1c zps#vyJs4dHMr&fMF>(Lhg?DS>D>iz0;c`t3o9MlX2ZM{pKZ~sePt?R$Es_fl-dRZ3 z#E6YvS_#G;i*bI*e>_lqV{vG;-`wvx2mcqhu3mheOw|hykl~sbw*>%s9*dC;KM6+e z3_RNiP*5X(lqCMZ#NsP{pSL#?V)1le;NKU^Z#z? zs#9iPg1@lYS)H}l-5CDOK<62rCLwX-3(jz4@`%?XmY{xSfb zur~z8+;+JXT#c$FRg+lD}y`;W}^cP#|uvoucUf?@I*9Ta~ehRII>{}~OF zheCucIpQ?jg-<^8^>o_sq|??TF>UzL=?|tS^X7^f8_2JE907)fie;VZN3a(GRwHJC zcoavxencrA68?NLD?`+@iU2EhZ4AI1sr&cN95jJ1Fms?Td1v<5o$i_LO_2$~O^+ZX z=%$+qLz^ClaC|c$3V}`E0pT>=Iw=Znb93AhA1(GXSuvj2egEn_O9X1u?HHHyEXK>ky&cUy#5T#QPWL7^Utz QBkSJCiZ}9Cf*9ZBpL)z?xc~qF literal 0 HcmV?d00001 diff --git a/site/module_livechat/server/main.py b/site/module_livechat/server/main.py index e40a680..ec56d44 100644 --- a/site/module_livechat/server/main.py +++ b/site/module_livechat/server/main.py @@ -3,71 +3,55 @@ # ::: :::::::: # # main.py :+: :+: :+: # # +:+ +:+ +:+ # -# By: edbernar +#+ +:+ +#+ # +# By: edbernar T@;Xox^GpEpEHv_+@Z*3j3jwM*!`Tx;v7eO7Cq zqjsgzCaqCJTou=T^G1OnPrTmszp#>b=q?>ffKmxFrXsF$Ix9l1m6giUvdAh6@zSrE7s@wglI} zJGb_vQWw0lDwsw^s?vN?R~p3ePjs+Lcedzo8$;ITr5Y#jGbw724Vj}8sEQn-#ogL>C^p@l;lUoK*k)6c zSr>p*!UdnXUTmqG1ERAA@?rUD= zxPw5Co<2M{d1{yfj(Mfxl0s@F&9x}A3fH;hQ)VebJC}x5&>qVlONpTqX^)ohA0YZ; zd=V9MckSQqZ>s@ykoiA%gAVzcn6J>l#@Y<#il^Fj|G^LDI^LNp6{}v=O?<+>M4#*2 gT*A9m{SLT+tmAb^hxma{d=k9(TmMf6?=FAy0q#pq)&Kwi diff --git a/site/module_livechat/server/typeRequets/__pycache__/getPrivateListUser.cpython-312.pyc b/site/module_livechat/server/typeRequets/__pycache__/getPrivateListUser.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..666afcb5c5e788557f86d807e2752239ad11c3da GIT binary patch literal 1210 zcmaJ<&2Jk;6rb^~KjPRe2~GH_)E-bJAJ(&WY$pbU6q1l8v>~MAVj)H2ow2>i?#{9^ z8?y#Qg(A3crk4uN6@tHl8y7wfMB8I8^cLg`%89q@II4uiNHg>My?OI~@6Ehl%H<-0 z@p$v6-dq8prwN&knF}!P0(giRV%R~Q$&NcX<(W=~WthfvmVKnL9Luvpie|u8OwlaZ zN+~J>x{{)+fL=&YKiARN+?S}MN4PToED_v^XLq=ip~pnv(l{qP$M*Q>-GNfRe1ni7 zbsV4iJdlRvP_JqUmkfQw5}x9oBBAdH$|R|q^(A69i6w+%_&wh+>(xWQU(sUSqb`qg zQc)GkSc9{8=3Z!7LQy%0^P<;F1vjUHcGb5%+wG@Hb<_NW)K|!IleAj^mYeNXuf4Kl zHoCnUWmes4)M~9-oAQ+&?Ri(!)HhCf%sG$gsq*1$Lo7-F4!3Ud;I9y+f zjMWW$=V)lCCX@y<4OrOYOb&!~G^$L)C4u0rWVPQX$xfEdcEjk3D9Nhod;K`KO9O{T zBQm|>cV$%#r%&fXwUlf~Yolcy?VGEs#{PgO7cG3zXvvm^`2gm47nb)BhQ|909X{^? z_GB=uG7|(i^C5`KDHEle=O2-Qa5>?OMPyxAp$qLN z$(mrC?0$H6gGgI(;tCcziOw;%22>G3}pWR71cOaX6@TmGxJpW&F zun4+!nDQnpf1!Wwqq71k%zb_G`N^+0T0b{_TfF^8e(O)X^*i1=mnCre;`%N89e!Q^ zK6eXOvTq~1RfOlCpes+%ETmC-<+QwTTHO0PuWR~Q36)+tEiaxH?_Khj({uVfhx7L@`C{td byyVwX{^o=?Zxk~3_3=Ac$J;n~4N~|Qcdcjv literal 0 HcmV?d00001 diff --git a/site/module_livechat/server/typeRequets/__pycache__/login.cpython-310.pyc b/site/module_livechat/server/typeRequets/__pycache__/login.cpython-310.pyc deleted file mode 100644 index c4a1da1fc4265567b12c6033e1b19090aa1e911f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmY*Wy-pl45VpNPw|Cqj0dJ5rY!i!rkPxB>smLiJRNJ6sXMlw}`&j!xCs7c=V^Gqh z$W!nJDcz>J2S|g2l<}^DV5Av;^Z6U=v#oo*4x?E7{p;j0WbBV`-bPH#E~WWG1sL!F z%bJyEyzWINKtKQ?L=OSP(1N5!ZRo&^N2fs+Ko@%VEDM2uXX)&e&SHHRjSW^yE?!z* zSzTM7aw5~fC7xCJ5M5;T1u7>>Xr#+7-q_qC^;D3w;Z|HsvqVn=;tId6^n&Aut~H1Cq_ d#>S3+UGsrT(oJ~6MJTx7;fsjhui@YB{6D2Eh_(O# diff --git a/site/module_livechat/server/typeRequets/__pycache__/login.cpython-312.pyc b/site/module_livechat/server/typeRequets/__pycache__/login.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79ef181b02b186f895564f93499b5536027485c1 GIT binary patch literal 3871 zcmcguO>7&-6`t8yE_eAOQGb*yTQU>7vM5WUME#j=8d$V!*R7)(t`b8AT9@LiCCU=1 z?5?bkl>^xc+88hp6)0jBQCb!4A%@#R=qWw4uyhL03)d__cB_Md=1|>Os|UyEp>Kvi zmIXC+(7FT6+c$6K&CKq8?|bi$ZnpzL%boenm5)6L{gn;MO)e?h-vi|iqKM)dbgB5n zmoOD5p(3?WiP~3eRHh1bP$zZqk(*Z0YU-giY&1zO3AFZIbcxV9kRq)IX`>AwCF%uf zPhx-L7CUa#vd!zN)@w< zB}bztqR~!v}$2-nFXnr4UYYKEVl+Y3 zyJ8U-=VH2HiMkr6mN=~^;+Boh&(7&Ett_Y$dLnvNHA-#_N0yx}dLyFgB5dV@_T*cE zsl==rP$^9YMiSBaS-6TGI0L7tPCtjZ8FyNF69gNtqsf3C&mL#8?1=M%&L8w=nTChzjDhHW*pX5=zeljcR_d z9Aj&K3xb369}=qa?ttlWQ}U*dtag~qU0JDX?eJR442JJdemZTQ9?u5H|Chkcw4ctL zA2Xe=KRoIc^M|&G7lmJm_ewKBwq%;^x~oweL-)54CrW8F z)iPxmbNcZ>ATk&0j>Qcv(%m0~tQEKx3_!kf56>G@2`!e27_me=We=+nP1SsUY}u#O z2vs$G>r*(vPb^tuB%~XJMuDu=XT$oe7SMyuEFy?x9e#d@+47eKu3qRv?0lEHwgN+zs!ayLB#I zw>tSJSNBpAu!^HLr?i+#%W9pe9M0gce9lk1*%SP7{Be=-he6;9yp_}Jze|3QdYhj~ zy*%aa$sUz7TizQXgJmq|3$T>Xmz6FW*tI!pWDd3M@xN(s> zcEz|-w+{_vFfqd!Nvouqot40g@;o|4X2JKMja&r*+~MGDzT@M z0F_ELNCg)3TEkNUS%kSVRa7cBQm)*RPd!P=^C|S7*HbKcR)F`P&U^~{MW{}xbgy*g zUiSmIy$+q#d=3K2hWy zOPWZstYnE3$^KxfwhUAbGaoCtV%-4MRCRfxM1HX@u=+(_aq*1C;b0=M%Lz_zd^7yJftF-4xyGh#1bAu1$mo}B!3 zgmNTgl2E~o#14RFJM=c_q0b8f76v!vnq_~crF%`x$^$uJAS(>~Q@;(jya|xS?=}vH z(1&=qS6mT6TV=MNGutP4xKI2Yv;Cgg{=jVO4S0A!T=z2TIwV0aUf=Iw`cXVQB(8UI zdk?qwVrK8-a)8SrE +#+ +:+ +#+ # +# By: edbernar {"type" : "login", "content" : {"username": "". "token": "", "id": 0}} + userList = [ { "username": "user1", "token": "123456", + "mail": "aa@aa.fr", + "password": "ABC123", "id": 1 }, { "username": "user2", "token": "789123", + "mail": "bb@bb.fr", + "password": "DEF456", "id": 2 }, { "username": "user3", "token": "456789", + "mail": "cc@cc,fr", + "password": "GHI789", "id": 3 } ] +async def loginByToken(websocket, content): + # |TOM| Requete pour savoir si le token est valide + for user in userList: + if (user["token"] == content["token"]): + jsonVar = {"type": "login", "content": {"username": user["username"], "token": user["token"], "id": user["id"]}} + await websocket.send(json.dumps(jsonVar)) + return + jsonVar = {"type": "error", "content": "Invalid token", "code": 9001} + await websocket.send(json.dumps(jsonVar)) + +async def loginByPass(websocket, content): + # |TOM| Requete pour savoir si le mail et le mot de passe sont valides + # et créer un token s'il n'existe pas + for user in userList: + if (user["username"] == content["username"] and user["password"] == content["password"]): + jsonVar = {"type": "login", "content": {"username": user["username"], "token": user["token"], "id": user["id"]}} + await websocket.send(json.dumps(jsonVar)) + return + jsonVar = {"type": "error", "content": "Invalid username or password", "code": 9007} + await websocket.send(json.dumps(jsonVar)) + +async def verifyToken42(token42): + url = "https://api.intra.42.fr/v2/me" + headers = { + "Authorization": f"Bearer {token42}" + } + response = requests.get(url, headers=headers) + # |Eddy| Regarder ce que renvoie la requete quand elle est valide pour savoir qui rechercher + # dans la base de données + return (response.status_code == 200) + +async def loginBy42(websocket, content): + # |TOM| Requete pour récuperer les informations de l'utilisateur selon l'intra de la personne + # et créer un token s'il n'existe pas + for user in userList: + if (await verifyToken42(content["token42"])): + jsonVar = {"type": "login", "content": {"username": user["username"], "token": user["token"], "id": user["id"]}} + await websocket.send(json.dumps(jsonVar)) + jsonVar = {"type": "error", "content": "Invalid 42 token", "code": 9008} + await websocket.send(json.dumps(jsonVar)) + async def login(websocket, content): - print(content) \ No newline at end of file + # |TOM| Faire 3 types de requêtes: + # - byToken: Récupérer les informations de l'utilisateur en fonction de son token + # - byPass: Récupérer les informations de l'utilisateur en fonction de mail et de son mot de passe + # - by42: Récupérer les informations de l'utilisateur en fonction de son token42 (qui sera different du token) + + try: + if (content["type"] == "byToken"): + await loginByToken(websocket, content) + elif (content["type"] == "byPass"): + await loginByPass(websocket, content) + elif (content["type"] == "by42"): + await loginBy42(websocket, content) + else: + await sendError(websocket, "Invalid login type", 9006) + except: + await sendError(websocket, "Invalid request", 9005) \ No newline at end of file diff --git a/site/module_livechat/site/main.js b/site/module_livechat/site/main.js index cd706c0..c8837a0 100644 --- a/site/module_livechat/site/main.js +++ b/site/module_livechat/site/main.js @@ -3,16 +3,15 @@ /* ::: :::::::: */ /* main.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: edbernar +#+ +:+ +#+ */ +/* By: edbernar { liveChat(); @@ -51,28 +50,25 @@ async function showListUserMessage() { const divMessageListChatHome = document.getElementById("messageListChatHome"); let divUser; - socket.send(JSON.stringify({ - type: 'get_private_list_user', - token: token, - content: {} - })); - + sendRequest("get_private_list_user", {}); await waitForUserList(); - console.log(userList); divMessageListChatHome.style.height = "100%"; divMessageListChatHome.style.paddingBottom = "10px"; divMessageListChatHome.innerHTML = ''; divMessageListChatHome.scrollTop = 0; - userList.forEach(element => { - divMessageListChatHome.innerHTML += ` -
-
- + if (JSON.stringify(userList) !== "{}") + { + userList.forEach(element => { + divMessageListChatHome.innerHTML += ` +
+
+ +
+

${element.name}

-

${element.name}

-
- `; - }); + `; + }); + } divMessageListChatHome.innerHTML += "

New conversation +

"; divUser = document.getElementsByClassName("user"); for (let i = 0; i < divUser.length; i++) { diff --git a/site/module_livechat/site/typeResponse/typePrivateListUser.js b/site/module_livechat/site/typeResponse/typePrivateListUser.js index 6366c21..e8e4df1 100644 --- a/site/module_livechat/site/typeResponse/typePrivateListUser.js +++ b/site/module_livechat/site/typeResponse/typePrivateListUser.js @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* typePrivateListUser.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: edbernar +#+ +:+ +#+ */ +/* By: edbernar { - if (userListAvailable) { + if (userListAvailable) resolve(); - } else { + else userListResolve = resolve; - } }); } function typePrivateListUser(list) { userList = list; userListAvailable = true; - console.log(userListResolve) - if (userListResolve) { + if (userListResolve) + { userListResolve(); userListResolve = null; } diff --git a/site/module_livechat/site/websocket.js b/site/module_livechat/site/websocket.js index 32e9cea..5826aab 100644 --- a/site/module_livechat/site/websocket.js +++ b/site/module_livechat/site/websocket.js @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* websocket.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: edbernar +#+ +:+ +#+ */ +/* By: edbernar { console.log('Connected'); + if (token) + sendRequest("login", {"type": "byToken", "token": token}); }; socket.onmessage = (event) => { @@ -48,4 +50,18 @@ socket.onclose = () => { console.log('Disconnected'); }; -export { socket, token}; \ No newline at end of file +function sendRequest(type, content) { + let coc = null; + + if (content instanceof Object) + coc = JSON.stringify(content); + else + coc = content; + socket.send(JSON.stringify({ + type: type, + token: token, + content: content + })); +} + +export { socket, token, sendRequest }; \ No newline at end of file