Compare commits

..

No commits in common. "6b58c852a2ad951e5725571e1eced694945fa546" and "e1d8e37c529b4173374d1ecaa49adc7e4c4f72fb" have entirely different histories.

6 changed files with 75 additions and 107 deletions

View File

@ -1,29 +1,44 @@
package ovh.herisson.Clyde.EndPoints;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
import ovh.herisson.Clyde.Services.AuthenticatorService;
import ovh.herisson.Clyde.Services.TokenService;
import ovh.herisson.Clyde.Services.UserService;
import ovh.herisson.Clyde.Tables.User;
import java.util.Date;
@RestController
@CrossOrigin(origins = "http://localhost:5173")
public class LoginController {
private final AuthenticatorService authServ;
public LoginController(AuthenticatorService authServ){
this.authServ = authServ;
private final UserService userService;
private final TokenService tokenService;
public LoginController(UserService userService, TokenService tokenService){
this.userService =userService;
this.tokenService = tokenService;
}
@PostMapping("/login")
public ResponseEntity<String> login(@RequestParam String identifier, String password, Date expirationDate){
String sessionToken = authServ.login(identifier,password,expirationDate);
if (sessionToken == null){
return new UnauthorizedResponse<>("Identifier or Password incorrect");
User user = userService.getUser(identifier);
if (user == null){
return new ResponseEntity<String>("wrong ID or Email", HttpStatus.BAD_REQUEST);
}
if (!userService.checkPassword(user,password)){
return new ResponseEntity<String>("wrong Password",HttpStatus.BAD_REQUEST);
}
String token = tokenService.generateNewToken();
tokenService.saveToken(token,user,expirationDate);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.set("Set-Cookie",String.format("session_token=%s",sessionToken));
responseHeaders.set("Set-Cookie",String.format("session_token=%s",token));
return ResponseEntity.ok().headers(responseHeaders).build();
}
}

View File

@ -1,55 +0,0 @@
package ovh.herisson.Clyde.EndPoints;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import ovh.herisson.Clyde.Repositories.TokenRepository;
import ovh.herisson.Clyde.Repositories.UserRepository;
import ovh.herisson.Clyde.Tables.Role;
import ovh.herisson.Clyde.Tables.Token;
import ovh.herisson.Clyde.Tables.User;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@RestController
@CrossOrigin(origins = "http://localhost:5173")
public class MockController {
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
public final UserRepository userRepo;
public final TokenRepository tokenRepo;
public MockController(UserRepository userRepo, TokenRepository tokenRepo){
this.tokenRepo = tokenRepo;
this.userRepo = userRepo;
}
/** Saves an example of each user type by :
* email : FooRole@FooRole.com, password : FooRole and token : FooRole
* For example the admin as "admin@admin.com" as email and "admin" as both password and token
* They all have silly names
*/
@PostMapping("/generateMock")
public void postMock(){
User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), Role.Admin,passwordEncoder.encode("admin"));
User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), Role.Student,passwordEncoder.encode("student"));
User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), Role.Teacher,passwordEncoder.encode("secretary"));
User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), Role.Teacher,passwordEncoder.encode("teacher"));
ArrayList<User> users = new ArrayList<User>(Arrays.asList(herobrine,joe,meh,joke));
userRepo.saveAll(users);
for (User user: users){
tokenRepo.save(new Token(user,user.getPassword()));
}
}
}

View File

@ -6,7 +6,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
import ovh.herisson.Clyde.Services.AuthenticatorService;
import ovh.herisson.Clyde.Services.TokenService;
import ovh.herisson.Clyde.Services.UserService;
import ovh.herisson.Clyde.Tables.User;
@ -16,19 +16,24 @@ import ovh.herisson.Clyde.Tables.User;
public class UserController {
private final UserService userService;
private final AuthenticatorService authServ;
public UserController(UserService userService, AuthenticatorService authServ){
private final TokenService tokenService;
public UserController(UserService userService, TokenService tokenService){
this.userService = userService;
this.authServ = authServ;
this.tokenService = tokenService; // todo find a way to be clearer
tokenService.postMockToken(userService.postMockUsers());// todo find a better place to put that
}
@GetMapping("/user")
public ResponseEntity<User> getUser(@RequestHeader("Authorization") String token){
User user = authServ.getUserFromToken(token);
public ResponseEntity<User> getUsers(@RequestHeader("Authorization") String token){
User user = tokenService.getUserFromToken(token);
if (user == null) {
return new UnauthorizedResponse<>(null);
return new UnauthorizedResponse<User>(null);
}
return new ResponseEntity<>(user, HttpStatus.OK);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
@PostMapping("/user")
@ -38,7 +43,7 @@ public class UserController {
}
@GetMapping("/users")
public Iterable<User> getAllUsers(){
public Iterable<User> getAllUsers(){//TODO ne l'accepter que si c'est le secrétariat
return userService.getAll();
}

View File

@ -1,32 +0,0 @@
package ovh.herisson.Clyde.Services;
import org.springframework.stereotype.Service;
import ovh.herisson.Clyde.Tables.User;
import java.util.Date;
@Service
public class AuthenticatorService {
private final TokenService tokenService;
private final UserService userService;
public AuthenticatorService(TokenService tokenService, UserService userService){
this.tokenService = tokenService;
this.userService = userService;
}
public User getUserFromToken(String token){
return tokenService.getUserFromToken(token);
}
public String login(String identifier, String password, Date expirationDate){
User user = userService.getUser(identifier);
if (user == null){return null;}
if (!userService.checkPassword(user,password)){return null;}
String token = tokenService.generateNewToken();
tokenService.saveToken(token,user,expirationDate);
return token;
}
}

View File

@ -27,11 +27,25 @@ public class TokenService {
return token;
}
//todo potentiellement return bool pour savoir si token bien add
public void saveToken(String token, User user, Date expirationDate){
tokenRepo.save(new Token(user,token));
}
public User getUserFromToken(String token){
return tokenRepo.getByToken(token).getUser();
}
public void saveToken(String token, User user, Date expirationDate){// todo faire qlq chose de l'expDate
tokenRepo.save(new Token(user,token));
/** Take the list of mock user to save them in the Token DB
* With token being the password of the user (also his role)
* @param users an
*/
public void postMockToken(Iterable<User> users){
for (User user: users){
tokenRepo.save(new Token(user,user.getPassword()));
}
}
}

View File

@ -39,6 +39,27 @@ public class UserService {
return passwordEncoder.matches(tryingPassword, user.getPassword());
}
/** Saves an example of :
* an Admin with id 1, email : admin@admin.com and password: admin
* a Student with id 2, email: student@student.com and password: student (no cursus yet)
* a Secretary with id 3, email: secretary@secretary.com and password: secretary
* a Teacher (same)
* and they all have silly names (hihi)
*/
public Iterable<User> postMockUsers(){
User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), Role.Admin,passwordEncoder.encode("admin"));
User Joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), Role.Student,passwordEncoder.encode("student"));
User Meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), Role.Teacher,passwordEncoder.encode("secretary"));
User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), Role.Teacher,passwordEncoder.encode("teacher"));
userRepo.save(herobrine);
userRepo.save(Joe);
userRepo.save(Meh);
userRepo.save(joke);
return new ArrayList<User>(Arrays.asList(herobrine,Joe,Meh,joke));
}
public void save(User user){
userRepo.save(user);
}