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.ClientInfo; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.utils.Caller; /** * @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}$"; protected AuthorizationEntry authorizationEntry; @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); } protected AuthorizationEntry getAuthorizationEntry() throws Exception { if(authorizationEntry==null) { authorizationEntry = Constants.authorizationService().get(token); } return authorizationEntry; } @Override public void setToken() throws Exception { SecurityTokenProvider.instance.set(token); } @Override public void resetToken() throws Exception { SecurityTokenProvider.instance.reset(); } @Override public ClientInfo getClientInfo() throws Exception { return getAuthorizationEntry().getClientInfo(); } @Override public Caller getCaller() throws Exception { ClientInfo clientInfo = getClientInfo(); String qualifier = authorizationEntry.getQualifier(); Caller caller = new Caller(clientInfo, qualifier); return caller; } @Override public String getContext() throws Exception { return getAuthorizationEntry().getContext(); } @Override public Map getHTTPAuthorizationHeaders() { Map authorizationHeaders = new HashMap<>(); authorizationHeaders.put(org.gcube.common.authorization.client.Constants.TOKEN_HEADER_ENTRY, token); return authorizationHeaders; } }