From 9af9e2107042b0aabacd99d02e20f7382586f691 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Sun, 8 May 2022 18:02:48 +0200
Subject: [PATCH] Gives user feedback if username or password is wrong

---
 .../com/application/DB/Account_handler.java   |   2 +
 .../com/application/GUI/Panes/LogoBar.java    |  25 +++++-----
 .../GUI/PopUpWindows/LoginPopup.java          |  45 ++++++++++++++++--
 .../com/application/DB/Account_handler.class  | Bin 2707 -> 2783 bytes
 .../com/application/GUI/Panes/LogoBar.class   | Bin 2968 -> 2968 bytes
 .../GUI/PopUpWindows/LoginPopup.class         | Bin 5210 -> 5697 bytes
 6 files changed, 56 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/application/DB/Account_handler.java b/src/main/java/com/application/DB/Account_handler.java
index 7ac1dff..10dd3e7 100644
--- a/src/main/java/com/application/DB/Account_handler.java
+++ b/src/main/java/com/application/DB/Account_handler.java
@@ -7,6 +7,7 @@ import com.google.cloud.bigquery.TableResult;
 
 import static com.application.DB.Constants.*;
 import static com.application.DB.Settings.*;
+import static com.application.GUI.PopUpWindows.LoginPopup.getPasswordTextField;
 
 public class Account_handler {
 
@@ -41,6 +42,7 @@ public class Account_handler {
             }
         } else {
             NotificationPopUp.displayNotificationWindow("Wrong username or password!");
+            getPasswordTextField().clear();
         }
     }
 
