Search in sources :

Example 11 with SystemProcedure

use of org.neo4j.kernel.api.procedure.SystemProcedure in project neo4j by neo4j.

the class AuthProcedures method listUsers.

@SystemProcedure
@Deprecated
@Description("List all native users.")
@Procedure(name = "dbms.security.listUsers", mode = READ, deprecatedBy = "Administration command: SHOW USERS")
public Stream<UserResult> listUsers() throws ProcedureException {
    var query = "SHOW USERS";
    List<UserResult> result = new ArrayList<>();
    try {
        Result execute = transaction.execute(query);
        execute.accept(row -> {
            var username = row.getString("user");
            var changeRequired = row.getBoolean("passwordChangeRequired");
            result.add(new UserResult(username, changeRequired));
            return true;
        });
    } catch (Exception e) {
        translateException(e, "dbms.security.listUsers");
    }
    if (result.isEmpty()) {
        return showCurrentUser();
    }
    return result.stream();
}
Also used : ArrayList(java.util.ArrayList) ProcedureException(org.neo4j.internal.kernel.api.exceptions.ProcedureException) Result(org.neo4j.graphdb.Result) Description(org.neo4j.procedure.Description) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Procedure(org.neo4j.procedure.Procedure)

Example 12 with SystemProcedure

use of org.neo4j.kernel.api.procedure.SystemProcedure in project neo4j by neo4j.

the class BuiltInProcedures method indexDetails.

@Deprecated(since = "4.2.0", forRemoval = true)
@SystemProcedure
@Description("Detailed description of specific index.")
@Procedure(name = "db.indexDetails", mode = READ, deprecatedBy = "SHOW INDEXES YIELD * command")
public Stream<IndexDetailResult> indexDetails(@Name("indexName") String indexName) throws ProcedureException {
    if (callContext.isSystemDatabase()) {
        return Stream.empty();
    }
    TokenRead tokenRead = kernelTransaction.tokenRead();
    IndexingService indexingService = resolver.resolveDependency(IndexingService.class);
    SchemaReadCore schemaRead = kernelTransaction.schemaRead().snapshot();
    List<IndexDescriptor> indexes = asList(schemaRead.indexesGetAll());
    IndexDescriptor index = null;
    for (IndexDescriptor candidate : indexes) {
        if (candidate.getName().equals(indexName)) {
            index = candidate;
            break;
        }
    }
    if (index == null) {
        throw new ProcedureException(Status.Schema.IndexNotFound, "Could not find index with name \"" + indexName + "\"");
    }
    final IndexDetailResult indexDetailResult = asIndexDetails(tokenRead, schemaRead, index);
    return Stream.of(indexDetailResult);
}
Also used : IndexingService(org.neo4j.kernel.impl.api.index.IndexingService) ProcedureException(org.neo4j.internal.kernel.api.exceptions.ProcedureException) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) TokenRead(org.neo4j.internal.kernel.api.TokenRead) SchemaReadCore(org.neo4j.internal.kernel.api.SchemaReadCore) Description(org.neo4j.procedure.Description) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Procedure(org.neo4j.procedure.Procedure)

Example 13 with SystemProcedure

use of org.neo4j.kernel.api.procedure.SystemProcedure in project neo4j by neo4j.

the class BuiltInDbmsProcedures method listClientConfig.

