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 )
{
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.server.configuration.ConfigLoader;
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.FileUserRepository;
import org.neo4j.server.security.auth.PasswordPolicy;

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

public class SetPasswordCommand implements AdminCommand
{
Expand Down Expand Up @@ -102,9 +102,8 @@ public void execute( String[] args ) throws IncorrectUsage, CommandFailed
try
{
Config config = loadNeo4jConfig( homeDir, configDir );
File authDir = config.get( auth_store_directory );
FileUserRepository userRepository =
new FileUserRepository( new File( authDir, "auth" ).toPath(), NullLogProvider.getInstance() );
Path userStoreFile = BasicAuthManagerFactory.getUserStoreFile( config );
FileUserRepository userRepository = new FileUserRepository( userStoreFile, NullLogProvider.getInstance() );
userRepository.start();
PasswordPolicy passwordPolicy = new BasicPasswordPolicy();
BasicAuthManager authManager = new BasicAuthManager( userRepository, passwordPolicy, systemUTC() );
Expand Down
Expand Up @@ -19,6 +19,10 @@
*/
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.helpers.Service;
import org.neo4j.kernel.api.security.AuthManager;
Expand All @@ -34,6 +38,23 @@
@Service.Implementation( AuthManager.Factory.class )
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
{
Config config();
Expand All @@ -54,8 +75,8 @@ public AuthManager newInstance( Config config, LogProvider logProvider )
"configuration setting auth_enabled=false" );
}

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

final PasswordPolicy passwordPolicy = new BasicPasswordPolicy();

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

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

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

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

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

public EnterpriseAuthManagerFactory()
Expand Down Expand Up @@ -83,22 +83,14 @@ public AuthManager newInstance( Config config, LogProvider logProvider )
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 );

// 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 );

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

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

0 comments on commit ecc06ab

Please sign in to comment.