use of org.apache.wiki.api.exceptions.WikiException 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.api.exceptions.WikiException in project jspwiki by apache.
the class AuthenticationManager method initialize.
/**
* Creates an AuthenticationManager instance for the given WikiEngine and
* the specified set of properties. All initialization for the modules is
* done here.
* @param engine the wiki engine
* @param props the properties used to initialize the wiki engine
* @throws WikiException if the AuthenticationManager cannot be initialized
*/
@SuppressWarnings("unchecked")
public void initialize(WikiEngine engine, Properties props) throws WikiException {
m_engine = engine;
m_storeIPAddress = TextUtil.getBooleanProperty(props, PROP_STOREIPADDRESS, m_storeIPAddress);
// Should we allow cookies for assertions? (default: yes)
m_allowsCookieAssertions = TextUtil.getBooleanProperty(props, PROP_ALLOW_COOKIE_ASSERTIONS, true);
// Should we allow cookies for authentication? (default: no)
m_allowsCookieAuthentication = TextUtil.getBooleanProperty(props, PROP_ALLOW_COOKIE_AUTH, false);
// Should we throttle logins? (default: yes)
m_throttleLogins = TextUtil.getBooleanProperty(props, PROP_LOGIN_THROTTLING, true);
// Look up the LoginModule class
String loginModuleClassName = TextUtil.getStringProperty(props, PROP_LOGIN_MODULE, DEFAULT_LOGIN_MODULE);
try {
m_loginModuleClass = (Class<? extends LoginModule>) Class.forName(loginModuleClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new WikiException("Could not instantiate LoginModule class.", e);
}
// Initialize the LoginModule options
initLoginModuleOptions(props);
}
use of org.apache.wiki.api.exceptions.WikiException in project jspwiki by apache.
the class AuthorizationManager method initialize.
/**
* Initializes AuthorizationManager with an engine and set of properties.
* Expects to find property 'jspwiki.authorizer' with a valid Authorizer
* implementation name to take care of role lookup operations.
* @param engine the wiki engine
* @param properties the set of properties used to initialize the wiki engine
* @throws WikiException if the AuthorizationManager cannot be initialized
*/
public void initialize(WikiEngine engine, Properties properties) throws WikiException {
m_engine = engine;
//
// JAAS authorization continues
//
m_authorizer = getAuthorizerImplementation(properties);
m_authorizer.initialize(engine, properties);
// Initialize local security policy
try {
String policyFileName = properties.getProperty(POLICY, DEFAULT_POLICY);
URL policyURL = AuthenticationManager.findConfigFile(engine, policyFileName);
if (policyURL != null) {
File policyFile = new File(policyURL.toURI().getPath());
log.info("We found security policy URL: " + policyURL + " and transformed it to file " + policyFile.getAbsolutePath());
m_localPolicy = new LocalPolicy(policyFile, engine.getContentEncoding());
m_localPolicy.refresh();
log.info("Initialized default security policy: " + policyFile.getAbsolutePath());
} else {
String sb = "JSPWiki was unable to initialize the default security policy (WEB-INF/jspwiki.policy) file. " + "Please ensure that the jspwiki.policy file exists in the default location. " + "This file should exist regardless of the existance of a global policy file. " + "The global policy file is identified by the java.security.policy variable. ";
WikiSecurityException wse = new WikiSecurityException(sb);
log.fatal(sb, wse);
throw wse;
}
} catch (Exception e) {
log.error("Could not initialize local security policy: " + e.getMessage());
throw new WikiException("Could not initialize local security policy: " + e.getMessage(), e);
}
}
use of org.apache.wiki.api.exceptions.WikiException in project jspwiki by apache.
the class AuthorizationManager method locateImplementation.
private Object locateImplementation(String clazz) throws WikiException {
if (clazz != null) {
try {
Class<?> authClass = ClassUtil.findClass("org.apache.wiki.auth.authorize", clazz);
Object impl = authClass.newInstance();
return impl;
} catch (ClassNotFoundException e) {
log.fatal("Authorizer " + clazz + " cannot be found", e);
throw new WikiException("Authorizer " + clazz + " cannot be found", e);
} catch (InstantiationException e) {
log.fatal("Authorizer " + clazz + " cannot be created", e);
throw new WikiException("Authorizer " + clazz + " cannot be created", e);
} catch (IllegalAccessException e) {
log.fatal("You are not allowed to access this authorizer class", e);
throw new WikiException("You are not allowed to access this authorizer class", e);
}
}
throw new NoRequiredPropertyException("Unable to find a " + PROP_AUTHORIZER + " entry in the properties.", PROP_AUTHORIZER);
}
use of org.apache.wiki.api.exceptions.WikiException in project jspwiki by apache.
the class GroupManager method actionPerformed.
/**
* Listens for {@link org.apache.wiki.event.WikiSecurityEvent#PROFILE_NAME_CHANGED}
* events. If a user profile's name changes, each group is inspected. If an entry contains
* a name that has changed, it is replaced with the new one. No group events are emitted
* as a consequence of this method, because the group memberships are still the same; it is
* only the representations of the names within that are changing.
* @param event the incoming event
*/
public void actionPerformed(WikiEvent event) {
if (!(event instanceof WikiSecurityEvent)) {
return;
}
WikiSecurityEvent se = (WikiSecurityEvent) event;
if (se.getType() == WikiSecurityEvent.PROFILE_NAME_CHANGED) {
WikiSession session = se.getSrc();
UserProfile[] profiles = (UserProfile[]) se.getTarget();
Principal[] oldPrincipals = new Principal[] { new WikiPrincipal(profiles[0].getLoginName()), new WikiPrincipal(profiles[0].getFullname()), new WikiPrincipal(profiles[0].getWikiName()) };
Principal newPrincipal = new WikiPrincipal(profiles[1].getFullname());
// Examine each group
int groupsChanged = 0;
try {
for (Group group : m_groupDatabase.groups()) {
boolean groupChanged = false;
for (Principal oldPrincipal : oldPrincipals) {
if (group.isMember(oldPrincipal)) {
group.remove(oldPrincipal);
group.add(newPrincipal);
groupChanged = true;
}
}
if (groupChanged) {
setGroup(session, group);
groupsChanged++;
}
}
} catch (WikiException e) {
// Oooo! This is really bad...
log.error("Could not change user name in Group lists because of GroupDatabase error:" + e.getMessage());
}
log.info("Profile name change for '" + newPrincipal.toString() + "' caused " + groupsChanged + " groups to change also.");
}
}
Aggregations