Compare commits
	
		
			7 Commits
		
	
	
		
			b72c0a8e17
			...
			4a85a55290
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4a85a55290 | |||
| 37d24c59e7 | |||
| 5acca4d10d | |||
| b050a74b75 | |||
| 010f9200a7 | |||
| 6a39464f61 | |||
| 7222bca6e2 | 
@ -21,6 +21,7 @@ dependencies {
 | 
				
			|||||||
	implementation("org.springframework.boot:spring-boot-starter-mail")
 | 
						implementation("org.springframework.boot:spring-boot-starter-mail")
 | 
				
			||||||
	implementation("org.springframework.boot:spring-boot-starter-web")
 | 
						implementation("org.springframework.boot:spring-boot-starter-web")
 | 
				
			||||||
	implementation("org.springframework.boot:spring-boot-starter-data-jpa")
 | 
						implementation("org.springframework.boot:spring-boot-starter-data-jpa")
 | 
				
			||||||
 | 
						implementation("org.springframework.boot:spring-boot-starter-security")
 | 
				
			||||||
	// implementation("org.springframework.session:spring-session-jdbc")
 | 
						// implementation("org.springframework.session:spring-session-jdbc")
 | 
				
			||||||
	developmentOnly("org.springframework.boot:spring-boot-devtools")
 | 
						developmentOnly("org.springframework.boot:spring-boot-devtools")
 | 
				
			||||||
	developmentOnly("org.springframework.boot:spring-boot-docker-compose")
 | 
						developmentOnly("org.springframework.boot:spring-boot-docker-compose")
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,9 @@ package ovh.herisson.Clyde;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.springframework.boot.SpringApplication;
 | 
					import org.springframework.boot.SpringApplication;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
					import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@SpringBootApplication
 | 
					@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
 | 
				
			||||||
public class ClydeApplication {
 | 
					public class ClydeApplication {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static void main(String[] args) {
 | 
						public static void main(String[] args) {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					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.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 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){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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",token));
 | 
				
			||||||
 | 
					        return ResponseEntity.ok().headers(responseHeaders).build();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2,7 +2,7 @@ package ovh.herisson.Clyde.EndPoints;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.http.HttpStatus;
 | 
					import org.springframework.http.HttpStatus;
 | 
				
			||||||
import org.springframework.http.HttpStatusCode;
 | 
					
 | 
				
			||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
import org.springframework.web.bind.annotation.*;
 | 
					import org.springframework.web.bind.annotation.*;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
					import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.data.repository.CrudRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.Token;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface TokenRepository extends CrudRepository<Token,Long> {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -10,6 +10,8 @@ public interface UserRepository extends CrudRepository<User, Long> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    User findById(long id);
 | 
					    User findById(long id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    User findByEmail(String email);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
    @Query(value = "select a.* from Users a ",nativeQuery = true)
 | 
					    @Query(value = "select a.* from Users a ",nativeQuery = true)
 | 
				
			||||||
    Iterable<User> findAllUsers();**/
 | 
					    Iterable<User> findAllUsers();**/
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Responses;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.http.HttpStatus;
 | 
				
			||||||
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class UnauthorizedResponse extends ResponseEntity<String> {
 | 
				
			||||||
 | 
					    public UnauthorizedResponse(String message) {
 | 
				
			||||||
 | 
					        super(message,HttpStatus.UNAUTHORIZED);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.Token;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.nio.charset.StandardCharsets;
 | 
				
			||||||
 | 
					import java.security.SecureRandom;
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
 | 
					public class TokenService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TokenRepository tokenRepo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public TokenService(TokenRepository tokenRepo){
 | 
				
			||||||
 | 
					        this.tokenRepo = tokenRepo;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String generateNewToken(){
 | 
				
			||||||
 | 
					        byte[] bytes = new byte[64];
 | 
				
			||||||
 | 
					        new SecureRandom().nextBytes(bytes);
 | 
				
			||||||
 | 
					        String token = new String(bytes, StandardCharsets.US_ASCII);
 | 
				
			||||||
 | 
					        System.out.println(token);
 | 
				
			||||||
 | 
					        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));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
 | 
					public class UserService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final UserRepository userRepo;
 | 
				
			||||||
 | 
					    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public UserService(UserRepository userRepo){
 | 
				
			||||||
 | 
					        this.userRepo = userRepo;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public User getUser(String identifier){
 | 
				
			||||||
 | 
					        if (identifier == null) return null;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            int id = Integer.parseInt(identifier);
 | 
				
			||||||
 | 
					            return userRepo.findById(id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        catch (NumberFormatException nfe){
 | 
				
			||||||
 | 
					            return userRepo.findByEmail(identifier);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public boolean checkPassword(User user, String tryingPassword){
 | 
				
			||||||
 | 
					        return passwordEncoder.matches(tryingPassword,  user.getPassword());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -8,12 +8,13 @@ public class Token {
 | 
				
			|||||||
    @Id
 | 
					    @Id
 | 
				
			||||||
    private int id;
 | 
					    private int id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ManyToOne(fetch = FetchType.LAZY)
 | 
				
			||||||
    @JoinColumn(name ="Users")
 | 
					    @JoinColumn(name ="Users")
 | 
				
			||||||
    private int regNo;
 | 
					    private User user;
 | 
				
			||||||
    private String token;
 | 
					    private String token;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Token(int regNo, String token){
 | 
					    public Token(User user, String token){
 | 
				
			||||||
        this.regNo = regNo;
 | 
					        this.user = user;
 | 
				
			||||||
        this.token = token;
 | 
					        this.token = token;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -21,13 +22,12 @@ public class Token {
 | 
				
			|||||||
    public int getId() {
 | 
					    public int getId() {
 | 
				
			||||||
        return id;
 | 
					        return id;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    public User getUser() {
 | 
				
			||||||
    public int getRegNo() {
 | 
					        return user;
 | 
				
			||||||
        return regNo;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setRegNo(int regNo) {
 | 
					    public void setUser(User regNo) {
 | 
				
			||||||
        this.regNo = regNo;
 | 
					        this.user = regNo;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getToken(){
 | 
					    public String getToken(){
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user