blob: 9c807c24f57cd1178fcef1754cb9d4ccd0edfce9 [file] [log] [blame]
package de.ids_mannheim.korap.oauth2.dao;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.config.FullConfiguration;
import de.ids_mannheim.korap.config.KustvaktCacheable;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.oauth2.constant.OAuth2Error;
import de.ids_mannheim.korap.oauth2.entity.AccessScope;
import de.ids_mannheim.korap.oauth2.entity.Authorization;
import de.ids_mannheim.korap.utils.ParameterChecker;
import net.sf.ehcache.Element;
/**
* Implementations of {@link AuthorizationDao} using a cache instead
* of a database.
*
* @author margaretha
*
*/
public class CachedAuthorizationDaoImpl extends KustvaktCacheable
implements AuthorizationDao {
@Autowired
private FullConfiguration config;
public CachedAuthorizationDaoImpl () {
super("authorization", "key:authorization");
}
@Override
public Authorization storeAuthorizationCode (String clientId, String userId,
String code, Set<AccessScope> scopes, String redirectURI,
ZonedDateTime authenticationTime, String nonce)
throws KustvaktException {
ParameterChecker.checkStringValue(clientId, "client_id");
ParameterChecker.checkStringValue(userId, "userId");
ParameterChecker.checkStringValue(code, "authorization code");
ParameterChecker.checkCollection(scopes, "scopes");
ParameterChecker.checkObjectValue(authenticationTime,
"user authentication time");
Authorization authorization = new Authorization();
authorization.setCode(code);
authorization.setClientId(clientId);
authorization.setUserId(userId);
authorization.setScopes(scopes);
authorization.setRedirectURI(redirectURI);
authorization.setUserAuthenticationTime(authenticationTime);
authorization.setNonce(nonce);
ZonedDateTime now =
ZonedDateTime.now(ZoneId.of(Attributes.DEFAULT_TIME_ZONE));
authorization.setCreatedDate(now);
authorization.setExpiryDate(
now.plusSeconds(config.getAuthorizationCodeExpiry()));
this.storeInCache(code, authorization);
return authorization;
}
@Override
public Authorization retrieveAuthorizationCode (String code)
throws KustvaktException {
Object auth = this.getCacheValue(code);
if (auth != null) {
return (Authorization) auth;
}
else {
throw new KustvaktException(StatusCodes.INVALID_AUTHORIZATION,
"Authorization is invalid.", OAuth2Error.INVALID_REQUEST);
}
}
@Override
public Authorization updateAuthorization (Authorization authorization)
throws KustvaktException {
this.storeInCache(authorization.getCode(), authorization);
Authorization auth =
(Authorization) this.getCacheValue(authorization.getCode());
return auth;
}
@Override
public List<Authorization> retrieveAuthorizationsByClientId (
String clientId) {
List<Authorization> authList = new ArrayList<>();
Map<Object, Element> map = getAllCacheElements();
for (Object key : map.keySet()) {
Authorization auth = (Authorization) map.get(key).getObjectValue();
if (auth.getClientId().equals(clientId)) {
authList.add(auth);
}
}
return authList;
}
}