Loading simple_oauth.install +80 −36 Original line number Diff line number Diff line Loading @@ -9,8 +9,9 @@ use Drupal\Core\Config\FileStorage; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\simple_oauth\Entity\Oauth2ScopeEntityAdapter; use Drupal\simple_oauth\Plugin\Oauth2GrantManager; use Drupal\simple_oauth\Entity\Oauth2Scope; use Drupal\simple_oauth\Oauth2ScopeInterface; /** * Define the default batch size. Loading Loading @@ -131,23 +132,10 @@ function simple_oauth_update_8601() { ->save(); } /** * Enable all grant types for existing consumers. */ function simple_oauth_update_8602() { $consumers = \Drupal::entityTypeManager()->getStorage('consumer')->loadMultiple(); $grant_types = array_keys(Oauth2GrantManager::getAvailablePluginsAsOptions()); foreach ($consumers as $consumer) { $consumer ->set('grant_types', $grant_types) ->save(); } } /** * Install new config entity type "oauth2_scope". */ function simple_oauth_update_8603() { function simple_oauth_update_8602() { $type_manager = \Drupal::entityTypeManager(); $type_manager->clearCachedDefinitions(); $entity_type = $type_manager->getDefinition('oauth2_scope'); Loading @@ -157,7 +145,7 @@ function simple_oauth_update_8603() { /** * Install/update/delete BaseFields for the consumer entity. */ function simple_oauth_update_8604() { function simple_oauth_update_8603() { $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); $entity_type_id = 'consumer'; $provider = 'simple_oauth'; Loading Loading @@ -211,6 +199,18 @@ function simple_oauth_update_8604() { // Update fields. $update_field_definitions['confidential'] = $entity_definition_update_manager->getFieldStorageDefinition('confidential', $entity_type_id); $update_field_definitions['confidential']->setTranslatable(FALSE); $database = \Drupal::database(); $redirect_values = $database->select('consumer_field_data', 'c') ->fields('c', ['id', 'redirect']) ->isNotNull('c.redirect') ->execute() ->fetchAllKeyed(); // Remove data from the storage. $database->update('consumer_field_data') ->fields(['redirect' => NULL]) ->execute(); $update_field_definitions['redirect'] = $entity_definition_update_manager->getFieldStorageDefinition('redirect', $entity_type_id); $update_field_definitions['redirect'] ->setLabel(new TranslatableMarkup('Redirect URIs')) Loading @@ -218,6 +218,7 @@ function simple_oauth_update_8604() { ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) ->setRequired(TRUE) ->addConstraint('Oauth2RedirectUri'); $update_field_definitions['pkce'] = $entity_definition_update_manager->getFieldStorageDefinition('pkce', $entity_type_id); $update_field_definitions['pkce']->setTranslatable(FALSE); Loading @@ -225,8 +226,69 @@ function simple_oauth_update_8604() { $entity_definition_update_manager->updateFieldStorageDefinition($field_definition); } // Remove field. $roles_field_definition = $entity_definition_update_manager->getFieldStorageDefinition('roles', $entity_type_id); // Migrate redirect values. $insert_query = $database->insert('consumer__redirect') ->fields(['bundle', 'deleted', 'entity_id', 'revision_id', 'langcode', 'delta', 'redirect_value']); foreach ($redirect_values as $id => $redirect_value) { $insert_query->values(['consumer', 0, $id, $id, 'en', 0, $redirect_value]); } $insert_query->execute(); } /** * Migrate roles used as scope and migrate settings to the consumer. */ function simple_oauth_update_8604() { $scopes = []; $consumers = \Drupal::entityTypeManager()->getStorage('consumer')->loadMultiple(); $grant_types = array_keys(Oauth2GrantManager::getAvailablePluginsAsOptions()); $config = \Drupal::configFactory()->get('simple_oauth.settings'); $database = \Drupal::database(); $roles_ids = $database->select('consumer__roles', 'r') ->fields('r', ['entity_id', 'roles_target_id']) ->execute() ->fetchAllKeyed(); foreach ($consumers as $consumer) { $scopes_to_reference = []; foreach ($roles_ids as $entity_id => $role_id) { if ($entity_id !== (int) $consumer->id()) { continue; } /** @var \Drupal\user\RoleInterface $role */ $role = \Drupal::entityTypeManager()->getStorage('user_role')->load($role_id); if (!isset($scopes[$role->id()])) { $scope = Oauth2Scope::create([ 'name' => $role->id(), 'description' => $role->label(), 'grant_types' => [ 'authorization_code' => ['status' => TRUE], 'client_credentials' => ['status' => TRUE], 'refresh_token' => ['status' => TRUE], ], 'granularity' => Oauth2ScopeInterface::GRANULARITY_ROLE, 'role' => $role->id(), ]); $scope->save(); $scopes[$role->id()] = $scope; } $scopes_to_reference[] = $scopes[$role->id()]->id(); } $consumer ->set('scopes', $scopes_to_reference) ->set('grant_types', $grant_types) ->set('remember_approval', (bool) $config->get('remember_clients')) ->set('access_token_expiration', $config->get('access_token_expiration')) ->set('refresh_token_expiration', $config->get('refresh_token_expiration')) ->save(); } // Remove roles field. $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); $roles_field_definition = $entity_definition_update_manager->getFieldStorageDefinition('roles', 'consumer'); $entity_definition_update_manager->uninstallFieldStorageDefinition($roles_field_definition); } Loading @@ -252,21 +314,3 @@ function simple_oauth_update_8605() { ->setTranslatable(FALSE); $entity_definition_update_manager->installFieldStorageDefinition($field_name, $entity_type_id, $provider, $field_definition); } /** * Migrate OAuth2 settings to the consumer entity. */ function simple_oauth_update_8606() { $config = \Drupal::configFactory()->get('simple_oauth.settings'); $remember_clients = (bool) $config->get('remember_clients'); $access_token_expiration = $config->get('access_token_expiration'); $refresh_token_expiration = $config->get('refresh_token_expiration'); $consumer_storage = \Drupal::entityTypeManager()->getStorage('consumer'); foreach ($consumer_storage->loadMultiple() as $consumer) { $consumer->set('remember_approval', $remember_clients); $consumer->set('access_token_expiration', $access_token_expiration); $consumer->set('refresh_token_expiration', $refresh_token_expiration); $consumer->save(); } } Loading
simple_oauth.install +80 −36 Original line number Diff line number Diff line Loading @@ -9,8 +9,9 @@ use Drupal\Core\Config\FileStorage; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\simple_oauth\Entity\Oauth2ScopeEntityAdapter; use Drupal\simple_oauth\Plugin\Oauth2GrantManager; use Drupal\simple_oauth\Entity\Oauth2Scope; use Drupal\simple_oauth\Oauth2ScopeInterface; /** * Define the default batch size. Loading Loading @@ -131,23 +132,10 @@ function simple_oauth_update_8601() { ->save(); } /** * Enable all grant types for existing consumers. */ function simple_oauth_update_8602() { $consumers = \Drupal::entityTypeManager()->getStorage('consumer')->loadMultiple(); $grant_types = array_keys(Oauth2GrantManager::getAvailablePluginsAsOptions()); foreach ($consumers as $consumer) { $consumer ->set('grant_types', $grant_types) ->save(); } } /** * Install new config entity type "oauth2_scope". */ function simple_oauth_update_8603() { function simple_oauth_update_8602() { $type_manager = \Drupal::entityTypeManager(); $type_manager->clearCachedDefinitions(); $entity_type = $type_manager->getDefinition('oauth2_scope'); Loading @@ -157,7 +145,7 @@ function simple_oauth_update_8603() { /** * Install/update/delete BaseFields for the consumer entity. */ function simple_oauth_update_8604() { function simple_oauth_update_8603() { $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); $entity_type_id = 'consumer'; $provider = 'simple_oauth'; Loading Loading @@ -211,6 +199,18 @@ function simple_oauth_update_8604() { // Update fields. $update_field_definitions['confidential'] = $entity_definition_update_manager->getFieldStorageDefinition('confidential', $entity_type_id); $update_field_definitions['confidential']->setTranslatable(FALSE); $database = \Drupal::database(); $redirect_values = $database->select('consumer_field_data', 'c') ->fields('c', ['id', 'redirect']) ->isNotNull('c.redirect') ->execute() ->fetchAllKeyed(); // Remove data from the storage. $database->update('consumer_field_data') ->fields(['redirect' => NULL]) ->execute(); $update_field_definitions['redirect'] = $entity_definition_update_manager->getFieldStorageDefinition('redirect', $entity_type_id); $update_field_definitions['redirect'] ->setLabel(new TranslatableMarkup('Redirect URIs')) Loading @@ -218,6 +218,7 @@ function simple_oauth_update_8604() { ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) ->setRequired(TRUE) ->addConstraint('Oauth2RedirectUri'); $update_field_definitions['pkce'] = $entity_definition_update_manager->getFieldStorageDefinition('pkce', $entity_type_id); $update_field_definitions['pkce']->setTranslatable(FALSE); Loading @@ -225,8 +226,69 @@ function simple_oauth_update_8604() { $entity_definition_update_manager->updateFieldStorageDefinition($field_definition); } // Remove field. $roles_field_definition = $entity_definition_update_manager->getFieldStorageDefinition('roles', $entity_type_id); // Migrate redirect values. $insert_query = $database->insert('consumer__redirect') ->fields(['bundle', 'deleted', 'entity_id', 'revision_id', 'langcode', 'delta', 'redirect_value']); foreach ($redirect_values as $id => $redirect_value) { $insert_query->values(['consumer', 0, $id, $id, 'en', 0, $redirect_value]); } $insert_query->execute(); } /** * Migrate roles used as scope and migrate settings to the consumer. */ function simple_oauth_update_8604() { $scopes = []; $consumers = \Drupal::entityTypeManager()->getStorage('consumer')->loadMultiple(); $grant_types = array_keys(Oauth2GrantManager::getAvailablePluginsAsOptions()); $config = \Drupal::configFactory()->get('simple_oauth.settings'); $database = \Drupal::database(); $roles_ids = $database->select('consumer__roles', 'r') ->fields('r', ['entity_id', 'roles_target_id']) ->execute() ->fetchAllKeyed(); foreach ($consumers as $consumer) { $scopes_to_reference = []; foreach ($roles_ids as $entity_id => $role_id) { if ($entity_id !== (int) $consumer->id()) { continue; } /** @var \Drupal\user\RoleInterface $role */ $role = \Drupal::entityTypeManager()->getStorage('user_role')->load($role_id); if (!isset($scopes[$role->id()])) { $scope = Oauth2Scope::create([ 'name' => $role->id(), 'description' => $role->label(), 'grant_types' => [ 'authorization_code' => ['status' => TRUE], 'client_credentials' => ['status' => TRUE], 'refresh_token' => ['status' => TRUE], ], 'granularity' => Oauth2ScopeInterface::GRANULARITY_ROLE, 'role' => $role->id(), ]); $scope->save(); $scopes[$role->id()] = $scope; } $scopes_to_reference[] = $scopes[$role->id()]->id(); } $consumer ->set('scopes', $scopes_to_reference) ->set('grant_types', $grant_types) ->set('remember_approval', (bool) $config->get('remember_clients')) ->set('access_token_expiration', $config->get('access_token_expiration')) ->set('refresh_token_expiration', $config->get('refresh_token_expiration')) ->save(); } // Remove roles field. $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); $roles_field_definition = $entity_definition_update_manager->getFieldStorageDefinition('roles', 'consumer'); $entity_definition_update_manager->uninstallFieldStorageDefinition($roles_field_definition); } Loading @@ -252,21 +314,3 @@ function simple_oauth_update_8605() { ->setTranslatable(FALSE); $entity_definition_update_manager->installFieldStorageDefinition($field_name, $entity_type_id, $provider, $field_definition); } /** * Migrate OAuth2 settings to the consumer entity. */ function simple_oauth_update_8606() { $config = \Drupal::configFactory()->get('simple_oauth.settings'); $remember_clients = (bool) $config->get('remember_clients'); $access_token_expiration = $config->get('access_token_expiration'); $refresh_token_expiration = $config->get('refresh_token_expiration'); $consumer_storage = \Drupal::entityTypeManager()->getStorage('consumer'); foreach ($consumer_storage->loadMultiple() as $consumer) { $consumer->set('remember_approval', $remember_clients); $consumer->set('access_token_expiration', $access_token_expiration); $consumer->set('refresh_token_expiration', $refresh_token_expiration); $consumer->save(); } }