1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.rest.cxf.service;
20
21 import java.util.Optional;
22 import javax.ws.rs.core.HttpHeaders;
23 import javax.ws.rs.core.MediaType;
24 import javax.ws.rs.core.Response;
25 import javax.ws.rs.core.StreamingOutput;
26 import org.apache.commons.lang3.StringUtils;
27 import org.apache.syncope.common.lib.saml2.SAML2LoginResponse;
28 import org.apache.syncope.common.lib.saml2.SAML2Request;
29 import org.apache.syncope.common.lib.saml2.SAML2Response;
30 import org.apache.syncope.common.rest.api.service.SAML2SP4UIService;
31 import org.apache.syncope.core.logic.SAML2SP4UILogic;
32 import org.springframework.stereotype.Service;
33
34 @Service
35 public class SAML2SP4UIServiceImpl extends AbstractService implements SAML2SP4UIService {
36
37 protected final SAML2SP4UILogic logic;
38
39 public SAML2SP4UIServiceImpl(final SAML2SP4UILogic logic) {
40 this.logic = logic;
41 }
42
43 @Override
44 public Response getMetadata(final String spEntityID, final String urlContext) {
45 StreamingOutput sout = (os) -> logic.getMetadata(StringUtils.appendIfMissing(spEntityID, "/"), urlContext, os);
46
47 return Response.ok(sout).
48 type(MediaType.APPLICATION_XML).
49 build();
50 }
51
52 @Override
53 public SAML2Request createLoginRequest(
54 final String spEntityID, final String urlContext, final String idpEntityID) {
55
56 return logic.createLoginRequest(
57 StringUtils.appendIfMissing(spEntityID, "/"),
58 urlContext,
59 idpEntityID);
60 }
61
62 @Override
63 public SAML2LoginResponse validateLoginResponse(final SAML2Response reponse) {
64 return logic.validateLoginResponse(reponse);
65 }
66
67 @Override
68 public SAML2Request createLogoutRequest(final String spEntityID, final String urlContext) {
69 return logic.createLogoutRequest(
70 getAccessToken(),
71 StringUtils.appendIfMissing(spEntityID, "/"),
72 urlContext);
73 }
74
75 @Override
76 public void validateLogoutResponse(final SAML2Response response) {
77 logic.validateLogoutResponse(response);
78 }
79
80 private String getAccessToken() {
81 String auth = messageContext.getHttpHeaders().getHeaderString(HttpHeaders.AUTHORIZATION);
82 String[] parts = Optional.ofNullable(auth).map(s -> s.split(" ")).orElse(null);
83 if (parts == null || parts.length != 2 || !"Bearer".equals(parts[0])) {
84 return null;
85 }
86
87 return parts[1];
88 }
89 }