81 lines
2.9 KiB
Java
81 lines
2.9 KiB
Java
package be.naaturel.boardmateapi.controllers;
|
|
|
|
import be.naaturel.boardmateapi.common.models.Client;
|
|
import be.naaturel.boardmateapi.controllers.dtos.*;
|
|
import be.naaturel.boardmateapi.services.ClientService;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.security.oauth2.jose.jws.MacAlgorithm;
|
|
import org.springframework.security.oauth2.jwt.JwsHeader;
|
|
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
|
|
import org.springframework.security.oauth2.jwt.JwtEncoder;
|
|
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.time.Instant;
|
|
|
|
@RestController
|
|
public class AuthController {
|
|
|
|
private final ClientService service;
|
|
private final JwtEncoder jwtEncoder;
|
|
|
|
@Autowired
|
|
public AuthController(ClientService service, JwtEncoder jwtEncoder) {
|
|
this.service = service;
|
|
this.jwtEncoder = jwtEncoder;
|
|
}
|
|
|
|
@PostMapping("/authenticate")
|
|
public ResponseEntity<ResponseBody<AuthResponseDto>> login(@RequestBody AuthRequestDto request) {
|
|
ResponseBody<AuthResponseDto> result = ResponseBody.createEmpty();
|
|
try {
|
|
Client user = service.authenticate(
|
|
request.getUsername(),
|
|
request.getKey()
|
|
);
|
|
|
|
Instant now = Instant.now();
|
|
|
|
JwtClaimsSet claims = JwtClaimsSet.builder()
|
|
.subject(user.getId())
|
|
.claim("name", user.getCompanyName())
|
|
.claim("username", user.getUsername())
|
|
.issuedAt(now)
|
|
.expiresAt(now.plusSeconds(3600*12))
|
|
.build();
|
|
|
|
JwtEncoderParameters params =
|
|
JwtEncoderParameters.from(
|
|
JwsHeader.with(MacAlgorithm.HS256).build(),
|
|
claims
|
|
);
|
|
|
|
String token = jwtEncoder.encode(params).getTokenValue();
|
|
|
|
AuthResponseDto response = new AuthResponseDto();
|
|
response.setName(user.getCompanyName());
|
|
response.setUsername(user.getUsername());
|
|
response.setClientId(user.getId());
|
|
response.setAuthToken(token);
|
|
|
|
result.setSuccess(true);
|
|
result.setData(response);
|
|
return ResponseEntity
|
|
.status(HttpStatus.OK)
|
|
.body(result);
|
|
|
|
} catch (Exception e){
|
|
e.printStackTrace();
|
|
result.setMessage(e.getMessage());
|
|
return ResponseEntity
|
|
.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
.body(result);
|
|
}
|
|
}
|
|
|
|
}
|