ProfileServlet.java
3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* javax.jcr.Session
* javax.servlet.RequestDispatcher
* javax.servlet.Servlet
* javax.servlet.ServletException
* javax.servlet.ServletRequest
* javax.servlet.ServletResponse
* org.apache.felix.scr.annotations.Component
* org.apache.felix.scr.annotations.Properties
* org.apache.felix.scr.annotations.Property
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.Service
* org.apache.jackrabbit.api.security.user.User
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.resource.ResourceResolver
* org.apache.sling.api.servlets.SlingSafeMethodsServlet
* org.apache.sling.jcr.api.SlingRepository
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.granite.oauth.server.scopes.servlets.impl;
import com.adobe.granite.oauth.server.impl.helper.OAuth2Helper;
import java.io.IOException;
import javax.jcr.Session;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.api.security.user.User;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
@Service(value={Servlet.class})
@Properties(value={@Property(name="service.description", value={"Profile API"}), @Property(name="sling.servlet.paths", value={"/libs/oauth/profile"})})
public class ProfileServlet
extends SlingSafeMethodsServlet {
private final Logger log;
private static final long serialVersionUID = 3755700490495366399L;
@Reference
private SlingRepository repository;
public ProfileServlet() {
this.log = LoggerFactory.getLogger(this.getClass());
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
Session oauthServiceSession = null;
try {
User user = (User)request.getResourceResolver().adaptTo(User.class);
String accessToken = OAuth2Helper.getJwtFromUserId(user.getID());
String subject = OAuth2Helper.getSubject(accessToken);
oauthServiceSession = this.repository.loginService(null, null);
User resourceOwner = OAuth2Helper.getUser(oauthServiceSession, subject);
String path = resourceOwner.getPath();
request.getRequestDispatcher(path + "/profile.userproperties.json").forward((ServletRequest)request, (ServletResponse)response);
}
catch (Exception e) {
this.log.error("exception while accessing the repository ", (Throwable)e);
response.setStatus(401);
response.setHeader("WWW-Authenticate", "Bearer realm=\"Sling\"");
response.flushBuffer();
}
finally {
if (oauthServiceSession != null) {
oauthServiceSession.logout();
}
}
}
protected void bindRepository(SlingRepository slingRepository) {
this.repository = slingRepository;
}
protected void unbindRepository(SlingRepository slingRepository) {
if (this.repository == slingRepository) {
this.repository = null;
}
}
}