package org.gcube.common.authorization.utils.secret; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; import org.gcube.common.authorization.client.Constants; import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.authorization.library.exception.AuthorizationException; import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.provider.ClientInfo; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; /** * @author Luca Frosini (ISTI - CNR) */ public class GCubeSecret extends Secret { public static final String GCUBE_TOKEN_REGEX = "^([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}-[a-fA-F0-9]{8,9}){1}$"; @Override protected void check(String token) throws AuthorizationException { super.check(token); if(!Pattern.matches(GCubeSecret.GCUBE_TOKEN_REGEX, token)) { throw new AuthorizationException("The GUCBE token must comply with the regex " + GCUBE_TOKEN_REGEX); } } public GCubeSecret(String token) { super(20, token); } @Override public void set() throws Exception { SecurityTokenProvider.instance.set(token); AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token); ClientInfo clientInfo = authorizationEntry.getClientInfo(); String qualifier = authorizationEntry.getQualifier(); Caller caller = new Caller(clientInfo, qualifier); AuthorizationProvider.instance.set(caller); ScopeBean scopeBean = new ScopeBean(getContext()); ScopeProvider.instance.set(scopeBean.toString()); } protected ClientInfo getClientInfo() throws Exception { return Constants.authorizationService().get(token).getClientInfo(); } @Override public String getContext() throws Exception { return Constants.authorizationService().get(token).getContext(); } @Override public String getUsername() throws Exception { return getClientInfo().getId(); } @Override public Map getHTTPAuthorizationHeaders() { Map authorizationHeaders = new HashMap<>(); authorizationHeaders.put(org.gcube.common.authorization.client.Constants.TOKEN_HEADER_ENTRY, token); return authorizationHeaders; } }