@Internal
@SystemProcedure
@Description("Return config settings interesting to clients (e.g. Neo4j Browser)")
@Procedure(name = "dbms.clientConfig", mode = DBMS)
public Stream<ConfigResult> listClientConfig() {
    List<ConfigResult> results = new ArrayList<>();
    Set<String> browserSettings = Stream.of("browser.allow_outgoing_connections", "browser.credential_timeout", "browser.retain_connection_credentials", "browser.retain_editor_history", "dbms.security.auth_enabled", "browser.remote_content_hostname_whitelist", "browser.post_connect_cmd", "dbms.default_database").collect(Collectors.toCollection(HashSet::new));
    Config config = graph.getDependencyResolver().resolveDependency(Config.class);
    config.getValues().forEach((setting, value) -> {
        if (browserSettings.contains(setting.name().toLowerCase())) {
            results.add(new ConfigResult(setting, value));
        }
    });
    return results.stream().sorted(Comparator.comparing(c -> c.name));
}
Also used : SystemGraphComponent(org.neo4j.dbms.database.SystemGraphComponent) Log(org.neo4j.logging.Log) StoreIdProvider(org.neo4j.storageengine.api.StoreIdProvider) Status(org.neo4j.kernel.api.exceptions.Status) FunctionInformation(org.neo4j.kernel.impl.query.FunctionInformation) Config(org.neo4j.configuration.Config) ProcedureException(org.neo4j.internal.kernel.api.exceptions.ProcedureException) ProceduresTimeFormatHelper.formatTime(org.neo4j.procedure.builtin.ProceduresTimeFormatHelper.formatTime) ProcedureCallFailed(org.neo4j.kernel.api.exceptions.Status.Procedure.ProcedureCallFailed) InternalTransaction(org.neo4j.kernel.impl.coreapi.InternalTransaction) FabricTransaction(org.neo4j.fabric.transaction.FabricTransaction) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Collections.singletonList(java.util.Collections.singletonList) Capability(org.neo4j.capabilities.Capability) UserFunctionSignature(org.neo4j.internal.kernel.api.procs.UserFunctionSignature) Map(java.util.Map) SecurityContext(org.neo4j.internal.kernel.api.security.SecurityContext) ExecutingQuery(org.neo4j.kernel.api.query.ExecutingQuery) NamedDatabaseId(org.neo4j.kernel.database.NamedDatabaseId) Transaction(org.neo4j.graphdb.Transaction) Procedure(org.neo4j.procedure.Procedure) DatabaseIdRepository(org.neo4j.kernel.database.DatabaseIdRepository) Dependencies(org.neo4j.collection.Dependencies) TrackedNetworkConnection(org.neo4j.kernel.api.net.TrackedNetworkConnection) Set(java.util.Set) SHOW_TRANSACTION(org.neo4j.internal.kernel.api.security.PrivilegeAction.SHOW_TRANSACTION) Collectors(java.util.stream.Collectors) ZoneId(java.time.ZoneId) DatabaseContext(org.neo4j.dbms.database.DatabaseContext) Internal(org.neo4j.procedure.Internal) String.format(java.lang.String.format) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) List(java.util.List) Stream(java.util.stream.Stream) UserSegment(org.neo4j.internal.kernel.api.security.UserSegment) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) Optional(java.util.Optional) Name(org.neo4j.procedure.Name) StoreIdDecodeUtils.decodeId(org.neo4j.procedure.builtin.StoreIdDecodeUtils.decodeId) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) Admin(org.neo4j.procedure.Admin) DatabaseManager(org.neo4j.dbms.database.DatabaseManager) FabricStatementLifecycles(org.neo4j.fabric.executor.FabricStatementLifecycles) KernelTransactions(org.neo4j.kernel.impl.api.KernelTransactions) QueryExecutionEngine(org.neo4j.kernel.impl.query.QueryExecutionEngine) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) Context(org.neo4j.procedure.Context) UNINITIALIZED(org.neo4j.dbms.database.SystemGraphComponent.Status.UNINITIALIZED) HashMap(java.util.HashMap) CapabilitiesService(org.neo4j.capabilities.CapabilitiesService) SYSTEM_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.SYSTEM_DATABASE_NAME) ArrayList(java.util.ArrayList) GlobalProcedures(org.neo4j.kernel.api.procedure.GlobalProcedures) HashSet(java.util.HashSet) WRITE(org.neo4j.procedure.Mode.WRITE) SystemGraphComponents(org.neo4j.dbms.database.SystemGraphComponents) Objects.requireNonNull(java.util.Objects.requireNonNull) DBMS(org.neo4j.procedure.Mode.DBMS) DependencyResolver(org.neo4j.common.DependencyResolver) TransactionManager(org.neo4j.fabric.transaction.TransactionManager) QuerySnapshot(org.neo4j.kernel.api.query.QuerySnapshot) REQUIRES_UPGRADE(org.neo4j.dbms.database.SystemGraphComponent.Status.REQUIRES_UPGRADE) READ(org.neo4j.procedure.Mode.READ) InvalidArgumentsException(org.neo4j.kernel.api.exceptions.InvalidArgumentsException) Description(org.neo4j.procedure.Description) KernelTransactionHandle(org.neo4j.kernel.api.KernelTransactionHandle) TERMINATE_TRANSACTION(org.neo4j.internal.kernel.api.security.PrivilegeAction.TERMINATE_TRANSACTION) ProcedureCallContext(org.neo4j.internal.kernel.api.procs.ProcedureCallContext) Collectors.toList(java.util.stream.Collectors.toList) NetworkConnectionTracker(org.neo4j.kernel.api.net.NetworkConnectionTracker) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) ProcedureSignature(org.neo4j.internal.kernel.api.procs.ProcedureSignature) ALL(org.neo4j.internal.kernel.api.security.AdminActionOnResource.DatabaseScope.ALL) Comparator(java.util.Comparator) AdminActionOnResource(org.neo4j.internal.kernel.api.security.AdminActionOnResource) Collections(java.util.Collections) DatabaseScope(org.neo4j.internal.kernel.api.security.AdminActionOnResource.DatabaseScope) Config(org.neo4j.configuration.Config) ArrayList(java.util.ArrayList) Description(org.neo4j.procedure.Description) Internal(org.neo4j.procedure.Internal) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Procedure(org.neo4j.procedure.Procedure)

