authorization-utils/src/main/java/org/gcube/common/authorization/utils/secret/GCubeSecret.java

72 lines
2.2 KiB
Java

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;
}
public void setToken() throws Exception {
SecurityTokenProvider.instance.set(token);
}
@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<String, String> getHTTPAuthorizationHeaders() {
Map<String, String> authorizationHeaders = new HashMap<>();
authorizationHeaders.put(org.gcube.common.authorization.client.Constants.TOKEN_HEADER_ENTRY, token);
return authorizationHeaders;
}
}