From 99cf74f624dd3e66fb59ab5efe5c6a87ca9e8622 Mon Sep 17 00:00:00 2001 From: The Navid Date: Mon, 27 May 2024 20:15:24 +0330 Subject: [PATCH 1/5] create Email Validator class --- .../Graphical Login Page/bin/EmailValidator.class | Bin 0 -> 783 bytes .../Graphical Login Page/src/EmailValidator.java | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 Answers/40230212013/Graphical Login Page/bin/EmailValidator.class create mode 100644 Answers/40230212013/Graphical Login Page/src/EmailValidator.java diff --git a/Answers/40230212013/Graphical Login Page/bin/EmailValidator.class b/Answers/40230212013/Graphical Login Page/bin/EmailValidator.class new file mode 100644 index 0000000000000000000000000000000000000000..62e976464eb2f8ac9c94c8a79fdf7039044bbc9e GIT binary patch literal 783 zcmZ`%T~8B16g`)1yX|%bECS*eqNr`jvL?m{Q#2Z)PxT|I;h{v6=`v}DY)65?<2 z1x?WS;1BRe8ShLtLQUCZcjnHVbMLw5?(aW8e*t)k4Hq+n*_T71;vEsIJ)zUgMS(EC zFOEbQi=-dE?d{7*6Ux%S4g_yk+V*;+RUBrrFOS1_LTi~NErxAHu}YMFMsVtl9YSF{ z-IHZh39GvwUj$tde0~@_*$h5xJl~xN*F9XqoQqk)@&);Q%;Pe_jnd(PiX|bakEK|p z9i6G9-)dZ_t^&e>k0MHhxwcB=o6)c*v-hHBa@E>tB-n>cnK(ZzZP{i#IJoL#31x0b z57Z%B)SmQ>dw12LwUMwmO;^`6c+1BsZZmc$bTp6|;n8{Q_CRDE`DrARNKWbG^_bN1 za0lxy?oP2PhxoXM`~S+YUY Date: Mon, 27 May 2024 20:39:48 +0330 Subject: [PATCH 2/5] create PasswordUtils class --- .../bin/PasswordUtils.class | Bin 0 -> 1166 bytes .../src/PasswordUtils.java | 20 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class create mode 100644 Answers/40230212013/Graphical Login Page/src/PasswordUtils.java diff --git a/Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class b/Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..2467d413fe856e7a692f7fde6d6c18e6b97570ea GIT binary patch literal 1166 zcmZ`(+fvg|6kVrDnqC5wXt|@-D%#X)~V* z6u}L8o76-!iczB!l^mc(H|4LOVx)FhI!9I%*CxK=_Gx-l1{IlNbO0E`I056Bz+H-n zxqeYIjcjq^1e2-QCuquX8-w)q-~_YzHbz5tv5idVF13*k-C1?G1#_f@?$H(!X|)AS zJywpXpdxp;LNkMCh*Ps9y3vOoqA-O?^kSYi6#L9{20)(vIzWgyEa3@_mm$ Date: Tue, 28 May 2024 22:07:01 +0330 Subject: [PATCH 3/5] changed (isStrong) method in Password Utils class --- .../bin/PasswordUtils.class | Bin 1166 -> 944 bytes .../src/PasswordUtils.java | 23 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class b/Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class index 2467d413fe856e7a692f7fde6d6c18e6b97570ea..65ad247cfe46b24b8a4eb5c31fb54acab691593f 100644 GIT binary patch delta 333 zcmeC<+`!It>ff$?3=9mm45k~oW--?1=cO|;h-&y`C6*=X=OpH(>j#$v%81xw#dP4JxQj7C*%2HDllJj#5GIJ73GV}8k3X1ZRa#C}PtrWO8 zLn;eW6>>9+a}!IFGprPn6Z7)&OMt5L%2JC;6w-?Fa}@#-OX^Efi}Dmo@)eTu^K()Y z^N7-ynOB0Wg^NLl!H|bRmB9#yPr?`(xPtRbi;`2_GILTH8H557i;K(ii&8>MCf{MY tX{yD*%)kf?6RzD1I*~$p+Zhb@19?mg%0QA0EF;gL0v2Ha@{GYO69Bj-VEF(5 delta 513 zcmZXRy>Ami5XFCcAGzdW633E>5CqABB0)|L$R{`n9|0sJT$#$<#@U{Wk99U&RcDhDOML> z{1xxDb=EM)U6Zs-ZE4i#=20AECN%GY`bbps+2mf&V@olAA^x9J;662la~LHD7vr0X z$y9ebCr6nSO8*QUITo@TADx_AQo?n+X?l*`gD8x0G2BT_E7GyzQX|)`*L6LSzSR4% zIel;a?ES#Pl@--*olz}Le!{f}L#{}6_l%A0Aq!);Go&(xyF Date: Tue, 28 May 2024 23:25:08 +0330 Subject: [PATCH 4/5] create User class and UserStore class --- .../Graphical Login Page/bin/User.class | Bin 0 -> 1802 bytes .../Graphical Login Page/bin/UserStore.class | Bin 0 -> 3637 bytes .../Graphical Login Page/src/User.java | 41 +++++++++++ .../Graphical Login Page/src/UserStore.java | 66 ++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 Answers/40230212013/Graphical Login Page/bin/User.class create mode 100644 Answers/40230212013/Graphical Login Page/bin/UserStore.class create mode 100644 Answers/40230212013/Graphical Login Page/src/User.java create mode 100644 Answers/40230212013/Graphical Login Page/src/UserStore.java diff --git a/Answers/40230212013/Graphical Login Page/bin/User.class b/Answers/40230212013/Graphical Login Page/bin/User.class new file mode 100644 index 0000000000000000000000000000000000000000..c29b22de99718479352690c5ec675be055a17a88 GIT binary patch literal 1802 zcma)6*>V#{6g{nNBr!rkST<%~jHAWEU#X z)Lv=hP0g&2FRs7TYpy`J!$VVR=>mz;{&Cs04YOVlP#c=lSkfHlwPkMz1of6?GzCKU z4AXF@1n#81ME#$g^coX;U~TA8_z_bP!ASvsD!mo~^HdQ;C`v1#LcwW)(LOZkFL@+5 zDIp(O|uR8-P;Vf4Z~q+C8-xn54ZQqK2g_Q zx!Vko~(?zk$xMoK_3&zX*^nKkBp>v$RZM=3;+!I*;Vq08^yu8JIPuuL)(-?}BkC*rNDt^E;$zND@OJlS4YqsivF6cIO;b5>{Bg@<# zsCbAOhSS<@-DET8j#ty0kuJ7Z9W$E5k1A$yk(#+y_fWxOfwTMdt#nM+Xz4R=YI@r> zEHjEZlw^0$3!FJfx7x6+*RuHv=`{t5?C`_Auwa!twZ?R_Zm~5Qt-XK(7rF%>bKewS zPON~hTI4`Et}QTpK%&Dn35a$6=qcD;z5MnfAD07XBUW~`+OP9k+nXH)D+1B7)v;^( zBSQ{YL{7^MSrV>r68(IR{P4-Crsb0Z>a844u0eW4Ajka#zbu{yxDI8up=Pq1h-b!j zaB33+ncOA@|MY-o_&-P>IN1IU3mvnTPQyJEhv(~Wa#(Z|8iS+^se*)bCv8ip8Vrgy@(|&P%^2>C`AY54dFcE zlyHcpWN{hOT%X`7Jx8!iFL@nP^kR1Olxql&`MfMKVw~Q~SfR>8d@agYW$Y|3@hR4L ufy-oghM(wHAu0|3E<=VDWE6}jc&>0Dg`fdk+NBIMGxBeNfGPn#{QMaoqJL%p literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/bin/UserStore.class b/Answers/40230212013/Graphical Login Page/bin/UserStore.class new file mode 100644 index 0000000000000000000000000000000000000000..0db41ce081b1f449f8c104f8318c47326c455eee GIT binary patch literal 3637 zcmb7G`&S#s75)Y!tt8eVfFa0DV!5_?SUgt>2Ljaa(e21GrIy|NKUIoVrS;geSF`Y zd*`43dGCDy$FQWKMj&<3H@%U-^-K*hfqSnSb4IUiI8(jnCa#)=Kp-}0*``3_;QG=? z;91U8USM0l>-d4;1Y?F>Hj_wEVVMg3p5Pj{#?`w(eYm$ASa$D_QR2qbh&AOHLD{3` z&W)=_Hyaw1PUequU-D?dwj3)sE>PRiIY#gL-6CCY6lhTXDI2E^f0}mEXux(I&8Qbh z997#=5V%iA8g0nc;2BpwiW@}lFJ zzH85!#caWyEm^h^Sgw;Tc`i54_GQzl(P=X~YX;M9F>AXJc0%&e49WTeyBft}L#tUzHi?jDPFa3ndIY&61g`T+ z8g1y%&`!Lh2_2o-$Bk2FAcu}IOB%L!L_{d|BZ}+Lg&qyvqCPeI)Pz1 z{#kS3E-Z!-MVASZKwI_Bk8-dLCw27W zQ2~9LS$N*?{dw0b-ld^pX|r+3)F~a0Nq*{STBdSENg8KxR>R{Pj%lb$$DrgRVLnwh zZ01B#A`RYYnUjwLZJAiAWdPw4mzo@5d5OSVM_w*tTOiLDX%oHX%yfg{zh ze<)#_b##tNM<;X?B#t~1Mo}JiIce&cl=%}c*sjl+XZgOUcfqK(L$IX7^vV3uTM(D9TsTwh}G3{-}WdPadK zFE&x0Wcs#-acm-lhdRchN5Oc>@B*^iv;}O0of6G!I;srkHGE+Ux-WSa%Y=q6-bHsf zpT^UY?gcy}x%kQkx+%I^M+3Ime1JtiodNV@+Q`lsxlWB~L_>KzhV2 zdj(UTWPy8R$yB|fM{>YYa?*7JKk$swkm^)^8o$BsH2hXz&-#(DoH=*K>7HPU4TmSak7WT|VPDrq^$?Dw-^W?+EPO6z5i+YxuLkgC8v_dyonfyTI1Ll&WDL zk0Zg6rbbELJ$U=zSXbk1Tub5})N|%u&g8g5e(F}yFushYchPc_!y2^mSE`Y}88rir zc(;i*9;7+BnqI|@@y7d?@!%~bwZ1Q<_UWM%9sD@g1$JXkq`{*GX?*WHXvr;M?+S7? zcpdTD8_`5=1)r$JrF}~{6uUveTIEy=;{&$Qk$T>@8n6?MRNADBwS)>IV^od9I6`xM zYPV?MYaT}<`>#@1s@g5ht>9P<{)V>U?%UFXuD{|$Un~>rUc$f3ty$lVp$Nj=80K3IceN;wYAK&)+fE>+d`m+78%-MPL=DbWAQm%Rmn^<0 z2F1`S&X2F+!gynH8KcX%IJ}6%nONiHC0yx?XX5WC-bBYL+Qu{S+5?$*jNkZyWqh_T z!RRsx!kbBia55xgyf1e9&fmNLf&Cm67kMS-yC&arw}x`Jk?a~=#I{`5+eqfRmN1pO zHAseLZ;}GGVocDf7-sp%&$E1-h@2j#8VEo$S#D)GyU>mf-u{kZAHmqez1@`V!E@M; z7jQtqb~+3)f~^^2@Zc+bhY%=;MmY-KcCi7JF-M?}F?}Vu3F?Yr9@iq8A4cj9O~*9| z4b$rHyvFMRKET0I4nIKh1plQd#TG^>`QyY0Jg<3SW{AtwpI{s>hrllo_@@={Us}eO zhY9EkzACVS>&&e9B66Ad3T0*b^u@X}F$p$*2IS9o-oy8RCA>y(eSGerb|k7mT_9_(0PT0M9kC7b#PdT@uEpClT!UX> Yk^h users = new HashMap<>(); + public UserStore() + { + loadUsers(); + } + public boolean register(User user) + { + if(users.containsKey(user.getUsername())) + { + return false; + } + users.put(user.getUsername(), user); + saveUsers(); + return true; + } + public boolean login(String username, String password) + { + User user = users.get(username); + if (user == null) + { + return false; + } + String hashPassword = User.hashPassword(password); + return hashPassword.equals(user.getHashPassword()); + } + private void loadUers() + { + try(BufferedReader bufr = new BufferedReader(new FileReader(file))) + { + String line; + while ((line = bufr.readLine()) != null) + { + String[] parts = line.split(","); + if(parts.length == 3) + { + User user = new User(parts[0], parts[1], parts[2]); + users.put(user.getUsername(), user); + } + } + } + catch(IOException e) + { + e.printStackTrace(); + } + } + private void saveUsers() + { + try(BufferedWriter bufw = new BufferedWriter(new FileWriter(file))) + { + for(User user : users.values()) + { + bufw.write(user.getUsername() + "," + user.getHashPassword() + "," + user.getEmail()); + bufw.newLine(); + } + } + catch(IOException e) + { + e.printStackTrace(); + } +} +} From db1396c4b595d0c56f72a22e6abf848c5f50f531 Mon Sep 17 00:00:00 2001 From: The Navid Date: Wed, 29 May 2024 00:05:19 +0330 Subject: [PATCH 5/5] create login class and myapp class --- .../.vscode/settings.json | 7 ++ .../Graphical Login Page/README.md | 18 ++++ .../Graphical Login Page/bin/App.class | Bin 0 -> 456 bytes .../bin/EmailValidator.class | Bin 783 -> 798 bytes .../Graphical Login Page/bin/LoginGUI$1.class | Bin 0 -> 1309 bytes .../Graphical Login Page/bin/LoginGUI$2.class | Bin 0 -> 2167 bytes .../Graphical Login Page/bin/LoginGUI.class | Bin 0 -> 1766 bytes .../bin/PasswordUtils.class | Bin 944 -> 1271 bytes .../Graphical Login Page/bin/UserStore.class | Bin 3637 -> 3489 bytes .../Graphical Login Page/src/App.class | Bin 0 -> 321 bytes .../Graphical Login Page/src/App.java | 6 ++ .../src/EmailValidator.java | 14 +-- .../Graphical Login Page/src/LoginGUI$1.class | Bin 0 -> 1118 bytes .../Graphical Login Page/src/LoginGUI$2.class | Bin 0 -> 1899 bytes .../Graphical Login Page/src/LoginGUI.class | Bin 0 -> 1570 bytes .../Graphical Login Page/src/LoginGUI.java | 85 ++++++++++++++++++ .../src/PasswordUtils.java | 4 +- .../Graphical Login Page/src/UserStore.java | 8 +- .../Graphical Login Page/users.txt | 1 + 19 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 Answers/40230212013/Graphical Login Page/.vscode/settings.json create mode 100644 Answers/40230212013/Graphical Login Page/README.md create mode 100644 Answers/40230212013/Graphical Login Page/bin/App.class create mode 100644 Answers/40230212013/Graphical Login Page/bin/LoginGUI$1.class create mode 100644 Answers/40230212013/Graphical Login Page/bin/LoginGUI$2.class create mode 100644 Answers/40230212013/Graphical Login Page/bin/LoginGUI.class create mode 100644 Answers/40230212013/Graphical Login Page/src/App.class create mode 100644 Answers/40230212013/Graphical Login Page/src/App.java create mode 100644 Answers/40230212013/Graphical Login Page/src/LoginGUI$1.class create mode 100644 Answers/40230212013/Graphical Login Page/src/LoginGUI$2.class create mode 100644 Answers/40230212013/Graphical Login Page/src/LoginGUI.class create mode 100644 Answers/40230212013/Graphical Login Page/src/LoginGUI.java create mode 100644 Answers/40230212013/Graphical Login Page/users.txt diff --git a/Answers/40230212013/Graphical Login Page/.vscode/settings.json b/Answers/40230212013/Graphical Login Page/.vscode/settings.json new file mode 100644 index 0000000..e112a70 --- /dev/null +++ b/Answers/40230212013/Graphical Login Page/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "java.project.sourcePaths": ["src"], + "java.project.outputPath": "bin", + "java.project.referencedLibraries": [ + "lib/**/*.jar" + ] +} diff --git a/Answers/40230212013/Graphical Login Page/README.md b/Answers/40230212013/Graphical Login Page/README.md new file mode 100644 index 0000000..7c03a53 --- /dev/null +++ b/Answers/40230212013/Graphical Login Page/README.md @@ -0,0 +1,18 @@ +## Getting Started + +Welcome to the VS Code Java world. Here is a guideline to help you get started to write Java code in Visual Studio Code. + +## Folder Structure + +The workspace contains two folders by default, where: + +- `src`: the folder to maintain sources +- `lib`: the folder to maintain dependencies + +Meanwhile, the compiled output files will be generated in the `bin` folder by default. + +> If you want to customize the folder structure, open `.vscode/settings.json` and update the related settings there. + +## Dependency Management + +The `JAVA PROJECTS` view allows you to manage your dependencies. More details can be found [here](https://github.com/microsoft/vscode-java-dependency#manage-dependencies). diff --git a/Answers/40230212013/Graphical Login Page/bin/App.class b/Answers/40230212013/Graphical Login Page/bin/App.class new file mode 100644 index 0000000000000000000000000000000000000000..4712ef4b6262892c03e0db84c6dcc2d770a03adb GIT binary patch literal 456 zcmZvY%}&BV6ot=}mX?ZuqWHgX2b#zOpeDvdqiJ-3Hc?jtPU?`-l2UvxHtQ$Ir?|0i`l56a}iDj?~R$*i*@!?1f5T)r;fGn6_K zXf&U^g=IHQbQE-2zKs_&ZFa$K9Zcc8<=ZZ6whewu ztmWAO_GL~bR8ZwgCcY-jV6S|l_Auom9h&c`FDRAVvH%ArwN_4R%oNzbCY27Iwy;f} Jzz$~vyT8EAPw4;v literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/bin/EmailValidator.class b/Answers/40230212013/Graphical Login Page/bin/EmailValidator.class index 62e976464eb2f8ac9c94c8a79fdf7039044bbc9e..42ec6a369e1976d9ae9e9ce6322188281e4c0f57 100644 GIT binary patch delta 99 zcmeBYo5wc6jE~pV*U{4_KEN>~#5KroqP-=bVqCPNZd9Ufm4U9McKpVc>x_(slVg~q x`1u%^85kH?8JHMY7&sW%Cf72R%5pM@0>yY37=a`=gF1r-kY;4i1d>b)S^#f@5aR#< delta 105 zcmbQo*3UMr&HD5dKbENE?E!6%dh2l>%+K6cF)JK(KNtwgsoq8Rb`64iF3plcd0__yqoT zL~wM*2k@PA+>ktXi6o z8_IwP%b@)A9-pGHVbw*q$*n!pI^w$w1Bv{N2`r0bGRblX-RO~Uk0I#6S8yM_1h8gv z%TSN_ipF*F)a^PtOWUU!RcL*SpE>SLMn*qk5(XH$M5yZ)3LfAggS5{b@rt1%k*uR~ zi(PUo@|ckjZ|Xr^E$|I17(s#%9jmr|YFfJuM7_<3Hm}|isuac~j572zp=z>HFpdd^ zHbUmE<&p|Ddj<{{B`_$)-=5+FEh3lCh=BX-fYhre-S|#JXnl9r7mLx0^IhvAl z-za#AEIGEla(CVUD_IU=nb@5(PE=jnjd{(EnO4jzGgXEWu6mi%|BpbOLBt#HsbH$h zwX5mVz2}Y^SaQ_r`+|DhAhBFBYgUyACTQO7@oz#nAucZ)Ro%3S8U^kgn8ZLOXVA!H zb?P%G?gxw9cGgVWL5$|fPpbti5)orXQ|_Y`f=t>rI?a$QG;(V63zXC)ZhdlXZqwdM zHo!2Vv@7me#vOE!#L$VZhKJ7-AwasN)H#%M+`T|w;X4N3*2SRn!rwDk#+$nRS((#MB%Z5RTt7M z){vv5`VhxDo&0!B_6mHzFe71*{%!O&PdXn8DAG4TvTXz#x6#h<|X3}Axu~MK&C6%B_xdaeV8sruW4W{MN3qtX7njF%hlbJ9xX^V=> z<+Hx4kG}ZKS_mvy%OBuxVzKB*PUu z$R5+?I`)c`p0Qm!JS(t0_gb7^6iAf3ni>QzEEq_c=*N(SL8Jxxb6R1jV!LX#)mT>k zyj*saz;MN@N@r2}wm!Fo3GG(E`p0_q1l@_edkm`hQ;VtZAfUQ9Ju574FwsL4`Ph@DL5Ukro=*qm>2&0>#iMNq4uwP)8cC}f< z!Z_X$FzPDQuLO4H@^MrV*mI#zi$w$39u8u$j_+Ly?;*#CnlcF1J-^nDXkTwc*Sc>R z)dUV3I3%#QC#oJT3rBENU>hUr$VpKyzf>}D0LL^j#{~v*OQjg8_br^%*qEvzZ6^xD z#3_7a;6s5OQ(Cwv9lIt&&$nR3*DFTyEl)fzJd6wb429p)B0S67%p?U3V{gcQ9Ac zx5fPJ6h0^DH`+IupjEAsin}dmJcTdWW?C(yHux?W7Z7A9F22IQ2SeOf^wQ!B-95U0 zqYmt*o%hXlwX(dTVq)!gM1)zn^>BrbNJc_i;zWr z*xqU4quM72!jxNeyny{Rqrw%BZJfU7d0`OxvKdPP6HWLA?h9mJ$7#E3-l{6ZJs9(N ziL=G?A83L}yfSo?^$N zNaqc%N$P;(MmL%j?M=LiojkFvuq(D8W@+7^?5ByxupVRg6O7Hgz=2!w@!%8WpQ11u zpHA>{GBKKXh7W#4I+hiO&pp9~M@OFF@~MH5f#h!(X6Z(rd0t;0t~6HhTW znH)_%!{RR(?!3Q4jo&fUIewuZFra?uBrYP&b&|;zF@`h9bMzg@Ij-k%R!=dMaE0p< zht?fVBpYSi=LC9)3chFU{fHY80Ml`jZ2*`qzJiP(_yNnP62vhUc8$A!`lvy1m!RD; z?xIeJY-F**HHmwSXB3H7IBVcQ{QnYT;-x-Z-$vC{D)hlYgTD!m>mj(@rRXf=*TOna V!_?61=)Vnojc;l4A@_aQ^Ea^VD=h#3 literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/bin/LoginGUI.class b/Answers/40230212013/Graphical Login Page/bin/LoginGUI.class new file mode 100644 index 0000000000000000000000000000000000000000..d2121834b1ec9edf618d12ecb595200aa8a1b05e GIT binary patch literal 1766 zcmZWp&sQ5&6#j-^6NW(`KucTN(iSy@AFv}6KL(y zl{=4X7j9j8jwDBOj>oNTT)FZO@DI?n$M3x)kksUydH22dz4z|@?sxBR|NitdfSU+) zv}lM~{;uOKY%J<%(-41Z@7vE);eq4rrk3UdyC5`l7ef(vH0K@R<~0miO{k1`9;uxf zLig-2Jn(~j4LaNmU2WVY+zx5BYM~?3q;FgJ#7$Oy+ zh%!#(^7_Gqav|l~NrOakDM}a7V%Ev zFPJdVt>co0GmW%uIbPmBNc&zG**auN6?HBfZPk0eS&@uUHmRD_0xH?iA`lW*@ zd1N7Q@|OL=FGdEYa9PqgY+wR!OY0qm(r|qhw`_aNU7()0Mot@JT{@D8fvZ(o-ZRmT z4joM1=_Y8CL<~$<;kQiah)F)*H_<5%-gz|)r4j?P)dP1;80gZmP>bqF(|3wd#dg?m>P058|DrsE@4M7$I`KnSyu_GzM*tDk55h5*w)ZTH)eBE z$`(Z}JP~NP*x;1dXW~=M2$du{fBe`L135g_&|^8CSSc2^MUb(#WhKO=y4+1WaOAwU z*cLr;LV5nkDYCgIb@adDRqA4v+g;gbDA?xOuBL4Nra@6=|hv2uD zlW&M=XKc(65| z`~laMp_VrqmTw*}Z#696t{xr7{W8+U$QBFiD7)rw)ZX0;X9rx zV+6l2C%@t%e#a&J!CU@hhx-fH@Ha9%3-&O@H=e-ZYz9B#DL!L1p5Y6)C@_C7@d6&L bR{nirTCm4m(4Q98NA;JhjRD6FwVwMADe|wz literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class b/Answers/40230212013/Graphical Login Page/bin/PasswordUtils.class index 65ad247cfe46b24b8a4eb5c31fb54acab691593f..537cb25664a92a20badb56aa68863a60a39519fe 100644 GIT binary patch delta 612 zcmZXRJ#W)s6osERiR0j=O(=@0sEtrXhP0v>C=DNJ0-=0GYNk{Iv6;j;29vmsL)o%0 zurswQD+5HR0|P&RpToj}fSWi4B<#WG-h0lu$M5?=|9;B&`t$P_pvr@f#wRsu7;Iqb zTu@}6SuZWqvwDu%3In(2q`Al?Mbfi-PS{n%OKU>UvYF-zTMGS!6}G!}px7+!{uS?Z zt)OM^5A9ytuB=6aVd#2hU_16Jvl)ph23NU0(z&Ksnu`DDq`5&wk$CF%I@9%!6)E2u z3=aB%G#39^8YLETY7hpqysDwly#B!?p%SS!^!*9eIB&(zKv9g7)d#*{rL9!G3T?XcO+jcH6}0RKU%1_Ek%`LW4;NlFaEJ#(z%`DDMEJ@C=Qb?@ZP~iXo diff --git a/Answers/40230212013/Graphical Login Page/bin/UserStore.class b/Answers/40230212013/Graphical Login Page/bin/UserStore.class index 0db41ce081b1f449f8c104f8318c47326c455eee..42c9c887b4e10ca4ddfcf6edd6d5833e1abc1b8f 100644 GIT binary patch delta 1798 zcmZuy`*Raj6#i~@lij3?l)faCM`;R8(zKK$U_Z!>rxw7hXP|YI_zZyWThGnSZ2OX{Q0~#9mO-Cqthd4?jZUTfJ~5~gYN*`=Jo3;eumY1v7CBEp=usZ;yn%T<2?C>^i+p2l4g+nft>=~$A3|FxJL1*f=_rr4XCH^8N+FR zlsCB-@)7mm!jDyaLGf9L4hF3)9ygLLCiR|?Qt%a@;|{Vbe69Ojb`8BFjOud-ConIV zL+Lmf4$P(Nee@0i3S_vU!UHc^nhnN6EF#N|GAt%fK8*(nEdo_sK?%hvpM>9mGjK{{ zcO1b<)JW*Qih6mBaFUgSZ}k*q%Tf5R;1yVo6$Dsmf!G|%vI?v3WH~{#$uzN81f4|K zf$!jJ58V=Zs;**PM|CKN^*OZOO;G|TJ#ar}QNlTxN4e(HXn~b6D1v2)!^3b9h~gqb zBiaB^WR)S5aMSDTqIyL^D%hVWRN$jJXkW3bV#74A(CmvW%G#$8?U_PHPk}mtEfd(@ zF^W}Qxu7eDN5W38^SbK-{8RAtc%4$c*D2R~S2&&Z6L>7_B2HcxN#}LhQdQ^hWKUSW zHGQ-C2P`A2cNBprjTJHGm-C8Mqv}SqDu-eIbKX2=@;~xgvi8yxqYHcSlqK_WB&k3d zon+ag#k8ZPkS1jsY4L>KE*vAoKI|t-g6Imkr-{2$0aGww{i6zP61a_qPBL#pZKj)> zP}D$#5*Jg3CyR!EbZMppLi`gf!lF~ikS+%-T@Fs*nRcQ(i7dk;o?{5hqp0-Clcb?o z(vA>OET?llov&TPn?Me4)7qX9m~#wgr+*ERDCD_7qC{w{h;i^nHX6JIwJI`-S;4AH zP=h3o5xfzho*W)00ca=0E~-h!FdgD|gbvdZ3iKgxlV>@hR-&G|ZX?3f5i9ALwS;QK zQ8eK=nyuz3v!Zq4B0ivQs3)HgG9wYlR?_a_bwbHXp`7{}M}{tX&NX`285 delta 1898 zcmaJ>`*Raj7(F-HN186LmKH<725Qr$Nhy@_FbG;}c%~1b4}yS(W@!RxHf{oKMF}dP zRD51VK}0~YK2QWDwbTKBU}VN|#_><^H^v!f{Fz~_-`#}gjAoO&_uicQo$s9Q+dWlr zahCI!e=c1HupGJb&T5ubQNb`}M`U-TArVRTH3Uu5Fddl9u%#<$>S-gfTaUVXjs8?T z5y`}jq&sCA+Y)+z!0jyRjOp%vJrgsc?t~GEcBOSQUF&tn)9zi#sJ=a(q@&vn)14t) zW+rv@M2f8(sp@*TgHgpS>M=bMpI}m1I ze!={dhRxW*Ag5D_c!r@yc*EUNIi>%!2=NSGA+1>5fo&RkMfwhtctYg0Akj5!#}qo< zn=sO}6T=P_aU#8=q%&q30}(2rhMh?8t5SVs5-AnNEfl4{rad^=tEWW0H9X6w%0uiq zJ}g%RpTAFIj~UMhjeCT~A!J2@`|i=0N07#1`0w~BEXA8R;?Q?wV0q}%jCa@$_(-6YUDkEmVB z7x+rWm;6W7Yd?as{JMH#&gTxCqp-|R7lXDYnbgge1a*#1eQ<%Hn*XI%+f{tee{&qq zHo*=?xjDx%Gh8xj6c1jZl?@Njs966L!9{Z|kHQ?xr4>UJ9-?t7%}t76qkHuQl>2h1 z9)r(@qmb=q3md*MEU=@eE{8?ZSpwRv;N_5M&i^i&oUKBs#ZjJ*Q{bS8Sc->U1rAMZAO6rrDP|(lb%xrl9ikT>?TT8cnH&uDftZ9PWoS^3=gpo zYaK^NcpU4)C5};aj-sn=1WR2~$;KQu#RIZSzO0-??KnJPmuzoz$rAnK#!+kyD5TG& zkgqN!?<0wdgagvGiL3QLV?M2-Bk+c3u8O(uN~`Z09RAPl zd+|(`7?KifSuDBj(?%jt$fwuxJ`Isidn}(` z7{%T;l0SwQ8OCscIzb+R&n1r$R+Kv+)w?8N4GlptynPAp0y%s@R(vRMCm4=R{9Z8X z^c|xDIQ_p)ohK8@5Jr^pl3>s!J_qPZ@;|iF>_ReQ9o4>_bcCrV50FI%=`}u#W~-O# z=oBd`^iml%;uCyIF&9$92_q#!-)-b7VPp-IyNn#7<~a=1Okg^sd-j>y{NL8vafX;} a_zWX-r_RLJ^!oy uVV_aP(zkGcL#`qnuvH@BFZfSew9<3$1L4jS!{w=q03O=Bf^fv#!SNp+?KJrS literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/src/App.java b/Answers/40230212013/Graphical Login Page/src/App.java new file mode 100644 index 0000000..476fe42 --- /dev/null +++ b/Answers/40230212013/Graphical Login Page/src/App.java @@ -0,0 +1,6 @@ +public class App { + public static void main(String[] args) { + LoginGUI loginGUI = new LoginGUI(); + loginGUI.setVisible(true); + } +} diff --git a/Answers/40230212013/Graphical Login Page/src/EmailValidator.java b/Answers/40230212013/Graphical Login Page/src/EmailValidator.java index 5a94493..1bdf807 100644 --- a/Answers/40230212013/Graphical Login Page/src/EmailValidator.java +++ b/Answers/40230212013/Graphical Login Page/src/EmailValidator.java @@ -1,9 +1,11 @@ import java.util.regex.Pattern; public class EmailValidator { - private static final Pattern emailpat = Pattern.compile("[^A-Za-z0-9.-]+@[A-Za-z0-9.-]+$"); - public static boolean isValid(String email) - { - return emailpat.matcher(email).matches(); - } -} + private static final Pattern EMAIL_PATTERN = Pattern.compile( + "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$" + ); + + public static boolean isValid(String email) { + return EMAIL_PATTERN.matcher(email).matches(); + } +} \ No newline at end of file diff --git a/Answers/40230212013/Graphical Login Page/src/LoginGUI$1.class b/Answers/40230212013/Graphical Login Page/src/LoginGUI$1.class new file mode 100644 index 0000000000000000000000000000000000000000..842ede368ba8cecc7eec488b71a57a21934679cb GIT binary patch literal 1118 zcmZuw+fvg|6kVqj(xxfY3J3^NkxNscMXc8Xij_;9g3J^;qdcYUp#;-}NmAg=@9+zJ zb_T)G89%^((s7@(8LiMsb8^<%d+oI^=jZQlKL9MF5Jmu95`qf4(Ze7Yt-5Y*>=h>O zGxWHJx-+>TP#@082q7#%RuF;05IfRNw2Yyd^~{^f5wE)BwWOQ6yTZ_wRLf!XqEA9h z!41S2LOu^ewCQl$)EazU=SGcTs3@q;GR~<^WUqJmnd_ZU#C{A&7*uczLkxr0n=wdr z?g}r4{-o-WwRDwSn;3HvMmprSV4-hR!5Hq4qGQc*PA$9ERy5kFXy@NkQkB462@?wL zVUl5_Lsf?h({70 zD|mvZ4DpWSJVzpS{BjRmBTFrZkYgAtm?xT{*AjlS6PBIu%bb?5OeTUnqn)}Le!@*R zvs!g^%Pi`S%S~=mSCW5+Pc2jV@>Y$q=_~3c-)=T4+}_nHhCnpWbBEgpmfheqQsZr5 z|C6tYKsiAcExB6t{g!sz=8#KP)2`A;3c{#AtZ5;U0<4);!*Xbtwzzv}QGn1kcic_O zp_x+(CdthkG$h=i*$B`*VORo-#l+2`%NC%21S^C-r>_ax3q(%MegR8eLi$WQh8Ohi zp%s{>_bOht?LVLkK|)tk=V0fEUf|}|cMQL6ZEs&-{1Q{!bMs%3{D^o9O~)56ko|-{ zfBTHKB22&wGvdigk*Ha^0CSi^8d)sTSr&P+QV{rstb}2DA{6|U=edS;T7xuVVQhFv OFE(kFNvKGOet!VK1qnz1 literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/src/LoginGUI$2.class b/Answers/40230212013/Graphical Login Page/src/LoginGUI$2.class new file mode 100644 index 0000000000000000000000000000000000000000..1b47739b4bf4da396ea8ee1993fe2a079722e5e1 GIT binary patch literal 1899 zcmaJ?+fo}x5Iuv1R$7)z6w9_8V+$K65;iDy5)vbfZDcOO;u6FqfO8q7K`dJB%Gwd& zw|qeIp7=2@d3KcplwFk%$Tv~0^z2F%6qHnHcW3%?rcd{D>#z53{{-+5FT&`+1q}fM zod`1MIj3aWGppIb`wT(3Yr2D+7=s~ZBJ_8>h!VqfWFm%^lQL}kPOq;?gGF-_isKbhEBYQ zsD?`hF5?QrrS@hFT1iOd#c(l^^uYYM^0G#VX$@Cf!u7=}zH0{hah)Qna@Rd@YQ;uG z*IFZ5I;*9q;uz3y)4(kZGF)wms>PI{iy~`^7y^mpRz^n*AFCXG!qA!6%J`W|8W>V( z(nW=vmKTPOyBO9mVju;oM9-ActZ~aMa_Q8Fwds00hG^nE>Exy&c;CQh_?&Dj!gYB` zP=;Em<@mO+(jklzO4i<2=yC6$_>NPna5N#IMqg(=mfNmH1~2587nxd=Ae`lEh^m3mO&;Ea7X0utLsLJt(!InkbpB z6jYmVBBvDTPF*!adI=QB$Q9)Mz&vtp5!@ zr4C9fum+WSsfr2N+O%R5c+JGGY#znm>r!_Wtv z<#y2$?qJSw%Jpjce7(*{S{zqiRz(~0tuyxiP)nb^QVoa+4f9ow}xjo-TYt(hXYOq`i{pLwEiF8#;#ensyAE^bXP&7^U|Xo;U1I2}L96&qHs( z-k|#kAI`r+Y{TDvbc7qnxV_--5~Lgp!~!R{^9p^w>|W%HBYgRK_yi9}JENV!-wvnC>WHDnGiGLF z2lxVZ6kotLORBI`g{mmFuwliD58wk}O>uf;IZ~vm?laxD@8jIl{ri7E{{rAPY#klw z)X-(18$AN?FRVlBMLIaL-E#Wzl5g!xfu2R%wZl6Cor&aD3^9RG(<|HVgyohdHe}fj zLf;B)&()#hj0VF%AI=KIBCF-i9AO~Cf*m^aHj*$^khEhlL_YKxDU;k%M+XcHA}*lO zIB$PV+wMdzm)z1YEYQ0dNIxHXzSJ><&R*J&890YGxK(Lx37j!c?J~;exPc3}C~%HG zAIRrc#R;>H7s#~(*~nR-E5R7b_OgKqTw#W^HNCy4qz&nCK9mJdVC*Dw>nKcTz5N5v zm2Sw~HC%n2xpm8xj)pe{hN5ECk!9a5nbuccCDbv6w-n=X9g|2ZloA+kao@08v0SSx z{V2o?S#N7jLB0r=Z0VGAOgH#Q8+aSn1^N^pE?XCEv-XJa)2^N#%xHK=;C!3cbt?#t zJim0}dA{NKrh)hHK0P0_ZVOy!_uO_kqgu3JAfr;!<-TP*ky8z~UuVm-cBP|Zu@US8 z1NU&BGT4_v!1@J-+rvcWO#Z|>IeFq<3EMabe41E1nEfkCEmZ%^GUlXpzI(ifO)NlG44fa!LNNGw)s zuz4LjcuJjTy%NdnH*Ht0R`z$LU$A!7jnwmA#owb^)JI=4mpP>iUZ_H!M#rc$|;!+)x#X6>n16o%N*J?@nsD=Lz3E z#*J62w+I)xdgmB->&O=44{KOniBOJcby{u5KdfP;iq-Au)K8d;K(xHkvV7y!a-n7U zR`b~12rzScnN?$Ix{9ssnL4(Mtgl$bv)MX!6y7ENF=C^{@p;5dADQSUp98qeS8xh( zB>B!|FpMRP;0Z?Y3}Yzs#ru->-(Vcy@@4xT7x4ow;U!Pi_hidPBh|w>B@O@ literal 0 HcmV?d00001 diff --git a/Answers/40230212013/Graphical Login Page/src/LoginGUI.java b/Answers/40230212013/Graphical Login Page/src/LoginGUI.java new file mode 100644 index 0000000..3e4b889 --- /dev/null +++ b/Answers/40230212013/Graphical Login Page/src/LoginGUI.java @@ -0,0 +1,85 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +public class LoginGUI extends JFrame{ + private JTextField usernameField; + private JPasswordField passwordField; + private JTextField emailField; + private JLabel message; + private UserStore userStore; + + public LoginGUI() + { + + setTitle("Login and Registration"); + setSize(400, 300); userStore = new UserStore(); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); + JPanel panel = new JPanel(new GridLayout(7, 1)); + usernameField = new JTextField(); + passwordField = new JPasswordField(); + emailField = new JTextField(); + message = new JLabel(); + JButton login = new JButton("Login"); + JButton register = new JButton("Register"); + + panel.add(new JLabel("Username:")); + panel.add(usernameField); + panel.add(new JLabel("Password:")); + panel.add(passwordField); + panel.add(new JLabel("Email:")); + panel.add(emailField); + panel.add(message); + panel.add(login); + panel.add(register); + add(panel); + + login.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + String username = usernameField.getText(); + String password = new String(passwordField.getPassword()); + if(UserStore.login(username, password)) + { + message.setText("Login successful"); + } + else + { + message.setText("Invalid username or password."); + } + } + }); + register.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + String username = usernameField.getText(); + String password = new String(passwordField.getPassword()); + String email = emailField.getText(); + if(!EmailValidator.isValid(email)) + { + message.setText("Invalid Email format!"); + return; + } + int passwordStrength = PasswordUtils.isStrong(password); + if (passwordStrength < 3) { + message.setText("Weak password. Strength level: " + passwordStrength); + return; + } + + User user = new User(username, password, email); + if(UserStore.register(user)) + { + message.setText("Register successful!"); + } + else + { + message.setText("User exists!"); + } + + } + }); + } +} diff --git a/Answers/40230212013/Graphical Login Page/src/PasswordUtils.java b/Answers/40230212013/Graphical Login Page/src/PasswordUtils.java index 34e9c59..19be82f 100644 --- a/Answers/40230212013/Graphical Login Page/src/PasswordUtils.java +++ b/Answers/40230212013/Graphical Login Page/src/PasswordUtils.java @@ -5,7 +5,7 @@ public class PasswordUtils { private static final Pattern Lowercase = Pattern.compile("[a-z]"); private static final Pattern Uppercase = Pattern.compile("[A-Z]"); private static final Pattern Digit = Pattern.compile("\\d"); - public static boolean isStrong(String password) + public static int isStrong(String password) { int strength = 0; if(password.length()<= 8) @@ -28,7 +28,7 @@ public static boolean isStrong(String password) { strength++; } - if(specialChar) + if(special) { strength++; } diff --git a/Answers/40230212013/Graphical Login Page/src/UserStore.java b/Answers/40230212013/Graphical Login Page/src/UserStore.java index 0e87cd9..ad89c47 100644 --- a/Answers/40230212013/Graphical Login Page/src/UserStore.java +++ b/Answers/40230212013/Graphical Login Page/src/UserStore.java @@ -8,7 +8,7 @@ public UserStore() { loadUsers(); } - public boolean register(User user) + public static boolean register(User user) { if(users.containsKey(user.getUsername())) { @@ -18,7 +18,7 @@ public boolean register(User user) saveUsers(); return true; } - public boolean login(String username, String password) + public static boolean login(String username, String password) { User user = users.get(username); if (user == null) @@ -28,7 +28,7 @@ public boolean login(String username, String password) String hashPassword = User.hashPassword(password); return hashPassword.equals(user.getHashPassword()); } - private void loadUers() + private void loadUsers() { try(BufferedReader bufr = new BufferedReader(new FileReader(file))) { @@ -48,7 +48,7 @@ private void loadUers() e.printStackTrace(); } } - private void saveUsers() + private static void saveUsers() { try(BufferedWriter bufw = new BufferedWriter(new FileWriter(file))) { diff --git a/Answers/40230212013/Graphical Login Page/users.txt b/Answers/40230212013/Graphical Login Page/users.txt new file mode 100644 index 0000000..7c657b2 --- /dev/null +++ b/Answers/40230212013/Graphical Login Page/users.txt @@ -0,0 +1 @@ +navid,e9ff6b954d2c80dde0ac488c7962ae3604ff633770b130d8aea86b5c9482e5fe,navid@gmail.com