// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.authentication;
import java.util.Iterator;
import java.util.List;
import fitnesse.FitNesseContext;
import fitnesse.http.Request;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.VirtualMockingPageCrawler;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPagePath;
import fitnesse.wiki.WikiPageUtil;
public abstract class SecurePageOperation implements SecureOperation {
protected abstract String getSecurityMode();
public boolean shouldAuthenticate(FitNesseContext context, Request request) throws Exception {
WikiPagePath path = PathParser.parse(request.getResource());
PageCrawler crawler = context.root.getPageCrawler();
crawler.setDeadEndStrategy(new VirtualMockingPageCrawler());
WikiPage page = crawler.getPage(context.root, path);
if (page == null)
return false;
List<WikiPage> ancestors = WikiPageUtil.getAncestorsStartingWith(page);
for (Iterator<WikiPage> iterator = ancestors.iterator(); iterator.hasNext();) {
WikiPage ancestor = iterator.next();
if (hasSecurityModeAttribute(ancestor))
return true;
}
return false;
}
private boolean hasSecurityModeAttribute(WikiPage ancestor) throws Exception {
PageData data = ancestor.getData();
boolean hasSecurityMode = data.hasAttribute(getSecurityMode());
return hasSecurityMode;
}
}