/* (c) 2017 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.rest.security;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.geoserver.rest.RestBaseController;
import org.geoserver.security.impl.RESTAccessRuleDAO;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(path = RestBaseController.ROOT_PATH + "/security/acl/rest")
public class RestAccessController extends AbstractAclController {
/**
* rule pattern
*/
static final Pattern KEYPATTERN = Pattern
.compile("\\S+:(GET|POST|PUT|DELETE|HEAD)(,(GET|POST|PUT|DELETE|HEAD))*");
public RestAccessController() {
super(RESTAccessRuleDAO.get());
}
@Override
protected void addRuleToMap(Comparable rule, Map map) {
String[] parts = ((String) rule).split("=");
map.put(parts[0], parts[1]);
}
@Override
protected String keyFor(Comparable rule) {
return ((String) rule).split("=")[0];
}
@Override
protected Comparable convertEntryToRule(Entry entry) {
return entry.getKey() + "=" + entry.getValue();
}
@Override
protected String validateRuleKey(String ruleKey) {
if (!KEYPATTERN.matcher(ruleKey).matches())
return "Invalid '" + ruleKey + "' not matching " + KEYPATTERN;
return null;
}
@Override
protected String getBasePath() {
return "/security/acl/rest";
}
}