diff --git a/src/main/java/com/application/GUI/Panes/LogoBar.java b/src/main/java/com/application/GUI/Panes/LogoBar.java
index 810dc23..4cb813b 100644
--- a/src/main/java/com/application/GUI/Panes/LogoBar.java
+++ b/src/main/java/com/application/GUI/Panes/LogoBar.java
@@ -12,6 +12,8 @@ import javafx.scene.layout.Region;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 
+import static com.application.DB.Constants.isIsAdmin;
+
 public class LogoBar {
 
     private static Button login = new Button("Login");
@@ -45,22 +47,19 @@ public class LogoBar {
         HBox.setHgrow(region2, Priority.ALWAYS);
 
         // Login button
-
-
-            getLogin().setOnAction(event -> {
-                if(getLogin().getText().equals("Login")){
-                    LoginPopup.login();
+        getLogin().setOnAction(event -> {
+            if(getLogin().getText().equals("Login")){
+                LoginPopup.login();
+            } else {
+                if(isIsAdmin()){
+                    LoginPopup.adminPopup();
                 } else {
-                    System.out.println("Logget inn");
+                    LoginPopup.userPopup();
                 }
+            }
+        });
 
-
-            });
-
-
-
-
-        return new HBox(imageViewM, region1, imageViewTitle, region2, login);
+        return new HBox(imageViewM, region1, imageViewTitle, region2, getLogin());
     }
 
     public static Button getLogin() {
diff --git a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java
index e4b4c57..4db9e17 100644
--- a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java
+++ b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java
@@ -21,6 +21,8 @@ import static com.application.DB.Account_handler.getAccount;
 
 public class LoginPopup {
 
+    public static PasswordField PASSWORD_TEXT_FIELD = new PasswordField();
+
     public static void login(){
 
         Stage window = new Stage();
@@ -31,7 +33,6 @@ public class LoginPopup {
         Label passwordLabel = new Label("Password:");
 
         TextField userNameTextField = new TextField();
-        PasswordField passwordTextField = new PasswordField();
 
         Button closeButton = new Button("Close");
         Button loginButton = new Button("Login");
@@ -43,7 +44,7 @@ public class LoginPopup {
                 MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
 
                 assert messageDigest != null;
-                messageDigest.update(passwordTextField.getText().getBytes(StandardCharsets.UTF_8));
+                messageDigest.update(getPasswordTextField().getText().getBytes(StandardCharsets.UTF_8));
 
                 byte[] hashedPassword = messageDigest.digest();
 
@@ -72,11 +73,49 @@ public class LoginPopup {
 
         VBox layout = new VBox(10);
         layout.setAlignment(Pos.CENTER);
-        layout.getChildren().addAll(userNameLabel, userNameTextField, passwordLabel, passwordTextField, loginButton, closeButton);
+        layout.getChildren().addAll(userNameLabel, userNameTextField, passwordLabel, getPasswordTextField(), loginButton, closeButton);
 
         Scene scene = new Scene(layout, 500, 300);
         scene.getStylesheets().add(InputPopup.class.getResource("/com.application/CSS/styleSheet.css").toExternalForm());
         window.setScene(scene);
         window.showAndWait();
     }
+
+    public static void adminPopup(){
+
+        Stage window = new Stage();
+        window.initModality(Modality.APPLICATION_MODAL);
+        window.setTitle("Login window");
+
+
+        VBox layout = new VBox(10);
+        layout.setAlignment(Pos.CENTER);
+        layout.getChildren().addAll();
+
+        Scene scene = new Scene(layout, 500, 300);
+        scene.getStylesheets().add(InputPopup.class.getResource("/com.application/CSS/styleSheet.css").toExternalForm());
+        window.setScene(scene);
+        window.showAndWait();
+    }
+
+    public static void userPopup(){
+
+        Stage window = new Stage();
+        window.initModality(Modality.APPLICATION_MODAL);
+        window.setTitle("Login window");
+
+
+        VBox layout = new VBox(10);
+        layout.setAlignment(Pos.CENTER);
+        layout.getChildren().addAll();
+
+        Scene scene = new Scene(layout, 500, 300);
+        scene.getStylesheets().add(InputPopup.class.getResource("/com.application/CSS/styleSheet.css").toExternalForm());
+        window.setScene(scene);
+        window.showAndWait();
+    }
+
+    public static PasswordField getPasswordTextField() {
+        return PASSWORD_TEXT_FIELD;
+    }
 }
diff --git a/target/classes/com/application/DB/Account_handler.class b/target/classes/com/application/DB/Account_handler.class
index 30fde92804abf4d3e2a3b90d1aa76b3fec8c496d..254fefbc8b16860ea8ebc924d879720d5c4da3fc 100644
GIT binary patch
delta 928
zcmbO%dSA5u)W2Q(7#J8#7*??}IC3$lF*va^ICC*DGdOWDxPWL^5aGtb;0~faI2k+{
zyto*=8GN`Hd>Q<>82lLmKtv!nLl8qSH$w<RD2NDSX9(wDh~Q!nVu<8oh+>EanH<B#
z5X%t9#SqVsz{QZrki@}|%%#Q<#gGD0kqQz@<6uY!aWX)hOb&)DE{1G|94?03jmxqa
z8N(+FGKDa!GiXfCVA`O{&QQX`(8|!p!_dyq!Oqah!_dXh&CXED!_dRf%frye(9g)A
zF*%-5qn?q0BeXcRC@(QLm4{&h!$fw5Njwab8Txq`rZ7xpXPCyrFr8rrJHt#KhFJ`a
z><qJc80IiEGBR)kWaQ_i#^>epFw6y+IFF&4hhaWQhSf18H#3iiVF5^ZA;Tg@2I=sk
z{JeC9Qm8cw`9%r^iN(d``9&#;66_3%c^H;}j9$vau#90jJHrYdhLsE&n>kr{nKqlU
zr7|%yGH6fs;ZUsi$xqMB3&<}hEns92Nlz^afEp5#T2bPbnVOTr$e^a7>64XMmY7zd
zU!0tpm#UwfpI1_ppQ8^`3sz^%$e=`66(a*{a!zVu5rZOwDuWsW10Mqe0}}%ygF1r-
z10#dx<P98R###&v3~UUH3=9lB4BB84#AapCVbEn@VBloXW6)<{V$ft@V9a4)VPIom
zVAwtRCx=D7?luNq&M7k)3U#+J@a<&aXJoKqk!0D)Ai&5llOYns5@cjJz#wGBD#<D&
zyp2I*8-u9UHU_bo417Bn#I?3DNNDX~kd$N<k^;*~&tedOb7Xcf$V##b$$@3$XELy}
z>|jt>{(tdu20kIh9Sll47?kU`F{o^0U|?Wo0C~WPL4bjQL6AX*L5#teL6X6OL7Ksl
zL53lTL5`uAL7t(CL4l!;L7AbOL4{!kgF3@f1`URl3|b898FU!7Fz7PuV$cVB-h_db
zA&J4A!GOV#ffeLc1|tSz1`ycIV8UR`z{sG((9dAXV9eme#9+bD%wWb~&cMuI!N9;E
z%fSAR!H1o}lAXbdox%DKgCRSEjpQ!|fnN+vOk51M3=9k`42%qR42%r+;An6F02sNt
A;s5{u

delta 819
zcmcaFI$5;-)W2Q(7#J8#7?!a!IB_wkGdQy|xNtErGdOcFxPoXm5aG_j-~pmNIT^ed
zytx>B7<{=H{22T>7y`H$0vUopa={>02scA0Ll`$hI70-8h-7Do;$Vp8Vh~}7;bMqo
zhy&RW&&80ykjTZ5#E{IT&XB^8%E6EZl1v8?8C(o044E7ZSs+d}h?B#?kjt@gX%-`6
z)MNps5M~Vq&B^IZ8_XCPID=A)OLIz!trXZ9N_ZGr8QORl${E^u7&;g_*%`Wc7`hpH
z*cnQB7<w7{co_N_CNMH+Oy0<*GC6@+FkvFYBzA_$JPcD9Ch#y!Wthg!Fr9~C2E$Bt
zhFLrevl$xM8RqaX%w=d~WZ($M$j?iS&&%gwm<KXwK0`GR!vc^Dt7A%TW*!g2LXhwx
zhQ*8woNlR^ISK`d#l@44GApnx;bB<H(75?GGcOafjE2|b9V{}NIoMK}#26GA)ELwm
zK!AyXkwJq&lYx;zYqA`tn6Wkk0|OfaBLf2iH-ioX0|O73&B~z5pvS<#z{#M`V8Fn{
zpvAzz*vG)az{bG9aC34xr$zlH2Cm%<%#qs}ScG`DF|g@wW8mAyz`u=wa~lIUh{HK$
zCPSg_HU@#641$adRxFY%I~jx+8D=s>f>^?g3<nrQtXL&kg+#Y8h;3sK*V@J)F_VFB
z2ZN;6HU=rJ9SqWvtU@wiIoVkZ0&tGp4hDHiR-t+Yu$1CV26mPm3`)!YFJ8_du!(_7
zNO>Crw~)#X2GxxW3=GT+An&;`2r@7*2r%d{h%y*6NHAD1NHK&k$S}k*$TQS2C^Gaj
zC^1Z9P-d9LpvJJAL7ia>gBHU<25p9;47v=b84MUMGZ-@5U@!#-j|l@SLmh)VLy94T
z5d$kIG#HE-Oh5t4aFfB5!GwX4L5E>2gBgPf0~3P<!$Jmg1`7se21^D823ZF7e+(Jy
w3|8z6*6a*6e;5qe8EhqgF$nx(U}EB7uw!6gU}0cnuxDUoaA06yU}A6t0Kg)X;Q#;t

diff --git a/target/classes/com/application/GUI/Panes/LogoBar.class b/target/classes/com/application/GUI/Panes/LogoBar.class
index 6bf148944fe71a3eb8f7a6b784dc3a83196d42f3..654a3b92355770a294d191cc0f302fe5fc700687 100644
GIT binary patch
delta 678
zcmbOsK0}=A)W2Q(7#J8#7-mf5inZio5M_wvWKd#=<6=-?i05EP;9^K*NaA8hW=P>;
zNM%R^vC=_A20KG0NR0<OLl!$j_QrXQjEp&(6_{)oIdgd!)EM#@8EhxZGn-7F$*jYj
z&%;o_P{_kj#85o>0<%1K2@gXlLm3Z4IYY(dU(C`Hl>!V^{A>)>0t~i13^fe3JPdUV
z^^6P>lMk|rOm<|EvQlGc;9*c<P~~B0WN2b!VD-sQ&&*?IXy##PVQ6J%Xah;Avoo~w
zFmy0<@-TEUsPiy%GpI8%NKZColHR<VC7n^JhoP5|L0rQpE3qswtwKMwEH$r0-xWk!
zYld+#C^7U+c47M-Ad{S*tDjg<kdv95Sdy8ar|;sV@0_1kT#}eqQq0J}nOW>v?3j|9
zna9Y$tf3jj$iS5d;sxXvlol{DaF!OQ7J=F94E;O|6BwpUp2Tj&IBoJ-_LnTv85vY3
zJ8+0kzQ~cwC^*@k^PtZT2BF~X4B{IY7#NrsG#MBetQhzh7#L(31R3NQlo%8lv>B8b
zOc_)eY#7uS92wLZJQ*|?{28<vA{cZS5*YLtG8yz43K@(TY8dP$`*0Q1OMr}G1RKT1
zz{tSB;3UAsV8dX`z{sG%z`&5pzyuam*})*RjX_dKY8!*}Oa{&!3^L0Zgmy5<g4uG*
z8Q69($Zup|U|<HDB*nnSz`$V4z{g<1Ai`kAAjM$Lpuk|spv+*ypvAzzzymRp!H$8?
zo`HeEfq{X6m4R7=n`yEox1yZ{$RK1V2{SM=IDvia%rKdOfq{#GkzpdkRE9|mk_;hG
O<3bsj8NwLC86p7QqJW+N

delta 651
zcmbOsK0}=A)W2Q(7#J8#7-ml7iZ$nCP-2MXVi0AB<6=-?i05EP;9^K*NaA8hW=P>=
zNM%UlU`Xd;$Y981XUGDn@L*@iW@pIRxS)}dF?X{PlMN$h9uI>WLp~#e?PNt}lgYE0
zb@&Q+7z!DRco>QqN*EcWCckBr;$>$j<zXmeDCc3QV5pq@hgn**N`Rr7pN*kLfWelB
zp_ZYJhoPRKVX_X3p{ojmD#*x29)>1{W<~~9pZxU9Ja&c_9)?ziHg<+~9tIT#b#{gh
z9)?baE=C3}pZxUn)DnfvygYV>ZXSjnhCD_F>4|HkH*aD|XJqbW=$kCVCdb%6*_!Qp
zxIk87S)zVUVqUs_aAk2xYAz!KbAD+FBZH_9SSB-HKcFZxuOzsnC^a$Hnvp>mi!dVt
zdjUvMP98hM1RjQo3{xjJv0E`tpS+j-CCdy(2Gz+19O9D?a^y1dPuAx==(CAIJa{{U
z#0CZi1||kg1_lNz20jJ`25AOC1{nq=26+Z;1_cIF24w~t1{DTJ22}=61~mqM22F+t
z1}%mJ1|5b>23>|i1|x<V2K&i2Tm|*wAfp(;MzJw4GB7YW3ve;mFxWCMGH5U`FvK!2
zfkkC^FbHj9kQ9>I#vnbDfpZ6g%yI_qO$@R^a@!c>H!?6VFoTT{VqjrlU@&IjV=!S5
zVK8HmVX$J*Vqjq4ff&MI$6(LEz~I2Zz`(-5B*M<XG1;11-cB530J0kd8JHQIz+QA_
hn8Luoz{SAGFo|Ir!(;|Yh7hQ6p$yCnVGQ965dbaydtU$m

diff --git a/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class b/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class
index 47e7da70b4c4df450224dcea4a42d4e9159832d2..c0bfec4e092c91274be6d9220d72a0f18defb406 100644
GIT binary patch
delta 2469
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
Tn99J+FpXh4!we{EHp2`66SCc3

delta 1951
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
E04-&T{Qv*}

-- 
GitLab