openid_connect.install in OpenID Connect / OAuth client 2.x
Same filename and directory in other branches
Install, update and uninstall functions for the OpenID Connect module.
File
openid_connect.installView source
<?php
/**
* @file
* Install, update and uninstall functions for the OpenID Connect module.
*/
/* @noinspection PhpUnnecessaryFullyQualifiedNameInspection */
/* @noinspection PhpUnused */
use Drupal\Core\Config\Entity\ConfigEntityType;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Utility\UpdateException;
/**
* Add default config for Facebook and LinkedIn provider.
*/
function openid_connect_update_8101() {
$config_factory = \Drupal::configFactory();
$config = $config_factory
->getEditable('openid_connect.settings.facebook');
$config
->set('enabled', FALSE);
$config
->set('settings', [
'client_id' => '',
'client_secret' => '',
'api_version' => '',
]);
$config
->save(TRUE);
$config = $config_factory
->getEditable('openid_connect.settings.linkedin');
$config
->set('enabled', FALSE);
$config
->set('settings', [
'client_id' => '',
'client_secret' => '',
]);
$config
->save(TRUE);
}
/**
* Add default config for GitHub provider.
*/
function openid_connect_update_8102() {
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings.github');
$config
->set('enabled', FALSE);
$config
->set('settings', [
'client_id' => '',
'client_secret' => '',
]);
$config
->save(TRUE);
}
/**
* Update the active config with the registration override value.
*/
function openid_connect_update_8103() {
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings');
$config
->set('override_registration_settings', FALSE);
$config
->save(TRUE);
}
/**
* Update the active config with the connect existing users value.
*/
function openid_connect_update_8104() {
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings');
$config
->set('connect_existing_users', FALSE);
$config
->save(TRUE);
}
/**
* Delete duplicate entries in the openid_connect_authmap table.
*/
function openid_connect_update_8105() {
$database = \Drupal::database();
// Get the IDs for the duplicate entries.
$query = $database
->select('openid_connect_authmap', 'a1')
->fields('a1', [
'aid',
]);
$query
->innerJoin('openid_connect_authmap', 'a2', 'a1.uid = a2.uid AND a1.client_name = a2.client_name AND a1.sub = a2.sub');
$query
->where('a1.aid > a2.aid');
$aids = $query
->distinct()
->execute()
->fetchAllAssoc('aid');
if (!empty($aids)) {
// If duplicates exist, delete them.
$database
->delete('openid_connect_authmap')
->condition('aid', array_keys($aids), 'IN')
->execute();
}
}
/**
* Add default config for Okta provider.
*/
function openid_connect_update_8106() {
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings.okta');
$config
->set('enabled', FALSE);
$config
->set('settings', [
'client_id' => '',
'client_secret' => '',
'okta_domain' => '',
]);
$config
->save(TRUE);
}
/**
* Installs the new config entity type openid_connect_client.
*/
function openid_connect_update_8199() {
$changeList = \Drupal::entityDefinitionUpdateManager()
->getChangeList();
if (!array_key_exists('openid_connect_client', $changeList)) {
return 'Skipped. The new config entity type openid_connect_client is already installed.';
}
try {
\Drupal::entityDefinitionUpdateManager()
->installEntityType(new ConfigEntityType([
'id' => 'openid_connect_client',
'label' => new TranslatableMarkup('OpenID Connect client'),
'admin_permission' => "administer openid connect clients",
'handlers' => [
'list_builder' => 'Drupal\\openid_connect\\Controller\\OpenIDConnectClientListBuilder',
'form' => [
'add' => 'Drupal\\openid_connect\\Form\\OpenIDConnectClientAddForm',
'edit' => 'Drupal\\openid_connect\\Form\\OpenIDConnectClientEditForm',
'delete' => 'Drupal\\openid_connect\\Form\\OpenIDConnectClientDeleteForm',
],
],
'config_prefix' => 'client',
'entity_keys' => [
'id' => 'id',
'label' => 'label',
'status' => 'status',
],
'links' => [
"edit-form" => "/admin/config/people/openid-connect/{openid_connect_client}/edit",
"delete-form" => "/admin/config/people/openid-connect/{openid_connect_client}/delete",
"enable" => "/admin/config/people/openid-connect/{openid_connect_client}/enable",
"disable" => "/admin/config/people/openid-connect/{openid_connect_client}/disable",
"collection" => "/admin/config/people/openid-connect",
],
'config_export' => [
'id',
'label',
'plugin',
'settings',
],
]));
} catch (\Exception $exception) {
throw new UpdateException($exception
->getMessage());
}
return 'Installed the new config entity type openid_connect_client.';
}
/**
* Convert client configuration objects to configuration entities.
*/
function openid_connect_update_8200() {
$definitions = \Drupal::service('plugin.manager.openid_connect_client')
->getDefinitions();
$entity_storage = \Drupal::entityTypeManager()
->getStorage('openid_connect_client');
foreach ($definitions as $plugin) {
$configuration = \Drupal::configFactory()
->getEditable('openid_connect.settings.' . $plugin['id']);
// Only convert configuration where the client id or secret are not empty.
$settings = $configuration
->get('settings');
if (!empty($settings['client_id']) || !empty($settings['client_secret'])) {
// Create new configuration entity.
$entity_storage
->create([
'status' => $configuration
->get('enabled'),
'id' => $plugin['id'],
'label' => $plugin['label']
->getUntranslatedString(),
'plugin' => $plugin['id'],
'settings' => $settings,
])
->save();
}
// Delete old configuration object.
$configuration
->delete();
}
}
/**
* Update the active config for installations using generic client.
*/
function openid_connect_update_8201() {
/** @var \Drupal\openid_connect\OpenIDConnectClientEntityInterface[] $clients */
$clients = \Drupal::entityTypeManager()
->getStorage('openid_connect_client')
->loadByProperties([
'plugin' => 'generic',
]);
foreach ($clients as $client) {
$client
->getPlugin()
->setConfiguration([
'issuer_url' => '',
]);
$client
->save();
}
}
/**
* Add redirect_login to module settings.
*/
function openid_connect_update_8202() {
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings');
$config
->set('redirect_login', 'user');
$config
->save(TRUE);
}
/**
* Enable externalauth.
*/
function openid_connect_update_8203() {
\Drupal::service('module_installer')
->install([
'externalauth',
]);
}
/**
* Move all 'openid_connect_authmap' data to 'authmap'.
*/
function openid_connect_update_8204() {
$database = \Drupal::database();
// Get all records and move them to the authmap table.
$query = $database
->select('openid_connect_authmap', 'a')
->fields('a');
$authmap_records = $query
->execute()
->fetchAllAssoc('aid');
foreach ($authmap_records as $authmap_record) {
$database
->merge('authmap')
->keys([
'uid' => $authmap_record->uid,
'provider' => 'openid_connect.' . $authmap_record->client_name,
])
->fields([
'authname' => $authmap_record->sub,
'data' => 'N;',
])
->execute();
}
}
/**
* Drop the 'openid_connect_authmap' table.
*/
function openid_connect_update_8205() {
\Drupal::database()
->schema()
->dropTable('openid_connect_authmap');
}
/**
* Installs the new config entity type openid_connect_client.
*/
function openid_connect_update_8206() {
return openid_connect_update_8199();
}
/**
* Update generic plugins with End Session endpoint and logout redirect URL.
*/
function openid_connect_update_8207() {
$clients = \Drupal::entityTypeManager()
->getStorage('openid_connect_client')
->loadByProperties([
'plugin' => 'generic',
]);
foreach ($clients as $client) {
$config = $client
->getPlugin()
->getConfiguration();
if (empty($config['end_session_endpoint'])) {
$client
->getPlugin()
->setConfiguration([
'end_session_endpoint' => '',
]);
$client
->save();
}
}
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings');
$config
->set('redirect_logout', '');
$config
->save(TRUE);
}
/**
* Update generic plugins with scopes.
*/
function openid_connect_update_8208() {
$clients = \Drupal::entityTypeManager()
->getStorage('openid_connect_client')
->loadByProperties([
'plugin' => 'generic',
]);
foreach ($clients as $client) {
$config = $client
->getPlugin()
->getConfiguration();
if (empty($config['scopes'])) {
$client
->getPlugin()
->setConfiguration([
'scopes' => [
'openid',
'email',
],
]);
$client
->save();
}
}
}
/**
* Set default value for end_session_enabled setting.
*/
function openid_connect_update_8209() {
$config = \Drupal::configFactory()
->getEditable('openid_connect.settings');
$config
->set('end_session_enabled', TRUE);
$config
->save(TRUE);
}
/**
* Update okta plugins with scopes.
*/
function openid_connect_update_8210() {
$clients = \Drupal::entityTypeManager()
->getStorage('openid_connect_client')
->loadByProperties([
'plugin' => 'okta',
]);
foreach ($clients as $client) {
$config = $client
->getPlugin()
->getConfiguration();
if (empty($config['scopes'])) {
$client
->getPlugin()
->setConfiguration([
'scopes' => [
'openid',
'email',
],
]);
$client
->save();
}
}
}
Functions
Name | Description |
---|---|
openid_connect_update_8101 | Add default config for Facebook and LinkedIn provider. |
openid_connect_update_8102 | Add default config for GitHub provider. |
openid_connect_update_8103 | Update the active config with the registration override value. |
openid_connect_update_8104 | Update the active config with the connect existing users value. |
openid_connect_update_8105 | Delete duplicate entries in the openid_connect_authmap table. |
openid_connect_update_8106 | Add default config for Okta provider. |
openid_connect_update_8199 | Installs the new config entity type openid_connect_client. |
openid_connect_update_8200 | Convert client configuration objects to configuration entities. |
openid_connect_update_8201 | Update the active config for installations using generic client. |
openid_connect_update_8202 | Add redirect_login to module settings. |
openid_connect_update_8203 | Enable externalauth. |
openid_connect_update_8204 | Move all 'openid_connect_authmap' data to 'authmap'. |
openid_connect_update_8205 | Drop the 'openid_connect_authmap' table. |
openid_connect_update_8206 | Installs the new config entity type openid_connect_client. |
openid_connect_update_8207 | Update generic plugins with End Session endpoint and logout redirect URL. |
openid_connect_update_8208 | Update generic plugins with scopes. |
openid_connect_update_8209 | Set default value for end_session_enabled setting. |
openid_connect_update_8210 | Update okta plugins with scopes. |