Skip to content

Commit

Permalink
Address feedback from PR review
Browse files Browse the repository at this point in the history
  • Loading branch information
boggle authored and systay committed Sep 14, 2016
1 parent 3402c41 commit 6a3b85c
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 25 deletions.
Expand Up @@ -30,21 +30,21 @@ public class ExecutingQuery
{ {
private final long queryId; private final long queryId;


private final String authSubjectName; private final String username;
private final String queryText; private final String queryText;
private final Map<String, Object> queryParameters; private final Map<String, Object> queryParameters;
private final long startTime; private final long startTime;


public ExecutingQuery( public ExecutingQuery(
long queryId, long queryId,
String authSubjectName, String userNameOrNull,
String queryText, String queryText,
Map<String,Object> queryParameters, Map<String,Object> queryParameters,
long startTime long startTime
) )
{ {
this.queryId = queryId; this.queryId = queryId;
this.authSubjectName = authSubjectName; this.username = userNameOrNull;
this.queryText = queryText; this.queryText = queryText;
this.queryParameters = queryParameters; this.queryParameters = queryParameters;
this.startTime = startTime; this.startTime = startTime;
Expand Down Expand Up @@ -79,9 +79,9 @@ public long kernelQueryId()
return queryId; return queryId;
} }


public String authSubjectName() public String username()
{ {
return authSubjectName; return username;
} }


public String queryText() public String queryText()
Expand All @@ -103,7 +103,7 @@ public long startTime()
public String toString() public String toString()
{ {
return format( return format(
"ExecutingQuery{queryId=%d, authSubjectName='%s', queryText='%s', queryParameters=%s, startTime=%d}", "ExecutingQuery{queryId=%d, username='%s', queryText='%s', queryParameters=%s, startTime=%d}",
queryId, authSubjectName, queryText, queryParameters, startTime ); queryId, username == null ? "<unavailable>" : username, queryText, queryParameters, startTime );
} }
} }
Expand Up @@ -30,6 +30,8 @@
import org.neo4j.kernel.api.TokenWriteOperations; import org.neo4j.kernel.api.TokenWriteOperations;
import org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException; import org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.Status;
import org.neo4j.kernel.api.security.AccessMode;
import org.neo4j.kernel.api.security.AuthSubject;
import org.neo4j.kernel.api.txstate.LegacyIndexTransactionState; import org.neo4j.kernel.api.txstate.LegacyIndexTransactionState;
import org.neo4j.kernel.api.txstate.TransactionState; import org.neo4j.kernel.api.txstate.TransactionState;
import org.neo4j.kernel.api.txstate.TxStateHolder; import org.neo4j.kernel.api.txstate.TxStateHolder;
Expand Down Expand Up @@ -201,9 +203,10 @@ final void forceClose()
} }
} }


final String authSubjectName() final String username()
{ {
return transaction.mode().name(); AccessMode mode = transaction.mode();
return ( mode instanceof AuthSubject ) ? ((AuthSubject) mode).username() : null;
} }


