Statistics
| Revision:

gvsig-projects-pool / org.gvsig.online / trunk / org.gvsig.online / org.gvsig.online.swing / org.gvsig.online.swing.scribejava / src / main / java / org / gvsig / online / swing / scribejava / keycloak / callbacks / CallbackAuthorizationHandler.java @ 9514

History | View | Annotate | Download (3.15 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.online.swing.scribejava.keycloak.callbacks;
7

    
8
import com.github.scribejava.core.model.OAuth2AccessToken;
9
import com.github.scribejava.core.model.OAuth2Authorization;
10
import com.github.scribejava.core.model.OAuthRequest;
11
import com.github.scribejava.core.model.Response;
12
import com.github.scribejava.core.model.Verb;
13
import com.github.scribejava.core.oauth.OAuth20Service;
14
import com.sun.net.httpserver.HttpExchange;
15
import com.sun.net.httpserver.HttpHandler;
16
import java.io.IOException;
17
import javax.json.JsonObject;
18
import org.gvsig.json.Json;
19
import org.gvsig.online.swing.scribejava.keycloak.UserIdentificationKeycloak;
20
import org.gvsig.online.swing.scribejava.keycloak.UserIdentificationKeycloakConfig;
21

    
22
/**
23
 *
24
 * @author jjdelcerro
25
 */
26
@SuppressWarnings("UseSpecificCatch")
27
public class CallbackAuthorizationHandler extends AbstractCallback implements HttpHandler {
28

    
29

    
30
    public CallbackAuthorizationHandler(UserIdentificationKeycloak identificationRequester, OAuth20Service service, String contextPath) {
31
        super(identificationRequester, service, contextPath);
32
    }
33

    
34
    @Override
35
    public void handle(HttpExchange t) throws IOException {
36
        String requestURL = "Unknown";
37
        try {
38
            requestURL = t.getRequestURI().toString();
39
            this.identificationRequester.setAuthorization(null);
40
            this.identificationRequester.setUserId(null);
41
            OAuth2Authorization auth = service.extractAuthorization(t.getRequestURI().toString());
42
            if (auth.getCode() == null) {
43
                response(t, 200, message("Can't autthenticate user\n"));
44
                return;
45
            }
46
            final OAuth2AccessToken accessToken = service.getAccessToken(auth.getCode());
47
            this.identificationRequester.setAuthorization(accessToken.getAccessToken());
48

    
49
            String userId = null;
50
            JsonObject userinfo = this.identificationRequester.userInfo(service);
51
            if (userinfo!=null) {
52
                userId = userinfo.getString("preferred_username", null);
53
//                    System.out.println("userid: " + userId);
54
//                    System.out.println("name: " + userinfo.getString("name", null));
55
//                    System.out.println("email: " + userinfo.getString("email", null));
56
//                    System.out.println("roles: " + userinfo.get("gvsigol_roles").toString());
57
//                    System.out.println("grupos: " + userinfo.get("groups").toString());
58
                this.identificationRequester.setUserId(userId);
59
            }
60
            response(t, 200, message_and_close((userId == null)?"User autthenticate\n":"User " + userId + " authenticated\n"));
61
        } catch (Exception ex) {
62
            LOGGER.warn("Can't process callback authorization (contextPath '" + contextPath + "', request URL '" + requestURL + "')", ex);
63
            responseQuietly(t, 500, message("Can't authenticate user\n" + ex.getMessage()));
64
        } finally {
65
            this.stopWaitingForResponse();
66
        }
67
    }
68
    
69
}