[SECARSP-111] +Auth API [SECARSP-115 +Get Devices]
[platform/core/security/suspicious-activity-monitor.git] / server / src / main / java / com / samsung / samserver / web / rest / service / UserJWTService.java
1 package com.samsung.samserver.web.rest.service;
2
3 import com.fasterxml.jackson.annotation.JsonProperty;
4 import com.samsung.samserver.security.jwt.JWTConfigurer;
5 import com.samsung.samserver.security.jwt.TokenProvider;
6 import org.springframework.http.HttpHeaders;
7 import org.springframework.http.HttpStatus;
8 import org.springframework.http.ResponseEntity;
9 import org.springframework.security.authentication.AuthenticationManager;
10 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
11 import org.springframework.security.core.Authentication;
12 import org.springframework.security.core.context.SecurityContextHolder;
13 import org.springframework.stereotype.Service;
14 import org.springframework.web.bind.annotation.RequestBody;
15
16 import javax.validation.Valid;
17 import javax.validation.constraints.NotNull;
18 import javax.validation.constraints.Size;
19
20 /**
21  *  REST service implementation for get jwt token.
22  *
23  * @author <A HREF="mailto:m.dalakov@samsung.com">Mykhailo Dalakov</A>
24  * @version 1.0
25  */
26 @Service
27 public class UserJWTService {
28
29     private final TokenProvider tokenProvider;
30
31     private final AuthenticationManager authenticationManager;
32
33     public UserJWTService(TokenProvider tokenProvider, AuthenticationManager authenticationManager) {
34         this.tokenProvider = tokenProvider;
35         this.authenticationManager = authenticationManager;
36     }
37
38     public ResponseEntity<JWTToken> authorize(@Valid @RequestBody LoginVM loginVM) {
39
40         UsernamePasswordAuthenticationToken authenticationToken =
41             new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword());
42
43         Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
44         SecurityContextHolder.getContext().setAuthentication(authentication);
45         boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe();
46         String jwt = tokenProvider.createToken(authentication, rememberMe);
47         HttpHeaders httpHeaders = new HttpHeaders();
48         httpHeaders.add(JWTConfigurer.AUTHORIZATION_HEADER, "Bearer " + jwt);
49         return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK);
50     }
51
52
53     /**
54      * Object to return as body in JWT Authentication.
55      */
56     public static class JWTToken {
57
58         private String idToken;
59
60         JWTToken(String idToken) {
61             this.idToken = idToken;
62         }
63
64         @JsonProperty("id_token")
65         String getIdToken() {
66             return idToken;
67         }
68
69         void setIdToken(String idToken) {
70             this.idToken = idToken;
71         }
72     }
73
74
75     /**
76      * View Model object for storing a user's credentials.
77      */
78     public static class LoginVM {
79
80         @NotNull
81         @Size(min = 1, max = 50)
82         private String username;
83
84         @NotNull
85         @Size(min = AccountService.ManagedUserVM.PASSWORD_MIN_LENGTH, max = AccountService.ManagedUserVM.PASSWORD_MAX_LENGTH)
86         private String password;
87
88         private Boolean rememberMe;
89
90         public String getUsername() {
91             return username;
92         }
93
94         public void setUsername(String username) {
95             this.username = username;
96         }
97
98         public String getPassword() {
99             return password;
100         }
101
102         public void setPassword(String password) {
103             this.password = password;
104         }
105
106         public Boolean isRememberMe() {
107             return rememberMe;
108         }
109
110         public void setRememberMe(Boolean rememberMe) {
111             this.rememberMe = rememberMe;
112         }
113
114         @Override
115         public String toString() {
116             return "LoginVM{" +
117                     "username='" + username + '\'' +
118                     ", rememberMe=" + rememberMe +
119                     '}';
120         }
121     }
122 }