You are here

class LoginCookie__1_0 in RESTful 7.2

Class LoginCookie__1_0 @package Drupal\restful\Plugin\resource

Plugin annotation


@Resource(
  name = "login_cookie:1.0",
  resource = "login_cookie",
  label = "Login",
  description = "Login a user and return a JSON along with the authentication cookie.",
  authenticationTypes = {
    "basic_auth"
  },
  dataProvider = {
    "entityType": "user",
    "bundles": {
      "user"
    },
  },
  menuItem = "login",
  majorVersion = 1,
  minorVersion = 0
)

Hierarchy

Expanded class hierarchy of LoginCookie__1_0

File

src/Plugin/resource/LoginCookie__1_0.php, line 36
Contains \Drupal\restful\Plugin\resource\LoginCookie__1_0.

Namespace

Drupal\restful\Plugin\resource
View source
class LoginCookie__1_0 extends ResourceEntity implements ResourceInterface {

  /**
   * {@inheritdoc}
   */
  public function publicFields() {
    $public_fields = parent::publicFields();
    $public_fields['id']['methods'] = array();

    // Just return the hidden ID.
    return array(
      'id' => $public_fields['id'],
    );
  }

  /**
   * Overrides \RestfulBase::controllersInfo().
   */
  public function controllersInfo() {
    return array(
      '' => array(
        RequestInterface::METHOD_GET => 'loginAndRespondWithCookie',
      ),
    );
  }

  /**
   * Login a user and return a JSON along with the authentication cookie.
   *
   * @return array
   *   Array with the public fields populated.
   */
  public function loginAndRespondWithCookie() {

    // Login the user.
    $account = $this
      ->getAccount();
    $this
      ->loginUser($account);
    $user_resource = restful()
      ->getResourceManager()
      ->getPlugin('users:1.0');

    // User resource may be disabled.
    $output = $user_resource ? $user_resource
      ->view($account->uid) : array();
    if ($resource_field_collection = reset($output)) {

      /* @var $resource_field_collection \Drupal\restful\Plugin\resource\Field\ResourceFieldCollectionInterface */
      $resource_field_collection
        ->set('X-CSRF-Token', ResourceField::create(array(
        'public_name' => 'X-CSRF-Token',
        'callback' => '\\Drupal\\restful\\Plugin\\resource\\LoginCookie__1_0::getCSRFTokenValue',
      )));
    }
    return $output;
  }

  /**
   * Log the user in.
   *
   * @param object $account
   *   The user object that was retrieved by the AuthenticationManager.
   */
  public function loginUser($account) {
    global $user;
    $this->authenticationManager
      ->switchUserBack();

    // Explicitly allow a session to be saved, as it was disabled in
    // UserSessionState::switchUser. However this resource is a special one, in
    // the sense that we want to keep the user authenticated after login.
    drupal_save_session(TRUE);

    // Override the global user.
    $user = user_load($account->uid);
    $login_array = array(
      'name' => $account->name,
    );
    user_login_finalize($login_array);
  }

  /**
   * Get the CSRF token string.
   *
   * @return string
   *   The token.
   */
  public static function getCSRFTokenValue() {
    $token = array_values(restful_csrf_session_token());
    return reset($token);
  }

