Project

General

Profile

1
package eu.dnetlib.uoaauthorizationlibrary.utils;
2

    
3
import eu.dnetlib.uoaauthorizationlibrary.configuration.SecurityConfig;
4
import org.apache.log4j.Logger;
5
import org.springframework.beans.factory.annotation.Autowired;
6
import org.springframework.http.*;
7
import org.springframework.stereotype.Component;
8
import org.springframework.web.client.RestClientException;
9
import org.springframework.web.client.RestTemplate;
10

    
11
import javax.servlet.http.Cookie;
12
import javax.servlet.http.HttpServletRequest;
13
import java.util.Arrays;
14
import java.util.Collections;
15

    
16
@Component
17
public class AuthorizationUtils {
18
    private final Logger log = Logger.getLogger(this.getClass());
19
    private final SecurityConfig securityConfig;
20
    private final static String TOKEN = "AccessToken";
21
    private final static String SESSION = "OpenAIRESession";
22

    
23
    @Autowired
24
    AuthorizationUtils(SecurityConfig securityConfig) {
25
        this.securityConfig = securityConfig;
26
    }
27

    
28
    private String getToken(HttpServletRequest request) {
29
        if (request.getCookies() == null) {
30
            return null;
31
        }
32
        for (Cookie c : request.getCookies()) {
33
            if (c.getName().equals(TOKEN)) {
34
                return c.getValue();
35
            }
36
        }
37
        return null;
38
    }
39

    
40
    public UserInfo getUserInfo(HttpServletRequest request) {
41
        String url = securityConfig.getUserInfoUrl() + (securityConfig.isDeprecated()?getToken(request):"");
42
        RestTemplate restTemplate = new RestTemplate();
43
        try {
44
            if(hasCookie(request)) {
45
                ResponseEntity<UserInfo> response = restTemplate.exchange(url, HttpMethod.GET, createHeaders(request), UserInfo.class);
46
                return  response.getBody();
47
            }
48
            return null;
49
        } catch (RestClientException e) {
50
            log.error(url + ":" + e.getMessage());
51
            return null;
52
        }
53
    }
54

    
55
    private boolean hasCookie(HttpServletRequest request) {
56
        Cookie[] cookies = request.getCookies();
57
        if(cookies != null) {
58
            if (securityConfig.isDeprecated()) {
59
                return Arrays.stream(cookies).anyMatch(cookie -> cookie.getName().equalsIgnoreCase(TOKEN));
60
            } else {
61
                return Arrays.stream(cookies).anyMatch(cookie -> cookie.getName().equalsIgnoreCase(SESSION));
62
            }
63
        }
64
        return false;
65
    }
66

    
67
    private HttpEntity<HttpHeaders> createHeaders(HttpServletRequest request) {
68
        HttpHeaders headers = new HttpHeaders();
69
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
70
        headers.set("Cookie", request.getHeader("Cookie"));
71
        return new HttpEntity<>(headers);
72
    }
73
}
(1-1/2)