final ExecutingQueryList executingQueryList() final ExecutingQueryList executingQueryList()
Expand Down
Expand Up @@ -56,7 +56,7 @@ public ExecutingQuery startQueryExecution(
{ {
long queryId = lastQueryId.incrementAndGet(); long queryId = lastQueryId.incrementAndGet();
ExecutingQuery executingQuery = ExecutingQuery executingQuery =
new ExecutingQuery( queryId, statement.authSubjectName(), queryText, queryParameters, clock.millis() ); new ExecutingQuery( queryId, statement.username(), queryText, queryParameters, clock.millis() );
registerExecutingQuery( statement, executingQuery ); registerExecutingQuery( statement, executingQuery );
return executingQuery; return executingQuery;
} }
Expand Down
Expand Up @@ -115,7 +115,7 @@ public BasicAuthManager getAuthManager()
@Override @Override
public boolean hasUsername( String username ) public boolean hasUsername( String username )
{ {
return user.name().equals( username ); return username().equals( username );
} }


@Override @Override
Expand Down
Expand Up @@ -120,13 +120,7 @@ public Stream<ConnectionResult> listConnections()
public Stream<ConnectionResult> terminateConnectionsForUser( @Name( "username" ) String username ) public Stream<ConnectionResult> terminateConnectionsForUser( @Name( "username" ) String username )
throws InvalidArgumentsException throws InvalidArgumentsException
{ {
EnterpriseAuthSubject subject = EnterpriseAuthSubject.castOrFail( authSubject ); ensureSelfOrAdminEnterpriseAuthSubject( username );
if ( !subject.isAdmin() && !subject.hasUsername( username ) )
{
throw new AuthorizationViolationException( PERMISSION_DENIED );
}

subject.ensureUserExistsWithName( username );


return terminateConnectionsForValidUser( username ); return terminateConnectionsForValidUser( username );
} }
Expand All @@ -139,7 +133,7 @@ public Stream<QueryStatusResult> listQueries() throws InvalidArgumentsException,
.activeTransactions() .activeTransactions()
.stream() .stream()
.flatMap( KernelTransactionHandle::executingQueries ) .flatMap( KernelTransactionHandle::executingQueries )
.filter( ( query ) -> isAdminEnterpriseAuthSubject() || authSubject.hasUsername( query.authSubjectName() ) ) .filter( ( query ) -> isAdminEnterpriseAuthSubject() || authSubject.hasUsername( query.username() ) )
.map( this::queryStatusResult ); .map( this::queryStatusResult );
} }


Expand Down Expand Up @@ -190,10 +184,10 @@ private Stream<ExecutingQuery> executingQueriesWithId( long id, KernelTransactio
private QueryTerminationResult killQueryTransaction( Pair<KernelTransactionHandle, ExecutingQuery> pair ) private QueryTerminationResult killQueryTransaction( Pair<KernelTransactionHandle, ExecutingQuery> pair )
{ {
ExecutingQuery query = pair.other(); ExecutingQuery query = pair.other();
if ( isAdminEnterpriseAuthSubject() || authSubject.hasUsername( query.authSubjectName() ) ) if ( isAdminEnterpriseAuthSubject() || authSubject.hasUsername( query.username() ) )
{ {
pair.first().markForTermination( Status.Transaction.Terminated ); pair.first().markForTermination( Status.Transaction.Terminated );
return new QueryTerminationResult( queryId( query.kernelQueryId() ), query.authSubjectName() ); return new QueryTerminationResult( queryId( query.kernelQueryId() ), query.username() );
} }
else else
{ {
Expand Down Expand Up @@ -293,20 +287,21 @@ private EnterpriseAuthSubject ensureSelfOrAdminEnterpriseAuthSubject( String use
throws InvalidArgumentsException throws InvalidArgumentsException
{ {
EnterpriseAuthSubject subject = EnterpriseAuthSubject.castOrFail( authSubject ); EnterpriseAuthSubject subject = EnterpriseAuthSubject.castOrFail( authSubject );
subject.ensureUserExistsWithName( username );


if ( subject.isAdmin() || subject.hasUsername( username ) ) if ( subject.isAdmin() || subject.hasUsername( username ) )
{ {
subject.ensureUserExistsWithName( username );
return subject; return subject;
} }

throw new AuthorizationViolationException( PERMISSION_DENIED ); throw new AuthorizationViolationException( PERMISSION_DENIED );
} }


private QueryStatusResult queryStatusResult( ExecutingQuery q ) private QueryStatusResult queryStatusResult( ExecutingQuery q )
{ {
return new QueryStatusResult( return new QueryStatusResult(
queryId( q.kernelQueryId() ), queryId( q.kernelQueryId() ),
q.authSubjectName(), q.username(),
q.queryText(), q.queryText(),
q.queryParameters(), q.queryParameters(),
q.startTime(), q.startTime(),
Expand Down
Expand Up @@ -56,8 +56,7 @@ public Set<ManagedBoltStateMachine> getActiveConnections( String owner )
return sessions return sessions
.entrySet() .entrySet()
.stream() .stream()
.filter( entry -> entry.getValue() .filter( entry -> entry.getValue().equals( owner ) )
.equals( owner ) )
.map( Map.Entry::getKey ).collect( toSet() ); .map( Map.Entry::getKey ).collect( toSet() );
} }
} }

0 comments on commit 6a3b85c

Please sign in to comment.