All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.neo4j.cypher.internal.logical.plans.AdministrationCommandLogicalPlan.scala Maven / Gradle / Ivy

/*
 * Copyright (c) "Neo4j"
 * Neo4j Sweden AB [http://neo4j.com]
 *
 * This file is part of Neo4j.
 *
 * Neo4j is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see .
 */
package org.neo4j.cypher.internal.logical.plans

import org.neo4j.cypher.internal.ast.Access
import org.neo4j.cypher.internal.ast.ActionResource
import org.neo4j.cypher.internal.ast.AdministrationAction
import org.neo4j.cypher.internal.ast.DatabaseAction
import org.neo4j.cypher.internal.ast.DatabaseScope
import org.neo4j.cypher.internal.ast.DbmsAction
import org.neo4j.cypher.internal.ast.DropDatabaseAdditionalAction
import org.neo4j.cypher.internal.ast.GraphAction
import org.neo4j.cypher.internal.ast.GraphScope
import org.neo4j.cypher.internal.ast.HomeDatabaseAction
import org.neo4j.cypher.internal.ast.Options
import org.neo4j.cypher.internal.ast.PrivilegeQualifier
import org.neo4j.cypher.internal.ast.Return
import org.neo4j.cypher.internal.ast.ShowPrivilegeScope
import org.neo4j.cypher.internal.ast.Statement
import org.neo4j.cypher.internal.ast.WaitUntilComplete
import org.neo4j.cypher.internal.ast.Yield
import org.neo4j.cypher.internal.expressions.Expression
import org.neo4j.cypher.internal.expressions.Parameter
import org.neo4j.cypher.internal.logical.plans.DatabaseTypeFilter.All
import org.neo4j.cypher.internal.util.attribution.IdGen
import org.neo4j.exceptions.DatabaseAdministrationException
import org.neo4j.exceptions.SecurityAdministrationException

abstract class AdministrationCommandLogicalPlan(source: Option[AdministrationCommandLogicalPlan] = None)(implicit idGen: IdGen) extends LogicalPlan(idGen) {
  override def lhs: Option[LogicalPlan] = source

  override def rhs: Option[LogicalPlan] = None

  val returnColumns: List[String] = List.empty

  override val availableSymbols: Set[String] = returnColumns.toSet

  def invalid(message: String): RuntimeException
}

abstract class DatabaseAdministrationLogicalPlan(source: Option[AdministrationCommandLogicalPlan] = None)(implicit idGen: IdGen) extends AdministrationCommandLogicalPlan(source) {
  override def invalid(message: String): DatabaseAdministrationException = new DatabaseAdministrationException(message)
}

abstract class SecurityAdministrationLogicalPlan(source: Option[AdministrationCommandLogicalPlan] = None)(implicit idGen: IdGen) extends AdministrationCommandLogicalPlan(source) {
  override def invalid(message: String): SecurityAdministrationException = new SecurityAdministrationException(message)
}

// Non-administration commands that are allowed on system database, e.g. SHOW PROCEDURES
case class AllowedNonAdministrationCommands(statement: Statement)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan

// Security administration commands
case class ShowUsers(source: PrivilegePlan, override val returnColumns: List[String], yields: Option[Yield], returns: Option[Return])
                    (implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))

