From 156190722836432763be2a78c8f18895cef24799 Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Thu, 11 May 2023 09:38:58 +0200
Subject: [PATCH 1/9] Added UserController, UserService, UserConfiguration and
 interfaces now in separate packages

---
 .../controllers/PeerController.java           | 17 +++++++-------
 .../controllers/UserController.java           | 22 +++++++++++++++++++
 .../data/MasterConfiguration.java             |  1 +
 .../data/UserConfiguration.java               | 12 ++++++++++
 .../IMasterConfiguration.java                 |  2 +-
 .../data/interfaces/IUserConfiguration.java   |  5 +++++
 .../aim/asd/bootstrapserver/dto/LoginDto.java |  4 ++++
 .../{RequestDto.java => RequestPeerDto.java}  |  4 ++--
 .../services/MasterService.java               |  4 ++--
 .../bootstrapserver/services/UserService.java | 19 ++++++++++++++++
 .../{ => interfaces}/IMasterService.java      |  2 +-
 .../services/interfaces/IUserService.java     |  7 ++++++
 .../bootstrapserver/MasterServiceTest.java    |  4 ++--
 .../bootstrapserver/PeerControllerTest.java   | 13 +++++------
 14 files changed, 92 insertions(+), 24 deletions(-)
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
 rename src/main/java/nl/han/aim/asd/bootstrapserver/data/{ => interfaces}/IMasterConfiguration.java (75%)
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java
 rename src/main/java/nl/han/aim/asd/bootstrapserver/dto/{RequestDto.java => RequestPeerDto.java} (87%)
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
 rename src/main/java/nl/han/aim/asd/bootstrapserver/services/{ => interfaces}/IMasterService.java (81%)
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
index c7d0c69..c49e591 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
@@ -1,9 +1,8 @@
 package nl.han.aim.asd.bootstrapserver.controllers;
 