  /**
   * {@inheritdoc}
   */
  public function switchUserBack() {

    // We don't want to switch back in this case!
    drupal_save_session(TRUE);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigurablePluginTrait::$instanceConfiguration protected property Plugin instance configuration.
ConfigurablePluginTrait::calculateDependencies public function
ConfigurablePluginTrait::getConfiguration public function
ConfigurablePluginTrait::setConfiguration public function
LoginCookie__1_0::controllersInfo public function Overrides \RestfulBase::controllersInfo(). Overrides Resource::controllersInfo
LoginCookie__1_0::getCSRFTokenValue public static function Get the CSRF token string.
LoginCookie__1_0::loginAndRespondWithCookie public function Login a user and return a JSON along with the authentication cookie.
LoginCookie__1_0::loginUser public function Log the user in.
LoginCookie__1_0::publicFields public function Public fields. Overrides ResourceEntity::publicFields
LoginCookie__1_0::switchUserBack public function Switches the user back from the original user for the session. Overrides Resource::switchUserBack
Resource::$authenticationManager protected property The authentication manager.
Resource::$dataProvider protected property The data provider.
Resource::$enabled protected property Indicates if the resource is enabled.
Resource::$fieldDefinitions protected property The field definition object.
Resource::$path protected property The requested path.
Resource::$request protected property The current request.
Resource::access public function Determine if user can access the handler. Overrides ResourceInterface::access 1
Resource::accessByAllowOrigin protected function Checks access based on the referer header and the allowOrigin setting.
Resource::create public function Basic implementation for create. Overrides ResourceInterface::create
Resource::defaultConfiguration public function Overrides ConfigurablePluginTrait::defaultConfiguration
Resource::disable public function Disable the resource. Overrides ResourceInterface::disable
Resource::discover public function Discovery controller callback. Overrides ResourceInterface::discover
Resource::doDelete public function Shorthand method to perform a quick DELETE request. Overrides ResourceInterface::doDelete
Resource::doGet public function Shorthand method to perform a quick GET request. Overrides ResourceInterface::doGet
Resource::doPatch public function Shorthand method to perform a quick PATCH request. Overrides ResourceInterface::doPatch
Resource::doPost public function Shorthand method to perform a quick POST request. Overrides ResourceInterface::doPost
Resource::doPut public function Shorthand method to perform a quick PUT request. Overrides ResourceInterface::doPut
Resource::doWrite private function
Resource::enable public function Enable the resource. Overrides ResourceInterface::enable
Resource::getAccount public function Get the user from for request. Overrides ResourceInterface::getAccount
Resource::getControllerFromPath public function Return the controller for a given path. Overrides ResourceInterface::getControllerFromPath
Resource::getControllers public function Gets the controllers for this resource. Overrides ResourceInterface::getControllers
Resource::getDataProvider public function Gets the data provider. Overrides ResourceInterface::getDataProvider
Resource::getFieldDefinitions public function Gets the field definitions. Overrides ResourceInterface::getFieldDefinitions
Resource::getPath public function Gets the path of the resource. Overrides ResourceInterface::getPath
Resource::getRequest public function Get the request object. Overrides ResourceInterface::getRequest
Resource::getResourceMachineName public function Gets the resource machine name. Overrides ResourceInterface::getResourceMachineName
Resource::getResourceName public function Gets the resource name. Overrides ResourceInterface::getResourceName
Resource::getUrl public function Helper method; Get the URL of the resource and query strings. Overrides ResourceInterface::getUrl
Resource::getVersion public function Return array keyed with the major and minor version of the resource. Overrides ResourceInterface::getVersion
Resource::index public function Basic implementation for listing. Overrides ResourceInterface::index 1
Resource::initAuthenticationManager protected function Initializes the authentication manager and adds the appropriate providers.
Resource::isEnabled public function Checks if the resource is enabled. Overrides ResourceInterface::isEnabled
Resource::preflight protected function Adds the Allowed-Origin headers.
Resource::process public function Controller function that passes the data along and executes right action. Overrides ResourceInterface::process
Resource::remove public function Basic implementation for update. Overrides ResourceInterface::remove
Resource::replace public function Basic implementation for update. Overrides ResourceInterface::replace
Resource::setAccount public function Overrides ResourceInterface::setAccount
Resource::setDataProvider public function Sets the data provider. Overrides ResourceInterface::setDataProvider
Resource::setFieldDefinitions public function Sets the field definitions. Overrides ResourceInterface::setFieldDefinitions
Resource::setPath public function Sets the path of the resource. Overrides ResourceInterface::setPath
Resource::setPluginDefinition public function Sets the plugin definition to the provided array. Overrides ResourceInterface::setPluginDefinition
Resource::setRequest public function Sets the request object. Overrides ResourceInterface::setRequest
Resource::update public function Basic implementation for update. Overrides ResourceInterface::update
Resource::versionedUrl public function Gets a resource URL based on the current version. Overrides ResourceInterface::versionedUrl
Resource::view public function Basic implementation for view. Overrides ResourceInterface::view
ResourceEntity::$bundles protected property The entity bundles.
ResourceEntity::$entityType protected property The entity type.
ResourceEntity::dataProviderClassName protected function Data provider class. Overrides Resource::dataProviderClassName 3
ResourceEntity::dataProviderFactory public function Data provider factory. Overrides Resource::dataProviderFactory
ResourceEntity::getBundles public function Gets the entity bundle.
ResourceEntity::getEntitySelf public function Get the "self" url.
ResourceEntity::getEntityType public function Gets the entity type.
ResourceEntity::processPublicFields protected function Get the public fields with the default values applied to them. Overrides Resource::processPublicFields 2
ResourceEntity::viewModeFields protected function Get the public fields with default values based on view mode information.
ResourceEntity::__construct public function Constructs a Drupal\Component\Plugin\PluginBase object. Overrides Resource::__construct 2
ResourceInterface::IDS_SEPARATOR constant The string that separates multiple ids.