blob: f005413ca9b1e19956c27fc1ec278c2dd27459b0 [file] [log] [blame]
package de.ids_mannheim.korap.resource.rewrite;
import com.fasterxml.jackson.databind.JsonNode;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.config.KustvaktConfiguration;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.resources.Corpus;
import de.ids_mannheim.korap.resources.KustvaktResource;
import de.ids_mannheim.korap.security.ac.SecurityManager;
import de.ids_mannheim.korap.user.User;
/**
* @author hanl
* @date 03/07/2015
*/
public class CollectionConstraint implements RewriteTask.IterableRewritePath {
@Override
public JsonNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
User user) {
if (node.get("@type").equals("koral:doc")) {
if (node.get("key").equals(Attributes.CORPUS_SIGLE)) {
String id = node.get("value");
KustvaktResource corpus = check(id, user);
if (corpus == null)
node.removeNode(new KoralNode.RewriteIdentifier(
Attributes.CORPUS_SIGLE, id));
}
}
return node.rawNode();
}
/**
* @param id
* @param user
* @return boolean if true access granted
*/
private KustvaktResource check (String id, User user) {
// todo: can be used to circumvent access control if public filter not applied
if (user == null)
return null;
KustvaktResource corpus;
try {
SecurityManager m = SecurityManager
.findbyId(id, user, Corpus.class);
corpus = m.getResource();
}
catch (RuntimeException | KustvaktException e) {
return null;
}
return corpus;
}
@Override
public JsonNode rewriteResult (KoralNode node) {
return null;
}
@Override
public String path () {
return "collection";
}
}