Search in sources :

Example 11 with WikiException

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;
}
Also used : WikiException(org.apache.wiki.api.exceptions.WikiException) RSSThread(org.apache.wiki.rss.RSSThread) WorkflowManager(org.apache.wiki.workflow.WorkflowManager) GroupManager(org.apache.wiki.auth.authorize.GroupManager) FilterManager(org.apache.wiki.api.engine.FilterManager) AdminBeanManager(org.apache.wiki.api.engine.AdminBeanManager) PluginManager(org.apache.wiki.api.engine.PluginManager) TemplateManager(org.apache.wiki.ui.TemplateManager) EditorManager(org.apache.wiki.ui.EditorManager) InternationalizationManager(org.apache.wiki.i18n.InternationalizationManager) SearchManager(org.apache.wiki.search.SearchManager) RSSGenerator(org.apache.wiki.rss.RSSGenerator) CommandResolver(org.apache.wiki.ui.CommandResolver) Date(java.util.Date) WikiException(org.apache.wiki.api.exceptions.WikiException) DecisionRequiredException(org.apache.wiki.workflow.DecisionRequiredException) NoSuchVariableException(org.apache.wiki.api.exceptions.NoSuchVariableException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) FilterException(org.apache.wiki.api.exceptions.FilterException) IOException(java.io.IOException) ProviderException(org.apache.wiki.api.exceptions.ProviderException) AuthenticationManager(org.apache.wiki.auth.AuthenticationManager) DifferenceManager(org.apache.wiki.diff.DifferenceManager) RenderingManager(org.apache.wiki.render.RenderingManager) UserManager(org.apache.wiki.auth.UserManager) ProgressManager(org.apache.wiki.ui.progress.ProgressManager) PageRenamer(org.apache.wiki.content.PageRenamer) AttachmentManager(org.apache.wiki.attachment.AttachmentManager) AuthorizationManager(org.apache.wiki.auth.AuthorizationManager) File(java.io.File)

Example 12 with WikiException

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);
}
Also used : WikiException(org.apache.wiki.api.exceptions.WikiException)

Example 13 with WikiException

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);
    }
}
Also used : WikiException(org.apache.wiki.api.exceptions.WikiException) LocalPolicy(org.freshcookies.security.policy.LocalPolicy) File(java.io.File) URL(java.net.URL) WikiException(org.apache.wiki.api.exceptions.WikiException) NoRequiredPropertyException(org.apache.wiki.api.exceptions.NoRequiredPropertyException) IOException(java.io.IOException) AccessControlException(java.security.AccessControlException)

Example 14 with WikiException

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);
}
Also used : WikiException(org.apache.wiki.api.exceptions.WikiException) NoRequiredPropertyException(org.apache.wiki.api.exceptions.NoRequiredPropertyException)

Example 15 with WikiException

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.");
    }
}
Also used : WikiSession(org.apache.wiki.WikiSession) WikiException(org.apache.wiki.api.exceptions.WikiException) UserProfile(org.apache.wiki.auth.user.UserProfile) WikiPrincipal(org.apache.wiki.auth.WikiPrincipal) WikiSecurityEvent(org.apache.wiki.event.WikiSecurityEvent) GroupPrincipal(org.apache.wiki.auth.GroupPrincipal) WikiPrincipal(org.apache.wiki.auth.WikiPrincipal) Principal(java.security.Principal)

Aggregations

WikiException (org.apache.wiki.api.exceptions.WikiException)15 Principal (java.security.Principal)5 IOException (java.io.IOException)3 WikiPage (org.apache.wiki.WikiPage)3 File (java.io.File)2 Permission (java.security.Permission)2 WikiContext (org.apache.wiki.WikiContext)2 FilterManager (org.apache.wiki.api.engine.FilterManager)2 FilterException (org.apache.wiki.api.exceptions.FilterException)2 NoRequiredPropertyException (org.apache.wiki.api.exceptions.NoRequiredPropertyException)2 ProviderException (org.apache.wiki.api.exceptions.ProviderException)2 RedirectException (org.apache.wiki.api.exceptions.RedirectException)2 GroupPrincipal (org.apache.wiki.auth.GroupPrincipal)2 WikiPrincipal (org.apache.wiki.auth.WikiPrincipal)2 UserProfile (org.apache.wiki.auth.user.UserProfile)2 DecisionRequiredException (org.apache.wiki.workflow.DecisionRequiredException)2 Test (org.junit.Test)2 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1