-import nl.han.aim.asd.bootstrapserver.dto.RequestDto;
+import nl.han.aim.asd.bootstrapserver.dto.RequestPeerDto;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
-import nl.han.aim.asd.bootstrapserver.services.IMasterService;
-import org.springframework.beans.factory.annotation.Autowired;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -20,23 +19,23 @@ public class PeerController {
 
     /**
      * The end point where a client can get the ip and port of the master peer
-     * @param requestDto an object with the ip, port, email and password of the client
+     * @param requestPeerDto an object with the ip, port, email and password of the client
      * @return an ip and port number of the master peer
      */
     @PostMapping("/joinNetwork")
-    public ResponseEntity<Peer> joinNetwork(@RequestBody RequestDto requestDto) {
-        Peer peer = new Peer(requestDto.getIp(), requestDto.getPort());
+    public ResponseEntity<Peer> joinNetwork(@RequestBody RequestPeerDto requestPeerDto) {
+        Peer peer = new Peer(requestPeerDto.getIp(), requestPeerDto.getPort());
         return masterService.returnMasterIp(peer);
     }
 
     /**
      * The end point where a client can update the master to a new peer
-     * @param requestDto an object with the ip, port, email and password of the client
+     * @param requestPeerDto an object with the ip, port, email and password of the client
      * @return a 200 status code.
      */
     @PostMapping("/updateMaster")
-    public ResponseEntity<String> updateMaster(@RequestBody RequestDto requestDto){
-        Peer peer = new Peer(requestDto.getIp(), requestDto.getPort());
+    public ResponseEntity<String> updateMaster(@RequestBody RequestPeerDto requestPeerDto){
+        Peer peer = new Peer(requestPeerDto.getIp(), requestPeerDto.getPort());
         return masterService.updateMaster(peer);
     }
 
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
new file mode 100644
index 0000000..c646c8d
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
@@ -0,0 +1,22 @@
+package nl.han.aim.asd.bootstrapserver.controllers;
+
+import nl.han.aim.asd.bootstrapserver.dto.LoginDto;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.IUserService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class UserController {
+
+    private final IUserService userService;
+
+    public UserController(IUserService userService) {
+        this.userService = userService;
+    }
+
+    @PostMapping("/login")
+    public boolean login(@RequestBody LoginDto loginDto) {
+        return userService.login(loginDto.username(), loginDto.password());
+    }
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/MasterConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/MasterConfiguration.java
index e983733..074f731 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/MasterConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/MasterConfiguration.java
@@ -1,5 +1,6 @@
 package nl.han.aim.asd.bootstrapserver.data;
 
+import nl.han.aim.asd.bootstrapserver.data.interfaces.IMasterConfiguration;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
 import org.springframework.stereotype.Service;
 
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
new file mode 100644
index 0000000..112cbf4
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
@@ -0,0 +1,12 @@
+package nl.han.aim.asd.bootstrapserver.data;
+
+import nl.han.aim.asd.bootstrapserver.data.interfaces.IUserConfiguration;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserConfiguration implements IUserConfiguration {
+    @Override
+    public boolean login(String username, String password) {
+        return false;
+    }
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/IMasterConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IMasterConfiguration.java
similarity index 75%
rename from src/main/java/nl/han/aim/asd/bootstrapserver/data/IMasterConfiguration.java
rename to src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IMasterConfiguration.java
index 6776677..a8f3417 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/IMasterConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IMasterConfiguration.java
@@ -1,4 +1,4 @@
-package nl.han.aim.asd.bootstrapserver.data;
+package nl.han.aim.asd.bootstrapserver.data.interfaces;
 
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
 
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
new file mode 100644
index 0000000..3383fdf
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
@@ -0,0 +1,5 @@
+package nl.han.aim.asd.bootstrapserver.data.interfaces;
+
+public interface IUserConfiguration {
+    boolean login(String username, String password);
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java
new file mode 100644
index 0000000..ce0165c
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java
@@ -0,0 +1,4 @@
+package nl.han.aim.asd.bootstrapserver.dto;
+
+public record LoginDto(String username, String password) {
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestDto.java b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java
similarity index 87%
rename from src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestDto.java
rename to src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java
index 71688fa..1f05765 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestDto.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java
@@ -1,12 +1,12 @@
 package nl.han.aim.asd.bootstrapserver.dto;
 
-public class RequestDto {
+public class RequestPeerDto {
     String ip;
     int port;
     String email;
     String password;
 
-    public RequestDto(String ip, int port, String email, String password) {
+    public RequestPeerDto(String ip, int port, String email, String password) {
         this.ip = ip;
         this.port = port;
         this.email = email;
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/MasterService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/MasterService.java
index 7a480d0..e563fa8 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/MasterService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/MasterService.java
@@ -1,8 +1,8 @@
 package nl.han.aim.asd.bootstrapserver.services;
 
-import nl.han.aim.asd.bootstrapserver.data.IMasterConfiguration;
+import nl.han.aim.asd.bootstrapserver.data.interfaces.IMasterConfiguration;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
-import org.springframework.beans.factory.annotation.Autowired;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
new file mode 100644
index 0000000..93d0920
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
@@ -0,0 +1,19 @@
+package nl.han.aim.asd.bootstrapserver.services;
+
+import nl.han.aim.asd.bootstrapserver.data.interfaces.IUserConfiguration;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.IUserService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserService implements IUserService {
+    private final IUserConfiguration userConfiguration;
+
+    public UserService(IUserConfiguration userConfiguration) {
+        this.userConfiguration = userConfiguration;
+    }
+
+    @Override
+    public boolean login(String username, String password) {
+        return false;
+    }
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/IMasterService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IMasterService.java
similarity index 81%
rename from src/main/java/nl/han/aim/asd/bootstrapserver/services/IMasterService.java
rename to src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IMasterService.java
index 4c045ee..80ddcf3 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/IMasterService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IMasterService.java
@@ -1,4 +1,4 @@
-package nl.han.aim.asd.bootstrapserver.services;
+package nl.han.aim.asd.bootstrapserver.services.interfaces;
 
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
 import org.springframework.http.ResponseEntity;
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
new file mode 100644
index 0000000..b60f71c
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
@@ -0,0 +1,7 @@
+package nl.han.aim.asd.bootstrapserver.services.interfaces;
+
+public interface IUserService {
+
+    boolean login(String username, String password);
+
+}
diff --git a/src/test/java/nl/han/aim/asd/bootstrapserver/MasterServiceTest.java b/src/test/java/nl/han/aim/asd/bootstrapserver/MasterServiceTest.java
index c9ef573..d860d58 100644
--- a/src/test/java/nl/han/aim/asd/bootstrapserver/MasterServiceTest.java
+++ b/src/test/java/nl/han/aim/asd/bootstrapserver/MasterServiceTest.java
@@ -3,10 +3,10 @@ package nl.han.aim.asd.bootstrapserver;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
-import nl.han.aim.asd.bootstrapserver.data.IMasterConfiguration;
+import nl.han.aim.asd.bootstrapserver.data.interfaces.IMasterConfiguration;
 import nl.han.aim.asd.bootstrapserver.data.MasterConfiguration;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
-import nl.han.aim.asd.bootstrapserver.services.IMasterService;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
 import nl.han.aim.asd.bootstrapserver.services.MasterService;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
index ce89c1a..8b20485 100644
--- a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
+++ b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
@@ -1,10 +1,9 @@
 package nl.han.aim.asd.bootstrapserver;
 
 import nl.han.aim.asd.bootstrapserver.controllers.PeerController;
-import nl.han.aim.asd.bootstrapserver.data.IMasterConfiguration;
-import nl.han.aim.asd.bootstrapserver.dto.RequestDto;
+import nl.han.aim.asd.bootstrapserver.dto.RequestPeerDto;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
-import nl.han.aim.asd.bootstrapserver.services.IMasterService;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
 import nl.han.aim.asd.bootstrapserver.services.MasterService;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -16,13 +15,13 @@ import static org.mockito.Mockito.*;
 public class PeerControllerTest {
     PeerController sut;
     IMasterService masterService;
-    RequestDto requestDto;
+    RequestPeerDto requestPeerDto;
 
     @BeforeEach
     public void setup(){
         masterService = Mockito.mock(MasterService.class);
         sut = new PeerController(masterService);
-        requestDto = new RequestDto("100.0.0.1", 8080, "email", "password");
+        requestPeerDto = new RequestPeerDto("100.0.0.1", 8080, "email", "password");
     }
 
     @Test
@@ -30,7 +29,7 @@ public class PeerControllerTest {
         //arrange
 
         //act
-        sut.joinNetwork(requestDto);
+        sut.joinNetwork(requestPeerDto);
         //assert
         verify(masterService).returnMasterIp(any(Peer.class));
     }
@@ -39,7 +38,7 @@ public class PeerControllerTest {
         //arrange
 
         //act
-        sut.updateMaster(requestDto);
+        sut.updateMaster(requestPeerDto);
         //assert
         verify(masterService).updateMaster(any(Peer.class));
     }
-- 
GitLab


From 47a6eb2ed9a73fca23b77e4761481518a5380009 Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Thu, 11 May 2023 09:48:12 +0200
Subject: [PATCH 2/9] added comments

---
 .../aim/asd/bootstrapserver/controllers/UserController.java | 5 +++++
 .../han/aim/asd/bootstrapserver/data/UserConfiguration.java | 1 +
 .../bootstrapserver/data/interfaces/IUserConfiguration.java | 6 ++++++
 .../han/aim/asd/bootstrapserver/services/UserService.java   | 2 +-
 .../bootstrapserver/services/interfaces/IUserService.java   | 6 ++++++
 5 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
index c646c8d..05739f3 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
@@ -15,6 +15,11 @@ public class UserController {
         this.userService = userService;
     }
 
+    /**
+     * The endpoint where the client makes a login request
+     * @param loginDto a username and password is provided
+     * @return true when the login was successful otherwise false
+     */
     @PostMapping("/login")
     public boolean login(@RequestBody LoginDto loginDto) {
         return userService.login(loginDto.username(), loginDto.password());
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
index 112cbf4..0fd814a 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
 
 @Service
 public class UserConfiguration implements IUserConfiguration {
+
     @Override
     public boolean login(String username, String password) {
         return false;
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
index 3383fdf..09bf84e 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
@@ -1,5 +1,11 @@
 package nl.han.aim.asd.bootstrapserver.data.interfaces;
 
 public interface IUserConfiguration {
+    /**
+     * Makes a login request to the database
+     * @param username the username of the client
+     * @param password the password of the client
+     * @return true when the login was successful otherwise false
+     */
     boolean login(String username, String password);
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
index 93d0920..b55cf7e 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
@@ -14,6 +14,6 @@ public class UserService implements IUserService {
 
     @Override
     public boolean login(String username, String password) {
-        return false;
+        return userConfiguration.login(username, password);
     }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
index b60f71c..b97e51d 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
@@ -2,6 +2,12 @@ package nl.han.aim.asd.bootstrapserver.services.interfaces;
 
 public interface IUserService {
 
+    /**
+     * Login request for the service
+     * @param username the username of the client
+     * @param password the password of the client
+     * @return true when the login was successful otherwise false
+     */
     boolean login(String username, String password);
 
 }
-- 
GitLab


From 4eb15e3aed146c881318ad86c987c03473ab5c0f Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Thu, 11 May 2023 10:03:56 +0200
Subject: [PATCH 3/9] added registration endpoint and service

---
 .../bootstrapserver/controllers/UserController.java   | 11 +++++++++++
 .../asd/bootstrapserver/data/UserConfiguration.java   |  5 +++++
 .../data/interfaces/IUserConfiguration.java           |  9 +++++++++
 .../aim/asd/bootstrapserver/dto/RegistrationDto.java  |  4 ++++
 .../aim/asd/bootstrapserver/services/UserService.java |  5 +++++
 .../services/interfaces/IUserService.java             |  8 ++++++++
 6 files changed, 42 insertions(+)
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/dto/RegistrationDto.java

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
index 05739f3..e454b36 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
@@ -1,6 +1,7 @@
 package nl.han.aim.asd.bootstrapserver.controllers;
 
 import nl.han.aim.asd.bootstrapserver.dto.LoginDto;
+import nl.han.aim.asd.bootstrapserver.dto.RegistrationDto;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.IUserService;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -24,4 +25,14 @@ public class UserController {
     public boolean login(@RequestBody LoginDto loginDto) {
         return userService.login(loginDto.username(), loginDto.password());
     }
+
+    /**
+     * The endpoint where the client makes a registration request
+     * @param registrationDto a username, email and password
+     * @return true when the registration is completed successfully otherwise return false
+     */
+    @PostMapping("/registration")
+    public boolean registration(@RequestBody RegistrationDto registrationDto) {
+        return userService.registration(registrationDto.username(), registrationDto.email(), registrationDto.password());
+    }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
index 0fd814a..a0ac6ab 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
@@ -10,4 +10,9 @@ public class UserConfiguration implements IUserConfiguration {
     public boolean login(String username, String password) {
         return false;
     }
+
+    @Override
+    public boolean registration(String username, String email, String password) {
+        return false;
+    }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
index 09bf84e..d607641 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
@@ -8,4 +8,13 @@ public interface IUserConfiguration {
      * @return true when the login was successful otherwise false
      */
     boolean login(String username, String password);
+
+    /**
+     * Makes a registration request to the database
+     * @param username the username of the client
+     * @param email the unique email address of the client
+     * @param password the password of the client
+     * @return true when the registration was completed successfully otherwise return false
+     */
+    boolean registration(String username, String email, String password);
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RegistrationDto.java b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RegistrationDto.java
new file mode 100644
index 0000000..3fcada7
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RegistrationDto.java
@@ -0,0 +1,4 @@
+package nl.han.aim.asd.bootstrapserver.dto;
+
+public record RegistrationDto(String username, String email, String password) {
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
index b55cf7e..09ad614 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
@@ -16,4 +16,9 @@ public class UserService implements IUserService {
     public boolean login(String username, String password) {
         return userConfiguration.login(username, password);
     }
+
+    @Override
+    public boolean registration(String username, String email, String password) {
+        return userConfiguration.registration(username, email, password);
+    }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
index b97e51d..69bc883 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
@@ -10,4 +10,12 @@ public interface IUserService {
      */
     boolean login(String username, String password);
 
+    /**
+     * Registration request for the service
+     * @param username the username of the client
+     * @param email the unique email address of the client
+     * @param password the password of the client
+     * @return true when the registration was completed successfully otherwise return false
+     */
+    boolean registration(String username, String email, String password);
 }
-- 
GitLab


From 08b4bc277977802e01721cb15d4283203434afff Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Thu, 11 May 2023 10:07:58 +0200
Subject: [PATCH 4/9] renamed username to email

---
 .../aim/asd/bootstrapserver/controllers/UserController.java   | 4 ++--
 .../bootstrapserver/data/interfaces/IUserConfiguration.java   | 4 ++--
 .../java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java     | 2 +-
 .../nl/han/aim/asd/bootstrapserver/services/UserService.java  | 4 ++--
 .../asd/bootstrapserver/services/interfaces/IUserService.java | 4 ++--
 5 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
index 05739f3..3767234 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
@@ -17,11 +17,11 @@ public class UserController {
 
     /**
      * The endpoint where the client makes a login request
-     * @param loginDto a username and password is provided
+     * @param loginDto a email and password is provided
      * @return true when the login was successful otherwise false
      */
     @PostMapping("/login")
     public boolean login(@RequestBody LoginDto loginDto) {
-        return userService.login(loginDto.username(), loginDto.password());
+        return userService.login(loginDto.email(), loginDto.password());
     }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
index 09bf84e..1f49bbd 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
@@ -3,9 +3,9 @@ package nl.han.aim.asd.bootstrapserver.data.interfaces;
 public interface IUserConfiguration {
     /**
      * Makes a login request to the database
-     * @param username the username of the client
+     * @param email the email of the client
      * @param password the password of the client
      * @return true when the login was successful otherwise false
      */
-    boolean login(String username, String password);
+    boolean login(String email, String password);
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java
index ce0165c..218fd39 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/LoginDto.java
@@ -1,4 +1,4 @@
 package nl.han.aim.asd.bootstrapserver.dto;
 
-public record LoginDto(String username, String password) {
+public record LoginDto(String email, String password) {
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
index b55cf7e..237337b 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
@@ -13,7 +13,7 @@ public class UserService implements IUserService {
     }
 
     @Override
-    public boolean login(String username, String password) {
-        return userConfiguration.login(username, password);
+    public boolean login(String email, String password) {
+        return userConfiguration.login(email, password);
     }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
index b97e51d..14ae3c4 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
@@ -4,10 +4,10 @@ public interface IUserService {
 
     /**
      * Login request for the service
-     * @param username the username of the client
+     * @param email the email of the client
      * @param password the password of the client
      * @return true when the login was successful otherwise false
      */
-    boolean login(String username, String password);
+    boolean login(String email, String password);
 
 }
-- 
GitLab


From 53173849a23302918389dff6d462c1f84190339d Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Thu, 11 May 2023 10:20:10 +0200
Subject: [PATCH 5/9] merge conflict resolved

---
 .../nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java  | 2 +-
 .../asd/bootstrapserver/data/interfaces/IUserConfiguration.java | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
index a0ac6ab..8ca1b4c 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
@@ -7,7 +7,7 @@ import org.springframework.stereotype.Service;
 public class UserConfiguration implements IUserConfiguration {
 
     @Override
-    public boolean login(String username, String password) {
+    public boolean login(String email, String password) {
         return false;
     }
 
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
index 7cda1e1..383f6ee 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
@@ -7,7 +7,7 @@ public interface IUserConfiguration {
      * @param password the password of the client
      * @return true when the login was successful otherwise false
      */
-    boolean login(String username, String password);
+    boolean login(String email, String password);
 
     /**
      * Makes a registration request to the database
-- 
GitLab


From 95e097340e23b3e35e673f11d50f9b08e1873b47 Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Mon, 15 May 2023 10:52:06 +0200
Subject: [PATCH 6/9] feedback verwerkt

---
 .../controllers/UserController.java           | 31 ++++++++++++++-----
 .../data/UserConfiguration.java               |  4 +--
 .../data/interfaces/IUserConfiguration.java   |  5 ++-
 .../services/TokenService.java                | 14 +++++++++
 .../bootstrapserver/services/UserService.java | 10 +++++-
 .../services/interfaces/ITokenService.java    |  5 +++
 .../services/interfaces/IUserService.java     |  2 ++
 7 files changed, 57 insertions(+), 14 deletions(-)
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java
 create mode 100644 src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
index ec68155..4c8ac86 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/UserController.java
@@ -2,7 +2,10 @@ package nl.han.aim.asd.bootstrapserver.controllers;
 
 import nl.han.aim.asd.bootstrapserver.dto.LoginDto;
 import nl.han.aim.asd.bootstrapserver.dto.RegistrationDto;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.ITokenService;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.IUserService;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -11,28 +14,40 @@ import org.springframework.web.bind.annotation.RestController;
 public class UserController {
 
     private final IUserService userService;
+    private final ITokenService tokenService;
 
-    public UserController(IUserService userService) {
+    public UserController(IUserService userService, ITokenService tokenService) {
         this.userService = userService;
+        this.tokenService = tokenService;
     }
 
     /**
      * The endpoint where the client makes a login request
-     * @param loginDto a email and password is provided
-     * @return true when the login was successful otherwise false
+     * @param loginDto an  email and password is provided
+     * @return Ok and a token when the user successfully logged in, if not return unauthorized
      */
     @PostMapping("/login")
-    public boolean login(@RequestBody LoginDto loginDto) {
-        return userService.login(loginDto.email(), loginDto.password());
+    public ResponseEntity<String> login(@RequestBody LoginDto loginDto) {
+        boolean loginResult = userService.login(loginDto.email(), loginDto.password());
+
+        if (!loginResult)
+           return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
+
+        return new ResponseEntity<>(tokenService.generateToken(), HttpStatus.OK);
     }
 
     /**
      * The endpoint where the client makes a registration request
      * @param registrationDto a username, email and password
-     * @return true when the registration is completed successfully otherwise return false
+     * @return Created when the user registered successfully else return Conflict
      */
     @PostMapping("/registration")
-    public boolean registration(@RequestBody RegistrationDto registrationDto) {
-        return userService.registration(registrationDto.username(), registrationDto.email(), registrationDto.password());
+    public ResponseEntity<HttpStatus> registration(@RequestBody RegistrationDto registrationDto) {
+        boolean result = userService.registration(registrationDto.username(), registrationDto.email(), registrationDto.password());
+
+        if (!result)
+            return new ResponseEntity<>(HttpStatus.CONFLICT);
+
+        return new ResponseEntity<>(HttpStatus.CREATED);
     }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
index 8ca1b4c..eaa3709 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/UserConfiguration.java
@@ -7,8 +7,8 @@ import org.springframework.stereotype.Service;
 public class UserConfiguration implements IUserConfiguration {
 
     @Override
-    public boolean login(String email, String password) {
-        return false;
+    public String getPassword(String email) {
+        return "admin";
     }
 
     @Override
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
index 383f6ee..ede9736 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/data/interfaces/IUserConfiguration.java
@@ -4,10 +4,9 @@ public interface IUserConfiguration {
     /**
      * Makes a login request to the database
      * @param email the email of the client
-     * @param password the password of the client
-     * @return true when the login was successful otherwise false
+     * @return the password of the email
      */
-    boolean login(String email, String password);
+    String getPassword(String email);
 
     /**
      * Makes a registration request to the database
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java
new file mode 100644
index 0000000..66718f0
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java
@@ -0,0 +1,14 @@
+package nl.han.aim.asd.bootstrapserver.services;
+
+import nl.han.aim.asd.bootstrapserver.services.interfaces.ITokenService;
+import org.springframework.stereotype.Service;
+
+import java.util.UUID;
+
+@Service
+public class TokenService implements ITokenService {
+    @Override
+    public String generateToken() {
+        return UUID.randomUUID().toString();
+    }
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
index 9d5eb5c..87f3978 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/UserService.java
@@ -2,6 +2,8 @@ package nl.han.aim.asd.bootstrapserver.services;
 
 import nl.han.aim.asd.bootstrapserver.data.interfaces.IUserConfiguration;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.IUserService;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
 @Service
@@ -14,7 +16,13 @@ public class UserService implements IUserService {
 
     @Override
     public boolean login(String email, String password) {
-        return userConfiguration.login(email, password);
+        String pass = userConfiguration.getPassword(email);
+
+        if (pass == null) {
+            return false;
+        }
+
+        return password.equals(pass);
     }
 
     @Override
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java
new file mode 100644
index 0000000..143763f
--- /dev/null
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java
@@ -0,0 +1,5 @@
+package nl.han.aim.asd.bootstrapserver.services.interfaces;
+
+public interface ITokenService {
+    String generateToken();
+}
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
index cbde834..6360896 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/IUserService.java
@@ -1,5 +1,7 @@
 package nl.han.aim.asd.bootstrapserver.services.interfaces;
 
+import org.springframework.http.ResponseEntity;
+
 public interface IUserService {
 
     /**
-- 
GitLab


From cdd9d99e9cd5078fa697661ceafd90ab3fce6de8 Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Mon, 15 May 2023 11:00:19 +0200
Subject: [PATCH 7/9] added token to RequestPeerDto

---
 .../controllers/PeerController.java           |  4 +-
 .../bootstrapserver/dto/RequestPeerDto.java   | 45 +------------------
 .../bootstrapserver/PeerControllerTest.java   |  2 +-
 3 files changed, 4 insertions(+), 47 deletions(-)

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
index c49e591..442a132 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
@@ -24,7 +24,7 @@ public class PeerController {
      */
     @PostMapping("/joinNetwork")
     public ResponseEntity<Peer> joinNetwork(@RequestBody RequestPeerDto requestPeerDto) {
-        Peer peer = new Peer(requestPeerDto.getIp(), requestPeerDto.getPort());
+        Peer peer = new Peer(requestPeerDto.ip(), requestPeerDto.port());
         return masterService.returnMasterIp(peer);
     }
 
@@ -35,7 +35,7 @@ public class PeerController {
      */
     @PostMapping("/updateMaster")
     public ResponseEntity<String> updateMaster(@RequestBody RequestPeerDto requestPeerDto){
-        Peer peer = new Peer(requestPeerDto.getIp(), requestPeerDto.getPort());
+        Peer peer = new Peer(requestPeerDto.ip(), requestPeerDto.port());
         return masterService.updateMaster(peer);
     }
 
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java
index 1f05765..110a9fe 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/dto/RequestPeerDto.java
@@ -1,47 +1,4 @@
 package nl.han.aim.asd.bootstrapserver.dto;
 
-public class RequestPeerDto {
-    String ip;
-    int port;
-    String email;
-    String password;
-
-    public RequestPeerDto(String ip, int port, String email, String password) {
-        this.ip = ip;
-        this.port = port;
-        this.email = email;
-        this.password = password;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    public int getPort() {
-        return port;
-    }
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
+public record RequestPeerDto(String token, String ip, int port) {
 }
diff --git a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
index 8b20485..a96f689 100644
--- a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
+++ b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
@@ -21,7 +21,7 @@ public class PeerControllerTest {
     public void setup(){
         masterService = Mockito.mock(MasterService.class);
         sut = new PeerController(masterService);
-        requestPeerDto = new RequestPeerDto("100.0.0.1", 8080, "email", "password");
+        requestPeerDto = new RequestPeerDto("aaa-bbb-ccc", "100.0.0.1", 8080);
     }
 
     @Test
-- 
GitLab


From 73bac0e21db43533eb252d45baac274864cc71e2 Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Mon, 15 May 2023 11:10:10 +0200
Subject: [PATCH 8/9] added token check to userController

---
 .../controllers/PeerController.java             | 12 +++++++++++-
 .../bootstrapserver/services/TokenService.java  | 17 ++++++++++++++++-
 .../services/interfaces/ITokenService.java      |  2 ++
 .../asd/bootstrapserver/PeerControllerTest.java |  8 +++++++-
 4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
index 442a132..4cd1446 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/controllers/PeerController.java
@@ -3,6 +3,8 @@ package nl.han.aim.asd.bootstrapserver.controllers;
 import nl.han.aim.asd.bootstrapserver.dto.RequestPeerDto;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.ITokenService;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -12,9 +14,11 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 public class PeerController {
     private final IMasterService masterService;
+    private final ITokenService tokenService;
 
-    public PeerController(IMasterService masterService) {
+    public PeerController(IMasterService masterService, ITokenService tokenService) {
         this.masterService = masterService;
+        this.tokenService = tokenService;
     }
 
     /**
@@ -24,6 +28,9 @@ public class PeerController {
      */
     @PostMapping("/joinNetwork")
     public ResponseEntity<Peer> joinNetwork(@RequestBody RequestPeerDto requestPeerDto) {
+        if (!tokenService.checkToken(requestPeerDto.token()))
+            return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
+
         Peer peer = new Peer(requestPeerDto.ip(), requestPeerDto.port());
         return masterService.returnMasterIp(peer);
     }
@@ -35,6 +42,9 @@ public class PeerController {
      */
     @PostMapping("/updateMaster")
     public ResponseEntity<String> updateMaster(@RequestBody RequestPeerDto requestPeerDto){
+        if (!tokenService.checkToken(requestPeerDto.token()))
+            return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
+
         Peer peer = new Peer(requestPeerDto.ip(), requestPeerDto.port());
         return masterService.updateMaster(peer);
     }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java
index 66718f0..5748847 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/TokenService.java
@@ -3,12 +3,27 @@ package nl.han.aim.asd.bootstrapserver.services;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.ITokenService;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.UUID;
 
 @Service
 public class TokenService implements ITokenService {
+    private ArrayList<String> tokens;
+
+    public TokenService() {
+        tokens = new ArrayList<>();
+    }
+
     @Override
     public String generateToken() {
-        return UUID.randomUUID().toString();
+        String token = UUID.randomUUID().toString();
+        tokens.add(token);
+
+        return token;
+    }
+
+    @Override
+    public boolean checkToken(String token) {
+        return tokens.contains(token);
     }
 }
diff --git a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java
index 143763f..31d49de 100644
--- a/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java
+++ b/src/main/java/nl/han/aim/asd/bootstrapserver/services/interfaces/ITokenService.java
@@ -2,4 +2,6 @@ package nl.han.aim.asd.bootstrapserver.services.interfaces;
 
 public interface ITokenService {
     String generateToken();
+
+    boolean checkToken(String token);
 }
diff --git a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
index a96f689..963e49c 100644
--- a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
+++ b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
@@ -5,8 +5,10 @@ import nl.han.aim.asd.bootstrapserver.dto.RequestPeerDto;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
 import nl.han.aim.asd.bootstrapserver.services.MasterService;
+import nl.han.aim.asd.bootstrapserver.services.interfaces.ITokenService;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
 import org.mockito.Mockito;
 
 import static org.mockito.Mockito.*;
@@ -15,12 +17,16 @@ import static org.mockito.Mockito.*;
 public class PeerControllerTest {
     PeerController sut;
     IMasterService masterService;
+
+    @Mock
+    ITokenService tokenService;
     RequestPeerDto requestPeerDto;
 
     @BeforeEach
     public void setup(){
         masterService = Mockito.mock(MasterService.class);
-        sut = new PeerController(masterService);
+
+        sut = new PeerController(masterService, tokenService);
         requestPeerDto = new RequestPeerDto("aaa-bbb-ccc", "100.0.0.1", 8080);
     }
 
-- 
GitLab


From 2239b7e0e2ca517a84b0e6b3332a818f4e71c38f Mon Sep 17 00:00:00 2001
From: "J.vanderSluis" <J.vanderSluis@student.han.nl>
Date: Mon, 15 May 2023 11:51:20 +0200
Subject: [PATCH 9/9] fixed tokenservice in test

---
 .../aim/asd/bootstrapserver/PeerControllerTest.java    | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
index 963e49c..c7309c8 100644
--- a/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
+++ b/src/test/java/nl/han/aim/asd/bootstrapserver/PeerControllerTest.java
@@ -3,6 +3,7 @@ package nl.han.aim.asd.bootstrapserver;
 import nl.han.aim.asd.bootstrapserver.controllers.PeerController;
 import nl.han.aim.asd.bootstrapserver.dto.RequestPeerDto;
 import nl.han.aim.asd.bootstrapserver.entity.Peer;
+import nl.han.aim.asd.bootstrapserver.services.TokenService;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.IMasterService;
 import nl.han.aim.asd.bootstrapserver.services.MasterService;
 import nl.han.aim.asd.bootstrapserver.services.interfaces.ITokenService;
@@ -17,23 +18,23 @@ import static org.mockito.Mockito.*;
 public class PeerControllerTest {
     PeerController sut;
     IMasterService masterService;
-
-    @Mock
     ITokenService tokenService;
     RequestPeerDto requestPeerDto;
+    private final String TOKEN = "aaa-bbb-ccc";
 
     @BeforeEach
     public void setup(){
         masterService = Mockito.mock(MasterService.class);
+        tokenService = Mockito.mock(TokenService.class);
 
         sut = new PeerController(masterService, tokenService);
-        requestPeerDto = new RequestPeerDto("aaa-bbb-ccc", "100.0.0.1", 8080);
+        requestPeerDto = new RequestPeerDto(TOKEN, "100.0.0.1", 8080);
     }
 
     @Test
     public void joinNetworkCallsMasterServiceReturnMasterIp(){
         //arrange
-
+        when(tokenService.checkToken(TOKEN)).thenReturn(true);
         //act
         sut.joinNetwork(requestPeerDto);
         //assert
@@ -42,6 +43,7 @@ public class PeerControllerTest {
     @Test
     public void updateMasterCallsMasterServiceCallsUpdateMaster(){
         //arrange
+        when(tokenService.checkToken(TOKEN)).thenReturn(true);
 
         //act
         sut.updateMaster(requestPeerDto);
-- 
GitLab