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()); } }