Example 14 with SystemProcedure

use of org.neo4j.kernel.api.procedure.SystemProcedure in project neo4j by neo4j.

the class BuiltInDbmsProcedures method killQueries.

@SystemProcedure
@Description("Kill all transactions executing a query with any of the given query ids.")
@Procedure(name = "dbms.killQueries", mode = DBMS)
public Stream<QueryTerminationResult> killQueries(@Name("ids") List<String> idTexts) throws InvalidArgumentsException {
    DatabaseManager<DatabaseContext> databaseManager = getDatabaseManager();
    DatabaseIdRepository databaseIdRepository = databaseManager.databaseIdRepository();
    Map<Long, QueryId> queryIds = new HashMap<>(idTexts.size());
    for (String idText : idTexts) {
        QueryId id = QueryId.parse(idText);
        queryIds.put(id.internalId(), id);
    }
    List<QueryTerminationResult> result = new ArrayList<>(queryIds.size());
    for (FabricTransaction tx : getFabricTransactions()) {
        for (ExecutingQuery query : getActiveFabricQueries(tx)) {
            QueryId givenQueryId = queryIds.remove(query.internalQueryId());
            if (givenQueryId != null) {
                result.add(killFabricQueryTransaction(givenQueryId, tx, query));
            }
        }
    }
    for (Map.Entry<NamedDatabaseId, DatabaseContext> databaseEntry : databaseManager.registeredDatabases().entrySet()) {
        NamedDatabaseId databaseId = databaseEntry.getKey();
        DatabaseContext databaseContext = databaseEntry.getValue();
        if (databaseContext.database().isStarted()) {
            for (KernelTransactionHandle tx : getExecutingTransactions(databaseContext)) {
                if (tx.executingQuery().isPresent()) {
                    QueryId givenQueryId = queryIds.remove(tx.executingQuery().get().internalQueryId());
                    if (givenQueryId != null) {
                        result.add(killQueryTransaction(givenQueryId, tx, databaseId));
                    }
                }
            }
        }
    }
    // Add error about the rest
    for (QueryId queryId : queryIds.values()) {
        result.add(new QueryFailedTerminationResult(queryId, "n/a", "No Query found with this id"));
    }
    return result.stream();
}
Also used : HashMap(java.util.HashMap) DatabaseIdRepository(org.neo4j.kernel.database.DatabaseIdRepository) ArrayList(java.util.ArrayList) FabricTransaction(org.neo4j.fabric.transaction.FabricTransaction) KernelTransactionHandle(org.neo4j.kernel.api.KernelTransactionHandle) DatabaseContext(org.neo4j.dbms.database.DatabaseContext) ExecutingQuery(org.neo4j.kernel.api.query.ExecutingQuery) NamedDatabaseId(org.neo4j.kernel.database.NamedDatabaseId) Map(java.util.Map) HashMap(java.util.HashMap) Description(org.neo4j.procedure.Description) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Procedure(org.neo4j.procedure.Procedure)

Example 15 with SystemProcedure

use of org.neo4j.kernel.api.procedure.SystemProcedure in project neo4j by neo4j.

the class BuiltInDbmsProcedures method upgrade.

@Admin
@SystemProcedure
@Description("Upgrade the system database schema if it is not the current schema.")
@Procedure(name = "dbms.upgrade", mode = WRITE)
public Stream<SystemGraphComponentUpgradeResult> upgrade() throws ProcedureException {
    if (!callContext.isSystemDatabase()) {
        throw new ProcedureException(ProcedureCallFailed, "This is an administration command and it should be executed against the system database: dbms.upgrade");
    }
    SystemGraphComponents versions = systemGraphComponents;
    SystemGraphComponent.Status status = versions.detect(transaction);
    // New components are not currently initialised in cluster deployment when new binaries are booted on top of an existing database.
    // This is a known shortcoming of the lifecycle and a state transfer from UNINITIALIZED to CURRENT must be supported
    // as a workaround until it is fixed.
    var upgradableStatuses = List.of(REQUIRES_UPGRADE, UNINITIALIZED);
    if (upgradableStatuses.contains(status)) {
        ArrayList<String> failed = new ArrayList<>();
        versions.forEach(component -> {
            SystemGraphComponent.Status initialStatus = component.detect(transaction);
            if (upgradableStatuses.contains(initialStatus)) {
                try {
                    component.upgradeToCurrent(graph);
                } catch (Exception e) {
                    failed.add(String.format("[%s] %s", component.componentName(), e.getMessage()));
                }
            }
        });
        String upgradeResult = failed.isEmpty() ? "Success" : "Failed: " + String.join(", ", failed);
        return Stream.of(new SystemGraphComponentUpgradeResult(versions.detect(transaction).name(), upgradeResult));
    } else {
        return Stream.of(new SystemGraphComponentUpgradeResult(status.name(), status.resolution()));
    }
}
Also used : SystemGraphComponents(org.neo4j.dbms.database.SystemGraphComponents) SystemGraphComponent(org.neo4j.dbms.database.SystemGraphComponent) ArrayList(java.util.ArrayList) ProcedureException(org.neo4j.internal.kernel.api.exceptions.ProcedureException) ProcedureException(org.neo4j.internal.kernel.api.exceptions.ProcedureException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) InvalidArgumentsException(org.neo4j.kernel.api.exceptions.InvalidArgumentsException) Description(org.neo4j.procedure.Description) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Procedure(org.neo4j.procedure.Procedure) Admin(org.neo4j.procedure.Admin)

Aggregations

SystemProcedure (org.neo4j.kernel.api.procedure.SystemProcedure)20 Procedure (org.neo4j.procedure.Procedure)20 Description (org.neo4j.procedure.Description)19 ArrayList (java.util.ArrayList)13 HashMap (java.util.HashMap)11 ProcedureException (org.neo4j.internal.kernel.api.exceptions.ProcedureException)11 ZoneId (java.time.ZoneId)10 Map (java.util.Map)10 Admin (org.neo4j.procedure.Admin)10 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)9 InternalTransaction (org.neo4j.kernel.impl.coreapi.InternalTransaction)9 QueryExecutionEngine (org.neo4j.kernel.impl.query.QueryExecutionEngine)9 Comparator (java.util.Comparator)8 List (java.util.List)8 Collectors (java.util.stream.Collectors)8 Stream (java.util.stream.Stream)8 DependencyResolver (org.neo4j.common.DependencyResolver)8 Config (org.neo4j.configuration.Config)8 GraphDatabaseSettings (org.neo4j.configuration.GraphDatabaseSettings)8 DatabaseContext (org.neo4j.dbms.database.DatabaseContext)8