This is an automated email from the ASF dual-hosted git repository. juanpablo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/jspwiki.git
commit dbee4c25e3bbc8471737c731299a10bbded71e77 Author: juanpablo <[email protected]> AuthorDate: Fri Feb 21 12:20:07 2020 +0100 Use Engine instead of WikiEngine in SecurityVerifier + Extract DummyUserDatabase to its own class --- .../org/apache/wiki/auth/DefaultUserManager.java | 111 +-------- .../org/apache/wiki/auth/SecurityVerifier.java | 265 ++++++++------------- .../apache/wiki/auth/user/DummyUserDatabase.java | 135 +++++++++++ 3 files changed, 230 insertions(+), 281 deletions(-) diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java index c2b13af..5037db3 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java @@ -32,7 +32,7 @@ import org.apache.wiki.api.exceptions.WikiException; import org.apache.wiki.api.filters.PageFilter; import org.apache.wiki.auth.permissions.AllPermission; import org.apache.wiki.auth.permissions.WikiPermission; -import org.apache.wiki.auth.user.AbstractUserDatabase; +import org.apache.wiki.auth.user.DummyUserDatabase; import org.apache.wiki.auth.user.DuplicateUserException; import org.apache.wiki.auth.user.UserDatabase; import org.apache.wiki.auth.user.UserProfile; @@ -402,115 +402,6 @@ public class DefaultUserManager implements UserManager { return getUserDatabase().getWikiNames(); } - /** - * This is a database that gets used if nothing else is available. It does nothing of note - it just mostly throws - * NoSuchPrincipalExceptions if someone tries to log in. - */ - public static class DummyUserDatabase extends AbstractUserDatabase { - - /** - * No-op. - * @param loginName the login name to delete - */ - @Override - public void deleteByLoginName( final String loginName ) { - // No operation - } - - /** - * No-op; always throws <code>NoSuchPrincipalException</code>. - * @param index the name to search for - * @return the user profile - * @throws NoSuchPrincipalException always... - */ - @Override - public UserProfile findByEmail(final String index) throws NoSuchPrincipalException { - throw new NoSuchPrincipalException("No user profiles available"); - } - - /** - * No-op; always throws <code>NoSuchPrincipalException</code>. - * @param index the name to search for - * @return the user profile - * @throws NoSuchPrincipalException always... - */ - @Override - public UserProfile findByFullName(final String index) throws NoSuchPrincipalException { - throw new NoSuchPrincipalException("No user profiles available"); - } - - /** - * No-op; always throws <code>NoSuchPrincipalException</code>. - * @param index the name to search for - * @return the user profile - * @throws NoSuchPrincipalException always... - */ - @Override - public UserProfile findByLoginName(final String index) throws NoSuchPrincipalException { - throw new NoSuchPrincipalException("No user profiles available"); - } - - /** - * No-op; always throws <code>NoSuchPrincipalException</code>. - * @param uid the unique identifier to search for - * @return the user profile - * @throws NoSuchPrincipalException always... - */ - @Override - public UserProfile findByUid( final String uid ) throws NoSuchPrincipalException { - throw new NoSuchPrincipalException("No user profiles available"); - } - /** - * No-op; always throws <code>NoSuchPrincipalException</code>. - * @param index the name to search for - * @return the user profile - * @throws NoSuchPrincipalException always... - */ - @Override - public UserProfile findByWikiName(final String index) throws NoSuchPrincipalException { - throw new NoSuchPrincipalException("No user profiles available"); - } - - /** - * No-op. - * @return a zero-length array - */ - @Override - public Principal[] getWikiNames() { - return new Principal[0]; - } - - /** - * No-op. - * - * @param engine the wiki engine - * @param props the properties used to initialize the wiki engine - */ - @Override - public void initialize( final Engine engine, final Properties props ) { - } - - /** - * No-op; always throws <code>NoSuchPrincipalException</code>. - * @param loginName the login name - * @param newName the proposed new login name - * @throws NoSuchPrincipalException always... - */ - @Override - public void rename( final String loginName, final String newName ) throws NoSuchPrincipalException { - throw new NoSuchPrincipalException("No user profiles available"); - } - - /** - * No-op. - * @param profile the user profile - */ - @Override - public void save( final UserProfile profile ) { - } - - } - // events processing ....................................................... /** diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/SecurityVerifier.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/SecurityVerifier.java index 6946732..fbe727d 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/auth/SecurityVerifier.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/SecurityVerifier.java @@ -20,8 +20,8 @@ package org.apache.wiki.auth; import org.apache.commons.lang3.ArrayUtils; import org.apache.log4j.Logger; -import org.apache.wiki.WikiEngine; import org.apache.wiki.WikiSession; +import org.apache.wiki.api.core.Engine; import org.apache.wiki.api.exceptions.WikiException; import org.apache.wiki.auth.authorize.Group; import org.apache.wiki.auth.authorize.GroupDatabase; @@ -32,6 +32,7 @@ import org.apache.wiki.auth.permissions.AllPermission; import org.apache.wiki.auth.permissions.GroupPermission; import org.apache.wiki.auth.permissions.PermissionFactory; import org.apache.wiki.auth.permissions.WikiPermission; +import org.apache.wiki.auth.user.DummyUserDatabase; import org.apache.wiki.auth.user.UserDatabase; import org.apache.wiki.auth.user.UserProfile; import org.freshcookies.security.policy.PolicyReader; @@ -60,7 +61,7 @@ import java.util.Set; */ public final class SecurityVerifier { - private WikiEngine m_engine; + private Engine m_engine; private boolean m_isSecurityPolicyConfigured = false; @@ -138,20 +139,15 @@ public final class SecurityVerifier { * @param engine the wiki engine * @param session the wiki session (typically, that of an administrator) */ - public SecurityVerifier( final WikiEngine engine, final WikiSession session ) - { - super(); + public SecurityVerifier( final Engine engine, final WikiSession session ) { m_engine = engine; m_session = session; m_session.clearMessages(); verifyJaas(); verifyPolicy(); - try - { + try { verifyPolicyAndContainerRoles(); - } - catch ( final WikiException e ) - { + } catch( final WikiException e ) { m_session.addMessage( ERROR_ROLES, e.getMessage() ); } verifyGroupDatabase(); @@ -194,12 +190,9 @@ public final class SecurityVerifier { // Calculate column widths final String colWidth; - if ( pageActions.length > 0 && roles.length > 0 ) - { - colWidth = (67f / ( pageActions.length * roles.length )) + "%"; - } - else - { + if( pageActions.length > 0 && roles.length > 0 ) { + colWidth = ( 67f / ( pageActions.length * roles.length ) ) + "%"; + } else { colWidth = "67%"; } @@ -232,14 +225,11 @@ public final class SecurityVerifier { s.append( " </tr>\n" ); // Write page permission tests first - for( final String page : pages ) - { + for( final String page : pages ) { s.append( " <tr>\n" ); s.append( " <td>PagePermission \"" + wiki + ":" + page + "\"</td>\n" ); - for( final Principal role : roles ) - { - for( final String pageAction : pageActions ) - { + for( final Principal role : roles ) { + for( final String pageAction : pageActions ) { final Permission permission = PermissionFactory.getPagePermission( wiki + ":" + page, pageAction ); s.append( printPermissionTest( permission, role, 1 ) ); } @@ -248,17 +238,13 @@ public final class SecurityVerifier { } // Now do the group tests - for( final String group : groups ) - { + for( final String group : groups ) { s.append( " <tr>\n" ); s.append( " <td>GroupPermission \"" + wiki + ":" + group + "\"</td>\n" ); - for( final Principal role : roles ) - { - for( final String groupAction : groupActions ) - { + for( final Principal role : roles ) { + for( final String groupAction : groupActions ) { Permission permission = null; - if ( groupAction != null) - { + if( groupAction != null ) { permission = new GroupPermission( wiki + ":" + group, groupAction ); } s.append( printPermissionTest( permission, role, 1 ) ); @@ -269,14 +255,11 @@ public final class SecurityVerifier { // Now check the wiki-wide permissions - final String[] wikiPerms = new String[] - { "createGroups", "createPages", "login", "editPreferences", "editProfile" }; - for( final String wikiPerm : wikiPerms ) - { + final String[] wikiPerms = new String[] { "createGroups", "createPages", "login", "editPreferences", "editProfile" }; + for( final String wikiPerm : wikiPerms ) { s.append( " <tr>\n" ); s.append( " <td>WikiPermission \"" + wiki + "\",\"" + wikiPerm + "\"</td>\n" ); - for( final Principal role : roles ) - { + for( final Principal role : roles ) { final Permission permission = new WikiPermission( wiki, wikiPerm ); s.append( printPermissionTest( permission, role, pageActions.length ) ); } @@ -304,16 +287,12 @@ public final class SecurityVerifier { * @param principal * @param cols */ - private String printPermissionTest( final Permission permission, final Principal principal, final int cols ) - { + private String printPermissionTest( final Permission permission, final Principal principal, final int cols ) { final StringBuilder s = new StringBuilder(); - if ( permission == null ) - { + if( permission == null ) { s.append( " <td colspan=\"" + cols + "\" align=\"center\" title=\"N/A\">" ); s.append( " </td>\n" ); - } - else - { + } else { final boolean allowed = verifyStaticPermission( principal, permission ); s.append( " <td colspan=\"" + cols + "\" align=\"center\" title=\"" ); s.append( allowed ? "ALLOW: " : "DENY: " ); @@ -347,15 +326,12 @@ public final class SecurityVerifier { * @return the formatted HTML table containing the result of the tests * @throws WikiException if tests fail for unexpected reasons */ - public String containerRoleTable() throws WikiException - { - - final AuthorizationManager authorizationManager = m_engine.getAuthorizationManager(); + public String containerRoleTable() throws WikiException { + final AuthorizationManager authorizationManager = m_engine.getManager( AuthorizationManager.class ); final Authorizer authorizer = authorizationManager.getAuthorizer(); // If authorizer not WebContainerAuthorizer, print error message - if ( !( authorizer instanceof WebContainerAuthorizer ) ) - { + if ( !( authorizer instanceof WebContainerAuthorizer ) ) { throw new IllegalStateException( "Authorizer should be WebContainerAuthorizer" ); } @@ -373,8 +349,7 @@ public final class SecurityVerifier { s.append( " </tr>\n" ); s.append( " <tr>\n" ); s.append( " <th>Anonymous</th>\n" ); - for( final Principal role : roles ) - { + for( final Principal role : roles ) { s.append( " <th>" + role.getName() + "</th>\n" ); } s.append( "</tr>\n" ); @@ -382,8 +357,7 @@ public final class SecurityVerifier { s.append( "<tbody>\n" ); final WebContainerAuthorizer wca = (WebContainerAuthorizer) authorizer; - for( int i = 0; i < CONTAINER_ACTIONS.length; i++ ) - { + for( int i = 0; i < CONTAINER_ACTIONS.length; i++ ) { final String action = CONTAINER_ACTIONS[i]; final String jsp = CONTAINER_JSPS[i]; @@ -433,17 +407,15 @@ public final class SecurityVerifier { } /** - * If the active Authorizer is the WebContainerAuthorizer, returns the roles - * it knows about; otherwise, a zero-length array. + * If the active Authorizer is the WebContainerAuthorizer, returns the roles it knows about; otherwise, a zero-length array. + * * @return the roles parsed from <code>web.xml</code>, or a zero-length array * @throws WikiException if the web authorizer cannot obtain the list of roles */ - public Principal[] webContainerRoles() throws WikiException - { - final Authorizer authorizer = m_engine.getAuthorizationManager().getAuthorizer(); - if ( authorizer instanceof WebContainerAuthorizer ) - { - return ( (WebContainerAuthorizer) authorizer ).getRoles(); + public Principal[] webContainerRoles() throws WikiException { + final Authorizer authorizer = m_engine.getManager( AuthorizationManager.class ).getAuthorizer(); + if ( authorizer instanceof WebContainerAuthorizer ) { + return authorizer.getRoles(); } return new Principal[0]; } @@ -455,7 +427,7 @@ public final class SecurityVerifier { */ protected void verifyPolicyAndContainerRoles() throws WikiException { - final Authorizer authorizer = m_engine.getAuthorizationManager().getAuthorizer(); + final Authorizer authorizer = m_engine.getManager( AuthorizationManager.class ).getAuthorizer(); final Principal[] containerRoles = authorizer.getRoles(); boolean missing = false; for( final Principal principal : m_policyPrincipals ) @@ -483,29 +455,21 @@ public final class SecurityVerifier { */ protected void verifyGroupDatabase() { - final GroupManager mgr = m_engine.getGroupManager(); + final GroupManager mgr = m_engine.getManager( GroupManager.class ); GroupDatabase db = null; - try - { - db = m_engine.getGroupManager().getGroupDatabase(); - } - catch ( final WikiSecurityException e ) - { + try { + db = m_engine.getManager( GroupManager.class ).getGroupDatabase(); + } catch ( final WikiSecurityException e ) { m_session.addMessage( ERROR_GROUPS, "Could not retrieve GroupManager: " + e.getMessage() ); } // Check for obvious error conditions - if ( mgr == null || db == null ) - { - if ( mgr == null ) - { - m_session.addMessage( ERROR_GROUPS, "GroupManager is null; JSPWiki could not " + - "initialize it. Check the error logs." ); + if ( mgr == null || db == null ) { + if ( mgr == null ) { + m_session.addMessage( ERROR_GROUPS, "GroupManager is null; JSPWiki could not initialize it. Check the error logs." ); } - if ( db == null ) - { - m_session.addMessage( ERROR_GROUPS, "GroupDatabase is null; JSPWiki could not " + - "initialize it. Check the error logs." ); + if ( db == null ) { + m_session.addMessage( ERROR_GROUPS, "GroupDatabase is null; JSPWiki could not initialize it. Check the error logs." ); } return; } @@ -513,61 +477,49 @@ public final class SecurityVerifier { // Everything initialized OK... // Tell user what class of database this is. - m_session.addMessage( INFO_GROUPS, "GroupDatabase is of type '" + db.getClass().getName() + - "'. It appears to be initialized properly." ); + m_session.addMessage( INFO_GROUPS, "GroupDatabase is of type '" + db.getClass().getName() + "'. It appears to be initialized properly." ); // Now, see how many groups we have. - int oldGroupCount = 0; - try - { + final int oldGroupCount; + try { final Group[] groups = db.groups(); oldGroupCount = groups.length; m_session.addMessage( INFO_GROUPS, "The group database contains " + oldGroupCount + " groups." ); - } - catch ( final WikiSecurityException e ) - { + } catch( final WikiSecurityException e ) { m_session.addMessage( ERROR_GROUPS, "Could not obtain a list of current groups: " + e.getMessage() ); return; } // Try adding a bogus group with random name final String name = "TestGroup" + System.currentTimeMillis(); - Group group = null; - try - { + final Group group; + try { // Create dummy test group group = mgr.parseGroup( name, "", true ); final Principal user = new WikiPrincipal( "TestUser" ); group.add( user ); - db.save( group, new WikiPrincipal("SecurityVerifier") ); + db.save( group, new WikiPrincipal( "SecurityVerifier" ) ); // Make sure the group saved successfully - if ( db.groups().length == oldGroupCount ) - { + if( db.groups().length == oldGroupCount ) { m_session.addMessage( ERROR_GROUPS, "Could not add a test group to the database." ); return; } m_session.addMessage( INFO_GROUPS, "The group database allows new groups to be created, as it should." ); - } - catch ( final WikiSecurityException e ) - { + } catch( final WikiSecurityException e ) { m_session.addMessage( ERROR_GROUPS, "Could not add a group to the database: " + e.getMessage() ); return; } // Now delete the group; should be back to old count - try - { + try { db.delete( group ); - if ( db.groups().length != oldGroupCount ) - { + if( db.groups().length != oldGroupCount ) { m_session.addMessage( ERROR_GROUPS, "Could not delete a test group from the database." ); return; } m_session.addMessage( INFO_GROUPS, "The group database allows groups to be deleted, as it should." ); - } - catch ( final WikiSecurityException e ) - { + } catch( final WikiSecurityException e ) { m_session.addMessage( ERROR_GROUPS, "Could not delete a test group from the database: " + e.getMessage() ); return; } @@ -581,42 +533,31 @@ public final class SecurityVerifier { * {@value org.apache.wiki.auth.AuthenticationManager#PROP_LOGIN_MODULE} * resolves to a valid class on the classpath. */ - protected void verifyJaas() - { + protected void verifyJaas() { // Verify that the specified JAAS moduie corresponds to a class we can load successfully. final String jaasClass = m_engine.getWikiProperties().getProperty( AuthenticationManager.PROP_LOGIN_MODULE ); - if ( jaasClass == null || jaasClass.length() == 0 ) - { - m_session.addMessage( ERROR_JAAS, "The value of the '" + AuthenticationManager.PROP_LOGIN_MODULE + - "' property was null or blank. This is a fatal error. This value should be set to a valid LoginModule implementation " + - "on the classpath." ); + if( jaasClass == null || jaasClass.length() == 0 ) { + m_session.addMessage( ERROR_JAAS, "The value of the '" + AuthenticationManager.PROP_LOGIN_MODULE + + "' property was null or blank. This is a fatal error. This value should be set to a valid LoginModule implementation " + + "on the classpath." ); return; } - + // See if we can find the LoginModule on the classpath Class< ? > c = null; - try - { - m_session.addMessage( INFO_JAAS, "The property '" + AuthenticationManager.PROP_LOGIN_MODULE + - "' specified the class '" + jaasClass + ".'" ); + try { + m_session.addMessage( INFO_JAAS, + "The property '" + AuthenticationManager.PROP_LOGIN_MODULE + "' specified the class '" + jaasClass + ".'" ); c = Class.forName( jaasClass ); + } catch( final ClassNotFoundException e ) { + m_session.addMessage( ERROR_JAAS, "We could not find the the class '" + jaasClass + "' on the " + "classpath. This is fatal error." ); } - catch( final ClassNotFoundException e ) - { - m_session.addMessage( ERROR_JAAS, "We could not find the the class '" + jaasClass + "' on the " + - "classpath. This is fatal error." ); - } - + // Is the specified class actually a LoginModule? - if ( LoginModule.class.isAssignableFrom( c ) ) - { - m_session.addMessage( INFO_JAAS, "We found the the class '" + jaasClass + "' on the " + - "classpath, and it is a LoginModule implementation. Good!" ); - } - else - { - m_session.addMessage( ERROR_JAAS, "We found the the class '" + jaasClass + "' on the " + - "classpath, but it does not seem to be LoginModule implementation! This is fatal error." ); + if( LoginModule.class.isAssignableFrom( c ) ) { + m_session.addMessage( INFO_JAAS, "We found the the class '" + jaasClass + "' on the classpath, and it is a LoginModule implementation. Good!" ); + } else { + m_session.addMessage( ERROR_JAAS, "We found the the class '" + jaasClass + "' on the classpath, but it does not seem to be LoginModule implementation! This is fatal error." ); } } @@ -759,22 +700,15 @@ public final class SecurityVerifier { { final Subject subject = new Subject(); subject.getPrincipals().add( principal ); - final boolean allowedByGlobalPolicy = ((Boolean) - Subject.doAsPrivileged( subject, new PrivilegedAction<Object>() - { - @Override public Object run() - { - try - { - AccessController.checkPermission( permission ); - return Boolean.TRUE; - } - catch ( final AccessControlException e ) - { - return Boolean.FALSE; - } + final boolean allowedByGlobalPolicy = (Boolean) + Subject.doAsPrivileged( subject, ( PrivilegedAction< Object > )() -> { + try { + AccessController.checkPermission( permission ); + return Boolean.TRUE; + } catch( final AccessControlException e ) { + return Boolean.FALSE; } - }, null )).booleanValue(); + }, null ); if ( allowedByGlobalPolicy ) { @@ -783,7 +717,7 @@ public final class SecurityVerifier { // Check local policy final Principal[] principals = new Principal[]{ principal }; - return m_engine.getAuthorizationManager().allowedByLocalPolicy( principals, permission ); + return m_engine.getManager( AuthorizationManager.class ).allowedByLocalPolicy( principals, permission ); } /** @@ -792,7 +726,7 @@ public final class SecurityVerifier { */ protected void verifyUserDatabase() { - final UserDatabase db = m_engine.getUserManager().getUserDatabase(); + final UserDatabase db = m_engine.getManager( UserManager.class ).getUserDatabase(); // Check for obvious error conditions if ( db == null ) @@ -802,7 +736,7 @@ public final class SecurityVerifier { return; } - if ( db instanceof UserManager.DummyUserDatabase ) + if ( db instanceof DummyUserDatabase ) { m_session.addMessage( ERROR_DB, "UserDatabase is DummyUserDatabase; JSPWiki " + "may not have been able to initialize the database you supplied in " + @@ -812,60 +746,49 @@ public final class SecurityVerifier { // Tell user what class of database this is. m_session.addMessage( INFO_DB, "UserDatabase is of type '" + db.getClass().getName() + - "'. It appears to be initialized properly." ); + "'. It appears to be initialized properly." ); // Now, see how many users we have. - int oldUserCount = 0; - try - { + final int oldUserCount; + try { final Principal[] users = db.getWikiNames(); oldUserCount = users.length; m_session.addMessage( INFO_DB, "The user database contains " + oldUserCount + " users." ); - } - catch ( final WikiSecurityException e ) - { + } catch( final WikiSecurityException e ) { m_session.addMessage( ERROR_DB, "Could not obtain a list of current users: " + e.getMessage() ); return; } // Try adding a bogus user with random name final String loginName = "TestUser" + System.currentTimeMillis(); - try - { + try { final UserProfile profile = db.newProfile(); profile.setEmail( "[email protected]" ); profile.setLoginName( loginName ); - profile.setFullname( "FullName"+loginName ); + profile.setFullname( "FullName" + loginName ); profile.setPassword( "password" ); - db.save(profile); + db.save( profile ); // Make sure the profile saved successfully - if ( db.getWikiNames().length == oldUserCount ) - { + if( db.getWikiNames().length == oldUserCount ) { m_session.addMessage( ERROR_DB, "Could not add a test user to the database." ); return; } m_session.addMessage( INFO_DB, "The user database allows new users to be created, as it should." ); - } - catch ( final WikiSecurityException e ) - { + } catch( final WikiSecurityException e ) { m_session.addMessage( ERROR_DB, "Could not add a test user to the database: " + e.getMessage() ); return; } // Now delete the profile; should be back to old count - try - { + try { db.deleteByLoginName( loginName ); - if ( db.getWikiNames().length != oldUserCount ) - { + if( db.getWikiNames().length != oldUserCount ) { m_session.addMessage( ERROR_DB, "Could not delete a test user from the database." ); return; } m_session.addMessage( INFO_DB, "The user database allows users to be deleted, as it should." ); - } - catch ( final WikiSecurityException e ) - { + } catch( final WikiSecurityException e ) { m_session.addMessage( ERROR_DB, "Could not delete a test user to the database: " + e.getMessage() ); return; } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/user/DummyUserDatabase.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/user/DummyUserDatabase.java new file mode 100644 index 0000000..af4aea6 --- /dev/null +++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/user/DummyUserDatabase.java @@ -0,0 +1,135 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ +package org.apache.wiki.auth.user; + +import org.apache.wiki.api.core.Engine; +import org.apache.wiki.auth.NoSuchPrincipalException; + +import java.security.Principal; +import java.util.Properties; + + +/** + * This is a database that gets used if nothing else is available. It does nothing of note - it just mostly throws + * NoSuchPrincipalExceptions if someone tries to log in. + */ +public class DummyUserDatabase extends AbstractUserDatabase { + + /** + * No-op. + * @param loginName the login name to delete + */ + @Override + public void deleteByLoginName( final String loginName ) { + // No operation + } + + /** + * No-op; always throws <code>NoSuchPrincipalException</code>. + * @param index the name to search for + * @return the user profile + * @throws NoSuchPrincipalException always... + */ + @Override + public UserProfile findByEmail(final String index) throws NoSuchPrincipalException { + throw new NoSuchPrincipalException("No user profiles available"); + } + + /** + * No-op; always throws <code>NoSuchPrincipalException</code>. + * @param index the name to search for + * @return the user profile + * @throws NoSuchPrincipalException always... + */ + @Override + public UserProfile findByFullName(final String index) throws NoSuchPrincipalException { + throw new NoSuchPrincipalException("No user profiles available"); + } + + /** + * No-op; always throws <code>NoSuchPrincipalException</code>. + * @param index the name to search for + * @return the user profile + * @throws NoSuchPrincipalException always... + */ + @Override + public UserProfile findByLoginName(final String index) throws NoSuchPrincipalException { + throw new NoSuchPrincipalException("No user profiles available"); + } + + /** + * No-op; always throws <code>NoSuchPrincipalException</code>. + * @param uid the unique identifier to search for + * @return the user profile + * @throws NoSuchPrincipalException always... + */ + @Override + public UserProfile findByUid( final String uid ) throws NoSuchPrincipalException { + throw new NoSuchPrincipalException("No user profiles available"); + } + /** + * No-op; always throws <code>NoSuchPrincipalException</code>. + * @param index the name to search for + * @return the user profile + * @throws NoSuchPrincipalException always... + */ + @Override + public UserProfile findByWikiName(final String index) throws NoSuchPrincipalException { + throw new NoSuchPrincipalException("No user profiles available"); + } + + /** + * No-op. + * @return a zero-length array + */ + @Override + public Principal[] getWikiNames() { + return new Principal[0]; + } + + /** + * No-op. + * + * @param engine the wiki engine + * @param props the properties used to initialize the wiki engine + */ + @Override + public void initialize( final Engine engine, final Properties props ) { + } + + /** + * No-op; always throws <code>NoSuchPrincipalException</code>. + * @param loginName the login name + * @param newName the proposed new login name + * @throws NoSuchPrincipalException always... + */ + @Override + public void rename( final String loginName, final String newName ) throws NoSuchPrincipalException { + throw new NoSuchPrincipalException("No user profiles available"); + } + + /** + * No-op. + * @param profile the user profile + */ + @Override + public void save( final UserProfile profile ) { + } + +}
