use of org.apache.wiki.auth.authorize.GroupManager in project jspwiki by apache.
the class WikiEngine method initialize.
/**
* Does all the real initialization.
*/
private void initialize(Properties props) throws WikiException {
m_startTime = new Date();
m_properties = props;
//
if (!c_configured) {
String useExternalLogConfig = TextUtil.getStringProperty(props, "jspwiki.use.external.logconfig", "false");
if (useExternalLogConfig == null || useExternalLogConfig.equals("false")) {
PropertyConfigurator.configure(props);
}
c_configured = true;
}
log.info("*******************************************");
log.info(Release.APPNAME + " " + Release.getVersionString() + " starting. Whee!");
// begin initialization
fireEvent(WikiEngineEvent.INITIALIZING);
log.debug("Java version: " + System.getProperty("java.runtime.version"));
log.debug("Java vendor: " + System.getProperty("java.vm.vendor"));
log.debug("OS: " + System.getProperty("os.name") + " " + System.getProperty("os.version") + " " + System.getProperty("os.arch"));
log.debug("Default server locale: " + Locale.getDefault());
log.debug("Default server timezone: " + TimeZone.getDefault().getDisplayName(true, TimeZone.LONG));
if (m_servletContext != null) {
log.info("Servlet container: " + m_servletContext.getServerInfo());
if (m_servletContext.getMajorVersion() < 2 || (m_servletContext.getMajorVersion() == 2 && m_servletContext.getMinorVersion() < 4)) {
throw new InternalWikiException("I require a container which supports at least version 2.4 of Servlet specification");
}
}
log.debug("Configuring WikiEngine...");
// Initializes the CommandResolver
m_commandResolver = new CommandResolver(this, props);
//
// Create and find the default working directory.
//
m_workDir = TextUtil.getStringProperty(props, PROP_WORKDIR, null);
if (m_workDir == null) {
m_workDir = System.getProperty("java.io.tmpdir", ".");
m_workDir += File.separator + Release.APPNAME + "-" + m_appid;
}
try {
File f = new File(m_workDir);
f.mkdirs();
//
if (!f.exists())
throw new WikiException("Work directory does not exist: " + m_workDir);
if (!f.canRead())
throw new WikiException("No permission to read work directory: " + m_workDir);
if (!f.canWrite())
throw new WikiException("No permission to write to work directory: " + m_workDir);
if (!f.isDirectory())
throw new WikiException("jspwiki.workDir does not point to a directory: " + m_workDir);
} catch (SecurityException e) {
log.fatal("Unable to find or create the working directory: " + m_workDir, e);
throw new IllegalArgumentException("Unable to find or create the working dir: " + m_workDir, e);
}
log.info("JSPWiki working directory is '" + m_workDir + "'");
m_saveUserInfo = TextUtil.getBooleanProperty(props, PROP_STOREUSERNAME, m_saveUserInfo);
m_useUTF8 = "UTF-8".equals(TextUtil.getStringProperty(props, PROP_ENCODING, "ISO-8859-1"));
m_beautifyTitle = TextUtil.getBooleanProperty(props, PROP_BEAUTIFYTITLE, m_beautifyTitle);
m_templateDir = TextUtil.getStringProperty(props, PROP_TEMPLATEDIR, "default");
m_frontPage = TextUtil.getStringProperty(props, PROP_FRONTPAGE, "Main");
// Initialize the page name comparator now as it may be used while
// initializing other modules
initPageSorter(props);
// of a better way to do the startup-sequence.
try {
Class<?> urlclass = ClassUtil.findClass("org.apache.wiki.url", TextUtil.getStringProperty(props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor"));
m_urlConstructor = (URLConstructor) urlclass.newInstance();
m_urlConstructor.initialize(this, props);
m_pageManager = (PageManager) ClassUtil.getMappedObject(PageManager.class.getName(), this, props);
m_pluginManager = (PluginManager) ClassUtil.getMappedObject(PluginManager.class.getName(), this, props);
m_differenceManager = (DifferenceManager) ClassUtil.getMappedObject(DifferenceManager.class.getName(), this, props);
m_attachmentManager = (AttachmentManager) ClassUtil.getMappedObject(AttachmentManager.class.getName(), this, props);
m_variableManager = (VariableManager) ClassUtil.getMappedObject(VariableManager.class.getName(), props);
// m_filterManager = (FilterManager)ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
m_renderingManager = (RenderingManager) ClassUtil.getMappedObject(RenderingManager.class.getName());
m_searchManager = (SearchManager) ClassUtil.getMappedObject(SearchManager.class.getName(), this, props);
m_authenticationManager = (AuthenticationManager) ClassUtil.getMappedObject(AuthenticationManager.class.getName());
m_authorizationManager = (AuthorizationManager) ClassUtil.getMappedObject(AuthorizationManager.class.getName());
m_userManager = (UserManager) ClassUtil.getMappedObject(UserManager.class.getName());
m_groupManager = (GroupManager) ClassUtil.getMappedObject(GroupManager.class.getName());
m_editorManager = (EditorManager) ClassUtil.getMappedObject(EditorManager.class.getName(), this);
m_editorManager.initialize(props);
m_progressManager = new ProgressManager();
// Initialize the authentication, authorization, user and acl managers
m_authenticationManager.initialize(this, props);
m_authorizationManager.initialize(this, props);
m_userManager.initialize(this, props);
m_groupManager.initialize(this, props);
m_aclManager = getAclManager();
// Start the Workflow manager
m_workflowMgr = (WorkflowManager) ClassUtil.getMappedObject(WorkflowManager.class.getName());
m_workflowMgr.initialize(this, props);
m_internationalizationManager = (InternationalizationManager) ClassUtil.getMappedObject(InternationalizationManager.class.getName(), this);
m_templateManager = (TemplateManager) ClassUtil.getMappedObject(TemplateManager.class.getName(), this, props);
// Since we want to use a page filters initilize() method
// as a engine startup listener where we can initialize global event listeners,
// it must be called lastly, so that all object references in the engine
// are availabe to the initialize() method
m_filterManager = (FilterManager) ClassUtil.getMappedObject(FilterManager.class.getName(), this, props);
m_adminBeanManager = (AdminBeanManager) ClassUtil.getMappedObject(AdminBeanManager.class.getName(), this);
// RenderingManager depends on FilterManager events.
m_renderingManager.initialize(this, props);
//
// ReferenceManager has the side effect of loading all
// pages. Therefore after this point, all page attributes
// are available.
//
// initReferenceManager is indirectly using m_filterManager, therefore
// it has to be called after it was initialized.
//
initReferenceManager();
//
// Hook the different manager routines into the system.
//
m_filterManager.addPageFilter(m_referenceManager, -1001);
m_filterManager.addPageFilter(m_searchManager, -1002);
} catch (RuntimeException e) {
// RuntimeExceptions may occur here, even if they shouldn't.
log.fatal("Failed to start managers.", e);
throw new WikiException("Failed to start managers: " + e.getMessage(), e);
} catch (ClassNotFoundException e) {
log.fatal("JSPWiki could not start, URLConstructor was not found: " + e.getMessage(), e);
throw new WikiException(e.getMessage(), e);
} catch (InstantiationException e) {
log.fatal("JSPWiki could not start, URLConstructor could not be instantiated: " + e.getMessage(), e);
throw new WikiException(e.getMessage(), e);
} catch (IllegalAccessException e) {
log.fatal("JSPWiki could not start, URLConstructor cannot be accessed: " + e.getMessage(), e);
throw new WikiException(e.getMessage(), e);
} catch (Exception e) {
// Final catch-all for everything
log.fatal("JSPWiki could not start, due to an unknown exception when starting.", e);
throw new WikiException("Failed to start. Caused by: " + e.getMessage() + "; please check log files for better information.", e);
}
//
try {
if (TextUtil.getBooleanProperty(props, RSSGenerator.PROP_GENERATE_RSS, false)) {
m_rssGenerator = (RSSGenerator) ClassUtil.getMappedObject(RSSGenerator.class.getName(), this, props);
}
m_pageRenamer = (PageRenamer) ClassUtil.getMappedObject(PageRenamer.class.getName(), this, props);
} catch (Exception e) {
log.error("Unable to start RSS generator - JSPWiki will still work, " + "but there will be no RSS feed.", e);
}
// Start the RSS generator & generator thread
if (m_rssGenerator != null) {
m_rssFile = TextUtil.getStringProperty(props, RSSGenerator.PROP_RSSFILE, "rss.rdf");
File rssFile = null;
if (m_rssFile.startsWith(File.separator)) {
// honor absolute pathnames:
rssFile = new File(m_rssFile);
} else {
// relative path names are anchored from the webapp root path:
rssFile = new File(getRootPath(), m_rssFile);
}
int rssInterval = TextUtil.getIntegerProperty(props, RSSGenerator.PROP_INTERVAL, 3600);
RSSThread rssThread = new RSSThread(this, rssFile, rssInterval);
rssThread.start();
}
// initialization complete
fireEvent(WikiEngineEvent.INITIALIZED);
log.info("WikiEngine configured.");
m_isConfigured = true;
}
use of org.apache.wiki.auth.authorize.GroupManager in project jspwiki by apache.
the class WikiSession method injectGroupPrincipals.
/**
* Injects GroupPrincipal objects into the user's Principal set based on the
* groups the user belongs to. For Groups, the algorithm first calls the
* {@link GroupManager#getRoles()} to obtain the array of GroupPrincipals
* the authorizer knows about. Then, the method
* {@link GroupManager#isUserInRole(WikiSession, Principal)} is called for
* each Principal. If the user is a member of the group, an equivalent
* GroupPrincipal is injected into the user's principal set. Existing
* GroupPrincipals are flushed and replaced. This method should generally be
* called after a user's {@link org.apache.wiki.auth.user.UserProfile} is
* saved. If the wiki session is null, or there is no matching user profile,
* the method returns silently.
*/
protected void injectGroupPrincipals() {
// Flush the existing GroupPrincipals
m_subject.getPrincipals().removeAll(m_subject.getPrincipals(GroupPrincipal.class));
// Get the GroupManager and test for each Group
GroupManager manager = m_engine.getGroupManager();
for (Principal group : manager.getRoles()) {
if (manager.isUserInRole(this, group)) {
m_subject.getPrincipals().add(group);
}
}
}
use of org.apache.wiki.auth.authorize.GroupManager in project jspwiki by apache.
the class WikiSession method guestSession.
/**
* Static factory method that creates a new "guest" session containing a single
* user Principal {@link org.apache.wiki.auth.WikiPrincipal#GUEST},
* plus the role principals {@link Role#ALL} and
* {@link Role#ANONYMOUS}. This method also adds the session as a listener
* for GroupManager, AuthenticationManager and UserManager events.
* @param engine the wiki engine
* @return the guest wiki session
*/
public static WikiSession guestSession(WikiEngine engine) {
WikiSession session = new WikiSession();
session.m_engine = engine;
session.invalidate();
// Add the session as listener for GroupManager, AuthManager, UserManager events
GroupManager groupMgr = engine.getGroupManager();
AuthenticationManager authMgr = engine.getAuthenticationManager();
UserManager userMgr = engine.getUserManager();
groupMgr.addWikiEventListener(session);
authMgr.addWikiEventListener(session);
userMgr.addWikiEventListener(session);
return session;
}
Aggregations