backend/restservice/src/main/java/com/plannaplan/controllers/TokenController.java

65 lines
2.7 KiB
Java
Raw Normal View History

2020-09-11 14:12:13 +02:00
package com.plannaplan.controllers;
import com.plannaplan.entities.User;
2020-09-14 12:55:47 +02:00
import com.plannaplan.exceptions.UserNotFoundException;
2020-12-07 21:46:47 +01:00
import com.plannaplan.responses.models.TokenResponse;
import com.plannaplan.security.cas.CasUserIdentity;
import com.plannaplan.security.cas.CasValidationExcepiton;
import com.plannaplan.security.cas.CasValidator;
import com.plannaplan.security.cas.CustomUAMCasValidator;
import com.plannaplan.security.cas.DefaultUAMCasValidator;
2020-09-14 12:55:47 +02:00
import com.plannaplan.services.UserService;
2020-09-11 14:12:13 +02:00
2020-09-14 12:55:47 +02:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
2020-09-11 14:33:29 +02:00
import org.springframework.http.HttpStatus;
2020-09-11 14:12:13 +02:00
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
2020-11-04 16:40:02 +01:00
import io.swagger.annotations.Api;
2020-11-04 16:58:26 +01:00
import io.swagger.annotations.ApiOperation;
2020-11-04 17:23:29 +01:00
import io.swagger.annotations.ApiParam;
2020-11-04 16:40:02 +01:00
2020-09-11 14:12:13 +02:00
@RestController
@CrossOrigin
2020-11-04 16:40:02 +01:00
@Api(tags = { "Token" }, value = "Token", description = "Enpoints to get authorization.")
2020-09-11 14:12:13 +02:00
public class TokenController {
@Value("${plannaplan.frontendUrl}")
private String serviceUrl;
@Value("${plannaplan.dev}")
private boolean isDev;
2020-09-11 14:12:13 +02:00
2020-09-14 12:55:47 +02:00
@Autowired
private UserService userService;
2020-09-11 14:33:29 +02:00
@GetMapping("/token")
2020-11-04 16:58:26 +01:00
@ApiOperation(value = "Endpoint to access token required to call secured endpoints. In order to access token we need to provide access token comming from unviersity CAS system")
2020-12-07 21:46:47 +01:00
public ResponseEntity<TokenResponse> getToken(
@RequestParam("ticket") @ApiParam(value = "Ticket get from CAS system. It should look like ST-1376572-wo41gty5R0JCZFKMMie2-cas.amu.edu.psl") final String ticket) {
2020-12-07 21:46:47 +01:00
final CasValidator validator = isDev ? new DefaultUAMCasValidator(serviceUrl, ticket)
: new CustomUAMCasValidator(serviceUrl, ticket);
2020-09-11 14:33:29 +02:00
2020-09-14 12:55:47 +02:00
try {
final CasUserIdentity casUserIdentity = validator.validate();
final String usosId = casUserIdentity.getUsosId();
final String authority = casUserIdentity.getEmail();
2020-12-07 21:46:47 +01:00
User user = this.userService.checkForUser(authority, usosId);
user = this.userService.login(user);
return new ResponseEntity<>(new TokenResponse(user), HttpStatus.OK);
2020-09-14 12:55:47 +02:00
} catch (CasValidationExcepiton e) {
2020-12-07 21:46:47 +01:00
return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
2020-09-14 12:55:47 +02:00
} catch (UserNotFoundException e) {
2020-12-07 21:46:47 +01:00
return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
2020-09-14 12:55:47 +02:00
} catch (Exception e) {
2020-12-07 21:46:47 +01:00
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
2020-09-11 14:33:29 +02:00
}
}
2020-09-11 14:12:13 +02:00
}