-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path11-AuthController.java
55 lines (51 loc) · 2.37 KB
/
11-AuthController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@Service
@AllArgsConstructor
public class AuthController {
public static final String REFRESH_TOKEN_COOKIE = "refreshToken";
private final RequestValidator requestValidator;
private final GetTokenKeyUsecase getTokenKeyUsecase;
private final GrantPasswordTokenUsecase grantPasswordTokenUsecase;
private final GrantRefreshTokenUsecase grantRefreshTokenUsecase;
private final LogoutUserUsecase logoutUserUsecase;
public Mono<ServerResponse> tokenKey(ServerRequest request) {
return getTokenKeyUsecase.execute()
.flatMap(it -> ServerResponse.ok()
.headers(headers -> headers.setContentType(new MediaType("application", "x-pem-file")))
.bodyValue(it));
}
public Mono<ServerResponse> login(ServerRequest req) {
return req.bodyToMono(GrantPasswordTokenUsecase.Command.class)
.flatMap(requestValidator::validate)
.doOnNext(cmd -> cmd.setIp(req.remoteAddress()
.map(InetSocketAddress::getAddress)
.map(InetAddress::getHostAddress)
.orElse(null)))
.flatMap(grantPasswordTokenUsecase::execute)
.flatMap(it -> ServerResponse.ok()
.cookie(ResponseCookie.from(REFRESH_TOKEN_COOKIE, it.getRefreshToken())
.httpOnly(true)
.path("/api/auth/refresh")
.build())
.bodyValue(it));
}
public Mono<ServerResponse> logout(ServerRequest req) {
return Mono.just(Optional.ofNullable(req.cookies().getFirst(REFRESH_TOKEN_COOKIE))
.map(HttpCookie::getValue)
.orElseThrow(IllegalArgumentException::new))
.flatMap(logoutUserUsecase::execute)
.then(ServerResponse.ok()
.cookie(ResponseCookie.from(REFRESH_TOKEN_COOKIE, "")
.httpOnly(true)
.path("/api/auth/refresh")
.maxAge(0)
.build())
.build());
}
public Mono<ServerResponse> refresh(ServerRequest req) {
return Mono.just(Optional.ofNullable(req.cookies().getFirst(REFRESH_TOKEN_COOKIE))
.map(HttpCookie::getValue)
.orElseThrow(IllegalArgumentException::new))
.flatMap(grantRefreshTokenUsecase::execute)
.flatMap(it -> ServerResponse.ok().bodyValue(it));
}
}