50 lines
1.5 KiB
Java
50 lines
1.5 KiB
Java
package org.gcube.data.access.storagehub.services;
|
|
|
|
|
|
import static org.gcube.data.access.storagehub.Roles.INFRASTRUCTURE_MANAGER_ROLE;
|
|
|
|
import javax.enterprise.context.RequestScoped;
|
|
import javax.inject.Inject;
|
|
import javax.servlet.ServletContext;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.ws.rs.Path;
|
|
import javax.ws.rs.core.Context;
|
|
|
|
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
|
import org.gcube.common.authorization.library.provider.ClientInfo;
|
|
import org.gcube.data.access.storagehub.AuthorizationChecker;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
@Path("")
|
|
public abstract class Impersonable {
|
|
|
|
Logger log = LoggerFactory.getLogger(Impersonable.class);
|
|
|
|
AuthorizationChecker authChecker;
|
|
|
|
@Context
|
|
ServletContext context;
|
|
|
|
|
|
|
|
@RequestScoped
|
|
String currentUser;
|
|
|
|
@RequestScoped
|
|
@Inject
|
|
public void setAuthChecker(AuthorizationChecker authChecker, @Context final HttpServletRequest request) {
|
|
|
|
String impersonate = request!=null ? request.getParameter("impersonate") : null ;
|
|
ClientInfo info = AuthorizationProvider.instance.get().getClient();
|
|
if(impersonate!=null && info.getRoles().contains(INFRASTRUCTURE_MANAGER_ROLE)) {
|
|
this.currentUser = impersonate;
|
|
} else
|
|
this.currentUser = info.getId();
|
|
authChecker.setUserToCheck(currentUser);
|
|
this.authChecker = authChecker;
|
|
log.info("called with login {} and impersonate {}, auth checker initialized with {}",info.getId(), impersonate, authChecker.getUserToCheck());
|
|
}
|
|
|
|
}
|