case class ShowCurrentUser(override val returnColumns: List[String], yields: Option[Yield], returns: Option[Return])
                    (implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(None)

case class CreateUser(source: SecurityAdministrationLogicalPlan, userName: Either[String, Parameter], isEncryptedPassword: Boolean, initialPassword: Expression,
                      requirePasswordChange: Boolean, suspended: Option[Boolean], defaultDatabase: Option[HomeDatabaseAction])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class RenameUser(source: SecurityAdministrationLogicalPlan, fromUserName: Either[String, Parameter], toUserName: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class DropUser(source: SecurityAdministrationLogicalPlan, userName: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class AlterUser(source: SecurityAdministrationLogicalPlan, userName: Either[String, Parameter], isEncryptedPassword: Option[Boolean], initialPassword: Option[Expression],
                     requirePasswordChange: Option[Boolean], suspended: Option[Boolean], defaultDatabase: Option[HomeDatabaseAction])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class SetOwnPassword(newPassword: Expression, currentPassword: Expression)
                         (implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan

case class ShowRoles(source: PrivilegePlan,
                     withUsers: Boolean,
                     showAll: Boolean,
                     override val returnColumns: List[String],
                     yields: Option[Yield],
                     returns: Option[Return])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))

case class CreateRole(source: SecurityAdministrationLogicalPlan, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class RenameRole(source: SecurityAdministrationLogicalPlan, fromRoleName: Either[String, Parameter], toRoleName: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class DropRole(source: SecurityAdministrationLogicalPlan, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class GrantRoleToUser(source: SecurityAdministrationLogicalPlan, roleName: Either[String, Parameter], userName: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class RevokeRoleFromUser(source: SecurityAdministrationLogicalPlan, roleName: Either[String, Parameter], userNames: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class RequireRole(source: SecurityAdministrationLogicalPlan, name: Either[String, Parameter])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class CopyRolePrivileges(source: SecurityAdministrationLogicalPlan, to: Either[String, Parameter], from: Either[String, Parameter], grantDeny: String)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))

abstract class PrivilegePlan(source: Option[PrivilegePlan] = None)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(source)

object AssertAllowedDbmsActions {
  def apply(maybeSource: PrivilegePlan, action: DbmsAction)(implicit idGen: IdGen): AssertAllowedDbmsActions = AssertAllowedDbmsActions(Some(maybeSource), Seq(action))(idGen)
  def apply(action: DbmsAction)(implicit idGen: IdGen): AssertAllowedDbmsActions = AssertAllowedDbmsActions(None, Seq(action))(idGen)
}
object AssertAllowedDbmsActionsOrSelf {
  def apply(user: Either[String, Parameter], action: DbmsAction)(implicit idGen: IdGen): AssertAllowedDbmsActionsOrSelf = AssertAllowedDbmsActionsOrSelf(user, Seq(action))(idGen)
}
case class AssertAllowedDbmsActions(maybeSource: Option[PrivilegePlan], actions: Seq[DbmsAction])(implicit idGen: IdGen) extends PrivilegePlan(maybeSource)
case class AssertAllowedOneOfDbmsActions(maybeSource: Option[PrivilegePlan], actions: Seq[DbmsAction])(implicit idGen: IdGen) extends PrivilegePlan(maybeSource)
case class AssertAllowedDbmsActionsOrSelf(user: Either[String, Parameter], actions: Seq[DbmsAction])(implicit idGen: IdGen) extends PrivilegePlan
case class AssertAllowedDatabaseAction(action: DatabaseAction, database: Either[String, Parameter], maybeSource: Option[PrivilegePlan])(implicit idGen: IdGen) extends PrivilegePlan(maybeSource)
case class AssertNotCurrentUser(source: PrivilegePlan, userName: Either[String, Parameter], verb: String, violationMessage: String)(implicit idGen: IdGen) extends PrivilegePlan(Some(source))

case class AssertNotBlockedDatabaseManagement(action: AdministrationAction)(implicit idGen: IdGen) extends PrivilegePlan
case class AssertNotBlockedRemoteAliasManagement()(implicit idGen: IdGen) extends PrivilegePlan
case class AssertNotBlockedDropAlias(aliasName: Either[String,Parameter])(implicit idGen: IdGen) extends PrivilegePlan

case class GrantDbmsAction(source: PrivilegePlan, action: DbmsAction, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends PrivilegePlan(Some(source))
case class DenyDbmsAction(source: PrivilegePlan, action: DbmsAction, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends PrivilegePlan(Some(source))
case class RevokeDbmsAction(source: PrivilegePlan, action: DbmsAction, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter], revokeType: String)(implicit idGen: IdGen) extends PrivilegePlan(Some(source))

case class GrantDatabaseAction(source: PrivilegePlan, action: DatabaseAction, database: DatabaseScope, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends PrivilegePlan(Some(source))
case class DenyDatabaseAction(source: PrivilegePlan, action: DatabaseAction, database: DatabaseScope, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends PrivilegePlan(Some(source))
case class RevokeDatabaseAction(source: PrivilegePlan, action: DatabaseAction, database: DatabaseScope, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter], revokeType: String)(implicit idGen: IdGen) extends PrivilegePlan(Some(source))

case class GrantGraphAction(source: PrivilegePlan, action: GraphAction, resource: ActionResource, graph: GraphScope, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends PrivilegePlan(Some(source))
case class DenyGraphAction(source: PrivilegePlan, action: GraphAction, resource: ActionResource, graph: GraphScope, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter])(implicit idGen: IdGen) extends PrivilegePlan(Some(source))
case class RevokeGraphAction(source: PrivilegePlan, action: GraphAction, resource: ActionResource, graph: GraphScope, qualifier: PrivilegeQualifier, roleName: Either[String, Parameter], revokeType: String)(implicit idGen: IdGen) extends PrivilegePlan(Some(source))

case class ShowPrivileges(source: Option[PrivilegePlan],
                          scope: ShowPrivilegeScope,
                          override val returnColumns: List[String],
                          yields: Option[Yield],
                          returns: Option[Return])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(source)

case class ShowPrivilegeCommands(source: Option[PrivilegePlan],
                                 scope: ShowPrivilegeScope,
                                 asRevoke: Boolean,
                                 override val returnColumns: List[String],
                                 yields: Option[Yield],
                                 returns: Option[Return])(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(source)

case class LogSystemCommand(source: AdministrationCommandLogicalPlan, command: String)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class DoNothingIfNotExists(source: PrivilegePlan, label: String, name: Either[String, Parameter], operation: String, valueMapper: String => String = s => s)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class DoNothingIfExists(source: PrivilegePlan, label: String, name: Either[String, Parameter], valueMapper: String => String = s => s)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class DoNothingIfDatabaseNotExists(source: PrivilegePlan, name: Either[String, Parameter], operation: String, valueMapper: String => String = s => s, databaseTypeFilter: DatabaseTypeFilter = All)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class DoNothingIfDatabaseExists(source: PrivilegePlan, name: Either[String, Parameter], valueMapper: String => String = s => s, databaseTypeFilter: DatabaseTypeFilter = All)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))
case class EnsureNodeExists(source: PrivilegePlan,
                            label: String,
                            name: Either[String, Parameter],
                            valueMapper: String => String = s => s,
                            extraFilter: String => String = _ => "",
                            labelDescription: String,
                            action:String)(implicit idGen: IdGen) extends SecurityAdministrationLogicalPlan(Some(source))

// Database administration commands
case class ShowDatabase(scope: DatabaseScope,
                        verbose: Boolean,
                        override val returnColumns: List[String],
                        yields: Option[Yield],
                        returns: Option[Return])(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan

case class CreateDatabase(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter], options: Options)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))
case class DropDatabase(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter], additionalAction: DropDatabaseAdditionalAction)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))
case class AlterDatabase(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter], access: Access)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))
case class StartDatabase(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter])(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))
case class StopDatabase(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter])(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

case class CreateLocalDatabaseAlias(source: AdministrationCommandLogicalPlan,
                                    aliasName: Either[String, Parameter],
                                    targetName: Either[String, Parameter],
                                    replace: Boolean)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

case class CreateRemoteDatabaseAlias(source: AdministrationCommandLogicalPlan,
                                     aliasName: Either[String, Parameter],
                                     targetName: Either[String, Parameter],
                                     replace: Boolean,
                                     url: Either[String, Parameter],
                                     username: Either[String, Parameter],
                                     password: Expression,
                                     driverSettings: Option[Either[Map[String, Expression], Parameter]])
                                    (implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

case class DropDatabaseAlias(source: AdministrationCommandLogicalPlan, aliasName: Either[String, Parameter])
                            (implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

case class AlterLocalDatabaseAlias(source: AdministrationCommandLogicalPlan, aliasName: Either[String, Parameter], targetName: Either[String, Parameter])
                                  (implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

case class AlterRemoteDatabaseAlias(source: AdministrationCommandLogicalPlan,
                                    aliasName: Either[String, Parameter],
                                    targetName: Option[Either[String, Parameter]],
                                    url: Option[Either[String, Parameter]],
                                    username: Option[Either[String, Parameter]],
                                    password: Option[Expression],
                                    driverSettings: Option[Either[Map[String, Expression], Parameter]])
                                   (implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

case class ShowAliases(source: AdministrationCommandLogicalPlan,
                       verbose: Boolean,
                       override val returnColumns: List[String],
                       yields: Option[Yield],
                       returns: Option[Return])(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan

case class EnsureValidNonSystemDatabase(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter], action: String, aliasName: Option[Either[String, Parameter]] = None)(implicit idGen: IdGen)
  extends DatabaseAdministrationLogicalPlan(Some(source))
case class EnsureDatabaseHasNoAliases(source: AdministrationCommandLogicalPlan, databaseName: Either[String, Parameter])(implicit idGen: IdGen)
  extends DatabaseAdministrationLogicalPlan(Some(source))
case class EnsureAliasIsNotRemote(source: AdministrationCommandLogicalPlan, aliasName: Either[String, Parameter])(implicit idGen: IdGen)
  extends DatabaseAdministrationLogicalPlan(Some(source))
case class EnsureValidNumberOfDatabases(source: CreateDatabase)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))
case class WaitForCompletion(source: AdministrationCommandLogicalPlan,
                             databaseName: Either[String, Parameter],
                             waitForCompletion: WaitUntilComplete)(implicit idGen: IdGen) extends DatabaseAdministrationLogicalPlan(Some(source))

sealed trait DatabaseTypeFilter

object DatabaseTypeFilter {
  case object All extends DatabaseTypeFilter

  case object DatabaseOrLocalAlias extends DatabaseTypeFilter
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy