Project

General

Profile

1
package eu.dnetlib.openaire.usermanagement;
2

    
3
import com.google.gson.Gson;
4
import com.google.gson.GsonBuilder;
5
import eu.dnetlib.openaire.user.pojos.RegisteredService;
6
import eu.dnetlib.openaire.usermanagement.utils.RegisteredServicesUtils;
7
import eu.dnetlib.openaire.usermanagement.utils.TokenUtils;
8
import org.apache.http.HttpResponse;
9
import org.apache.log4j.Logger;
10
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
11
import org.springframework.beans.factory.annotation.Autowired;
12
import org.springframework.security.core.context.SecurityContextHolder;
13
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
14

    
15
import javax.servlet.ServletConfig;
16
import javax.servlet.ServletException;
17
import javax.servlet.http.HttpServlet;
18
import javax.servlet.http.HttpServletRequest;
19
import javax.servlet.http.HttpServletResponse;
20
import java.io.IOException;
21
import java.sql.SQLException;
22
import java.util.ArrayList;
23
import java.util.HashMap;
24
import java.util.List;
25
import java.util.Map;
26

    
27
public class RegisteredServicesServlet extends HttpServlet {
28

    
29
    private Logger logger = Logger.getLogger(RegisteredServicesServlet.class);
30

    
31
    @Autowired
32
    private RegisteredServicesUtils registeredServicesUtils;
33

    
34
    public void init(ServletConfig config) throws ServletException {
35
        super.init(config);
36
        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
37
                config.getServletContext());
38
    }
39

    
40
    public void doGet(HttpServletRequest request, HttpServletResponse response)
41
            throws ServletException, IOException {
42

    
43
        request.getSession().setAttribute("authenticated",
44
                !SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString()
45
                        .equals("anonymousUser"));
46

    
47
        OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.
48
                getContext().getAuthentication();
49

    
50
        String userId = authentication.getSub();
51

    
52
        List<RegisteredService> registeredServices = null;
53
        try {
54
            registeredServices = registeredServicesUtils.
55
                    getRegisteredServiceDao().fetchAllRegisteredServicesByOwner(userId);
56
            System.out.println("LOAD REGISTERED SERVICES. " + registeredServices);
57

    
58

    
59
        } catch (SQLException sqle) {
60
            logger.error("Error fetching registered services for user " + userId , sqle);
61
            request.getSession().setAttribute("message", "Error fetching registered services. " +
62
                    "Please try again later.");
63
            request.getSession().setAttribute("showEmptyList", false);
64
            request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
65
        }
66

    
67
        Map<String, ServiceResponse> serviceResponses = new HashMap<>();
68
        Map<String, String> serviceKey = new HashMap<>();
69

    
70
        for (RegisteredService registeredService:registeredServices) {
71
            ServiceResponse serviceResponse = TokenUtils.getRegisteredService(registeredService.getAai_id(),authentication.getAccessTokenValue());
72
            serviceResponses.put(registeredService.getId(), serviceResponse);
73
            serviceKey.put(registeredService.getId(), extractPublicKeySet(serviceResponse));
74
        }
75

    
76
        boolean reachedLimit = reachedMaximumNumberOfServices(registeredServices);
77
        request.getSession().setAttribute("reachedLimit", reachedLimit);
78
        request.getSession().setAttribute("test", "TEST");
79
        System.out.println("REACHED LIMIT??? " + reachedLimit);
80

    
81

    
82
        request.getSession().setAttribute("services", serviceResponses);
83
        request.getSession().setAttribute("keys", serviceKey);
84
        request.getSession().setAttribute("registeredServices", registeredServices);
85
        response.setContentType("text/html");
86
        request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
87
    }
88

    
89
    private String extractPublicKeySet(ServiceResponse serviceResponse) {
90
        if (serviceResponse.getJwksUri()!=null && !serviceResponse.getJwksUri().isEmpty())
91
            return serviceResponse.getJwksUri();
92

    
93
        return extractJSONJwk(serviceResponse.getJwks());
94
    }
95

    
96
    private String extractJSONJwk(Jwks jwks) {
97
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
98
        System.out.println(gson.toJson(jwks));
99
        return gson.toJson(jwks);
100
    }
101

    
102
    @Override
103
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
104
        OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.
105
                getContext().getAuthentication();
106
        String id = request.getParameter("id");
107

    
108
        System.out.println("POST " +id);
109

    
110
        if (id!=null && !id.isEmpty()) {
111
            try {
112
                RegisteredService registeredService = registeredServicesUtils.getRegisteredServiceDao().fetchRegisteredServiceById(Integer.parseInt(id));
113

    
114
                if (!registeredService.getOwner().equals(authentication.getSub())) {
115
                    request.getSession().setAttribute("message", "You are not allowed to delete the service.");
116
                    System.out.println("BLOCKED " + registeredService.getOwner() + " >> " + authentication.getSub());
117
                    response.setContentType("text/html");
118
                    request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
119
                }
120

    
121
                System.out.println("HERE");
122
                String aai_id = registeredService.getAai_id();
123
                HttpResponse resp = TokenUtils.deleteService(aai_id, authentication.getAccessTokenValue());
124

    
125
                int statusCode = resp.getStatusLine().getStatusCode();
126
                System.out.println("STATUS CODE " + statusCode);
127

    
128
                if (statusCode != 200) {
129
                    logger.error("Unable to delete the service. Status code was " + statusCode);
130
                    request.getSession().setAttribute("message", "Fail to delete the service. Status " + statusCode);
131
                    System.out.println("AAI blocked");
132
                } else {
133
                    registeredServicesUtils.getRegisteredServiceDao().delete(Integer.parseInt(id));
134
                    request.getSession().setAttribute("success", "The service was successfully deleted.");
135
                    System.out.println("HERE HERE");
136
                }
137

    
138
                response.setContentType("text/html");
139
                request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
140

    
141
            } catch (SQLException sqle) {
142
                logger.error("Unable to contact db.", sqle);
143
                request.getSession().setAttribute("message", "Fail to delete the service. Please try again later.");
144
                response.setContentType("text/html");
145
                request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
146
            }
147

    
148
        } else {
149
            System.out.println("SO WRONG ID...");
150
            request.getSession().setAttribute("message", "Error selecting service to delete. Please try again.");
151
        }
152

    
153
        System.out.println("FINALLY ");
154
        response.setContentType("text/html");
155
        request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
156
    }
157

    
158
    private boolean reachedMaximumNumberOfServices(List<RegisteredService> registeredServices) {
159
        if (registeredServices.size() == 5) {
160
            return true;
161
        }
162
        return false;
163
    }
164
}
(9-9/17)