|
@@ -20,20 +20,17 @@
|
|
|
*/
|
|
|
package org.maxkey.authz.cas.endpoint;
|
|
|
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import org.maxkey.authn.BasicAuthentication;
|
|
|
-import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
|
|
+import org.maxkey.authn.RealmAuthenticationProvider;
|
|
|
import org.maxkey.authz.cas.endpoint.response.ServiceResponseBuilder;
|
|
|
import org.maxkey.authz.cas.endpoint.ticket.CasConstants;
|
|
|
import org.maxkey.authz.cas.endpoint.ticket.ServiceTicketImpl;
|
|
|
import org.maxkey.authz.cas.endpoint.ticket.TicketGrantingTicketImpl;
|
|
|
import org.maxkey.domain.UserInfo;
|
|
|
import org.maxkey.domain.apps.AppsCasDetails;
|
|
|
-import org.maxkey.persistence.db.PasswordPolicyValidator;
|
|
|
import org.maxkey.web.WebContext;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -44,7 +41,6 @@ import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.http.MediaType;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.security.authentication.BadCredentialsException;
|
|
|
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
|
import org.springframework.security.core.AuthenticationException;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
@@ -60,12 +56,9 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|
|
public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
|
|
|
final static Logger _logger = LoggerFactory.getLogger(CasRestV1Endpoint.class);
|
|
|
|
|
|
- @Autowired
|
|
|
- protected PasswordPolicyValidator passwordPolicyValidator;
|
|
|
-
|
|
|
@Autowired
|
|
|
- @Qualifier("authenticationRealm")
|
|
|
- protected AbstractAuthenticationRealm authenticationRealm;
|
|
|
+ @Qualifier("authenticationProvider")
|
|
|
+ RealmAuthenticationProvider authenticationProvider ;
|
|
|
|
|
|
|
|
|
@RequestMapping(value="/authz/cas/v1/tickets",
|
|
@@ -82,47 +75,18 @@ public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
|
|
|
throw new BadCredentialsException("No credentials are provided or extracted to authenticate the REST request");
|
|
|
}
|
|
|
|
|
|
- AbstractAuthenticationRealm authenticationRealm =
|
|
|
- (AbstractAuthenticationRealm) WebContext.getBean("authenticationRealm");
|
|
|
- UserInfo loadeduserInfo = authenticationRealm.loadUserInfo(username, "");
|
|
|
- if (loadeduserInfo != null) {
|
|
|
-
|
|
|
- authenticationRealm.passwordMatches(loadeduserInfo, password);
|
|
|
-
|
|
|
- passwordPolicyValidator.passwordPolicyValid(loadeduserInfo);
|
|
|
-
|
|
|
- WebContext.setUserInfo(loadeduserInfo);
|
|
|
- BasicAuthentication authentication =new BasicAuthentication();
|
|
|
- authentication.setUsername(username);
|
|
|
- authentication.setPassword(password);
|
|
|
- authentication.setAuthType("basic");
|
|
|
-
|
|
|
- UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =
|
|
|
- new UsernamePasswordAuthenticationToken(
|
|
|
- authentication,
|
|
|
- "PASSWORD",
|
|
|
- authenticationRealm.grantAuthority(loadeduserInfo)
|
|
|
- );
|
|
|
-
|
|
|
- authentication.setAuthenticated(true);
|
|
|
- WebContext.setAuthentication(usernamePasswordAuthenticationToken);
|
|
|
- WebContext.setUserInfo(loadeduserInfo);
|
|
|
-
|
|
|
- authenticationRealm.insertLoginHistory(loadeduserInfo, "CAS", "", "", "SUCCESS");
|
|
|
-
|
|
|
- TicketGrantingTicketImpl ticketGrantingTicket=new TicketGrantingTicketImpl("Random",WebContext.getAuthentication(),null);
|
|
|
-
|
|
|
- String ticket=ticketServices.createTicket(ticketGrantingTicket);
|
|
|
- String location = applicationConfig.getServerPrefix()+"/authz/cas/v1/tickets/" + ticket;
|
|
|
- HttpHeaders headers = new HttpHeaders();
|
|
|
- headers.add("location", location);
|
|
|
- return new ResponseEntity<>("Location: " + location, headers ,HttpStatus.CREATED);
|
|
|
-
|
|
|
- }else {
|
|
|
- String message = WebContext.getI18nValue("login.error.username");
|
|
|
- _logger.debug("login user " + username + " not in this System ." + message);
|
|
|
- throw new BadCredentialsException(WebContext.getI18nValue("login.error.username"));
|
|
|
- }
|
|
|
+ BasicAuthentication authentication =new BasicAuthentication(username,password,"CASREST");
|
|
|
+
|
|
|
+ authenticationProvider.basicAuthenticate(authentication);
|
|
|
+
|
|
|
+ TicketGrantingTicketImpl ticketGrantingTicket=new TicketGrantingTicketImpl("Random",WebContext.getAuthentication(),null);
|
|
|
+
|
|
|
+ String ticket=ticketServices.createTicket(ticketGrantingTicket);
|
|
|
+ String location = applicationConfig.getServerPrefix()+"/authz/cas/v1/tickets/" + ticket;
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.add("location", location);
|
|
|
+ return new ResponseEntity<>("Location: " + location, headers ,HttpStatus.CREATED);
|
|
|
+
|
|
|
} catch (final AuthenticationException e) {
|
|
|
_logger.error("BadCredentialsException ", e);
|
|
|
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
|
|
@@ -147,16 +111,8 @@ public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
|
|
|
try {
|
|
|
TicketGrantingTicketImpl ticketGrantingTicketImpl =
|
|
|
(TicketGrantingTicketImpl) ticketServices.consumeTicket(ticketGrantingTicket);
|
|
|
- AppsCasDetails casDetails=new AppsCasDetails();
|
|
|
- if(casService.startsWith("http")) {
|
|
|
- casDetails.setService(casService);
|
|
|
-
|
|
|
- List<AppsCasDetails> casDetailsList=casDetailsService.query(casDetails);
|
|
|
-
|
|
|
- casDetails=(casDetailsList!=null && casDetailsList.size()==1)?casDetailsList.get(0):null;
|
|
|
- }else {
|
|
|
- casDetails=casDetailsService.getAppDetails(casService);
|
|
|
- }
|
|
|
+
|
|
|
+ AppsCasDetails casDetails=casDetailsService.getAppDetails(casService);
|
|
|
|
|
|
ServiceTicketImpl serviceTicket=new ServiceTicketImpl(ticketGrantingTicketImpl.getAuthentication(),casDetails);
|
|
|
String ticket=ticketServices.createTicket(serviceTicket);
|
|
@@ -222,67 +178,38 @@ public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
|
|
|
throw new BadCredentialsException("No credentials are provided or extracted to authenticate the REST request");
|
|
|
}
|
|
|
|
|
|
- AbstractAuthenticationRealm authenticationRealm =
|
|
|
- (AbstractAuthenticationRealm) WebContext.getBean("authenticationRealm");
|
|
|
- UserInfo loadeduserInfo = authenticationRealm.loadUserInfo(username, "");
|
|
|
- if (loadeduserInfo != null) {
|
|
|
-
|
|
|
- authenticationRealm.passwordMatches(loadeduserInfo, password);
|
|
|
-
|
|
|
- passwordPolicyValidator.passwordPolicyValid(loadeduserInfo);
|
|
|
-
|
|
|
- WebContext.setUserInfo(loadeduserInfo);
|
|
|
- BasicAuthentication authentication =new BasicAuthentication();
|
|
|
- authentication.setUsername(username);
|
|
|
- authentication.setPassword(password);
|
|
|
- authentication.setAuthType("basic");
|
|
|
-
|
|
|
- UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =
|
|
|
- new UsernamePasswordAuthenticationToken(
|
|
|
- authentication,
|
|
|
- "PASSWORD",
|
|
|
- authenticationRealm.grantAuthority(loadeduserInfo)
|
|
|
- );
|
|
|
-
|
|
|
- authentication.setAuthenticated(true);
|
|
|
- WebContext.setAuthentication(usernamePasswordAuthenticationToken);
|
|
|
- WebContext.setUserInfo(loadeduserInfo);
|
|
|
-
|
|
|
- authenticationRealm.insertLoginHistory(loadeduserInfo, "CAS", "", "", "SUCCESS");
|
|
|
-
|
|
|
- TicketGrantingTicketImpl ticketGrantingTicket=new TicketGrantingTicketImpl("Random",WebContext.getAuthentication(),null);
|
|
|
-
|
|
|
- String ticket=ticketServices.createTicket(ticketGrantingTicket);
|
|
|
- String location = applicationConfig.getServerPrefix()+"/authz/cas/v1/tickets/" + ticket;
|
|
|
- HttpHeaders headers = new HttpHeaders();
|
|
|
- headers.add("location", location);
|
|
|
- ServiceResponseBuilder serviceResponseBuilder=new ServiceResponseBuilder();
|
|
|
- serviceResponseBuilder.setFormat(CasConstants.FORMAT_TYPE.JSON);
|
|
|
-
|
|
|
- serviceResponseBuilder.setAttribute("uid", loadeduserInfo.getId());
|
|
|
- serviceResponseBuilder.setAttribute("displayName",loadeduserInfo.getDisplayName());
|
|
|
- serviceResponseBuilder.setAttribute("firstName", loadeduserInfo.getGivenName());
|
|
|
- serviceResponseBuilder.setAttribute("lastname", loadeduserInfo.getFamilyName());
|
|
|
- serviceResponseBuilder.setAttribute("mobile", loadeduserInfo.getMobile());
|
|
|
- serviceResponseBuilder.setAttribute("birthday", loadeduserInfo.getBirthDate());
|
|
|
- serviceResponseBuilder.setAttribute("gender", loadeduserInfo.getGender()+"");
|
|
|
-
|
|
|
-
|
|
|
- serviceResponseBuilder.setAttribute("employeeNumber", loadeduserInfo.getEmployeeNumber());
|
|
|
- serviceResponseBuilder.setAttribute("title", loadeduserInfo.getJobTitle());
|
|
|
- serviceResponseBuilder.setAttribute("email", loadeduserInfo.getWorkEmail());
|
|
|
- serviceResponseBuilder.setAttribute("department", loadeduserInfo.getDepartment());
|
|
|
- serviceResponseBuilder.setAttribute("departmentId", loadeduserInfo.getDepartmentId());
|
|
|
- serviceResponseBuilder.setAttribute("workRegion",loadeduserInfo.getWorkRegion());
|
|
|
-
|
|
|
- serviceResponseBuilder.success().setUser(loadeduserInfo.getUsername());
|
|
|
- return new ResponseEntity<>(serviceResponseBuilder.serviceResponseBuilder(), headers ,HttpStatus.OK);
|
|
|
-
|
|
|
- }else {
|
|
|
- String message = WebContext.getI18nValue("login.error.username");
|
|
|
- _logger.debug("login user " + username + " not in this System ." + message);
|
|
|
- throw new BadCredentialsException(WebContext.getI18nValue("login.error.username"));
|
|
|
- }
|
|
|
+ BasicAuthentication authentication =new BasicAuthentication(username,password,"CASREST");
|
|
|
+
|
|
|
+ authenticationProvider.basicAuthenticate(authentication);
|
|
|
+ UserInfo userInfo =WebContext.getUserInfo();
|
|
|
+ TicketGrantingTicketImpl ticketGrantingTicket=new TicketGrantingTicketImpl("Random",WebContext.getAuthentication(),null);
|
|
|
+
|
|
|
+ String ticket=ticketServices.createTicket(ticketGrantingTicket);
|
|
|
+ String location = applicationConfig.getServerPrefix()+"/authz/cas/v1/tickets/" + ticket;
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.add("location", location);
|
|
|
+ ServiceResponseBuilder serviceResponseBuilder=new ServiceResponseBuilder();
|
|
|
+ serviceResponseBuilder.setFormat(CasConstants.FORMAT_TYPE.JSON);
|
|
|
+
|
|
|
+ serviceResponseBuilder.setAttribute("uid", userInfo.getId());
|
|
|
+ serviceResponseBuilder.setAttribute("displayName",userInfo.getDisplayName());
|
|
|
+ serviceResponseBuilder.setAttribute("firstName", userInfo.getGivenName());
|
|
|
+ serviceResponseBuilder.setAttribute("lastname", userInfo.getFamilyName());
|
|
|
+ serviceResponseBuilder.setAttribute("mobile", userInfo.getMobile());
|
|
|
+ serviceResponseBuilder.setAttribute("birthday", userInfo.getBirthDate());
|
|
|
+ serviceResponseBuilder.setAttribute("gender", userInfo.getGender()+"");
|
|
|
+
|
|
|
+
|
|
|
+ serviceResponseBuilder.setAttribute("employeeNumber", userInfo.getEmployeeNumber());
|
|
|
+ serviceResponseBuilder.setAttribute("title", userInfo.getJobTitle());
|
|
|
+ serviceResponseBuilder.setAttribute("email", userInfo.getWorkEmail());
|
|
|
+ serviceResponseBuilder.setAttribute("department", userInfo.getDepartment());
|
|
|
+ serviceResponseBuilder.setAttribute("departmentId", userInfo.getDepartmentId());
|
|
|
+ serviceResponseBuilder.setAttribute("workRegion",userInfo.getWorkRegion());
|
|
|
+
|
|
|
+ serviceResponseBuilder.success().setUser(userInfo.getUsername());
|
|
|
+
|
|
|
+ return new ResponseEntity<>(serviceResponseBuilder.serviceResponseBuilder(), headers ,HttpStatus.OK);
|
|
|
} catch (final AuthenticationException e) {
|
|
|
_logger.error("BadCredentialsException ", e);
|
|
|
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
|