Skip to content

Commit

Permalink
Combine community and enterprise handling of auth file config
Browse files Browse the repository at this point in the history
  • Loading branch information
craigtaverner committed Aug 18, 2016
1 parent 1e5c4c0 commit ecc06ab
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 24 deletions.
Expand Up @@ -89,9 +89,5 @@ private Map<String, String> toMap( Pair<String, String>[] configOverrides )
private static void overrideEmbeddedDefaults( Map<String, String> config ) private static void overrideEmbeddedDefaults( Map<String, String> config )
{ {
config.putIfAbsent( GraphDatabaseSettings.auth_enabled.name(), "true" ); config.putIfAbsent( GraphDatabaseSettings.auth_enabled.name(), "true" );

String dataDirectory = config.getOrDefault( data_directory.name(), data_directory.getDefaultValue() );
config.putIfAbsent( GraphDatabaseSettings.auth_store.name(),
new File( dataDirectory, "dbms/auth" ).toString() );
} }
} }
Expand Up @@ -37,12 +37,12 @@
import org.neo4j.logging.NullLogProvider; import org.neo4j.logging.NullLogProvider;
import org.neo4j.server.configuration.ConfigLoader; import org.neo4j.server.configuration.ConfigLoader;
import org.neo4j.server.security.auth.BasicAuthManager; import org.neo4j.server.security.auth.BasicAuthManager;
import org.neo4j.server.security.auth.BasicAuthManagerFactory;
import org.neo4j.server.security.auth.BasicPasswordPolicy; import org.neo4j.server.security.auth.BasicPasswordPolicy;
import org.neo4j.server.security.auth.FileUserRepository; import org.neo4j.server.security.auth.FileUserRepository;
import org.neo4j.server.security.auth.PasswordPolicy; import org.neo4j.server.security.auth.PasswordPolicy;


import static java.time.Clock.systemUTC; import static java.time.Clock.systemUTC;
import static org.neo4j.dbms.DatabaseManagementSystemSettings.auth_store_directory;


public class SetPasswordCommand implements AdminCommand public class SetPasswordCommand implements AdminCommand
{ {
Expand Down Expand Up @@ -102,9 +102,8 @@ public void execute( String[] args ) throws IncorrectUsage, CommandFailed
try try
{ {
Config config = loadNeo4jConfig( homeDir, configDir ); Config config = loadNeo4jConfig( homeDir, configDir );
File authDir = config.get( auth_store_directory ); Path userStoreFile = BasicAuthManagerFactory.getUserStoreFile( config );
FileUserRepository userRepository = FileUserRepository userRepository = new FileUserRepository( userStoreFile, NullLogProvider.getInstance() );
new FileUserRepository( new File( authDir, "auth" ).toPath(), NullLogProvider.getInstance() );
userRepository.start(); userRepository.start();
PasswordPolicy passwordPolicy = new BasicPasswordPolicy(); PasswordPolicy passwordPolicy = new BasicPasswordPolicy();
BasicAuthManager authManager = new BasicAuthManager( userRepository, passwordPolicy, systemUTC() ); BasicAuthManager authManager = new BasicAuthManager( userRepository, passwordPolicy, systemUTC() );
Expand Down
Expand Up @@ -19,6 +19,10 @@
*/ */
package org.neo4j.server.security.auth; package org.neo4j.server.security.auth;


import java.io.File;
import java.nio.file.Path;

import org.neo4j.dbms.DatabaseManagementSystemSettings;
import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Service; import org.neo4j.helpers.Service;
import org.neo4j.kernel.api.security.AuthManager; import org.neo4j.kernel.api.security.AuthManager;
Expand All @@ -34,6 +38,23 @@
@Service.Implementation( AuthManager.Factory.class ) @Service.Implementation( AuthManager.Factory.class )
public class BasicAuthManagerFactory extends AuthManager.Factory public class BasicAuthManagerFactory extends AuthManager.Factory
{ {
private static final String USER_STORE_FILENAME = "auth";

public static Path getUserStoreFile( Config config )
{
// Resolve auth store file names
File authStoreDir = config.get( DatabaseManagementSystemSettings.auth_store_directory );

// Because it contains sensitive information there is a legacy setting to configure
// the location of the user store file that we still respect
File userStoreFile = config.get( GraphDatabaseSettings.auth_store );
if ( userStoreFile == null )
{
userStoreFile = new File( authStoreDir, USER_STORE_FILENAME );
}
return userStoreFile.toPath();
}

public interface Dependencies public interface Dependencies
{ {
Config config(); Config config();
Expand All @@ -54,8 +75,8 @@ public AuthManager newInstance( Config config, LogProvider logProvider )
"configuration setting auth_enabled=false" ); "configuration setting auth_enabled=false" );
} }


final UserRepository userRepository = final Path userStoreFile = getUserStoreFile( config );
new FileUserRepository( config.get( GraphDatabaseSettings.auth_store ).toPath(), logProvider ); final UserRepository userRepository = new FileUserRepository( userStoreFile, logProvider );


final PasswordPolicy passwordPolicy = new BasicPasswordPolicy(); final PasswordPolicy passwordPolicy = new BasicPasswordPolicy();


Expand Down
Expand Up @@ -22,11 +22,11 @@
import org.apache.shiro.realm.Realm; import org.apache.shiro.realm.Realm;


import java.io.File; import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;


import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.dbms.DatabaseManagementSystemSettings;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Service; import org.neo4j.helpers.Service;
import org.neo4j.kernel.api.security.AuthManager; import org.neo4j.kernel.api.security.AuthManager;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
Expand All @@ -39,14 +39,14 @@
import org.neo4j.server.security.auth.UserRepository; import org.neo4j.server.security.auth.UserRepository;


import static java.time.Clock.systemUTC; import static java.time.Clock.systemUTC;
import static org.neo4j.server.security.auth.BasicAuthManagerFactory.*;


/** /**
* Wraps EnterpriseAuthManager and exposes it as a Service * Wraps EnterpriseAuthManager and exposes it as a Service
*/ */
@Service.Implementation( AuthManager.Factory.class ) @Service.Implementation( AuthManager.Factory.class )
public class EnterpriseAuthManagerFactory extends AuthManager.Factory public class EnterpriseAuthManagerFactory extends AuthManager.Factory
{ {
private static final String USER_STORE_FILENAME = "auth";
private static final String ROLE_STORE_FILENAME = "roles"; private static final String ROLE_STORE_FILENAME = "roles";


public EnterpriseAuthManagerFactory() public EnterpriseAuthManagerFactory()
Expand Down Expand Up @@ -83,22 +83,14 @@ public AuthManager newInstance( Config config, LogProvider logProvider )
return new MultiRealmAuthManager( internalRealm, realms ); return new MultiRealmAuthManager( internalRealm, realms );
} }


private InternalFlatFileRealm createInternalRealm( Config config, LogProvider logProvider ) private static InternalFlatFileRealm createInternalRealm( Config config, LogProvider logProvider )
{ {
// Resolve auth store file names // Resolve auth store and roles file names
Path userStoreFile = getUserStoreFile( config );
File authStoreDir = config.get( DatabaseManagementSystemSettings.auth_store_directory ); File authStoreDir = config.get( DatabaseManagementSystemSettings.auth_store_directory );

// Because it contains sensitive information there is a legacy setting to configure
// the location of the user store file that we still respect
File userStoreFile = config.get( GraphDatabaseSettings.auth_store );
if ( userStoreFile == null )
{
userStoreFile = new File( authStoreDir, USER_STORE_FILENAME );
}
File roleStoreFile = new File( authStoreDir, ROLE_STORE_FILENAME ); File roleStoreFile = new File( authStoreDir, ROLE_STORE_FILENAME );


final UserRepository userRepository = final UserRepository userRepository = new FileUserRepository( userStoreFile, logProvider );
new FileUserRepository( userStoreFile.toPath(), logProvider );


final RoleRepository roleRepository = final RoleRepository roleRepository =
new FileRoleRepository( roleStoreFile.toPath(), logProvider ); new FileRoleRepository( roleStoreFile.toPath(), logProvider );
Expand Down

0 comments on commit ecc06ab

Please sign in to comment.