diff --git a/restservice/pom.xml b/restservice/pom.xml index 60714c1..773be7a 100755 --- a/restservice/pom.xml +++ b/restservice/pom.xml @@ -57,6 +57,13 @@ test + + + org.jasig.cas.client + cas-client-core + 3.6.2 + + org.springframework.boot spring-boot-starter-security diff --git a/restservice/src/main/java/com/plannaplan/controllers/TokenController.java b/restservice/src/main/java/com/plannaplan/controllers/TokenController.java index f6e35e3..8e06c2e 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/TokenController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/TokenController.java @@ -1,6 +1,7 @@ package com.plannaplan.controllers; import com.plannaplan.exceptions.UserNotFoundException; +import com.plannaplan.security.cas.CasUserIdentity; import com.plannaplan.security.cas.CasValidationExcepiton; import com.plannaplan.security.cas.DefaultUAMCasValidator; import com.plannaplan.services.UserService; @@ -34,7 +35,8 @@ public class TokenController { final DefaultUAMCasValidator validator = new DefaultUAMCasValidator(SERVICE_URL, ticket); try { - String authority = validator.validate(); + CasUserIdentity casUserIdentity = validator.validate(); + String authority = casUserIdentity.getEmail(); String token = this.userService.login(authority); return new ResponseEntity<>(token, HttpStatus.OK); } catch (CasValidationExcepiton e) { diff --git a/restservice/src/main/java/com/plannaplan/security/cas/CasUserIdentity.java b/restservice/src/main/java/com/plannaplan/security/cas/CasUserIdentity.java new file mode 100644 index 0000000..90b1f5e --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/security/cas/CasUserIdentity.java @@ -0,0 +1,19 @@ +package com.plannaplan.security.cas; + +public class CasUserIdentity { + private String usosId; + private String email; + + public CasUserIdentity(String usosId, String email){ + this.usosId = usosId; + this.email = email; + } + + public String getUsosId() { + return usosId; + } + + public String getEmail() { + return email; + } +} \ No newline at end of file diff --git a/restservice/src/main/java/com/plannaplan/security/cas/CasValidator.java b/restservice/src/main/java/com/plannaplan/security/cas/CasValidator.java index 8cde61c..b091e42 100644 --- a/restservice/src/main/java/com/plannaplan/security/cas/CasValidator.java +++ b/restservice/src/main/java/com/plannaplan/security/cas/CasValidator.java @@ -2,6 +2,5 @@ package com.plannaplan.security.cas; public interface CasValidator { - String validate(); - + CasUserIdentity validate(); } diff --git a/restservice/src/main/java/com/plannaplan/security/cas/CustomUAMCasValidator.java b/restservice/src/main/java/com/plannaplan/security/cas/CustomUAMCasValidator.java index 764be01..9a845df 100644 --- a/restservice/src/main/java/com/plannaplan/security/cas/CustomUAMCasValidator.java +++ b/restservice/src/main/java/com/plannaplan/security/cas/CustomUAMCasValidator.java @@ -17,23 +17,25 @@ public class CustomUAMCasValidator implements CasValidator { } @Override - public String validate() { + public CasUserIdentity validate() { /* * TO DO * Dodać case z CAS10/CAS20/CAS30 */ - Cas20ServiceTicketValidator validator = new Cas20ServiceTicketValidator(CustomUAMCasValidator.CAS_URL); + final Cas20ServiceTicketValidator validator = new Cas20ServiceTicketValidator(CustomUAMCasValidator.CAS_URL); try { - Assertion assertion = validator.validate(this.ticket, this.service); + final Assertion assertion = validator.validate(this.ticket, this.service); + if (assertion == null) { throw new CasValidationExcepiton("Validation failed. Assertion could not be retrieved for ticket " + ""); } - String usosid = assertion.getPrincipal().getAttributes().get(CustomUAMCasValidator.USOS_ID).toString(); - String mail = assertion.getPrincipal().getAttributes().get(CustomUAMCasValidator.EMAIL_FIELD).toString(); - System.out.println(usosid); - System.out.println(mail); + final String usosid = assertion.getPrincipal().getAttributes().get(CustomUAMCasValidator.USOS_ID).toString(); + + final String mail = assertion.getPrincipal().getAttributes().get(CustomUAMCasValidator.EMAIL_FIELD).toString(); + + return new CasUserIdentity(usosid,mail); } catch (TicketValidationException e) { e.printStackTrace(); diff --git a/restservice/src/main/java/com/plannaplan/security/cas/DefaultUAMCasValidator.java b/restservice/src/main/java/com/plannaplan/security/cas/DefaultUAMCasValidator.java index b5c2ad6..e79a410 100755 --- a/restservice/src/main/java/com/plannaplan/security/cas/DefaultUAMCasValidator.java +++ b/restservice/src/main/java/com/plannaplan/security/cas/DefaultUAMCasValidator.java @@ -21,7 +21,7 @@ public class DefaultUAMCasValidator implements CasValidator { } @Override - public String validate() { + public CasUserIdentity validate() { try { HttpGet request = new HttpGet(DefaultUAMCasValidator.CAS_URL + "/validate?service=" + URLEncoder.encode(this.service, "UTF-8") + "&ticket=" + URLEncoder.encode(this.ticket, "UTF-8")); @@ -39,7 +39,7 @@ public class DefaultUAMCasValidator implements CasValidator { } String res = result.substring(result.indexOf('\n') + 1); - return res; + return new CasUserIdentity(null,res); } } diff --git a/restservice/src/test/java/com/plannaplan/security/cas/DefaultUAMCasValidatorTest.java b/restservice/src/test/java/com/plannaplan/security/cas/DefaultUAMCasValidatorTest.java index 7ebb5c3..1373e93 100755 --- a/restservice/src/test/java/com/plannaplan/security/cas/DefaultUAMCasValidatorTest.java +++ b/restservice/src/test/java/com/plannaplan/security/cas/DefaultUAMCasValidatorTest.java @@ -26,7 +26,7 @@ public class DefaultUAMCasValidatorTest { public void shouldNotValidateTicket() { final DefaultUAMCasValidator validator = new DefaultUAMCasValidator("http://localhost:3000", "notticket"); try { - assertTrue(validator.validate().trim().equals("")); + assertTrue(validator.validate().getEmail().trim().equals("")); } catch (CasValidationExcepiton e) { assertTrue(true); } catch (Exception e) {