Registered services relates methods added

This commit is contained in:
Katerina Iatropoulou 2020-10-09 10:06:54 +00:00
parent 6db3d06d48
commit 708df14e12
14 changed files with 183 additions and 59 deletions

View File

@ -1,18 +1,31 @@
package eu.dnetlib.openaire.usermanagement;
import eu.dnetlib.openaire.usermanagement.utils.RegisteredServicesUtils;
import eu.dnetlib.openaire.usermanagement.utils.TokenUtils;
import org.apache.http.HttpResponse;
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class EditRegisteredService extends HttpServlet {
@Autowired
private RegisteredServicesUtils registeredServicesUtils;
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
@ -21,6 +34,17 @@ public class EditRegisteredService extends HttpServlet {
String accessToken = authentication.getAccessTokenValue();
String serviceId = request.getParameter("id");
try {
if (!registeredServicesUtils.isAuthorized(authentication.getSub(), serviceId)) {
request.getSession().setAttribute("message", "You have no permission to edit the service.");
response.sendRedirect("./registeredService");
}
} catch (SQLException throwables) {
request.getSession().setAttribute("message", "There was an error accessing your service.");
response.sendRedirect("./registeredService");
}
if (serviceId == null || serviceId.isEmpty()) {
request.getSession().setAttribute("message", "No selected service is provided.");
}

View File

@ -1,5 +1,12 @@
package eu.dnetlib.openaire.usermanagement;
import eu.dnetlib.openaire.usermanagement.utils.AuthenticationUtils;
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@ -10,6 +17,11 @@ public class OverviewServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getSession().setAttribute("authenticated",
!SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString()
.equals("anonymousUser"));
response.setContentType("text/html");
request.getRequestDispatcher("./overview.jsp").include(request, response);
}

View File

@ -2,7 +2,6 @@ package eu.dnetlib.openaire.usermanagement;
import com.google.gson.Gson;
import eu.dnetlib.openaire.user.pojos.RegisteredService;
import eu.dnetlib.openaire.user.utils.VerificationActions;
import eu.dnetlib.openaire.usermanagement.utils.RegisteredServicesUtils;
import eu.dnetlib.openaire.usermanagement.utils.TokenUtils;
import org.apache.log4j.Logger;
@ -72,7 +71,6 @@ public class RegisterServiceServlet extends HttpServlet {
RegisteredService registeredService = new RegisteredService(aai_id, owner, name);
try {
System.out.println("I WILL CONTACT THE DB");
registeredServicesUtils.addRegistedService(registeredService);
} catch (SQLException sqle) {

View File

@ -1,15 +1,72 @@
package eu.dnetlib.openaire.usermanagement;
import eu.dnetlib.openaire.user.pojos.RegisteredService;
import eu.dnetlib.openaire.usermanagement.utils.RegisteredServicesUtils;
import eu.dnetlib.openaire.usermanagement.utils.TokenUtils;
import org.apache.log4j.Logger;
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RegisteredServicesServlet extends HttpServlet {
private Logger logger = Logger.getLogger(RegisteredServicesServlet.class);
@Autowired
private RegisteredServicesUtils registeredServicesUtils;
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getSession().setAttribute("authenticated",
!SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString()
.equals("anonymousUser"));
OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.
getContext().getAuthentication();
String userId = authentication.getSub();
List<RegisteredService> registeredServices = null;
try {
registeredServices = registeredServicesUtils.
getRegisteredServiceDao().fetchAllRegisteredServicesByOwner(userId);
} catch (SQLException sqle) {
logger.error("Error fetching registered services for user " + userId , sqle);
request.getSession().setAttribute("message", "Error fetching registered services. " +
"Please try again later.");
request.getSession().setAttribute("showEmptyList", false);
request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
}
Map<String, ServiceResponse> serviceResponses = new HashMap<>();
for (RegisteredService registeredService:registeredServices) {
serviceResponses.put(registeredService.getId(),
TokenUtils.getRegisteredService(registeredService.getAai_id(),authentication.getAccessTokenValue()));
}
request.getSession().setAttribute("services", serviceResponses);
request.getSession().setAttribute("registeredServices", registeredServices);
response.setContentType("text/html");
request.getRequestDispatcher("./registeredServices.jsp").include(request, response);
}

View File

@ -3,6 +3,8 @@ package eu.dnetlib.openaire.usermanagement;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.Serializable;
public class ServiceRequest {
String clientName;
String clientId;
@ -146,11 +148,11 @@ public class ServiceRequest {
}
}
class Jwks {
class Jwks implements Serializable {
Key[] keys = new Key[]{new Key()};
}
class Key {
class Key implements Serializable {
String kty = "RSA";
String e = "AQAB";
String kid = "05794a3c-a6f5-430c-9822-da4e53597ba5";

View File

@ -1,6 +1,8 @@
package eu.dnetlib.openaire.usermanagement;
public class ServiceResponse {
import java.io.Serializable;
public class ServiceResponse implements Serializable {
String id;
String clientId;
String clientSecret;

View File

@ -0,0 +1,13 @@
package eu.dnetlib.openaire.usermanagement.utils;
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
public class AuthenticationUtils {
public static boolean isAuthenticated(OIDCAuthenticationToken authenticationToken) {
if (authenticationToken != null) {
return true;
}
return false;
}
}

View File

@ -25,4 +25,13 @@ public class RegisteredServicesUtils {
registeredServiceDao.insertRegisteredService(registeredService);
}
public boolean isAuthorized(String userid, String id) throws SQLException {
RegisteredService registeredService = registeredServiceDao.fetchRegisteredServiceById(id);
System.out.println(registeredService.getAai_id());
System.out.println(registeredService.getOwner());
if (registeredService.getOwner().equals(userid)) return true;
return false;
}
}

View File

@ -15,6 +15,7 @@ import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.log4j.Logger;
import org.springframework.http.HttpStatus;
import javax.xml.ws.Service;
@ -26,6 +27,8 @@ import java.util.List;
public class TokenUtils {
Logger logger = Logger.getLogger(TokenUtils.class);
public static String registerService(String userId, String name, String description, String email, String accessToken)
throws IOException {
@ -71,13 +74,6 @@ public class TokenUtils {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpResponse httpResponse = httpclient.execute(httpGet);
String registeredService = IOUtils.toString(httpResponse.getEntity().getContent(), StandardCharsets.UTF_8.name());
System.out.println("registered Service " + registeredService);
//List<ServiceResponse> registeredServices;
//Type listType = new TypeToken<List<ServiceResponse>>(){}.getType();
//String registeredServicesJson =
//registeredServices = new Gson().fromJson(IOUtils.toString(httpResponse.getEntity().getContent(), StandardCharsets.UTF_8.name()),
// listType);
//return registeredServices.get(0);
return new Gson().fromJson(registeredService,ServiceResponse.class);
}

View File

@ -1,10 +1,3 @@
<%--
Created by IntelliJ IDEA.
User: sofia
Date: 19/10/2017
Time: 4:30 μμ
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
@ -50,12 +43,12 @@
</div>
<div class=" uk-section uk-margin-small-top tm-middle custom-main-content" id="tm-main">
<div class="uk-container uk-container-small uk-margin-medium-top uk-margin-small-bottom uk-text-center">
<h2 class="uk-h2 uk-margin-small-bottom">Add a new service</h2>
<h2 class="uk-h2 uk-margin-small-bottom">Update your service</h2>
<div class="tm-main uk-width-2-3@s uk-width-2-3@m uk-width-3-4@l uk-row-first uk-first-column uk-align-center">
<div class="uk-grid ">
<!-- CENTER SIDE -->
<div class="uk-width-1-1@m uk-width-1-1@s uk-text-center">
<h3 class="uk-h3">Please provide the basic information on your new service</h3>
<h5 class="uk-h5">Please fill in the updated values for your service</h5>
<div class="middle-box text-center loginscreen animated fadeInDown ">
<div class="k-width-1-1@m uk-width-1-1@s uk-text-center">
<!-- REGISTER FORM -->

View File

@ -42,12 +42,18 @@
<!-- user menu -->
<div class=uk-navbar-right>
<ul class="uk-navbar-nav user_actions">
<li><a href="#"> Sign in </a></li>
<li>
<a class="login uk-icon" aria-expanded="false">
<svg height="60" width="60"><circle cx="30" cy="30" r="20" stroke-width="2"></circle>
<text dy=".4em" font-size="16" text-anchor="middle" x="50%" y="50%"> AK </text></svg>
<c:choose>
<c:when test="${not authenticated}">
<li><a href="./openid_connect_login"> Sign in </a></li>
</c:when>
<c:otherwise>
<li>
<a class="login uk-icon" aria-expanded="false">
<svg height="60" width="60">
<span uk-icon="icon: user; ratio: 2"></span></svg>
</a>
</c:otherwise>
</c:choose>
<div class="uk-navbar-dropdown uk-navbar-dropdown-bottom-right" id="userMenu" style="left: 344.433px; top: 100px;">
<div class="uk-navbar-dropdown-grid uk-child-width-1-1 uk-grid uk-grid-stack" uk-grid="">
<div class="uk-first-column uk-height-max-medium uk-overflow-auto">
@ -56,7 +62,7 @@
<li class=""><a href="./registeredServices">Registered services</a></li>
<li class="uk-nav-divider "></li>
<li>
<a id="logout">Log out</a>
<a href="${oidc.logout}" id="logout">Log out</a>
</li>
</ul>
</div>
@ -79,19 +85,21 @@
<div class="uk-text-center">
<!-- CENTER SIDE -->
<h2 class="uk-h2 uk-margin-small-bottom">OpenAIRE AAI Service</h2>
<h2 class="uk-h2 uk-margin-small-bottom">OpenAIRE APIs Authentication</h2>
<div class="uk-margin-top">
OpenAIRE AAI Service mpla mpla mpla
The OpenAIRE APIs can be accessed over HTTPS both by authenticated and unauthenticated requests.
To achieve better rate limits you need to make authenticated requests. We support personal access tokens and service registration.
For more information please read the <a href="">documentation.</a>
</div>
<div class="uk-grid uk-child-width-1-2@m uk-child-width-1-1@s uk-margin-top uk-text-left uk-container uk-container-small uk-margin-auto">
<div class="uk-grid uk-child-width-1-3@m uk-child-width-1-1@s uk-margin-top uk-text-left uk-container uk-container-small uk-margin-auto">
<div class="uk-card uk-card-default uk-card-body">
<div class=""> <a class="uk-link uk-text-large" href="./personalToken"> Personal token</a></div>
<div>mpla mpla mpla</div>
<div>Access the OpenAIRE APIs with your personal access token.</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-margin-left">
<div class=""> <a class="uk-link uk-text-large" href="./registeredServices"> Registered Services</a></div>
<div>mpla mpla mpla</div>
<div>Register your service to enable requests to the OpenAIRE APIs.</div>
</div>
</div>

View File

@ -68,7 +68,7 @@
<div class="uk-grid ">
<div class="uk-width-1-4@m">
<div class="uk-card uk-card-default uk-card-body">
<div class="uk-h4">Sidebar title</div>
<div class="uk-h4">API Access</div>
<ul class="uk-nav uk-nav-default">
<li class="uk-active"><a href="./personalToken">Personal token</a></li>
<li class=""><a href="./registeredServices">Registered services</a></li>

View File

@ -79,7 +79,7 @@
<div class="uk-grid ">
<div class="uk-width-1-4@m">
<div class="uk-card uk-card-default uk-card-body">
<div class="uk-h4">Sidebar title</div>
<div class="uk-h4">API Access</div>
<ul class="uk-nav uk-nav-default">
<li class=""><a href="./personalToken">Personal token</a></li>
<li class=""><a href="./registeredServices">Registered services</a></li>

View File

@ -1,10 +1,3 @@
<%--
Created by IntelliJ IDEA.
User: sofia
Date: 19/10/2017
Time: 4:30 μμ
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
@ -42,12 +35,18 @@
<!-- user menu -->
<div class=uk-navbar-right>
<ul class="uk-navbar-nav user_actions">
<li><a href="#"> Sign in </a></li>
<li>
<a class="login uk-icon" aria-expanded="false">
<svg height="60" width="60"><circle cx="30" cy="30" r="20" stroke-width="2"></circle>
<text dy=".4em" font-size="16" text-anchor="middle" x="50%" y="50%"> AK </text></svg>
<c:choose>
<c:when test="${not authenticated}">
<li><a href="./openid_connect_login"> Sign in </a></li>
</c:when>
<c:otherwise>
<li>
<a class="login uk-icon" aria-expanded="false">
<svg height="60" width="60">
<span uk-icon="icon: user; ratio: 2"></span></svg>
</a>
</c:otherwise>
</c:choose>
<div class="uk-navbar-dropdown uk-navbar-dropdown-bottom-right" id="userMenu" style="left: 344.433px; top: 100px;">
<div class="uk-navbar-dropdown-grid uk-child-width-1-1 uk-grid uk-grid-stack" uk-grid="">
<div class="uk-first-column uk-height-max-medium uk-overflow-auto">
@ -56,7 +55,7 @@
<li class=""><a href="./registeredServices">Registered services</a></li>
<li class="uk-nav-divider "></li>
<li>
<a id="logout">Log out</a>
<a href="./openid_logout" id="logout">Log out</a>
</li>
</ul>
</div>
@ -79,7 +78,7 @@
<div class="uk-grid ">
<div class="uk-width-1-4@m">
<div class="uk-card uk-card-default uk-card-body">
<div class="uk-h4">Sidebar title</div>
<div class="uk-h4">API Access</div>
<ul class="uk-nav uk-nav-default">
<li class=""><a href="./personalToken">Personal token</a></li>
<li class="uk-active"><a href="./registeredServices">Registered services</a></li>
@ -89,9 +88,17 @@
<!-- CENTER SIDE -->
<div class="uk-width-2-3@l uk-width-2-3@m">
<h2 class="uk-h2 uk-margin-small-bottom">Registered services</h2>
<h3 class="uk-h4">This is the list of all your registered services. You can register up to 5 services.</h3>
<h5 class="uk-h5">This is the list of all your registered services. You can register up to 5 services.</h5>
<div class="middle-box loginscreen animated fadeInDown ">
<div class="uk-width-1-1@m uk-width-1-1@s">
<div> <span id="server_error" class="uk-text-danger uk-text-small uk-float-left">${message}</span> </div>
<c:remove var="message" scope="session" />
<c:if test="${empty registeredServices && showEmptyList}">
<p>You have not registered any service yet!</p>
</c:if>
<c:if test="${registeredServices.size() > 0}">
<!-- REGISTER FORM -->
<ul class="uk-list">
<li>
@ -101,22 +108,24 @@
<div>Actions</div>
</div>
</li>
>>> ${registeredServices.size()}
${services}
<c:forEach items="${registeredServices}" var="registeredService">
<li>
<hr class="uk-margin-remove-top">
<div class="uk-grid uk-child-width-1-3">
<div ><a uk-toggle="target: #details1; animation: uk-animation-fade">Service 1 <span uk-icon="icon:info;ratio:0.7"></span></a>
<div ><a uk-toggle="target: #details${registeredService.id}; animation: uk-animation-fade">${registeredService.name} <span uk-icon="icon:info;ratio:0.7"></span></a>
</div>
<div>today</div>
<div>${registeredService.date}</div>
<div>
<span class="uk-margin-small-right" uk-icon="pencil" ></span>
<a href="./editRegisteredService?id=${registeredService.id}"><span class="uk-margin-small-right" uk-icon="pencil" ></span>
<span class="uk-margin-small-right uk-text-danger" uk-icon="trash" uk-toggle="target: #modal1"></span>
<!-- This is the modal -->
<div id="modal1" uk-modal>
<div class="uk-modal-dialog uk-modal-body">
<h2 class="uk-modal-title">Delete service</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Are you sure you want to delete the service? You cannot undo this action!</p>
<p class="uk-text-right">
<button class="uk-button uk-button-default uk-modal-close" type="button">Cancel</button>
<button class="uk-button uk-button-danger" type="button">Delete</button>
@ -126,14 +135,15 @@
</div>
</div>
</li>
<li id="details1" hidden="hidden" >
<li id="details${registeredService.id}" hidden="hidden" >
<div class="uk-alert">
<p>Service Name:</p>
<p>Service Description:</p>
<p>Service Name: </p>
<p>Service Description: </p>
<p>Service Id:</p>
<p>Creation Date:</p>
</div>
</li>
</c:forEach>
<li>
<hr class="uk-margin-remove-top">
<div class="uk-grid uk-child-width-1-3">
@ -155,10 +165,10 @@
</div>
</li>
</ul>
</c:if>
<div class="uk-text-center">
<a class="uk-button uk-button-default uk-button-primary uk-margin-top" href="./registerService">
New service
<span class="uk-icon" uk-icon="icon:plus-circle"></span> New service
</a>
</div>
</div>