From 01201d8183e7a986fdc92f45639ab1fffb74ffec Mon Sep 17 00:00:00 2001 From: Marius Scurtescu Date: Thu, 10 Nov 2022 10:15:38 -0800 Subject: [PATCH] merging dev at 1.0.0 release (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Merged PR that adds [PKCE support](https://github.com/oidc-wp/openid-connect-generic/pull/421) * Integrated Hellō Quickstart * Removed unnecessary configuration options * Renamed all relevant identifiers to be Hellō Login specific Co-authored-by: Clement Boirie Co-authored-by: Dick Hardt --- .gitattributes | 4 +- .github/CONTRIBUTING.md | 14 +- .github/ISSUE_TEMPLATE/2-Support.md | 2 +- .github/workflows/release.yml | 4 +- .gitignore | 1 + .vscode/tasks.json | 16 - CHANGELOG.md | 196 +-- Gruntfile.js | 10 +- HOWTO.md | 136 +- README.md | 114 +- composer.json | 33 +- composer.lock | 1093 +++++++++-------- docker-compose.wp-env.yml | 8 +- openid-connect-generic.php => hello-login.php | 165 ++- includes/functions.php | 15 +- ...per.php => hello-login-client-wrapper.php} | 216 ++-- ...eric-client.php => hello-login-client.php} | 114 +- ...in-form.php => hello-login-login-form.php} | 47 +- ...gger.php => hello-login-option-logger.php} | 16 +- ...gs.php => hello-login-option-settings.php} | 8 +- ...page.php => hello-login-settings-page.php} | 229 ++-- ...id-connect-generic.pot => hello-login.pot} | 230 ++-- package-lock.json | 48 +- package.json | 21 +- phpcs.xml.dist | 2 +- readme.txt | 117 +- tests/phpstan-bootstrap.php | 2 +- 27 files changed, 1358 insertions(+), 1503 deletions(-) delete mode 100644 .vscode/tasks.json rename openid-connect-generic.php => hello-login.php (55%) rename includes/{openid-connect-generic-client-wrapper.php => hello-login-client-wrapper.php} (81%) rename includes/{openid-connect-generic-client.php => hello-login-client.php} (78%) rename includes/{openid-connect-generic-login-form.php => hello-login-login-form.php} (72%) rename includes/{openid-connect-generic-option-logger.php => hello-login-option-logger.php} (92%) rename includes/{openid-connect-generic-option-settings.php => hello-login-option-settings.php} (96%) rename includes/{openid-connect-generic-settings-page.php => hello-login-settings-page.php} (66%) rename languages/{openid-connect-generic.pot => hello-login.pot} (56%) diff --git a/.gitattributes b/.gitattributes index f26fddf..9586c3c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11,8 +11,9 @@ *.sh text eol=lf # Ignored directories during export. -/.wordpress-org export-ignore +/.devcontainer export-ignore /.github export-ignore +/.wordpress-org export-ignore /scripts export-ignore /tests export-ignore /tools export-ignore @@ -21,6 +22,7 @@ /.editorconfig export-ignore /.gitattributes export-ignore /.gitignore export-ignore +/.gitpod.yml export-ignore /.npmrc export-ignore /.nvmrc export-ignore /.travis.yml export-ignore diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 99bb6aa..10eda4f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,20 +1,20 @@ -# Contributing to OpenID Connect Generic Client ✨ +# Contributing to Hellō Login This plugin provides security enhancements to WordPress, and your help making it even more awesome will be greatly appreciated :) There are many ways to contribute to the project! -- [Translating strings into your language](https://translate.wordpress.org/projects/wp-plugins/daggerhart-openid-connect-generic/). -- Answering open questions under the GitHub Issue Tracker (https://github.com/oidc-wp/openid-connect-generic/issues). -- Testing open [issues](https://github.com/oidc-wp/openid-connect-generic/issues) or [pull requests](https://github.com/oidc-wp/openid-connect-generic/pulls) and sharing your findings in a comment. +- [Translating strings into your language](TBD). +- Answering open questions under the GitHub Issue Tracker (https://github.com/hellocoop/wordpress/issues). +- Testing open [issues](https://github.com/hellocoop/wordpress/issues) or [pull requests](https://github.com/hellocoop/wordpress/pulls) and sharing your findings in a comment. - Submitting fixes, improvements, and enhancements. - Disclose a security issue to our team. If you wish to contribute code, please read the information in the sections below. Then [fork](https://help.github.com/articles/fork-a-repo/) the plugin, commit your changes, and [submit a pull request](https://help.github.com/articles/using-pull-requests/) 🎉 -We use the `good first issue` label to mark issues that are suitable for new contributors. You can find all the issues with this label [here](https://github.com/oidc-wp/openid-connect-generic/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). +We use the `good first issue` label to mark issues that are suitable for new contributors. You can find all the issues with this label [here](https://github.com/hellocoop/wordpress/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). -OpenID Connect Generic Client is licensed under the GPLv2.0, and all contributions to the project will be released under the same license. You maintain copyright over any contribution you make, and by submitting a pull request, you are agreeing to release that contribution under the GPLv2.0 license. +Hellō Login is licensed under the GPLv2.0, and all contributions to the project will be released under the same license. You maintain copyright over any contribution you make, and by submitting a pull request, you are agreeing to release that contribution under the GPLv2.0 license. ## Getting started @@ -34,4 +34,4 @@ OpenID Connect Generic Client is licensed under the GPLv2.0, and all contributio ## Feature Requests 🚀 -Feature requests can be [submitted to our issue tracker](https://github.com/oidc-wp/openid-connect-generic/issues/new?template=5-Feature-request.md). Be sure to include a description of the expected behavior and use case, and before submitting a request, please search for similar ones in the closed issues. +Feature requests can be [submitted to our issue tracker](https://github.com/hellocoop/wordpress/issues/new?template=5-Feature-request.md). Be sure to include a description of the expected behavior and use case, and before submitting a request, please search for similar ones in the closed issues. diff --git a/.github/ISSUE_TEMPLATE/2-Support.md b/.github/ISSUE_TEMPLATE/2-Support.md index bb6796b..e921cc8 100644 --- a/.github/ISSUE_TEMPLATE/2-Support.md +++ b/.github/ISSUE_TEMPLATE/2-Support.md @@ -8,7 +8,7 @@ assignees: '' --- **Review Wiki** -Please be sure to check the [GitHub Wiki](https://github.com/oidc-wp/openid-connect-generic/wiki) to see if your question has already been answered. +Please be sure to check the [GitHub Wiki](https://github.com/hellocoop/wordpress/wiki) to see if your question has already been answered. **General usage questions** If your question hasn't been answered in the Wiki please be as descriptive as possible when asking your question. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e432ff9..dabeaef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: release: name: New Release - if: github.repository == 'oidc-wp/openid-connect-generic' + if: github.repository == 'hellocoop/wordpress' runs-on: ubuntu-latest @@ -56,4 +56,4 @@ jobs: SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} SVN_USERNAME: ${{ secrets.SVN_USERNAME }} SOURCE_DIR: dist/ - SLUG: daggerhart-openid-connect-generic + SLUG: hello-login diff --git a/.gitignore b/.gitignore index 64fd9bd..fee9871 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ # Local Development files/folders. .env .wp-env.override.json +composer.phar phpcs.xml phpstan.neon phpunit.xml diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 62c02b1..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "build", - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [], - "label": "npm: build", - "detail": "npm run grunt build" - } - ] -} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 856c82d..9512a74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,192 +1,12 @@ -# OpenId Connect Generic Changelog +# Hellō Login Changelog -**3.9.1** +**1.0.0** -- Improvement: @timnolte - Refactors Composer setup and GitHub Actions. -- Improvement: @timnolte - Bumps WordPress tested version compatibility. +- Forked https://github.com/oidc-wp/openid-connect-generic +- Improvement: @mariuss - Merged PR that adds [PKCE support](https://github.com/oidc-wp/openid-connect-generic/pull/421) +- Feature: @mariuss - Integrated Hellō Quickstart +- Feature: @mariuss - Removed unnecessary configuration options -**3.9.0** +-------- -- Feature: @matchaxnb - Added support for additional configuration constants. -- Feature: @schanzen - Added support for agregated claims. -- Fix: @rkcreation - Fixed access token not updating user metadata after login. -- Fix: @danc1248 - Fixed user creation issue on Multisite Networks. -- Feature: @RobjS - Added plugin singleton to support for more developer customization. -- Feature: @jkouris - Added action hook to allow custom handling of session expiration. -- Fix: @tommcc - Fixed admin CSS loading only on the plugin settings screen. -- Feature: @rkcreation - Added method to refresh the user claim. -- Feature: @Glowsome - Added acr_values support & verification checks that it when defined in options is honored. -- Fix: @timnolte - Fixed regression which caused improper fallback on missing claims. -- Fix: @slykar - Fixed missing query string handling in redirect URL. -- Fix: @timnolte - Fixed issue with some user linking and user creation handling. -- Improvement: @timnolte - Fixed plugin settings typos and screen formatting. -- Security: @timnolte - Updated build tooling security vulnerabilities. -- Improvement: @timnolte - Changed build tooling scripts. - -**3.8.5** - -- Fix: @timnolte - Fixed missing URL request validation before use & ensure proper current page URL is setup for Redirect Back. -- Fix: @timnolte - Fixed Redirect URL Logic to Handle Sub-directory Installs. -- Fix: @timnolte - Fixed issue with redirecting user back when the openid_connect_generic_auth_url shortcode is used. - -**3.8.4** - -- Fix: @timnolte - Fixed invalid State object access for redirection handling. -- Improvement: @timnolte - Fixed local wp-env Docker development environment. -- Improvement: @timnolte - Fixed Composer scripts for linting and static analysis. - -**3.8.3** - -- Fix: @timnolte - Fixed problems with proper redirect handling. -- Improvement: @timnolte - Changes redirect handling to use State instead of cookies. -- Improvement: @timnolte - Refactored additional code to meet coding standards. - -**3.8.2** - -- Fix: @timnolte - Fixed reported XSS vulnerability on WordPress login screen. - -**3.8.1** - -- Fix: @timnolte - Prevent SSO redirect on password protected posts. -- Fix: @timnolte - CI/CD build issues. -- Fix: @timnolte - Invalid redirect handling on logout for Auto Login setting. - -**3.8.0** - -- Feature: @timnolte - Ability to use 6 new constants for setting client configuration instead of storing in the DB. -- Improvement: @timnolte - NPM version requirements for development. -- Improvement: @timnolte - Travis CI build fixes. -- Improvement: @timnolte - GrumPHP configuration updates for code contributions. -- Improvement: @timnolte - Refactored to meet WordPress coding standards. -- Improvement: @timnolte - Refactored to provide localization. -- Improvement: @timnolte - Refactored to provide a Docker-based local development environment. - -**3.7.1** - -- Fix: Release Version Number. - -**3.7.0** - -- Feature: @timnolte - Ability to enable/disable token refresh. Useful for IDPs that don't support token refresh. -- Feature: @timnolte - Support custom redirect URL(`redirect_to`) with the authentication URL & login button shortcodes. -- Supports additional attribute overrides including login `button_text`, `endpoint_login`, `scope`, `redirect_uri`. - -**3.6.0** - -- Improvement: @RobjS - Improved error messages during login state failure. -- Improvement: @RobjS - New developer filter for login form button URL. -- Fix: @cs1m0n - Only increment username during new user creation if the "Link existing user" setting is enabled. -- Fix: @xRy-42 - Allow periods and spaces in usernames to match what WordPress core allows. -- Feature: @benochen - New setting named "Create user if does not exist" determines whether new users are created during login attempts. -- Improvement: @flat235 - Username transliteration and normalization. - -**3.5.1** - -- Fix: @daggerhart - New approach to state management using transients. - -**3.5.0** - -- Readme fix: @thijskh - Fix syntax error in example openid-connect-generic-login-button-text -- Feature: @slavicd - Allow override of the plugin by posting credentials to wp-login.php -- Feature: @gassan - New action on use login -- Fix: @daggerhart - Avoid double question marks in auth url query string -- Fix: @drzraf - wp-cli bootstrap must not inhibit custom rewrite rules -- Syntax change: @mullikine - Change PHP keywords to comply with PSR2 - -**3.4.1** - -- Minor documentation update and additional error checking. - -**3.4.0** - -- Feature: @drzraf - New filter hook: ability to filter claim and derived user data before user creation. -- Feature: @anttileppa - State time limit can now be changed on the settings page. -- Fix: @drzraf - Fix PHP notice when using traditional login, $token_response may be empty. -- Fix: @drzraf - Fixed a notice when cookie does not contain expected redirect_url - -**3.3.1** - -- Prefixing classes for more efficient autoloading. -- Avoid altering global wp_remote_post() parameters. -- Minor metadata updates for wp.org - -**3.3.0** - -- Fix: @pjeby - Handle multiple user sessions better by using the `WP_Session_Tokens` object. Predecessor to fixes for multiple other issues: #49, #50, #51 - -**3.2.1** - -- Bug fix: @svenvanhal - Exit after issuing redirect. Fixes #46 - -**3.2.0** - -- Feature: @robbiepaul - trigger core action `wp_login` when user is logged in through this plugin -- Feature: @moriyoshi - Determine the WP_User display name with replacement tokens on the settings page. Tokens can be any property of the user_claim. -- Feature: New setting to set redirect URL when session expires. -- Feature: @robbiepaul - New filter for modifying authentication URL -- Fix: @cedrox - Adding id_token_hint to logout URL according to spec -- Bug fix: Provide port to the request header when requesting the user_claim - -**3.1.0** - -- Feature: @rwasef1830 - Refresh tokens -- Feature: @rwasef1830 - Integrated logout support with end_session endpoint -- Feature: May use an alternate redirect_uri that doesn't rely on admin-ajax -- Feature: @ahatherly - Support for IDP behind reverse proxy -- Bug fix: @robertstaddon - case insensitive check for Bearer token -- Bug fix: @rwasef1830 - "redirect to origin when auto-sso" cookie issue -- Bug fix: @rwasef1830 - PHP Warnings headers already sent due to attempts to redirect and set cookies during login form message -- Bug fix: @rwasef1830 - expire session when access_token expires if no refresh token found -- UX fix: @rwasef1830 - Show login button on error redirect when using auto-sso - -**3.0.8** - -- Feature: @wgengarelly - Added `openid-connect-generic-update-user-using-current-claim` action hook allowing other plugins/themes - to take action using the fresh claims received when an existing user logs in. - -**3.0.7** - -- Bug fix: @wgengarelly - When requesting userinfo, send the access token using the Authorization header field as recommended in - section 5.3.1 of the specs. - -**3.0.6** - -- Bug fix: @robertstaddon - If "Link Existing Users" is enabled, allow users who login with OpenID Connect to also log in with WordPress credentials - -**3.0.5** - -- Feature: @robertstaddon - Added `[openid_connect_generic_login_button]` shortcode to allow the login button to be placed anywhere -- Feature: @robertstaddon - Added setting to "Redirect Back to Origin Page" after a successful login instead of redirecting to the home page. - -**3.0.4** - -- Feature: @robertstaddon - Added setting to allow linking existing WordPress user accounts with newly-authenticated OpenID Connect login - -**3.0.3** - -- Using WordPresss's is_ssl() for setcookie()'s "secure" parameter -- Bug fix: Incrementing username in case of collision. -- Bug fix: Wrong error sent when missing token body - -**3.0.2** - -- Added http_request_timeout setting - -**3.0.1** - -- Finalizing 3.0.x api - -**3.0** - -- Complete rewrite to separate concerns -- Changed settings keys for clarity (requires updating settings if upgrading from another version) -- Error logging - -**2.1** - -- Working my way closer to spec. Possible breaking change. Now checking for preferred_username as priority. -- New username determination to avoid collisions - -**2.0** - -Complete rewrite +[See pre-fork changelogs here](https://github.com/oidc-wp/openid-connect-generic/blob/main/CHANGELOG.md) diff --git a/Gruntfile.js b/Gruntfile.js index 7874703..b859044 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -81,7 +81,7 @@ module.exports = function (grunt) { addtextdomain: { options: { - textdomain: 'daggerhart-openid-connect-generic', // Project text domain. + textdomain: 'hello-login', // Project text domain. }, update_all_domains: { options: { @@ -113,11 +113,11 @@ module.exports = function (grunt) { 'vendor/.*', //composer 'wordpress/.*', ], // List of files or directories to ignore. - mainFile: 'openid-connect-generic.php', // Main project file. - potFilename: 'openid-connect-generic.pot', // Name of the POT file. + mainFile: 'hello-login.php', // Main project file. + potFilename: 'hello-login.pot', // Name of the POT file. potHeaders: { poedit: true, // Includes common Poedit headers. - 'report-msgid-bugs-to': 'https://github.com/daggerhart/openid-connect-generic/issues', + 'report-msgid-bugs-to': 'https://github.com/hellocoop/wordpress/issues', 'x-poedit-keywordslist': true // Include a list of all possible gettext functions. }, // Headers to add to the generated POT file. type: 'wp-plugin', // Type of project (wp-plugin or wp-theme). @@ -145,7 +145,7 @@ module.exports = function (grunt) { checktextdomain: { options: { - text_domain: 'daggerhart-openid-connect-generic', + text_domain: 'hello-login', keywords: [ '__:1,2d', '_e:1,2d', diff --git a/HOWTO.md b/HOWTO.md index be34dfe..7743ae1 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,9 +1,9 @@ -# OpenID Connect Generic Client +# Hellō Login License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html -A simple client that provides SSO or opt-in authentication against a generic OAuth2 Server implementation. +A login and registration plugin for the Hellō service. ## Description @@ -12,7 +12,7 @@ Once installed, it can be configured to automatically authenticate users (SSO), button on the login form. After consent has been obtained, an existing user is automatically logged into WordPress, while new users are created in WordPress database. -Much of the documentation can be found on the Settings > OpenID Connect Generic dashboard page. +Much of the documentation can be found on the Settings > Hellō Login dashboard page. ## Table of Contents @@ -24,30 +24,28 @@ Much of the documentation can be found on the Settings > OpenID Connect Generic - [Configuration Environment Variables/Constants](#configuration-environment-variables-constants) - [Hooks](#hooks) - [Filters](#filters) - - [openid-connect-generic-alter-request](#openid-connect-generic-alter-request) - - [openid-connect-generic-login-button-text](#openid-connect-generic-login-button-text) - - [openid-connect-generic-auth-url](#openid-connect-generic-auth-url) - - [openid-connect-generic-user-login-test](#openid-connect-generic-user-login-test) - - [openid-connect-generic-user-creation-test](#openid-connect-generic-user-creation-test) - - [openid-connect-generic-alter-user-claim](#openid-connect-generic-alter-user-claim) - - [openid-connect-generic-alter-user-data](#openid-connect-generic-alter-user-data) - - [openid-connect-generic-settings-fields](#openid-connect-generic-settings-fields) + - [hello-login-alter-request](#hello-login-alter-request) + - [hello-login-auth-url](#hello-login-auth-url) + - [hello-login-user-login-test](#hello-login-user-login-test) + - [hello-login-user-creation-test](#hello-login-user-creation-test) + - [hello-login-alter-user-data](#hello-login-alter-user-data) + - [hello-login-settings-fields](#hello-login-settings-fields) - [Actions](#actions) - - [openid-connect-generic-user-create](#openid-connect-generic-user-create) - - [openid-connect-generic-user-update](#openid-connect-generic-user-update) - - [openid-connect-generic-update-user-using-current-claim](#openid-connect-generic-update-user-using-current-claim) - - [openid-connect-generic-redirect-user-back](#openid-connect-generic-redirect-user-back) + - [hello-login-user-create](#hello-login-user-create) + - [hello-login-user-update](#hello-login-user-update) + - [hello-login-update-user-using-current-claim](#hello-login-update-user-using-current-claim) + - [hello-login-redirect-user-back](#hello-login-redirect-user-back) ## Installation 1. Upload to the `/wp-content/plugins/` directory 1. Activate the plugin -1. Visit Settings > OpenID Connect and configure to meet your needs +1. Visit Settings > Hellō Login and configure to meet your needs ### Composer -[OpenID Connect Generic on packagist](https://packagist.org/packages/daggerhart/openid-connect-generic) +[Hellō Login on packagist](https://packagist.org/packages/hellocoop/wordpress) Installation: @@ -59,7 +57,7 @@ Installation: ### What is the client's Redirect URI? Most OAuth2 servers should require a whitelist of redirect URIs for security purposes. The Redirect URI provided -by this client is like so: `https://example.com/wp-admin/admin-ajax.php?action=openid-connect-authorize` +by this client is like so: `https://example.com/wp-admin/admin-ajax.php?action=hello-login-callback` Replace `example.com` with your domain name and path to WordPress. @@ -70,9 +68,9 @@ this module leverages WordPress's `admin-ajax.php` endpoint as an easy way to pr HTML, but this will naturally involve a query string. Fortunately, this plugin provides a setting that will make use of an alternate redirect URI that does not include a query string. -On the settings page for this plugin (Dashboard > Settings > OpenID Connect Generic) there is a checkbox for +On the settings page for this plugin (Dashboard > Settings > Hellō Login) there is a checkbox for **Alternate Redirect URI**. When checked, the plugin will use the Redirect URI -`https://example.com/openid-connect-authorize`. +`https://example.com/hello-login-callback`. ## Configuration Environment Variables/Constants @@ -105,7 +103,7 @@ WordPress filters API - [`add_filter()`](https://developer.wordpress.org/referen Most often you'll only need to use `add_filter()` to hook into this plugin's code. -#### `openid-connect-generic-alter-request` +#### `hello-login-alter-request` Hooks directly into client before requests are sent to the OpenID Server. @@ -119,7 +117,7 @@ Possible operations: - get-userinfo ``` -add_filter('openid-connect-generic-alter-request', function( $request, $operation ) { +add_filter('hello-login-alter-request', function( $request, $operation ) { if ( $operation == 'get-authentication-token' ) { $request['some_key'] = 'modified value'; } @@ -128,21 +126,7 @@ add_filter('openid-connect-generic-alter-request', function( $request, $operatio }, 10, 2); ``` -#### `openid-connect-generic-login-button-text` - -Modify the login button text. Default value is `__( 'Login with OpenID Connect' )`. - -Provides 1 argument: the current login button text. - -``` -add_filter('openid-connect-generic-login-button-text', function( $text ) { - $text = __('Login to my super cool IDP server'); - - return $text; -}); -``` - -#### `openid-connect-generic-auth-url` +#### `hello-login-auth-url` Modify the authentication URL before presented to the user. This is the URL that will send the user to the IDP server for login. @@ -150,21 +134,21 @@ for login. Provides 1 argument: the plugin generated URL. ``` -add_filter('openid-connect-generic-auth-url', function( $url ) { +add_filter('hello-login-auth-url', function( $url ) { // Add some custom data to the url. $url.= '&my_custom_data=123abc'; return $url; }); ``` -#### `openid-connect-generic-user-login-test` +#### `hello-login-user-login-test` Determine whether or not the user should be logged into WordPress. Provides 2 arguments: the boolean result of the test (default `TRUE`), and the `$user_claim` array from the server. ``` -add_filter('openid-connect-generic-user-login-test', function( $result, $user_claim ) { +add_filter('hello-login-user-login-test', function( $result, $user_claim ) { // Don't let Terry login. if ( $user_claim['email'] == 'terry@example.com' ) { $result = FALSE; @@ -174,7 +158,7 @@ add_filter('openid-connect-generic-user-login-test', function( $result, $user_cl }, 10, 2); ``` -#### `openid-connect-generic-user-creation-test` +#### `hello-login-user-creation-test` Determine whether or not the user should be created. This filter is called when a new user is trying to login and they do not currently exist within WordPress. @@ -182,7 +166,7 @@ do not currently exist within WordPress. Provides 2 arguments: the boolean result of the test (default `TRUE`), and the `$user_claim` array from the server. ``` -add_filter('', function( $result, $user_claim ) { +add_filter('hello-login-user-creation-test', function( $result, $user_claim ) { // Don't let anyone from example.com create an account. $email_array = explode( '@', $user_claim['email'] ); if ( $email_array[1] == 'example.com' ) { @@ -193,31 +177,7 @@ add_filter('', function( $result, $user_claim ) { }, 10, 2) ``` -#### `openid-connect-generic-alter-user-claim` - -Modify the `$user_claim` before the plugin builds the `$user_data` array for new user created. - -**Deprecated** - This filter is not very useful due to some changes that were added later. Recommend not using this -filter, and using the `openid-connect-generic-alter-user-data` filter instead. Practically, you can only change the -user's `first_name` and `last_name` values with this filter, but you could easily do that in -`openid-connect-generic-alter-user-data` as well. - -Provides 1 argument: the `$user_claim` from the server. - -``` -// Not a great example because the hook isn't very useful. -add_filter('openid-connect-generic-alter-user-claim', function( $user_claim ) { - // Use the beginning of the user's email address as the user's first name. - if ( empty( $user_claim['given_name'] ) ) { - $email_array = explode( '@', $user_claim['email'] ); - $user_claim['given_name'] = $email_array[0]; - } - - return $user_claim; -}); -``` - -#### `openid-connect-generic-alter-user-data` +#### `hello-login-alter-user-data` Modify a new user's data immediately before the user is created. @@ -225,7 +185,7 @@ Provides 2 arguments: the `$user_data` array that will be sent to `wp_insert_use server. ``` -add_filter('openid-connect-generic-alter-user-data', function( $user_data, $user_claim ) { +add_filter('hello-login-alter-user-data', function( $user_data, $user_claim ) { // Don't register any user with their real email address. Create a fake internal address. if ( !empty( $user_data['user_email'] ) ) { $email_array = explode( '@', $user_data['user_email'] ); @@ -237,24 +197,24 @@ add_filter('openid-connect-generic-alter-user-data', function( $user_data, $user }, 10, 2); ``` -#### `openid-connect-generic-settings-fields` +#### `hello-login-settings-fields` -For extending the plugin with a new setting field (found on Dashboard > Settings > OpenID Connect Generic) that the site +For extending the plugin with a new setting field (found on Dashboard > Settings > Hellō Login) that the site administrator can modify. Also useful to alter the existing settings fields. -See `/includes/openid-connect-generic-settings-page.php` for how fields are constructed. +See `/includes/hello-login-settings-page.php` for how fields are constructed. New settings fields will be automatically saved into the wp_option for this plugin's settings, and will be available in -the `\OpenID_Connect_Generic_Option_Settings` object this plugin uses. +the `\Hello_Login_Option_Settings` object this plugin uses. **Note:** It can be difficult to get a copy of the settings from within other hooks. The easiest way to make use of settings in your custom hooks is to call -`$settings = get_option('openid_connect_generic_settings', array());`. +`$settings = get_option('hello_login_settings', array());`. Provides 1 argument: the existing fields array. ``` -add_filter('openid-connect-generic-settings-fields', function( $fields ) { +add_filter('hello-login-settings-fields', function( $fields ) { // Modify an existing field's title. $fields['endpoint_userinfo']['title'] = __('User information endpoint url'); @@ -305,14 +265,14 @@ Actions API: [`add_action`](https://developer.wordpress.org/reference/functions/ You'll probably only ever want to use `add_action` when hooking into this plugin. -#### `openid-connect-generic-user-create` +#### `hello-login-user-create` React to a new user being created by this plugin. Provides 2 arguments: the `\WP_User` object that was created, and the `$user_claim` from the IDP server. ``` -add_action('openid-connect-generic-user-create', function( $user, $user_claim ) { +add_action('hello-login-user-create', function( $user, $user_claim ) { // Send the user an email when their account is first created. wp_mail( $user->user_email, @@ -322,7 +282,7 @@ add_action('openid-connect-generic-user-create', function( $user, $user_claim ) }, 10, 2); ``` -#### `openid-connect-generic-user-update` +#### `hello-login-user-update` React to the user being updated after login. This is the event that happens when a user logins and they already exist as a user in WordPress, as opposed to a new WordPress user being created. @@ -330,7 +290,7 @@ a user in WordPress, as opposed to a new WordPress user being created. Provides 1 argument: the user's WordPress user ID. ``` -add_action('openid-connect-generic-user-update', function( $uid ) { +add_action('hello-login-user-update', function( $uid ) { // Keep track of the number of times the user has logged into the site. $login_count = get_user_meta( $uid, 'my-user-login-count', TRUE); $login_count += 1; @@ -338,14 +298,14 @@ add_action('openid-connect-generic-user-update', function( $uid ) { }); ``` -#### `openid-connect-generic-update-user-using-current-claim` +#### `hello-login-update-user-using-current-claim` React to an existing user logging in (after authentication and authorization). Provides 2 arguments: the `WP_User` object, and the `$user_claim` provided by the IDP server. ``` -add_action('openid-connect-generic-update-user-using-current-claim', function( $user, $user_claim) { +add_action('hello-login-update-user-using-current-claim', function( $user, $user_claim) { // Based on some data in the user_claim, modify the user. if ( !empty( $user_claim['wp_user_role'] ) ) { if ( $user_claim['wp_user_role'] == 'should-be-editor' ) { @@ -355,16 +315,16 @@ add_action('openid-connect-generic-update-user-using-current-claim', function( $ }, 10, 2); ``` -#### `openid-connect-generic-redirect-user-back` +#### `hello-login-redirect-user-back` React to a user being redirected after a successful login. This hook is the last hook that will fire when a user logs -in. It will only fire if the plugin setting "Redirect Back to Origin Page" is enabled at Dashboard > Settings > -OpenID Connect Generic. It will fire for both new and existing users. +in. It will only fire if the plugin setting "Redirect Back to Origin Page" is enabled at Dashboard > Settings > +Hellō Login. It will fire for both new and existing users. Provides 2 arguments: the url where the user will be redirected, and the `WP_User` object. ``` -add_action('openid-connect-generic-redirect-user-back', function( $redirect_url, $user ) { +add_action('hello-login-redirect-user-back', function( $redirect_url, $user ) { // Take over the redirection complete. Send users somewhere special based on their capabilities. if ( $user->has_cap( 'edit_users' ) ) { wp_redirect( admin_url( 'users.php' ) ); @@ -377,7 +337,7 @@ add_action('openid-connect-generic-redirect-user-back', function( $redirect_url, This plugin stores meta data about the user for both practical and debugging purposes. -* `openid-connect-generic-subject-identity` - The identity of the user provided by the IDP server. -* `openid-connect-generic-last-id-token-claim` - The user's most recent `id_token` claim, decoded and stored as an array. -* `openid-connect-generic-last-user-claim` - The user's most recent `user_claim`, stored as an array. -* `openid-connect-generic-last-token-response` - The user's most recent `token_response`, stored as an array. +* `hello-login-subject-identity` - The identity of the user provided by the IDP server. +* `hello-login-last-id-token-claim` - The user's most recent `id_token` claim, decoded and stored as an array. +* `hello-login-last-user-claim` - The user's most recent `user_claim`, stored as an array. +* `hello-login-last-token-response` - The user's most recent `token_response`, stored as an array. diff --git a/README.md b/README.md index fa723e8..1a6f0bf 100644 --- a/README.md +++ b/README.md @@ -1,114 +1,58 @@ -# OpenID Connect Generic Client # -**Contributors:** [daggerhart](https://profiles.wordpress.org/daggerhart/), [tnolte](https://profiles.wordpress.org/tnolte/) -**Donate link:** http://www.daggerhart.com/ -**Tags:** security, login, oauth2, openidconnect, apps, authentication, autologin, sso +# Hellō Login # +**Contributors:** [mariuss](https://profiles.wordpress.org/mariuss/) +**Donate link:** https://www.hello.dev/ +**Tags:** security, login, oauth2, openidconnect, apps, authentication, sso **Requires at least:** 4.9 **Tested up to:** 6.0.1 -**Stable tag:** 3.9.1 +**Stable tag:** 1.0.0 **Requires PHP:** 7.2 **License:** GPLv2 or later **License URI:** http://www.gnu.org/licenses/gpl-2.0.html -A simple client that provides SSO or opt-in authentication against a generic OAuth2 Server implementation. +A login and registration plugin for the Hellō service. ## Description ## -This plugin allows to authenticate users against OpenID Connect OAuth2 API with Authorization Code Flow. -Once installed, it can be configured to automatically authenticate users (SSO), or provide a "Login with OpenID Connect" -button on the login form. After consent has been obtained, an existing user is automatically logged into WordPress, while -new users are created in WordPress database. +This plugin integrates the Hellō service with your site, simplifying login and registration of users. +You can request name, nickname, profile picture, as well as a verified email, phone, or ethereum address. -Much of the documentation can be found on the Settings > OpenID Connect Generic dashboard page. +This plugin uses the Hellō Quickstart service to get your site up and running in minutes. -Please submit issues to the Github repo: https://github.com/daggerhart/openid-connect-generic +Configuration and settings can be found in the Settings > Hellō Login dashboard page + +For details on the Hellō service see [hello.dev](https://hello.dev) + +Please submit issues and feature requests to the Github repo: [https://github.com/hellocoop/wordpress](https://github.com/hellocoop/wordpress) ## Installation ## 1. Upload to the `/wp-content/plugins/` directory -1. Activate the plugin -1. Visit Settings > OpenID Connect and configure to meet your needs +1. Activate the plugin in `Plugins` +1. In `Settings` > `Hellō Login` click the `Quickstart` button and complete Quickstart flow +1. Add the `[hello_login_button]` shortcode to pages for the Hellō login button ## Frequently Asked Questions ## -### What is the client's Redirect URI? ### - -Most OAuth2 servers will require whitelisting a set of redirect URIs for security purposes. The Redirect URI provided -by this client is like so: https://example.com/wp-admin/admin-ajax.php?action=openid-connect-authorize - -Replace `example.com` with your domain name and path to WordPress. - -### Can I change the client's Redirect URI? ### +### How do users login? ### -Some OAuth2 servers do not allow for a client redirect URI to contain a query string. The default URI provided by -this module leverages WordPress's `admin-ajax.php` endpoint as an easy way to provide a route that does not include -HTML, but this will naturally involve a query string. Fortunately, this plugin provides a setting that will make use of -an alternate redirect URI that does not include a query string. +Hellō offers users all popular social login methods including Apple, Facebook, Google, Line, Microsoft, Twitch, and Yahoo; +email or phone; or popular crypto wallets including MetaMask. The current choices can be seen at [https://wallet.hello.coop](https://wallet.hello.coop) +Hellō lets users change their provider without any effort on your part. -On the settings page for this plugin (Dashboard > Settings > OpenID Connect Generic) there is a checkbox for -**Alternate Redirect URI**. When checked, the plugin will use the Redirect URI -`https://example.com/openid-connect-authorize`. +### What claims can I ask for about a user? ### +Hellō supports all popular OpenID Connect claims and we are continually adding claims to Hellō. You can see the full list at [Hellō Claims](https://www.hello.dev/documentation/hello-claims.html) ## Changelog ## -### 3.9.1 ### - -* Improvement: @timnolte - Refactors Composer setup and GitHub Actions. -* Improvement: @timnolte - Bumps WordPress tested version compatibility. - -### 3.9.0 ### - -* Feature: @matchaxnb - Added support for additional configuration constants. -* Feature: @schanzen - Added support for agregated claims. -* Fix: @rkcreation - Fixed access token not updating user metadata after login. -* Fix: @danc1248 - Fixed user creation issue on Multisite Networks. -* Feature: @RobjS - Added plugin singleton to support for more developer customization. -* Feature: @jkouris - Added action hook to allow custom handling of session expiration. -* Fix: @tommcc - Fixed admin CSS loading only on the plugin settings screen. -* Feature: @rkcreation - Added method to refresh the user claim. -* Feature: @Glowsome - Added acr_values support & verification checks that it when defined in options is honored. -* Fix: @timnolte - Fixed regression which caused improper fallback on missing claims. -* Fix: @slykar - Fixed missing query string handling in redirect URL. -* Fix: @timnolte - Fixed issue with some user linking and user creation handling. -* Improvement: @timnolte - Fixed plugin settings typos and screen formatting. -* Security: @timnolte - Updated build tooling security vulnerabilities. -* Improvement: @timnolte - Changed build tooling scripts. - -### 3.8.5 ### - -* Fix: @timnolte - Fixed missing URL request validation before use & ensure proper current page URL is setup for Redirect Back. -* Fix: @timnolte - Fixed Redirect URL Logic to Handle Sub-directory Installs. -* Fix: @timnolte - Fixed issue with redirecting user back when the openid_connect_generic_auth_url shortcode is used. - -### 3.8.4 ### - -* Fix: @timnolte - Fixed invalid State object access for redirection handling. -* Improvement: @timnolte - Fixed local wp-env Docker development environment. -* Improvement: @timnolte - Fixed Composer scripts for linting and static analysis. - -### 3.8.3 ### - -* Fix: @timnolte - Fixed problems with proper redirect handling. -* Improvement: @timnolte - Changes redirect handling to use State instead of cookies. -* Improvement: @timnolte - Refactored additional code to meet coding standards. - -### 3.8.2 ### - -* Fix: @timnolte - Fixed reported XSS vulnerability on WordPress login screen. - -### 3.8.1 ### - -* Fix: @timnolte - Prevent SSO redirect on password protected posts. -* Fix: @timnolte - CI/CD build issues. -* Fix: @timnolte - Invalid redirect handling on logout for Auto Login setting. +### 1.0.0 ### -### 3.8.0 ### +* Forked https://github.com/oidc-wp/openid-connect-generic +* Improvement: @mariuss - Merged PR that adds [PKCE support](https://github.com/oidc-wp/openid-connect-generic/pull/421). +* Feature: @mariuss - Integrated Hellō Quickstart +* Feature: @mariuss - Removed unnecessary configuration options -* Feature: @timnolte - Ability to use 6 new constants for setting client configuration instead of storing in the DB. -* Improvement: @timnolte - Plugin development & contribution updates. -* Improvement: @timnolte - Refactored to meet WordPress coding standards. -* Improvement: @timnolte - Refactored to provide localization. -------- -[See the previous changelogs here](https://github.com/oidc-wp/openid-connect-generic/blob/main/CHANGELOG.md#changelog) +[See pre-fork changelogs here](https://github.com/oidc-wp/openid-connect-generic/blob/main/CHANGELOG.md) diff --git a/composer.json b/composer.json index 4d771a3..50dfb23 100644 --- a/composer.json +++ b/composer.json @@ -1,19 +1,14 @@ { - "name": "daggerhart/openid-connect-generic", + "name": "hellocoop/wordpress", "type": "wordpress-plugin", "license": "GPL-2.0-only", - "description": "OpenID Connect generic WordPress plugin.", - "homepage": "https://github.com/daggerhart/openid-connect-generic", + "description": "A login and registration plugin for the Hellō service.", + "homepage": "https://github.com/hellocoop/wordpress", "authors": [ { - "name": "Jonathan Daggerhart", - "email": "jonathan@daggerhart.com", - "homepage": "https://github.com/daggerhart" - }, - { - "name": "Tim Nolte", - "email": "tim.nolte@ndigitals.com", - "homepage": "https://github.com/timnolte" + "name": "Marius Scurtescu", + "email": "marius.scurtescu@hello.coop", + "homepage": "https://www.hello.coop/" } ], "keywords": [ @@ -21,7 +16,7 @@ "openid" ], "support": { - "issues": "https://github.com/daggerhart/openid-connect-generic/issues" + "issues": "https://github.com/hellocoop/wordpress/issues" }, "config": { "platform": { @@ -70,13 +65,13 @@ }, "autoload": { "classmap": [ - "openid-connect-generic.php", - "includes/openid-connect-generic-client.php", - "includes/openid-connect-generic-client-wrapper.php", - "includes/openid-connect-generic-login-form.php", - "includes/openid-connect-generic-option-logger.php", - "includes/openid-connect-generic-option-settings.php", - "includes/openid-connect-generic-settings-page.php" + "hello-login.php", + "includes/hello-login-client.php", + "includes/hello-login-client-wrapper.php", + "includes/hello-login-login-form.php", + "includes/hello-login-option-logger.php", + "includes/hello-login-option-settings.php", + "includes/hello-login-settings-page.php" ] }, "scripts": { diff --git a/composer.lock b/composer.lock index 5a005ca..3b3205b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,43 +4,41 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "031a39595b510f6a91c54ab62d450d83", + "content-hash": "ac9d8a84f686a361b7b4bb16253013fa", "packages": [ { "name": "composer/installers", - "version": "v1.12.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19" + "reference": "c29dc4b93137acb82734f672c37e029dfbd95b35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/d20a64ed3c94748397ff5973488761b22f6d3f19", - "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19", + "url": "https://api.github.com/repos/composer/installers/zipball/c29dc4b93137acb82734f672c37e029dfbd95b35", + "reference": "c29dc4b93137acb82734f672c37e029dfbd95b35", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^7.2 || ^8.0" }, "require-dev": { "composer/composer": "1.6.* || ^2.0", "composer/semver": "^1 || ^3", "phpstan/phpstan": "^0.12.55", "phpstan/phpstan-phpunit": "^0.12.16", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.3" + "symfony/phpunit-bridge": "^5.3", + "symfony/process": "^5" }, "type": "composer-plugin", "extra": { "class": "Composer\\Installers\\Plugin", "branch-alias": { - "dev-main": "1.x-dev" - } + "dev-main": "2.x-dev" + }, + "plugin-modifies-install-path": true }, "autoload": { "psr-4": { @@ -61,7 +59,6 @@ "description": "A multi-framework Composer library installer", "homepage": "https://composer.github.io/installers/", "keywords": [ - "Craft", "Dolibarr", "Eliasis", "Hurad", @@ -82,7 +79,6 @@ "Whmcs", "WolfCMS", "agl", - "aimeos", "annotatecms", "attogram", "bitrix", @@ -101,7 +97,6 @@ "grav", "installer", "itop", - "joomla", "known", "kohana", "laravel", @@ -110,6 +105,7 @@ "magento", "majima", "mako", + "matomo", "mediawiki", "miaoxing", "modulework", @@ -129,9 +125,7 @@ "silverstripe", "sydes", "sylius", - "symfony", "tastyigniter", - "typo3", "wordpress", "yawik", "zend", @@ -139,7 +133,7 @@ ], "support": { "issues": "https://github.com/composer/installers/issues", - "source": "https://github.com/composer/installers/tree/v1.12.0" + "source": "https://github.com/composer/installers/tree/v2.2.0" }, "funding": [ { @@ -155,22 +149,22 @@ "type": "tidelift" } ], - "time": "2021-09-13T08:19:44+00:00" + "time": "2022-08-20T06:45:11+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.1", + "version": "v2.6.2", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae" + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", - "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", + "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", "shasum": "" }, "require": { @@ -223,7 +217,7 @@ } ], "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "http://amphp.org/amp", + "homepage": "https://amphp.org/amp", "keywords": [ "async", "asynchronous", @@ -238,7 +232,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.1" + "source": "https://github.com/amphp/amp/tree/v2.6.2" }, "funding": [ { @@ -246,7 +240,7 @@ "type": "github" } ], - "time": "2021-09-23T18:43:08+00:00" + "time": "2022-02-20T17:52:18+00:00" }, { "name": "amphp/byte-stream", @@ -401,28 +395,29 @@ }, { "name": "amphp/parallel-functions", - "version": "v1.0.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/amphp/parallel-functions.git", - "reference": "af9795d51abfafc3676cbe7e17965479491abaad" + "reference": "04e92fcacfc921a56dfe12c23b3265e62593a7cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/af9795d51abfafc3676cbe7e17965479491abaad", - "reference": "af9795d51abfafc3676cbe7e17965479491abaad", + "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/04e92fcacfc921a56dfe12c23b3265e62593a7cb", + "reference": "04e92fcacfc921a56dfe12c23b3265e62593a7cb", "shasum": "" }, "require": { "amphp/amp": "^2.0.3", - "amphp/parallel": "^1.1", - "opis/closure": "^3.0.7", - "php": ">=7" + "amphp/parallel": "^1.4", + "amphp/serialization": "^1.0", + "laravel/serializable-closure": "^1.0", + "php": ">=7.4" }, "require-dev": { - "amphp/phpunit-util": "^1.0", - "friendsofphp/php-cs-fixer": "^2.9", - "phpunit/phpunit": "^6.5" + "amphp/php-cs-fixer-config": "v2.x-dev", + "amphp/phpunit-util": "^2.0", + "phpunit/phpunit": "^9.5.11" }, "type": "library", "autoload": { @@ -446,7 +441,7 @@ "description": "Parallel processing made simple.", "support": { "issues": "https://github.com/amphp/parallel-functions/issues", - "source": "https://github.com/amphp/parallel-functions/tree/master" + "source": "https://github.com/amphp/parallel-functions/tree/v1.1.0" }, "funding": [ { @@ -454,7 +449,7 @@ "type": "github" } ], - "time": "2020-07-10T17:05:35+00:00" + "time": "2022-02-03T19:32:41+00:00" }, { "name": "amphp/parser", @@ -513,16 +508,16 @@ }, { "name": "amphp/process", - "version": "v1.1.3", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/amphp/process.git", - "reference": "f09e3ed3b0a953ccbfff1140f12be4a884f0aa83" + "reference": "76e9495fd6818b43a20167cb11d8a67f7744ee0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/f09e3ed3b0a953ccbfff1140f12be4a884f0aa83", - "reference": "f09e3ed3b0a953ccbfff1140f12be4a884f0aa83", + "url": "https://api.github.com/repos/amphp/process/zipball/76e9495fd6818b43a20167cb11d8a67f7744ee0f", + "reference": "76e9495fd6818b43a20167cb11d8a67f7744ee0f", "shasum": "" }, "require": { @@ -566,7 +561,7 @@ "homepage": "https://github.com/amphp/process", "support": { "issues": "https://github.com/amphp/process/issues", - "source": "https://github.com/amphp/process/tree/v1.1.3" + "source": "https://github.com/amphp/process/tree/v1.1.4" }, "funding": [ { @@ -574,7 +569,7 @@ "type": "github" } ], - "time": "2021-12-17T19:09:33+00:00" + "time": "2022-07-06T23:50:12+00:00" }, { "name": "amphp/serialization", @@ -704,16 +699,16 @@ }, { "name": "antecedent/patchwork", - "version": "2.1.17", + "version": "2.1.21", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "df5aba175a44c2996ced4edf8ec9f9081b5348c0" + "reference": "25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/df5aba175a44c2996ced4edf8ec9f9081b5348c0", - "reference": "df5aba175a44c2996ced4edf8ec9f9081b5348c0", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d", + "reference": "25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d", "shasum": "" }, "require": { @@ -746,9 +741,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.1.17" + "source": "https://github.com/antecedent/patchwork/tree/2.1.21" }, - "time": "2021-10-21T14:22:43+00:00" + "time": "2022-02-07T07:28:34+00:00" }, { "name": "brain/monkey", @@ -822,27 +817,27 @@ }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.1", + "version": "v0.7.2", "source": { "type": "git", "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c" + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", "shasum": "" }, "require": { "composer-plugin-api": "^1.0 || ^2.0", "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { "composer/composer": "*", - "phpcompatibility/php-compatibility": "^9.0", - "sensiolabs/security-checker": "^4.1.0" + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0" }, "type": "composer-plugin", "extra": { @@ -863,6 +858,10 @@ "email": "franck.nijhof@dealerdirect.com", "homepage": "http://www.frenck.nl", "role": "Developer / IT Manager" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", @@ -874,6 +873,7 @@ "codesniffer", "composer", "installer", + "phpcbf", "phpcs", "plugin", "qa", @@ -888,30 +888,31 @@ "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" }, - "time": "2020-12-07T18:04:37+00:00" + "time": "2022-02-04T12:51:07+00:00" }, { "name": "doctrine/collections", - "version": "1.6.8", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af" + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1.3 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^0.12", + "doctrine/coding-standard": "^9.0 || ^10.0", + "phpstan/phpstan": "^1.4.8", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.2.1" + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -955,35 +956,79 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.6.8" + "source": "https://github.com/doctrine/collections/tree/1.8.0" + }, + "time": "2022-09-01T20:12:10+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" }, - "time": "2021-08-10T18:51:53+00:00" + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -1010,7 +1055,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -1026,20 +1071,20 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "gitonomy/gitlib", - "version": "v1.3.2", + "version": "v1.3.7", "source": { "type": "git", "url": "https://github.com/gitonomy/gitlib.git", - "reference": "e73e439590b194b0b250b516b22a68c7116e2f21" + "reference": "00b57b79f02396aa4c7c163f76fe2bc48faebbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/e73e439590b194b0b250b516b22a68c7116e2f21", - "reference": "e73e439590b194b0b250b516b22a68c7116e2f21", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/00b57b79f02396aa4c7c163f76fe2bc48faebbb7", + "reference": "00b57b79f02396aa4c7c163f76fe2bc48faebbb7", "shasum": "" }, "require": { @@ -1050,6 +1095,7 @@ }, "require-dev": { "ext-fileinfo": "*", + "phpspec/prophecy": "^1.10.2", "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.20 || ^9.5.9", "psr/log": "^1.0" }, @@ -1070,25 +1116,29 @@ "authors": [ { "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { "name": "Julien Didier", - "email": "genzo.wm@gmail.com" + "email": "genzo.wm@gmail.com", + "homepage": "https://github.com/juliendidier" }, { "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" + "email": "lyrixx@lyrixx.info", + "homepage": "https://github.com/lyrixx" }, { "name": "Alexandre Salomé", - "email": "alexandre.salome@gmail.com" + "email": "alexandre.salome@gmail.com", + "homepage": "https://github.com/alexandresalome" } ], "description": "Library for accessing git", "support": { "issues": "https://github.com/gitonomy/gitlib/issues", - "source": "https://github.com/gitonomy/gitlib/tree/v1.3.2" + "source": "https://github.com/gitonomy/gitlib/tree/v1.3.7" }, "funding": [ { @@ -1096,7 +1146,7 @@ "type": "tidelift" } ], - "time": "2021-09-06T20:30:10+00:00" + "time": "2022-10-04T14:20:15+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -1151,16 +1201,16 @@ }, { "name": "johnpbloch/wordpress-core", - "version": "5.9.3", + "version": "5.9.5", "source": { "type": "git", "url": "https://github.com/johnpbloch/wordpress-core.git", - "reference": "455d38c7b7bcdce3e0a1c6108eccca8de1860361" + "reference": "c9a6d01a3735e121e1805cc527bc4e087ba92439" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/455d38c7b7bcdce3e0a1c6108eccca8de1860361", - "reference": "455d38c7b7bcdce3e0a1c6108eccca8de1860361", + "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/c9a6d01a3735e121e1805cc527bc4e087ba92439", + "reference": "c9a6d01a3735e121e1805cc527bc4e087ba92439", "shasum": "" }, "require": { @@ -1168,7 +1218,7 @@ "php": ">=5.6.20" }, "provide": { - "wordpress/core-implementation": "5.9.3" + "wordpress/core-implementation": "5.9.5" }, "type": "wordpress-core", "notification-url": "https://packagist.org/downloads/", @@ -1195,7 +1245,7 @@ "source": "https://core.trac.wordpress.org/browser", "wiki": "https://codex.wordpress.org/" }, - "time": "2022-04-05T19:23:48+00:00" + "time": "2022-10-17T21:17:12+00:00" }, { "name": "johnpbloch/wordpress-core-installer", @@ -1251,18 +1301,78 @@ }, "time": "2020-04-16T21:44:57+00:00" }, + { + "name": "laravel/serializable-closure", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-09-08T13:45:54+00:00" + }, { "name": "mockery/mockery", - "version": "1.3.5", + "version": "1.3.6", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d" + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/472fa8ca4e55483d55ee1e73c963718c4393791d", - "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d", + "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0", "shasum": "" }, "require": { @@ -1316,22 +1426,22 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.3.5" + "source": "https://github.com/mockery/mockery/tree/1.3.6" }, - "time": "2021-09-13T15:33:03+00:00" + "time": "2022-09-07T15:05:49+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", "shasum": "" }, "require": { @@ -1344,18 +1454,22 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", + "phpspec/prophecy": "^1.15", "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1370,7 +1484,6 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -1405,7 +1518,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" }, "funding": [ { @@ -1417,29 +1530,33 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2022-07-24T11:55:47+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -1464,7 +1581,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -1472,7 +1589,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "ondram/ci-detector", @@ -1552,71 +1669,6 @@ }, "time": "2021-04-14T09:16:52+00:00" }, - { - "name": "opis/closure", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Opis\\Closure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" - }, - "time": "2021-04-09T13:42:10+00:00" - }, { "name": "phar-io/manifest", "version": "1.0.3", @@ -1729,16 +1781,16 @@ }, { "name": "php-stubs/wordpress-stubs", - "version": "v5.9.3", + "version": "v5.9.4", "source": { "type": "git", "url": "https://github.com/php-stubs/wordpress-stubs.git", - "reference": "18d56875e5078a50b8ea4bc4b20b735ca61edeee" + "reference": "3e481f4c8195fb3ca9e3e4e52e5305bf59c74cdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/18d56875e5078a50b8ea4bc4b20b735ca61edeee", - "reference": "18d56875e5078a50b8ea4bc4b20b735ca61edeee", + "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/3e481f4c8195fb3ca9e3e4e52e5305bf59c74cdb", + "reference": "3e481f4c8195fb3ca9e3e4e52e5305bf59c74cdb", "shasum": "" }, "replace": { @@ -1770,9 +1822,9 @@ ], "support": { "issues": "https://github.com/php-stubs/wordpress-stubs/issues", - "source": "https://github.com/php-stubs/wordpress-stubs/tree/v5.9.3" + "source": "https://github.com/php-stubs/wordpress-stubs/tree/v5.9.4" }, - "time": "2022-04-06T15:33:59+00:00" + "time": "2022-09-30T17:45:35+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -1780,30 +1832,29 @@ "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "c23e20c0aaa5c527fd7b3fbef38c50c458bb47f1" + "reference": "f72a92fe215f45139d07e5a9aee8450c11ec2824" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/c23e20c0aaa5c527fd7b3fbef38c50c458bb47f1", - "reference": "c23e20c0aaa5c527fd7b3fbef38c50c458bb47f1", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/f72a92fe215f45139d07e5a9aee8450c11ec2824", + "reference": "f72a92fe215f45139d07e5a9aee8450c11ec2824", "shasum": "" }, "require": { "php": ">=5.4", "phpcsstandards/phpcsutils": "^1.0", - "squizlabs/php_codesniffer": "^2.6 || ^3.1.0" - }, - "conflict": { - "squizlabs/php_codesniffer": "2.6.2" + "squizlabs/php_codesniffer": "^3.7.1" }, "replace": { "wimg/php-compatibility": "*" }, "require-dev": { - "php-parallel-lint/php-console-highlighter": "^0.5", - "php-parallel-lint/php-parallel-lint": "^1.2.0", - "phpcsstandards/phpcsdevtools": "^1.0", - "phpunit/phpunit": "^4.8 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || >=9.0 <9.3.0" + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.3", + "phpcsstandards/phpcsdevtools": "^1.2.0", + "phpunit/phpunit": "^4.8 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4", + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." @@ -1841,26 +1892,27 @@ "keywords": [ "compatibility", "phpcs", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", "source": "https://github.com/PHPCompatibility/PHPCompatibility" }, - "time": "2022-04-14T19:54:29+00:00" + "time": "2022-11-04T16:07:12+00:00" }, { "name": "phpcompatibility/phpcompatibility-paragonie", - "version": "1.3.1", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", - "reference": "ddabec839cc003651f2ce695c938686d1086cf43" + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/ddabec839cc003651f2ce695c938686d1086cf43", - "reference": "ddabec839cc003651f2ce695c938686d1086cf43", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", "shasum": "" }, "require": { @@ -1897,26 +1949,27 @@ "paragonie", "phpcs", "polyfill", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" }, - "time": "2021-02-15T10:24:51+00:00" + "time": "2022-10-25T01:46:02+00:00" }, { "name": "phpcompatibility/phpcompatibility-wp", - "version": "2.1.3", + "version": "2.1.4", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", - "reference": "d55de55f88697b9cdb94bccf04f14eb3b11cf308" + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/d55de55f88697b9cdb94bccf04f14eb3b11cf308", - "reference": "d55de55f88697b9cdb94bccf04f14eb3b11cf308", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", "shasum": "" }, "require": { @@ -1951,13 +2004,14 @@ "compatibility", "phpcs", "standards", + "static analysis", "wordpress" ], "support": { "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" }, - "time": "2021-12-30T16:37:40+00:00" + "time": "2022-10-24T09:00:36+00:00" }, { "name": "phpcsstandards/phpcsutils", @@ -1965,34 +2019,32 @@ "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", - "reference": "b65fbd47c38202a667ea3930a4a51c5c8b9ca434" + "reference": "d9555ffa03a2f8ad73ed44f7801a22973e915b65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/b65fbd47c38202a667ea3930a4a51c5c8b9ca434", - "reference": "b65fbd47c38202a667ea3930a4a51c5c8b9ca434", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/d9555ffa03a2f8ad73ed44f7801a22973e915b65", + "reference": "d9555ffa03a2f8ad73ed44f7801a22973e915b65", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7", "php": ">=5.4", - "squizlabs/php_codesniffer": "^2.6.0 || ^3.1.0 || 4.0.x-dev@dev" - }, - "conflict": { - "squizlabs/php_codesniffer": "3.5.3" + "squizlabs/php_codesniffer": "^3.7.1 || 4.0.x-dev@dev" }, "require-dev": { "ext-filter": "*", "php-parallel-lint/php-console-highlighter": "^1.0", "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "phpcsstandards/phpcsdevcs": "^1.1.3", + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.3", "yoast/phpunit-polyfills": "^1.0.1" }, "default-branch": true, "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "1.x-dev", + "dev-stable": "1.x-dev", "dev-develop": "1.x-dev" } }, @@ -2023,9 +2075,9 @@ "phpcbf", "phpcodesniffer-standard", "phpcs", - "phpcs2", "phpcs3", "standards", + "static analysis", "tokens", "utility" ], @@ -2034,7 +2086,7 @@ "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", "source": "https://github.com/PHPCSStandards/PHPCSUtils" }, - "time": "2022-06-30T21:20:54+00:00" + "time": "2022-11-04T19:19:46+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2148,25 +2200,30 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -2192,57 +2249,58 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2022-10-14T12:47:21+00:00" }, { "name": "phpro/grumphp", - "version": "v1.5.0", + "version": "v1.13.0", "source": { "type": "git", "url": "https://github.com/phpro/grumphp.git", - "reference": "52ce0229dced77a207bc39a512053b5ee6ad4465" + "reference": "3ec61c1678c4c370f02b05fef606fd561d923c8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpro/grumphp/zipball/52ce0229dced77a207bc39a512053b5ee6ad4465", - "reference": "52ce0229dced77a207bc39a512053b5ee6ad4465", + "url": "https://api.github.com/repos/phpro/grumphp/zipball/3ec61c1678c4c370f02b05fef606fd561d923c8e", + "reference": "3ec61c1678c4c370f02b05fef606fd561d923c8e", "shasum": "" }, "require": { - "amphp/amp": "^2.4", + "amphp/amp": "^2.6", "amphp/parallel": "^1.4", - "amphp/parallel-functions": "^1.0", - "composer-plugin-api": "~1.0 || ~2.0", - "doctrine/collections": "^1.6.7", + "amphp/parallel-functions": "^1.1", + "composer-plugin-api": "~2.0", + "doctrine/collections": "^1.6.8", "ext-json": "*", - "gitonomy/gitlib": "^1.0.3", - "monolog/monolog": "~1.16 || ^2.0", - "ondram/ci-detector": "^3.5 || ^4.0", - "opis/closure": "^3.5", - "php": "^7.3 || ^8.0", - "psr/container": "^1.0", - "seld/jsonlint": "~1.1", - "symfony/config": "~4.4 || ~5.0", - "symfony/console": "~4.4 || ~5.0", - "symfony/dependency-injection": "~4.4 || ~5.0", - "symfony/dotenv": "~4.4 || ~5.0", - "symfony/event-dispatcher": "~4.4 || ~5.0", - "symfony/filesystem": "~4.4 || ~5.0", - "symfony/finder": "~4.4 || ~5.0", - "symfony/options-resolver": "~4.4 || ~5.0", - "symfony/process": "~4.4 || ~5.0", - "symfony/yaml": "~4.4 || ~5.0" + "gitonomy/gitlib": "^1.3", + "laravel/serializable-closure": "^1.1", + "monolog/monolog": "^2.0 || ^3.0", + "ondram/ci-detector": "^4.0", + "php": "^7.4 || ^8.0", + "psr/container": "^1.1 || ^2.0", + "seld/jsonlint": "~1.8", + "symfony/config": "~5.3 || ~6.0", + "symfony/console": "~5.3 || ~6.0", + "symfony/dependency-injection": "~5.3 || ~6.0", + "symfony/dotenv": "~5.3 || ~6.0", + "symfony/event-dispatcher": "~5.3 || ~6.0", + "symfony/filesystem": "~5.3 || ~6.0", + "symfony/finder": "~5.3 || ~6.0", + "symfony/options-resolver": "~5.3 || ~6.0", + "symfony/process": "~5.3 || ~6.0", + "symfony/yaml": "~5.3 || ~6.0" }, "require-dev": { - "brianium/paratest": "^6.3", - "composer/composer": "^1.10.22 || ^2.0.13", - "nikic/php-parser": "~4.0", + "amphp/sync": "^v1.4", + "brianium/paratest": "^6.4", + "composer/composer": "^2.2.6", + "nikic/php-parser": "~4.13", "php-parallel-lint/php-parallel-lint": "^1.3", - "phpspec/phpspec": "^7.1", + "phpspec/phpspec": "^7.2", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^9.5.13" }, "suggest": { "atoum/atoum": "Lets GrumPHP run your unit tests.", @@ -2307,9 +2365,9 @@ "description": "A composer plugin that enables source code quality checks.", "support": { "issues": "https://github.com/phpro/grumphp/issues", - "source": "https://github.com/phpro/grumphp/tree/v1.5.0" + "source": "https://github.com/phpro/grumphp/tree/v1.13.0" }, - "time": "2021-09-24T10:13:17+00:00" + "time": "2022-06-24T08:32:25+00:00" }, { "name": "phpspec/prophecy", @@ -2380,28 +2438,27 @@ }, { "name": "phpstan/extension-installer", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/phpstan/extension-installer.git", - "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051" + "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051", - "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", + "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1 || ^2.0", - "php": "^7.1 || ^8.0", - "phpstan/phpstan": ">=0.11.6" + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.8.0" }, "require-dev": { - "composer/composer": "^1.8", - "phing/phing": "^2.16.3", + "composer/composer": "^2.0", "php-parallel-lint/php-parallel-lint": "^1.2.0", - "phpstan/phpstan-strict-rules": "^0.11 || ^0.12" + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" }, "type": "composer-plugin", "extra": { @@ -2419,22 +2476,22 @@ "description": "Composer plugin for automatic installation of PHPStan extensions", "support": { "issues": "https://github.com/phpstan/extension-installer/issues", - "source": "https://github.com/phpstan/extension-installer/tree/1.1.0" + "source": "https://github.com/phpstan/extension-installer/tree/1.2.0" }, - "time": "2020-12-13T13:06:13+00:00" + "time": "2022-10-17T12:59:16+00:00" }, { "name": "phpstan/phpstan", - "version": "1.8.2", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c" + "reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c53312ecc575caf07b0e90dee43883fdf90ca67c", - "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f", + "reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f", "shasum": "" }, "require": { @@ -2458,9 +2515,13 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.2" + "source": "https://github.com/phpstan/phpstan/tree/1.9.1" }, "funding": [ { @@ -2471,16 +2532,12 @@ "url": "https://github.com/phpstan", "type": "github" }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, { "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", "type": "tidelift" } ], - "time": "2022-07-20T09:57:31+00:00" + "time": "2022-11-04T13:35:59+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -3065,18 +3122,19 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "38da7ef14348ff26d7c415c4ed18b82db07fe199" + "reference": "964c5d9ca40d0ec72db203b3dd6382a30abef616" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/38da7ef14348ff26d7c415c4ed18b82db07fe199", - "reference": "38da7ef14348ff26d7c415c4ed18b82db07fe199", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/964c5d9ca40d0ec72db203b3dd6382a30abef616", + "reference": "964c5d9ca40d0ec72db203b3dd6382a30abef616", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "admidio/admidio": "<4.1.9", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<=2.2.1", "akaunting/akaunting": "<2.1.13", "alextselegidis/easyappointments": "<=1.4.3", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", @@ -3086,11 +3144,14 @@ "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", + "apereo/phpcas": "<1.6", "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", "appwrite/server-ce": "<0.11.1|>=0.12,<0.12.2", "area17/twill": "<1.2.5|>=2,<2.5.3", "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", + "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": ">=3,<3.2.1", + "badaso/core": "<2.6.1", "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", @@ -3115,11 +3176,12 @@ "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", - "centreon/centreon": "<20.10.7", + "centreon/centreon": "<22.10-beta.1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<=3.0.6", - "codeigniter4/framework": "<4.1.9", + "codeigniter4/framework": "<4.2.7", + "codeigniter4/shield": "= 1.0.0-beta", "codiad/codiad": "<=2.8.4", "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", "concrete5/concrete5": "<9", @@ -3130,7 +3192,7 @@ "contao/core-bundle": "<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3|= 4.10.0", "contao/listing-bundle": ">=4,<4.4.8", "contao/managed-edition": "<=1.5", - "craftcms/cms": "<3.7.36", + "craftcms/cms": "<3.7.55.2|>= 4.0.0-RC1, < 4.2.1", "croogo/croogo": "<3.0.7", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", @@ -3149,7 +3211,7 @@ "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", "dolibarr/dolibarr": "<16|= 12.0.5|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": "<2", + "dompdf/dompdf": "<2.0.1", "drupal/core": ">=7,<7.91|>=8,<9.3.19|>=9.4,<9.4.3", "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", "dweeves/magmi": "<=0.7.24", @@ -3161,6 +3223,8 @@ "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "= 3.0.0|<2.2.3", "ezsystems/demobundle": ">=5.4,<5.4.6.1", "ezsystems/ez-support-tools": ">=2.2,<2.2.3", "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", @@ -3180,7 +3244,7 @@ "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", "facturascripts/facturascripts": "<=2022.8", "feehi/cms": "<=2.1.1", - "feehi/feehicms": "<=0.1.3", + "feehi/feehicms": "<=2.0.1.1", "fenom/fenom": "<=2.12.1", "filegator/filegator": "<7.8", "firebase/php-jwt": "<2", @@ -3193,19 +3257,20 @@ "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<9.1", + "francoisjacquet/rosariosis": "<10.1", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "froala/wysiwyg-editor": "<3.2.7", - "froxlor/froxlor": "<=0.10.22", + "froxlor/froxlor": "<0.10.39", "fuel/core": "<1.8.1", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", "getgrav/grav": "<1.7.34", - "getkirby/cms": "<3.5.8", + "getkirby/cms": "= 3.8.0|<3.5.8.2|>=3.6,<3.6.6.2|>=3.7,<3.7.5.1", "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", "gilacms/gila": "<=1.11.4", "globalpayments/php-sdk": "<2", "google/protobuf": "<3.15", @@ -3230,7 +3295,7 @@ "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "impresscms/impresscms": "<=1.4.3", - "in2code/femanager": "<5.5.1|>=6,<6.3.1", + "in2code/femanager": "<5.5.2|>=6,<6.3.3|>=7,<7.0.1", "in2code/lux": "<17.6.1|>=18,<24.0.2", "intelliants/subrion": "<=4.2.1", "islandora/islandora": ">=2,<2.4.1", @@ -3242,6 +3307,7 @@ "joomla/filter": "<1.4.4|>=2,<2.0.1", "joomla/input": ">=2,<2.0.2", "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", "kazist/phpwhois": "<=4.2.6", @@ -3256,7 +3322,6 @@ "laminas/laminas-http": "<2.14.2", "laravel/fortify": "<1.11.1", "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "laravel/laravel": "<=9.1.8", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=5.8", @@ -3264,7 +3329,7 @@ "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<22.4", + "librenms/librenms": "<=22.8", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", "livewire/livewire": ">2.2.4,<2.2.6", @@ -3279,8 +3344,11 @@ "matyhtf/framework": "<3.0.6", "mautic/core": "<4.3|= 2.13.1", "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", - "microweber/microweber": "<1.3.1", + "microweber/microweber": "<=1.3.1", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "modx/revolution": "<= 2.8.3-pl|<2.8", @@ -3299,6 +3367,7 @@ "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", "nilsteampassnet/teampass": "<=2.1.27.36", + "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", "nukeviet/nukeviet": "<4.5.2", "nystudio107/craft-seomatic": "<3.4.12", @@ -3307,15 +3376,15 @@ "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.15", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.2", + "opencart/opencart": "<=3.0.3.7", "openid/php-openid": "<2.3", "openmage/magento-lts": "<19.4.15|>=20,<20.0.13", "orchid/platform": ">=9,<9.4.4", - "oro/commerce": ">=5,<5.0.4", + "oro/commerce": ">=4.1,<5.0.6", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", "packbackbooks/lti-1-3-php-library": "<5", @@ -3334,6 +3403,7 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.1.3", + "phpmyfaq/phpmyfaq": "<=3.1.7", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.7", @@ -3342,20 +3412,21 @@ "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "pimcore/data-hub": "<1.2.4", - "pimcore/pimcore": "<10.4.4", + "pimcore/pimcore": "<10.5.9", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": ">= 4.0.0-BETA5, < 4.4.2|<4.2.10", + "pocketmine/pocketmine-mp": "<4.7.2|>= 4.0.0-BETA5, < 4.4.2", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", "prestashop/blockwishlist": ">=2,<2.1.1", - "prestashop/contactform": ">1.0.1,<4.3", + "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", "prestashop/prestashop": ">=1.6.0.10,<1.7.8.7", - "prestashop/productcomments": ">=4,<4.2.1", + "prestashop/productcomments": "<5.0.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4", + "processwire/processwire": "<=3.0.200", "propel/propel": ">=2-alpha.1,<=2-alpha.7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", @@ -3363,6 +3434,8 @@ "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6-beta", "rainlab/debugbar-plugin": "<3.1", + "rankmath/seo-by-rank-math": "<=1.0.95", + "react/http": ">=0.7,<1.7", "remdex/livehelperchat": "<3.99", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": "<3.0.4", @@ -3377,7 +3450,7 @@ "shopware/core": "<=6.4.9", "shopware/platform": "<=6.4.9", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.13", + "shopware/shopware": "<=5.7.14", "shopware/storefront": "<=6.4.8.1", "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", @@ -3401,8 +3474,8 @@ "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplito/elliptic-php": "<1.0.6", "slim/slim": "<2.6", - "smarty/smarty": "<3.1.45|>=4,<4.1.1", - "snipe/snipe-it": "<=6.0.2|>= 6.0.0-RC-1, <= 6.0.0-RC-5", + "smarty/smarty": "<3.1.47|>=4,<4.2.1", + "snipe/snipe-it": "<6.0.11|>= 6.0.0-RC-1, <= 6.0.0-RC-5", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spipu/html2pdf": "<5.2.4", @@ -3462,25 +3535,28 @@ "thelia/thelia": ">=2.1-beta.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<=5.1.7", + "thorsten/phpmyfaq": "<3.1.8", "tinymce/tinymce": "<5.10", "titon/framework": ">=0,<9.9.99", - "topthink/framework": "<=6.0.12", + "tobiasbg/tablepress": "<= 2.0-RC1", + "topthink/framework": "<=6.0.13", "topthink/think": "<=6.0.9", "topthink/thinkphp": "<=3.2.3", "tribalsystems/zenario": "<9.2.55826", "truckersmp/phpwhois": "<=4.3.1", - "twig/twig": "<1.38|>=2,<2.14.11|>=3,<3.3.8", - "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.29|>=11,<11.5.11", + "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.32|>=11,<11.5.16", "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<7.6.57|>=8,<8.7.47|>=9,<9.5.35|>=10,<10.4.29|>=11,<11.5.11", + "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<7.6.58|>=8,<8.7.48|>=9,<9.5.37|>=10,<10.4.32|>=11,<11.5.16", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<1.0.7|>=2,<2.0.16", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", - "unisharp/laravel-filemanager": "<=2.3", + "unisharp/laravel-filemanager": "<=2.5.1", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "vanilla/safecurl": "<0.9.2", @@ -3492,14 +3568,14 @@ "webcoast/deferred-image-processing": "<1.0.2", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "wintercms/winter": "<1.0.475|>=1.1,<1.1.9", + "wintercms/winter": "<1.0.475|>=1.1,<1.1.10|>=1.2,<1.2.1", "woocommerce/woocommerce": "<6.6", "wp-cli/wp-cli": "<2.5", "wp-graphql/wp-graphql": "<0.3.5", "wpanel/wpanel4-cms": "<=4.3.1", "wwbn/avideo": "<=11.6", "yeswiki/yeswiki": "<4.1", - "yetiforce/yetiforce-crm": "<6.4", + "yetiforce/yetiforce-crm": "<=6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", @@ -3572,7 +3648,7 @@ "type": "tidelift" } ], - "time": "2022-01-14T21:13:43+00:00" + "time": "2022-11-04T21:04:09+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -3631,16 +3707,16 @@ }, { "name": "sebastian/comparator", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { @@ -3693,7 +3769,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, "funding": [ { @@ -3701,7 +3777,7 @@ "type": "github" } ], - "time": "2020-11-30T08:04:30+00:00" + "time": "2022-09-14T12:31:48+00:00" }, { "name": "sebastian/diff", @@ -3834,16 +3910,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.4", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", "shasum": "" }, "require": { @@ -3899,7 +3975,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" }, "funding": [ { @@ -3907,7 +3983,7 @@ "type": "github" } ], - "time": "2021-11-11T13:51:24+00:00" + "time": "2022-09-14T06:00:17+00:00" }, { "name": "sebastian/global-state", @@ -4240,23 +4316,24 @@ }, { "name": "seld/jsonlint", - "version": "1.8.3", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57" + "reference": "4211420d25eba80712bff236a98960ef68b866b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", "shasum": "" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, "bin": [ "bin/jsonlint" @@ -4287,7 +4364,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3" + "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" }, "funding": [ { @@ -4299,20 +4376,20 @@ "type": "tidelift" } ], - "time": "2020-11-11T09:19:24+00:00" + "time": "2022-04-01T13:37:23+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.6.2", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", "shasum": "" }, "require": { @@ -4355,20 +4432,20 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2021-12-12T21:44:58+00:00" + "time": "2022-06-18T07:21:10+00:00" }, { "name": "symfony/config", - "version": "v5.4.2", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "2e082dae50da563c639119b7b52347a2a3db4ba5" + "reference": "ec79e03125c1d2477e43dde8528535d90cc78379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2e082dae50da563c639119b7b52347a2a3db4ba5", - "reference": "2e082dae50da563c639119b7b52347a2a3db4ba5", + "url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379", + "reference": "ec79e03125c1d2477e43dde8528535d90cc78379", "shasum": "" }, "require": { @@ -4418,7 +4495,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.2" + "source": "https://github.com/symfony/config/tree/v5.4.11" }, "funding": [ { @@ -4434,20 +4511,20 @@ "type": "tidelift" } ], - "time": "2021-12-15T11:06:13+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { "name": "symfony/console", - "version": "v5.4.2", + "version": "v5.4.15", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e" + "reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e", - "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e", + "url": "https://api.github.com/repos/symfony/console/zipball/ea59bb0edfaf9f28d18d8791410ee0355f317669", + "reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669", "shasum": "" }, "require": { @@ -4517,7 +4594,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.2" + "source": "https://github.com/symfony/console/tree/v5.4.15" }, "funding": [ { @@ -4533,20 +4610,20 @@ "type": "tidelift" } ], - "time": "2021-12-20T16:11:12+00:00" + "time": "2022-10-26T21:41:52+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.2", + "version": "v5.4.13", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ba94559be9738d77cd29e24b5d81cf3b89b7d628" + "reference": "24cf522668845391c0542bc1de496366072a6d0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ba94559be9738d77cd29e24b5d81cf3b89b7d628", - "reference": "ba94559be9738d77cd29e24b5d81cf3b89b7d628", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/24cf522668845391c0542bc1de496366072a6d0e", + "reference": "24cf522668845391c0542bc1de496366072a6d0e", "shasum": "" }, "require": { @@ -4562,7 +4639,7 @@ "symfony/config": "<5.3", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" + "symfony/yaml": "<4.4.26" }, "provide": { "psr/container-implementation": "1.0", @@ -4571,7 +4648,7 @@ "require-dev": { "symfony/config": "^5.3|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^4.4.26|^5.0|^6.0" }, "suggest": { "symfony/config": "", @@ -4606,7 +4683,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.2" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.13" }, "funding": [ { @@ -4622,20 +4699,20 @@ "type": "tidelift" } ], - "time": "2021-12-29T10:10:35+00:00" + "time": "2022-08-30T19:10:13+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -4673,7 +4750,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, "funding": [ { @@ -4689,20 +4766,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dotenv", - "version": "v5.4.2", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "1f28b9b3edf9da7e2c4b295dcd1df291ccb498d3" + "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/1f28b9b3edf9da7e2c4b295dcd1df291ccb498d3", - "reference": "1f28b9b3edf9da7e2c4b295dcd1df291ccb498d3", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/83a2310904a4f5d4f42526227b5a578ac82232a9", + "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9", "shasum": "" }, "require": { @@ -4744,7 +4821,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v5.4.2" + "source": "https://github.com/symfony/dotenv/tree/v5.4.5" }, "funding": [ { @@ -4760,20 +4837,20 @@ "type": "tidelift" } ], - "time": "2021-12-16T21:52:00+00:00" + "time": "2022-02-15T17:04:12+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.0", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb" + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", "shasum": "" }, "require": { @@ -4829,7 +4906,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" }, "funding": [ { @@ -4845,20 +4922,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2022-05-05T16:45:39+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { @@ -4908,7 +4985,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" }, "funding": [ { @@ -4924,20 +5001,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.0", + "version": "v5.4.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51", "shasum": "" }, "require": { @@ -4972,7 +5049,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.0" + "source": "https://github.com/symfony/filesystem/tree/v5.4.13" }, "funding": [ { @@ -4988,20 +5065,20 @@ "type": "tidelift" } ], - "time": "2021-10-28T13:39:27+00:00" + "time": "2022-09-21T19:53:16+00:00" }, { "name": "symfony/finder", - "version": "v5.4.2", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e77046c252be48c48a40816187ed527703c8f76c" + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c", - "reference": "e77046c252be48c48a40816187ed527703c8f76c", + "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", "shasum": "" }, "require": { @@ -5035,7 +5112,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.2" + "source": "https://github.com/symfony/finder/tree/v5.4.11" }, "funding": [ { @@ -5051,20 +5128,20 @@ "type": "tidelift" } ], - "time": "2021-12-15T11:06:13+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.0", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b0fb78576487af19c500aaddb269fd36701d4847" + "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b0fb78576487af19c500aaddb269fd36701d4847", - "reference": "b0fb78576487af19c500aaddb269fd36701d4847", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", "shasum": "" }, "require": { @@ -5104,7 +5181,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" }, "funding": [ { @@ -5120,20 +5197,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -5148,7 +5225,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5186,7 +5263,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -5202,20 +5279,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -5227,7 +5304,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5267,7 +5344,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -5283,20 +5360,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -5308,7 +5385,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5351,7 +5428,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -5367,20 +5444,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -5395,7 +5472,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5434,7 +5511,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -5450,20 +5527,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -5472,7 +5549,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5513,7 +5590,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -5529,20 +5606,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -5551,7 +5628,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5596,7 +5673,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -5612,20 +5689,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -5634,7 +5711,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5675,7 +5752,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -5691,20 +5768,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", - "version": "v5.4.2", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4" + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", - "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", "shasum": "" }, "require": { @@ -5737,7 +5814,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.2" + "source": "https://github.com/symfony/process/tree/v5.4.11" }, "funding": [ { @@ -5753,26 +5830,26 @@ "type": "tidelift" } ], - "time": "2021-12-27T21:01:00+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -5820,7 +5897,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -5836,20 +5913,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", - "version": "v5.4.2", + "version": "v5.4.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d" + "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d", - "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d", + "url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", + "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", "shasum": "" }, "require": { @@ -5906,7 +5983,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.2" + "source": "https://github.com/symfony/string/tree/v5.4.15" }, "funding": [ { @@ -5922,20 +5999,20 @@ "type": "tidelift" } ], - "time": "2021-12-16T21:52:00+00:00" + "time": "2022-10-05T15:16:54+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.2", + "version": "v5.4.14", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58" + "reference": "e83fe9a72011f07c662da46a05603d66deeeb487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/b9eb163846a61bb32dfc147f7859e274fab38b58", - "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e83fe9a72011f07c662da46a05603d66deeeb487", + "reference": "e83fe9a72011f07c662da46a05603d66deeeb487", "shasum": "" }, "require": { @@ -5981,7 +6058,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.2" + "source": "https://github.com/symfony/yaml/tree/v5.4.14" }, "funding": [ { @@ -5997,20 +6074,20 @@ "type": "tidelift" } ], - "time": "2021-12-16T21:58:21+00:00" + "time": "2022-10-03T15:15:50+00:00" }, { "name": "szepeviktor/phpstan-wordpress", - "version": "v1.1.2", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/szepeviktor/phpstan-wordpress.git", - "reference": "e487dc725845ac914681e148d0e8ac479ad887ec" + "reference": "e644df734e1bbe95810e0f617d17df091048a94e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/e487dc725845ac914681e148d0e8ac479ad887ec", - "reference": "e487dc725845ac914681e148d0e8ac479ad887ec", + "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/e644df734e1bbe95810e0f617d17df091048a94e", + "reference": "e644df734e1bbe95810e0f617d17df091048a94e", "shasum": "" }, "require": { @@ -6054,15 +6131,19 @@ ], "support": { "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues", - "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.1.2" + "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.1.3" }, "funding": [ { "url": "https://www.paypal.me/szepeviktor", "type": "custom" + }, + { + "url": "https://github.com/szepeviktor", + "type": "github" } ], - "time": "2022-06-21T10:51:00+00:00" + "time": "2022-09-22T13:14:50+00:00" }, { "name": "theseer/tokenizer", @@ -6116,21 +6197,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -6168,9 +6249,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" }, { "name": "wp-coding-standards/wpcs", @@ -6225,16 +6306,16 @@ }, { "name": "wp-phpunit/wp-phpunit", - "version": "5.9.3", + "version": "5.9.5", "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "ceece1ed4f2d0732c4a4f2603f4376d85547a50f" + "reference": "f9b5b3a44d3677c7d4803074d81ad3cd12b0eeea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/ceece1ed4f2d0732c4a4f2603f4376d85547a50f", - "reference": "ceece1ed4f2d0732c4a4f2603f4376d85547a50f", + "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/f9b5b3a44d3677c7d4803074d81ad3cd12b0eeea", + "reference": "f9b5b3a44d3677c7d4803074d81ad3cd12b0eeea", "shasum": "" }, "type": "library", @@ -6269,7 +6350,7 @@ "issues": "https://github.com/wp-phpunit/issues", "source": "https://github.com/wp-phpunit/wp-phpunit" }, - "time": "2022-02-22T20:53:17+00:00" + "time": "2022-08-30T21:14:52+00:00" } ], "aliases": [ diff --git a/docker-compose.wp-env.yml b/docker-compose.wp-env.yml index 39e58a5..6df4bb5 100644 --- a/docker-compose.wp-env.yml +++ b/docker-compose.wp-env.yml @@ -12,7 +12,7 @@ services: volumes: - ../tools/local-env/default.template:/etc/nginx/conf.d/default.template - - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/daggerhart-openid-connect-generic + - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/hello-login - ../tools/local-env/mu-plugins:/var/www/${LOCAL_DIR-src}/wp-content/mu-plugins # Load our config file, substituning environment variables into the config. @@ -28,7 +28,7 @@ services: SMTP_PORT: ${SMTP_PORT-1025} volumes: - - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/daggerhart-openid-connect-generic/ + - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/hello-login/ - ../tools/local-env/mu-plugins:/var/www/${LOCAL_DIR-src}/wp-content/mu-plugins cli: @@ -41,7 +41,7 @@ services: SMTP_PORT: ${SMTP_PORT-1025} volumes: - - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/daggerhart-openid-connect-generic/ + - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/hello-login/ - ../tools/local-env/mu-plugins:/var/www/${LOCAL_DIR-src}/wp-content/mu-plugins phpunit: @@ -58,7 +58,7 @@ services: SMTP_PORT: ${SMTP_PORT-1025} volumes: - - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/daggerhart-openid-connect-generic/ + - ..:/var/www/${LOCAL_DIR-src}/wp-content/plugins/hello-login/ - ../tools/local-env/mu-plugins:/var/www/${LOCAL_DIR-src}/wp-content/mu-plugins ## SMTP Server + Web Interface for viewing and testing emails during development. diff --git a/openid-connect-generic.php b/hello-login.php similarity index 55% rename from openid-connect-generic.php rename to hello-login.php index b25a396..4cf2694 100644 --- a/openid-connect-generic.php +++ b/hello-login.php @@ -1,31 +1,31 @@ - * @copyright 2015-2020 daggerhart + * @author Marius Scurtescu + * @copyright 2022 Hello Identity Co-op * @license http://www.gnu.org/licenses/gpl-2.0.txt GPL-2.0+ - * @link https://github.com/daggerhart + * @link https://www.hello.dev/ * * @wordpress-plugin - * Plugin Name: OpenID Connect Generic - * Plugin URI: https://github.com/daggerhart/openid-connect-generic - * Description: Connect to an OpenID Connect generic client using Authorization Code Flow. - * Version: 3.9.1 + * Plugin Name: Hellō Login + * Plugin URI: https://github.com/hellocoop/wordpress + * Description: A login and registration plugin for the Hellō service. + * Version: 1.0.0 * Requires at least: 4.9 * Requires PHP: 7.2 - * Author: daggerhart - * Author URI: http://www.daggerhart.com - * Text Domain: daggerhart-openid-connect-generic + * Author: hellocoop + * Author URI: http://www.hello.coop + * Text Domain: hello-login * Domain Path: /languages * License: GPL-2.0+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt - * GitHub Plugin URI: https://github.com/daggerhart/openid-connect-generic + * GitHub Plugin URI: https://github.com/hellocoop/wordpress */ /* @@ -33,56 +33,52 @@ Spec Doc - http://openid.net/specs/openid-connect-basic-1_0-32.html Filters - - openid-connect-generic-alter-request - 3 args: request array, plugin settings, specific request op - - openid-connect-generic-settings-fields - modify the fields provided on the settings page - - openid-connect-generic-login-button-text - modify the login button text - - openid-connect-generic-cookie-redirect-url - modify the redirect url stored as a cookie - - openid-connect-generic-user-login-test - (bool) should the user be logged in based on their claim - - openid-connect-generic-user-creation-test - (bool) should the user be created based on their claim - - openid-connect-generic-auth-url - modify the authentication url - - openid-connect-generic-alter-user-claim - modify the user_claim before a new user is created - - openid-connect-generic-alter-user-data - modify user data before a new user is created - - openid-connect-modify-token-response-before-validation - modify the token response before validation - - openid-connect-modify-id-token-claim-before-validation - modify the token claim before validation + - hello-login-alter-request - 3 args: request array, plugin settings, specific request op + - hello-login-settings-fields - modify the fields provided on the settings page + - hello-login-user-login-test - (bool) should the user be logged in based on their claim + - hello-login-user-creation-test - (bool) should the user be created based on their claim + - hello-login-auth-url - modify the authentication url + - hello-login-alter-user-data - modify user data before a new user is created + - hello-login-modify-token-response-before-validation - modify the token response before validation + - hello-login-modify-id-token-claim-before-validation - modify the token claim before validation Actions - - openid-connect-generic-user-create - 2 args: fires when a new user is created by this plugin - - openid-connect-generic-user-update - 1 arg: user ID, fires when user is updated by this plugin - - openid-connect-generic-update-user-using-current-claim - 2 args: fires every time an existing user logs in and the claims are updated. - - openid-connect-generic-redirect-user-back - 2 args: $redirect_url, $user. Allows interruption of redirect during login. - - openid-connect-generic-user-logged-in - 1 arg: $user, fires when user is logged in. - - openid-connect-generic-cron-daily - daily cron action - - openid-connect-generic-state-not-found - the given state does not exist in the database, regardless of its expiration. - - openid-connect-generic-state-expired - the given state exists, but expired before this login attempt. + - hello-login-user-create - 2 args: fires when a new user is created by this plugin + - hello-login-user-update - 1 arg: user ID, fires when user is updated by this plugin + - hello-login-update-user-using-current-claim - 2 args: fires every time an existing user logs in and the claims are updated. + - hello-login-redirect-user-back - 2 args: $redirect_url, $user. Allows interruption of redirect during login. + - hello-login-user-logged-in - 1 arg: $user, fires when user is logged in. + - hello-login-cron-daily - daily cron action + - hello-login-state-not-found - the given state does not exist in the database, regardless of its expiration. + - hello-login-state-expired - the given state exists, but expired before this login attempt. Callable actions User Meta - - openid-connect-generic-subject-identity - the identity of the user provided by the idp - - openid-connect-generic-last-id-token-claim - the user's most recent id_token claim, decoded - - openid-connect-generic-last-user-claim - the user's most recent user_claim - - openid-connect-generic-last-token-response - the user's most recent token response + - hello-login-subject-identity - the identity of the user provided by the idp + - hello-login-last-id-token-claim - the user's most recent id_token claim, decoded + - hello-login-last-user-claim - the user's most recent user_claim + - hello-login-last-token-response - the user's most recent token response Options - - openid_connect_generic_settings - plugin settings - - openid-connect-generic-valid-states - locally stored generated states + - hello_login_settings - plugin settings */ /** - * OpenID_Connect_Generic class. + * Hello_Login class. * * Defines plugin initialization functionality. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category General */ -class OpenID_Connect_Generic { +class Hello_Login { /** * Singleton instance of self * - * @var OpenID_Connect_Generic + * @var Hello_Login */ protected static $_instance = null; @@ -91,45 +87,45 @@ class OpenID_Connect_Generic { * * @var string */ - const VERSION = '3.9.1'; + const VERSION = '1.0.0'; /** * Plugin settings. * - * @var OpenID_Connect_Generic_Option_Settings + * @var Hello_Login_Option_Settings */ private $settings; /** * Plugin logs. * - * @var OpenID_Connect_Generic_Option_Logger + * @var Hello_Login_Option_Logger */ private $logger; /** - * Openid Connect Generic client + * Hellō Login client * - * @var OpenID_Connect_Generic_Client + * @var Hello_Login_Client */ private $client; /** * Client wrapper. * - * @var OpenID_Connect_Generic_Client_Wrapper + * @var Hello_Login_Client_Wrapper */ public $client_wrapper; /** * Setup the plugin * - * @param OpenID_Connect_Generic_Option_Settings $settings The settings object. - * @param OpenID_Connect_Generic_Option_Logger $logger The loggin object. + * @param Hello_Login_Option_Settings $settings The settings object. + * @param Hello_Login_Option_Logger $logger The loggin object. * * @return void */ - public function __construct( OpenID_Connect_Generic_Option_Settings $settings, OpenID_Connect_Generic_Option_Logger $logger ) { + public function __construct( Hello_Login_Option_Settings $settings, Hello_Login_Option_Logger $logger ) { $this->settings = $settings; $this->logger = $logger; self::$_instance = $this; @@ -142,10 +138,10 @@ public function __construct( OpenID_Connect_Generic_Option_Settings $settings, O */ public function init() { - $redirect_uri = admin_url( 'admin-ajax.php?action=openid-connect-authorize' ); + $redirect_uri = admin_url( 'admin-ajax.php?action=hello-login-callback' ); if ( $this->settings->alternate_redirect_uri ) { - $redirect_uri = site_url( '/openid-connect-authorize' ); + $redirect_uri = site_url( '/hello-login-callback' ); } $state_time_limit = 180; @@ -153,7 +149,7 @@ public function init() { $state_time_limit = intval( $this->settings->state_time_limit ); } - $this->client = new OpenID_Connect_Generic_Client( + $this->client = new Hello_Login_Client( $this->settings->client_id, $this->settings->client_secret, $this->settings->scope, @@ -166,23 +162,23 @@ public function init() { $this->logger ); - $this->client_wrapper = OpenID_Connect_Generic_Client_Wrapper::register( $this->client, $this->settings, $this->logger ); + $this->client_wrapper = Hello_Login_Client_Wrapper::register( $this->client, $this->settings, $this->logger ); if ( defined( 'WP_CLI' ) && WP_CLI ) { return; } - OpenID_Connect_Generic_Login_Form::register( $this->settings, $this->client_wrapper ); + Hello_Login_Login_Form::register( $this->settings, $this->client_wrapper ); // Add a shortcode to get the auth URL. - add_shortcode( 'openid_connect_generic_auth_url', array( $this->client_wrapper, 'get_authentication_url' ) ); + add_shortcode( 'hello_login_auth_url', array( $this->client_wrapper, 'get_authentication_url' ) ); // Add actions to our scheduled cron jobs. - add_action( 'openid-connect-generic-cron-daily', array( $this, 'cron_states_garbage_collection' ) ); + add_action( 'hello-login-cron-daily', array( $this, 'cron_states_garbage_collection' ) ); $this->upgrade(); if ( is_admin() ) { - OpenID_Connect_Generic_Settings_Page::register( $this->settings, $this->logger ); + Hello_Login_Settings_Page::register( $this->settings, $this->logger ); } } @@ -195,7 +191,7 @@ public function init() { public function enforce_privacy_redirect() { if ( $this->settings->enforce_privacy && ! is_user_logged_in() ) { // The client endpoint relies on the wp-admin ajax endpoint. - if ( ! defined( 'DOING_AJAX' ) || ! constant( 'DOING_AJAX' ) || ! isset( $_GET['action'] ) || 'openid-connect-authorize' != $_GET['action'] ) { + if ( ! defined( 'DOING_AJAX' ) || ! constant( 'DOING_AJAX' ) || ! isset( $_GET['action'] ) || 'hello-login-callback' != $_GET['action'] ) { auth_redirect(); } } @@ -210,7 +206,7 @@ public function enforce_privacy_redirect() { */ public function enforce_privacy_feeds( $content ) { if ( $this->settings->enforce_privacy && ! is_user_logged_in() ) { - $content = __( 'Private site', 'daggerhart-openid-connect-generic' ); + $content = __( 'Private site', 'hello-login' ); } return $content; } @@ -221,7 +217,7 @@ public function enforce_privacy_feeds( $content ) { * @return void */ public function upgrade() { - $last_version = get_option( 'openid-connect-generic-plugin-version', 0 ); + $last_version = get_option( 'hello-login-plugin-version', 0 ); $settings = $this->settings; if ( version_compare( self::VERSION, $last_version, '>' ) ) { @@ -239,7 +235,7 @@ public function upgrade() { } // Update the stored version number. - update_option( 'openid-connect-generic-plugin-version', self::VERSION ); + update_option( 'hello-login-plugin-version', self::VERSION ); } } @@ -251,7 +247,7 @@ public function upgrade() { */ public function cron_states_garbage_collection() { global $wpdb; - $states = $wpdb->get_col( "SELECT `option_name` FROM {$wpdb->options} WHERE `option_name` LIKE '_transient_openid-connect-generic-state--%'" ); + $states = $wpdb->get_col( "SELECT `option_name` FROM {$wpdb->options} WHERE `option_name` LIKE '_transient_hello-login-state--%'" ); if ( ! empty( $states ) ) { foreach ( $states as $state ) { @@ -267,8 +263,8 @@ public function cron_states_garbage_collection() { * @return void */ public static function setup_cron_jobs() { - if ( ! wp_next_scheduled( 'openid-connect-generic-cron-daily' ) ) { - wp_schedule_event( time(), 'daily', 'openid-connect-generic-cron-daily' ); + if ( ! wp_next_scheduled( 'hello-login-cron-daily' ) ) { + wp_schedule_event( time(), 'daily', 'hello-login-cron-daily' ); } } @@ -287,7 +283,7 @@ public static function activation() { * @return void */ public static function deactivation() { - wp_clear_scheduled_hook( 'openid-connect-generic-cron-daily' ); + wp_clear_scheduled_hook( 'hello-login-cron-daily' ); } /** @@ -298,7 +294,7 @@ public static function deactivation() { * @return void */ public static function autoload( $class ) { - $prefix = 'OpenID_Connect_Generic_'; + $prefix = 'Hello_Login_'; if ( stripos( $class, $prefix ) !== 0 ) { return; @@ -331,36 +327,37 @@ public static function bootstrap() { * * @link https://www.php.net/manual/en/function.spl-autoload-register.php#71155 */ - spl_autoload_register( array( 'OpenID_Connect_Generic', 'autoload' ) ); + spl_autoload_register( array( 'Hello_Login', 'autoload' ) ); - $settings = new OpenID_Connect_Generic_Option_Settings( - 'openid_connect_generic_settings', + $settings = new Hello_Login_Option_Settings( + 'hello_login_settings', // Default settings values. array( // OAuth client settings. 'login_type' => defined( 'OIDC_LOGIN_TYPE' ) ? OIDC_LOGIN_TYPE : 'button', 'client_id' => defined( 'OIDC_CLIENT_ID' ) ? OIDC_CLIENT_ID : '', 'client_secret' => defined( 'OIDC_CLIENT_SECRET' ) ? OIDC_CLIENT_SECRET : '', - 'scope' => defined( 'OIDC_CLIENT_SCOPE' ) ? OIDC_CLIENT_SCOPE : '', - 'endpoint_login' => defined( 'OIDC_ENDPOINT_LOGIN_URL' ) ? OIDC_ENDPOINT_LOGIN_URL : '', - 'endpoint_userinfo' => defined( 'OIDC_ENDPOINT_USERINFO_URL' ) ? OIDC_ENDPOINT_USERINFO_URL : '', - 'endpoint_token' => defined( 'OIDC_ENDPOINT_TOKEN_URL' ) ? OIDC_ENDPOINT_TOKEN_URL : '', + 'scope' => defined( 'OIDC_CLIENT_SCOPE' ) ? OIDC_CLIENT_SCOPE : 'openid name nickname email', + 'endpoint_login' => defined( 'OIDC_ENDPOINT_LOGIN_URL' ) ? OIDC_ENDPOINT_LOGIN_URL : 'https://wallet.hello.coop/authorize', + 'endpoint_userinfo' => defined( 'OIDC_ENDPOINT_USERINFO_URL' ) ? OIDC_ENDPOINT_USERINFO_URL : 'https://wallet.hello.coop/oauth/userinfo', + 'endpoint_token' => defined( 'OIDC_ENDPOINT_TOKEN_URL' ) ? OIDC_ENDPOINT_TOKEN_URL : 'https://wallet.hello.coop/oauth/token', 'endpoint_end_session' => defined( 'OIDC_ENDPOINT_LOGOUT_URL' ) ? OIDC_ENDPOINT_LOGOUT_URL : '', 'acr_values' => defined( 'OIDC_ACR_VALUES' ) ? OIDC_ACR_VALUES : '', + 'enable_pkce' => defined( 'OIDC_ENABLE_PKCE' ) ? OIDC_ENABLE_PKCE : true, // Non-standard settings. 'no_sslverify' => 0, 'http_request_timeout' => 5, - 'identity_key' => 'preferred_username', - 'nickname_key' => 'preferred_username', + 'identity_key' => 'sub', + 'nickname_key' => 'nickname', 'email_format' => '{email}', - 'displayname_format' => '', + 'displayname_format' => '{name}', 'identify_with_username' => false, // Plugin settings. 'enforce_privacy' => defined( 'OIDC_ENFORCE_PRIVACY' ) ? intval( OIDC_ENFORCE_PRIVACY ) : 0, 'alternate_redirect_uri' => 0, - 'token_refresh_enable' => 1, + 'token_refresh_enable' => 0, 'link_existing_users' => defined( 'OIDC_LINK_EXISTING_USERS' ) ? intval( OIDC_LINK_EXISTING_USERS ) : 0, 'create_if_does_not_exist' => defined( 'OIDC_CREATE_IF_DOES_NOT_EXIST' ) ? intval( OIDC_CREATE_IF_DOES_NOT_EXIST ) : 1, 'redirect_user_back' => defined( 'OIDC_REDIRECT_USER_BACK' ) ? intval( OIDC_REDIRECT_USER_BACK ) : 0, @@ -370,7 +367,7 @@ public static function bootstrap() { ) ); - $logger = new OpenID_Connect_Generic_Option_Logger( 'openid-connect-generic-logs', 'error', $settings->enable_logging, $settings->log_limit ); + $logger = new Hello_Login_Option_Logger( 'hello-login-logs', 'error', $settings->enable_logging, $settings->log_limit ); $plugin = new self( $settings, $logger ); @@ -386,7 +383,7 @@ public static function bootstrap() { /** * Create (if needed) and return a singleton of self. * - * @return OpenID_Connect_Generic + * @return Hello_Login */ public static function instance() { if ( null === self::$_instance ) { @@ -396,10 +393,10 @@ public static function instance() { } } -OpenID_Connect_Generic::instance(); +Hello_Login::instance(); -register_activation_hook( __FILE__, array( 'OpenID_Connect_Generic', 'activation' ) ); -register_deactivation_hook( __FILE__, array( 'OpenID_Connect_Generic', 'deactivation' ) ); +register_activation_hook( __FILE__, array( 'Hello_Login', 'activation' ) ); +register_deactivation_hook( __FILE__, array( 'Hello_Login', 'deactivation' ) ); // Provide publicly accessible plugin helper functions. require_once( 'includes/functions.php' ); diff --git a/includes/functions.php b/includes/functions.php index 832328f..13df8bb 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -2,7 +2,7 @@ /** * Global OIDCG functions. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart * @license http://www.gnu.org/licenses/gpl-2.0.txt GPL-2.0+ @@ -14,7 +14,7 @@ * @return string */ function oidcg_get_authentication_url() { - return \OpenID_Connect_Generic::instance()->client_wrapper->get_authentication_url(); + return \Hello_Login::instance()->client_wrapper->get_authentication_url(); } /** @@ -26,5 +26,14 @@ function oidcg_get_authentication_url() { * @return WP_Error|array */ function oidcg_refresh_user_claim( $user, $token_response ) { - return \OpenID_Connect_Generic::instance()->client_wrapper->refresh_user_claim( $user, $token_response ); + return \Hello_Login::instance()->client_wrapper->refresh_user_claim( $user, $token_response ); } + +function hello_login_enqueue_scripts_and_styles() { + wp_enqueue_script( 'hello-button', 'https://cdn.hello.coop/js/hello-btn.js' ); + wp_enqueue_style( 'hello-button', 'https://cdn.hello.coop/css/hello-btn.css' ); +} + +add_action( 'wp_enqueue_scripts', 'hello_login_enqueue_scripts_and_styles' ); +add_action( 'login_enqueue_scripts', 'hello_login_enqueue_scripts_and_styles' ); +add_action( 'admin_enqueue_scripts', 'hello_login_enqueue_scripts_and_styles' ); diff --git a/includes/openid-connect-generic-client-wrapper.php b/includes/hello-login-client-wrapper.php similarity index 81% rename from includes/openid-connect-generic-client-wrapper.php rename to includes/hello-login-client-wrapper.php index 19a8fce..b04505f 100644 --- a/includes/openid-connect-generic-client-wrapper.php +++ b/includes/hello-login-client-wrapper.php @@ -2,7 +2,7 @@ /** * Plugin OIDC/oAuth client warpper class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Authentication * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart @@ -12,33 +12,33 @@ use \WP_Error as WP_Error; /** - * OpenID_Connect_Generic_Client_Wrapper class. + * Hello_Login_Client_Wrapper class. * * Plugin OIDC/oAuth client wrapper class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Authentication */ -class OpenID_Connect_Generic_Client_Wrapper { +class Hello_Login_Client_Wrapper { /** * The client object instance. * - * @var OpenID_Connect_Generic_Client + * @var Hello_Login_Client */ private $client; /** * The settings object instance. * - * @var OpenID_Connect_Generic_Option_Settings + * @var Hello_Login_Option_Settings */ private $settings; /** * The logger object instance. * - * @var OpenID_Connect_Generic_Option_Logger + * @var Hello_Login_Option_Logger */ private $logger; @@ -47,7 +47,7 @@ class OpenID_Connect_Generic_Client_Wrapper { * * @var string */ - private $cookie_token_refresh_key = 'openid-connect-generic-refresh'; + private $cookie_token_refresh_key = 'hello-login-refresh'; /** * The user redirect cookie key. @@ -56,7 +56,7 @@ class OpenID_Connect_Generic_Client_Wrapper { * * @var string */ - public $cookie_redirect_key = 'openid-connect-generic-redirect'; + public $cookie_redirect_key = 'hello-login-redirect'; /** * The return error onject. @@ -70,11 +70,11 @@ class OpenID_Connect_Generic_Client_Wrapper { /** * Inject necessary objects and services into the client. * - * @param OpenID_Connect_Generic_Client $client A plugin client object instance. - * @param OpenID_Connect_Generic_Option_Settings $settings A plugin settings object instance. - * @param OpenID_Connect_Generic_Option_Logger $logger A plugin logger object instance. + * @param Hello_Login_Client $client A plugin client object instance. + * @param Hello_Login_Option_Settings $settings A plugin settings object instance. + * @param Hello_Login_Option_Logger $logger A plugin logger object instance. */ - public function __construct( OpenID_Connect_Generic_Client $client, OpenID_Connect_Generic_Option_Settings $settings, OpenID_Connect_Generic_Option_Logger $logger ) { + public function __construct( Hello_Login_Client $client, Hello_Login_Option_Settings $settings, Hello_Login_Option_Logger $logger ) { $this->client = $client; $this->settings = $settings; $this->logger = $logger; @@ -83,13 +83,13 @@ public function __construct( OpenID_Connect_Generic_Client $client, OpenID_Conne /** * Hook the client into WordPress. * - * @param \OpenID_Connect_Generic_Client $client The plugin client instance. - * @param \OpenID_Connect_Generic_Option_Settings $settings The plugin settings instance. - * @param \OpenID_Connect_Generic_Option_Logger $logger The plugin logger instance. + * @param \Hello_Login_Client $client The plugin client instance. + * @param \Hello_Login_Option_Settings $settings The plugin settings instance. + * @param \Hello_Login_Option_Logger $logger The plugin logger instance. * - * @return \OpenID_Connect_Generic_Client_Wrapper + * @return \Hello_Login_Client_Wrapper */ - public static function register( OpenID_Connect_Generic_Client $client, OpenID_Connect_Generic_Option_Settings $settings, OpenID_Connect_Generic_Option_Logger $logger ) { + public static function register( Hello_Login_Client $client, Hello_Login_Option_Settings $settings, Hello_Login_Option_Logger $logger ) { $client_wrapper = new self( $client, $settings, $logger ); // Integrated logout. @@ -99,21 +99,21 @@ public static function register( OpenID_Connect_Generic_Client $client, OpenID_C } // Alter the requests according to settings. - add_filter( 'openid-connect-generic-alter-request', array( $client_wrapper, 'alter_request' ), 10, 3 ); + add_filter( 'hello-login-alter-request', array( $client_wrapper, 'alter_request' ), 10, 3 ); if ( is_admin() ) { /* * Use the ajax url to handle processing authorization without any html output * this callback will occur when then IDP returns with an authenticated value */ - add_action( 'wp_ajax_openid-connect-authorize', array( $client_wrapper, 'authentication_request_callback' ) ); - add_action( 'wp_ajax_nopriv_openid-connect-authorize', array( $client_wrapper, 'authentication_request_callback' ) ); + add_action( 'wp_ajax_hello-login-callback', array( $client_wrapper, 'authentication_request_callback' ) ); + add_action( 'wp_ajax_nopriv_hello-login-callback', array( $client_wrapper, 'authentication_request_callback' ) ); } if ( $settings->alternate_redirect_uri ) { // Provide an alternate route for authentication_request_callback. - add_rewrite_rule( '^openid-connect-authorize/?', 'index.php?openid-connect-authorize=1', 'top' ); - add_rewrite_tag( '%openid-connect-authorize%', '1' ); + add_rewrite_rule( '^hello-login-callback/?', 'index.php?hello-login-callback=1', 'top' ); + add_rewrite_tag( '%hello-login-callback%', '1' ); add_action( 'parse_request', array( $client_wrapper, 'alternate_redirect_uri_parse_request' ) ); } @@ -122,6 +122,11 @@ public static function register( OpenID_Connect_Generic_Client $client, OpenID_C add_action( 'wp_loaded', array( $client_wrapper, 'ensure_tokens_still_fresh' ) ); } + // Modify authentication-token request to include PKCE code verifier. + if ( true === (bool) $settings->enable_pkce ) { + add_filter( 'hello-login-alter-request', array( $client_wrapper, 'alter_authentication_token_request' ), 15, 3 ); + } + return $client_wrapper; } @@ -133,8 +138,8 @@ public static function register( OpenID_Connect_Generic_Client $client, OpenID_C * @return mixed */ public function alternate_redirect_uri_parse_request( $query ) { - if ( isset( $query->query_vars['openid-connect-authorize'] ) && - '1' === $query->query_vars['openid-connect-authorize'] ) { + if ( isset( $query->query_vars['hello-login-callback'] ) && + '1' === $query->query_vars['hello-login-callback'] ) { $this->authentication_request_callback(); exit; } @@ -183,16 +188,7 @@ public function get_redirect_to() { } } - // This hook is being deprecated with the move away from cookies. - $redirect_url = apply_filters_deprecated( - 'openid-connect-generic-cookie-redirect-url', - array( $redirect_url ), - '3.8.2', - 'openid-connect-generic-client-redirect-to' - ); - - // This is the new hook to use with the transients version of redirection. - return apply_filters( 'openid-connect-generic-client-redirect-to', $redirect_url ); + return $redirect_url; } /** @@ -214,7 +210,7 @@ public function get_authentication_url( $atts = array() ) { 'acr_values' => $this->settings->acr_values, ), $atts, - 'openid_connect_generic_auth_url' + 'hello_login_auth_url' ); // Validate the redirect to value to prevent a redirection attack. @@ -232,19 +228,28 @@ public function get_authentication_url( $atts = array() ) { $url_format .= '&acr_values=%7$s'; } + if ( true === (bool) $this->settings->enable_pkce ) { + $pkce_data = $this->pkce_code_generator(); + if ( false !== $pkce_data ) { + $url_format .= '&code_challenge=%8$s&code_challenge_method=%9$s'; + } + } + $url = sprintf( $url_format, $atts['endpoint_login'], $separator, rawurlencode( $atts['scope'] ), rawurlencode( $atts['client_id'] ), - $this->client->new_state( $atts['redirect_to'] ), + $this->client->new_state( $atts['redirect_to'], $pkce_data['code_verifier'] ?? '' ), rawurlencode( $atts['redirect_uri'] ), - rawurlencode( $atts['acr_values'] ) + rawurlencode( $atts['acr_values'] ), + rawurlencode( $pkce_data['code_challenge'] ?? '' ), + rawurlencode( $pkce_data['code_challenge_method'] ?? '' ) ); - $this->logger->log( apply_filters( 'openid-connect-generic-auth-url', $url ), 'make_authentication_url' ); - return apply_filters( 'openid-connect-generic-auth-url', $url ); + $this->logger->log( apply_filters( 'hello-login-auth-url', $url ), 'make_authentication_url' ); + return apply_filters( 'hello-login-auth-url', $url ); } /** @@ -281,11 +286,11 @@ public function ensure_tokens_still_fresh() { if ( ! $refresh_token || ( $refresh_expires && $current_time > $refresh_expires ) ) { if ( isset( $_SERVER['REQUEST_URI'] ) ) { - do_action( 'openid-connect-generic-session-expired', wp_get_current_user(), esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + do_action( 'hello-login-session-expired', wp_get_current_user(), esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); wp_logout(); if ( $this->settings->redirect_on_logout ) { - $this->error_redirect( new WP_Error( 'access-token-expired', __( 'Session expired. Please login again.', 'daggerhart-openid-connect-generic' ) ) ); + $this->error_redirect( new WP_Error( 'access-token-expired', __( 'Session expired. Please login again.', 'hello-login' ) ) ); } return; @@ -306,7 +311,7 @@ public function ensure_tokens_still_fresh() { $this->error_redirect( $token_response ); } - update_user_meta( $user_id, 'openid-connect-generic-last-token-response', $token_response ); + update_user_meta( $user_id, 'hello-login-last-token-response', $token_response ); $this->save_refresh_token( $manager, $token, $token_response ); } @@ -376,7 +381,7 @@ public function get_end_session_logout_redirect_url( $redirect_url, $requested_r $redirect_url = home_url(); } - $token_response = $user->get( 'openid-connect-generic-last-token-response' ); + $token_response = $user->get( 'hello-login-last-token-response' ); if ( ! $token_response ) { // Happens if non-openid login was used. return $redirect_url; @@ -385,7 +390,7 @@ public function get_end_session_logout_redirect_url( $redirect_url, $requested_r $redirect_url = site_url( $redirect_url ); } - $claim = $user->get( 'openid-connect-generic-last-id-token-claim' ); + $claim = $user->get( 'hello-login-last-id-token-claim' ); if ( isset( $claim['iss'] ) && 'https://accounts.google.com' == $claim['iss'] ) { /* @@ -422,6 +427,31 @@ public function alter_request( $request, $operation ) { return $request; } + /** + * Include PKCE code verifier in authentication token request. + * + * @param array $request The outgoing request array. + * @param string $operation The request operation name. + * + * @return mixed + */ + public function alter_authentication_token_request( $request, $operation ) { + if ( 'get-authentication-token' !== $operation ) { + return $request; + } + + $code_verifier = ''; + $state = $_GET['state'] ?? ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- Sanitized later if not empty. + if ( ! empty( $state ) ) { + $state_object = get_transient( 'hello-login-state--' . sanitize_text_field( $state ) ); + $code_verifier = $state_object[ $state ]['code_verifier'] ?? ''; + } + + $request['body']['code_verifier'] = $code_verifier; + + return $request; + } + /** * Control the authentication and subsequent authorization of the user when * returning from the IDP. @@ -463,7 +493,7 @@ public function authentication_request_callback() { $token_response = $client->get_token_response( $token_result ); // Allow for other plugins to alter data before validation. - $token_response = apply_filters( 'openid-connect-modify-token-response-before-validation', $token_response ); + $token_response = apply_filters( 'hello-login-modify-token-response-before-validation', $token_response ); if ( is_wp_error( $token_response ) ) { $this->error_redirect( $token_response ); @@ -484,7 +514,7 @@ public function authentication_request_callback() { $id_token_claim = $client->get_id_token_claim( $token_response ); // Allow for other plugins to alter data before validation. - $id_token_claim = apply_filters( 'openid-connect-modify-id-token-claim-before-validation', $id_token_claim ); + $id_token_claim = apply_filters( 'hello-login-modify-id-token-claim-before-validation', $id_token_claim ); if ( is_wp_error( $id_token_claim ) ) { $this->error_redirect( $id_token_claim ); @@ -532,7 +562,7 @@ public function authentication_request_callback() { $this->error_redirect( $user ); } } else { - $this->error_redirect( new WP_Error( 'identity-not-map-existing-user', __( 'User identity is not linked to an existing WordPress user.', 'daggerhart-openid-connect-generic' ), $user_claim ) ); + $this->error_redirect( new WP_Error( 'identity-not-map-existing-user', __( 'User identity is not linked to an existing WordPress user.', 'hello-login' ), $user_claim ) ); } } @@ -547,7 +577,7 @@ public function authentication_request_callback() { $this->login_user( $user, $token_response, $id_token_claim, $user_claim, $subject_identity ); // Allow plugins / themes to take action once a user is logged in. - do_action( 'openid-connect-generic-user-logged-in', $user ); + do_action( 'hello-login-user-logged-in', $user ); // Log our success. $this->logger->log( "Successful login for: {$user->user_login} ({$user->ID})", 'login-success' ); @@ -555,7 +585,7 @@ public function authentication_request_callback() { // Default redirect to the homepage. $redirect_url = home_url(); // Redirect user according to redirect set in state. - $state_object = get_transient( 'openid-connect-generic-state--' . $state ); + $state_object = get_transient( 'hello-login-state--' . $state ); // Get the redirect URL stored with the corresponding authentication request state. if ( ! empty( $state_object ) && ! empty( $state_object[ $state ] ) && ! empty( $state_object[ $state ]['redirect_to'] ) ) { $redirect_url = $state_object[ $state ]['redirect_to']; @@ -568,7 +598,7 @@ public function authentication_request_callback() { // Only do redirect-user-back action hook when the plugin is configured for it. if ( $this->settings->redirect_user_back ) { - do_action( 'openid-connect-generic-redirect-user-back', $redirect_url, $user ); + do_action( 'hello-login-redirect-user-back', $redirect_url, $user ); } wp_redirect( $redirect_url ); @@ -586,7 +616,7 @@ public function authentication_request_callback() { public function validate_user( $user ) { // Ensure the found user is a real WP_User. if ( ! is_a( $user, 'WP_User' ) || ! $user->exists() ) { - return new WP_Error( 'invalid-user', __( 'Invalid user.', 'daggerhart-openid-connect-generic' ), $user ); + return new WP_Error( 'invalid-user', __( 'Invalid user.', 'hello-login' ), $user ); } return true; @@ -611,7 +641,7 @@ public function refresh_user_claim( $user, $token_response ) { $id_token_claim = $client->get_id_token_claim( $token_response ); // Allow for other plugins to alter data before validation. - $id_token_claim = apply_filters( 'openid-connect-modify-id-token-claim-before-validation', $id_token_claim ); + $id_token_claim = apply_filters( 'hello-login-modify-id-token-claim-before-validation', $id_token_claim ); if ( is_wp_error( $id_token_claim ) ) { return $id_token_claim; @@ -644,9 +674,9 @@ public function refresh_user_claim( $user, $token_response ) { } // Store the tokens for future reference. - update_user_meta( $user->ID, 'openid-connect-generic-last-token-response', $token_response ); - update_user_meta( $user->ID, 'openid-connect-generic-last-id-token-claim', $id_token_claim ); - update_user_meta( $user->ID, 'openid-connect-generic-last-user-claim', $user_claim ); + update_user_meta( $user->ID, 'hello-login-last-token-response', $token_response ); + update_user_meta( $user->ID, 'hello-login-last-id-token-claim', $id_token_claim ); + update_user_meta( $user->ID, 'hello-login-last-user-claim', $user_claim ); return $user_claim; } @@ -664,11 +694,11 @@ public function refresh_user_claim( $user, $token_response ) { */ public function login_user( $user, $token_response, $id_token_claim, $user_claim, $subject_identity ) { // Store the tokens for future reference. - update_user_meta( $user->ID, 'openid-connect-generic-last-token-response', $token_response ); - update_user_meta( $user->ID, 'openid-connect-generic-last-id-token-claim', $id_token_claim ); - update_user_meta( $user->ID, 'openid-connect-generic-last-user-claim', $user_claim ); + update_user_meta( $user->ID, 'hello-login-last-token-response', $token_response ); + update_user_meta( $user->ID, 'hello-login-last-id-token-claim', $id_token_claim ); + update_user_meta( $user->ID, 'hello-login-last-user-claim', $user_claim ); // Allow plugins / themes to take action using current claims on existing user (e.g. update role). - do_action( 'openid-connect-generic-update-user-using-current-claim', $user, $user_claim ); + do_action( 'hello-login-update-user-using-current-claim', $user, $user_claim ); // Create the WP session, so we know its token. $expiration = time() + apply_filters( 'auth_cookie_expiration', 2 * DAY_IN_SECONDS, $user->ID, false ); @@ -721,12 +751,12 @@ public function save_refresh_token( $manager, $token, $token_response ) { * @return false|WP_User */ public function get_user_by_identity( $subject_identity ) { - // Look for user by their openid-connect-generic-subject-identity value. + // Look for user by their hello-login-subject-identity value. $user_query = new WP_User_Query( array( 'meta_query' => array( array( - 'key' => 'openid-connect-generic-subject-identity', + 'key' => 'hello-login-subject-identity', 'value' => $subject_identity, ), ), @@ -772,7 +802,7 @@ private function get_username_from_claim( $user_claim ) { } if ( empty( $desired_username ) ) { // Nothing to build a name from. - return new WP_Error( 'no-username', __( 'No appropriate username found.', 'daggerhart-openid-connect-generic' ), $user_claim ); + return new WP_Error( 'no-username', __( 'No appropriate username found.', 'hello-login' ), $user_claim ); } // Don't use the full email address for a username. @@ -782,7 +812,7 @@ private function get_username_from_claim( $user_claim ) { $sanitized_username = sanitize_user( $desired_username, true ); if ( empty( $sanitized_username ) ) { // translators: %1$s is the santitized version of the username from the IDP. - return new WP_Error( 'username-sanitization-failed', sprintf( __( 'Username %1$s could not be sanitized.', 'daggerhart-openid-connect-generic' ), $desired_username ), $desired_username ); + return new WP_Error( 'username-sanitization-failed', sprintf( __( 'Username %1$s could not be sanitized.', 'hello-login' ), $desired_username ), $desired_username ); } return $sanitized_username; @@ -804,7 +834,7 @@ private function get_nickname_from_claim( $user_claim ) { if ( empty( $desired_nickname ) ) { // translators: %1$s is the configured User Claim nickname key. - return new WP_Error( 'no-nickname', sprintf( __( 'No nickname found in user claim using key: %1$s.', 'daggerhart-openid-connect-generic' ), $this->settings->nickname_key ), $this->settings->nickname_key ); + return new WP_Error( 'no-nickname', sprintf( __( 'No nickname found in user claim using key: %1$s.', 'hello-login' ), $this->settings->nickname_key ), $this->settings->nickname_key ); } return $desired_nickname; @@ -901,7 +931,7 @@ private function format_string_with_claim( $format, $user_claim, $error_on_missi if ( $error_on_missing_key ) { return new WP_Error( 'incomplete-user-claim', - __( 'User claim incomplete.', 'daggerhart-openid-connect-generic' ), + __( 'User claim incomplete.', 'hello-login' ), array( 'message' => 'Unable to find key: ' . $key . ' in user_claim', 'hint' => 'Verify OpenID Scope includes a scope with the attributes you need', @@ -959,8 +989,6 @@ private function get_email_from_claim( $user_claim, $error_on_missing_key = fals * @return \WP_Error | \WP_User */ public function create_new_user( $subject_identity, $user_claim ) { - $user_claim = apply_filters( 'openid-connect-generic-alter-user-claim', $user_claim ); - // Default username & email to the subject identity. $username = $subject_identity; $email = $subject_identity; @@ -1003,7 +1031,7 @@ public function create_new_user( $subject_identity, $user_claim ) { // Make sure we didn't get an error. if ( is_wp_error( $user_claim_result ) ) { - return new WP_Error( 'bad-user-claim-result', __( 'Bad user claim result.', 'daggerhart-openid-connect-generic' ), $user_claim_result ); + return new WP_Error( 'bad-user-claim-result', __( 'Bad user claim result.', 'hello-login' ), $user_claim_result ); } $user_claim = json_decode( $user_claim_result['body'], true ); @@ -1055,7 +1083,7 @@ public function create_new_user( $subject_identity, $user_claim ) { } if ( ! empty( $uid ) ) { $user = $this->update_existing_user( $uid, $subject_identity ); - do_action( 'openid-connect-generic-update-user-using-current-claim', $user, $user_claim ); + do_action( 'hello-login-update-user-using-current-claim', $user, $user_claim ); return $user; } } @@ -1064,10 +1092,10 @@ public function create_new_user( $subject_identity, $user_claim ) { * Allow other plugins / themes to determine authorization of new accounts * based on the returned user claim. */ - $create_user = apply_filters( 'openid-connect-generic-user-creation-test', $this->settings->create_if_does_not_exist, $user_claim ); + $create_user = apply_filters( 'hello-login-user-creation-test', $this->settings->create_if_does_not_exist, $user_claim ); if ( ! $create_user ) { - return new WP_Error( 'cannot-authorize', __( 'Can not authorize.', 'daggerhart-openid-connect-generic' ), $create_user ); + return new WP_Error( 'cannot-authorize', __( 'Can not authorize.', 'hello-login' ), $create_user ); } // Copy the username for incrementing. @@ -1089,27 +1117,27 @@ public function create_new_user( $subject_identity, $user_claim ) { 'first_name' => isset( $user_claim['given_name'] ) ? $user_claim['given_name'] : '', 'last_name' => isset( $user_claim['family_name'] ) ? $user_claim['family_name'] : '', ); - $user_data = apply_filters( 'openid-connect-generic-alter-user-data', $user_data, $user_claim ); + $user_data = apply_filters( 'hello-login-alter-user-data', $user_data, $user_claim ); // Create the new user. $uid = wp_insert_user( $user_data ); // Make sure we didn't fail in creating the user. if ( is_wp_error( $uid ) ) { - return new WP_Error( 'failed-user-creation', __( 'Failed user creation.', 'daggerhart-openid-connect-generic' ), $uid ); + return new WP_Error( 'failed-user-creation', __( 'Failed user creation.', 'hello-login' ), $uid ); } // Retrieve our new user. $user = get_user_by( 'id', $uid ); // Save some meta data about this new user for the future. - add_user_meta( $user->ID, 'openid-connect-generic-subject-identity', (string) $subject_identity, true ); + add_user_meta( $user->ID, 'hello-login-subject-identity', (string) $subject_identity, true ); // Log the results. $this->logger->log( "New user created: {$user->user_login} ($uid)", 'success' ); // Allow plugins / themes to take action on new user creation. - do_action( 'openid-connect-generic-user-create', $user, $user_claim ); + do_action( 'hello-login-user-create', $user, $user_claim ); return $user; } @@ -1124,12 +1152,44 @@ public function create_new_user( $subject_identity, $user_claim ) { */ public function update_existing_user( $uid, $subject_identity ) { // Add the OpenID Connect meta data. - update_user_meta( $uid, 'openid-connect-generic-subject-identity', strval( $subject_identity ) ); + update_user_meta( $uid, 'hello-login-subject-identity', strval( $subject_identity ) ); // Allow plugins / themes to take action on user update. - do_action( 'openid-connect-generic-user-update', $uid ); + do_action( 'hello-login-user-update', $uid ); // Return our updated user. return get_user_by( 'id', $uid ); } + + /** + * Generate PKCE code for OAuth flow. + * + * @see : https://help.aweber.com/hc/en-us/articles/360036524474-How-do-I-use-Proof-Key-for-Code-Exchange-PKCE- + * + * @return array|bool Code challenge array on success, false on error. + */ + private function pkce_code_generator() { + try { + $verifier_bytes = random_bytes( 64 ); + } catch ( \Exception $e ) { + $this->logger->log( + sprintf( 'Fail to generate PKCE code challenge : %s', $e->getMessage() ), + 'pkce_code_generator' + ); + + return false; + } + + $verifier = rtrim( strtr( base64_encode( $verifier_bytes ), '+/', '-_' ), '=' ); + + // Very important, "raw_output" must be set to true or the challenge will not match the verifier. + $challenge_bytes = hash( 'sha256', $verifier, true ); + $challenge = rtrim( strtr( base64_encode( $challenge_bytes ), '+/', '-_' ), '=' ); + + return array( + 'code_verifier' => $verifier, + 'code_challenge' => $challenge, + 'code_challenge_method' => 'S256', + ); + } } diff --git a/includes/openid-connect-generic-client.php b/includes/hello-login-client.php similarity index 78% rename from includes/openid-connect-generic-client.php rename to includes/hello-login-client.php index 2791e78..d0319e4 100644 --- a/includes/openid-connect-generic-client.php +++ b/includes/hello-login-client.php @@ -2,7 +2,7 @@ /** * Plugin OIDC/oAuth client class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Authentication * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart @@ -10,19 +10,19 @@ */ /** - * OpenID_Connect_Generic_Client class. + * Hello_Login_Client class. * * Plugin OIDC/oAuth client class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Authentication */ -class OpenID_Connect_Generic_Client { +class Hello_Login_Client { /** * The OIDC/oAuth client ID. * - * @see OpenID_Connect_Generic_Option_Settings::client_id + * @see Hello_Login_Option_Settings::client_id * * @var string */ @@ -31,7 +31,7 @@ class OpenID_Connect_Generic_Client { /** * The OIDC/oAuth client secret. * - * @see OpenID_Connect_Generic_Option_Settings::client_secret + * @see Hello_Login_Option_Settings::client_secret * * @var string */ @@ -40,7 +40,7 @@ class OpenID_Connect_Generic_Client { /** * The OIDC/oAuth scopes. * - * @see OpenID_Connect_Generic_Option_Settings::scope + * @see Hello_Login_Option_Settings::scope * * @var string */ @@ -49,7 +49,7 @@ class OpenID_Connect_Generic_Client { /** * The OIDC/oAuth authorization endpoint URL. * - * @see OpenID_Connect_Generic_Option_Settings::endpoint_login + * @see Hello_Login_Option_Settings::endpoint_login * * @var string */ @@ -58,7 +58,7 @@ class OpenID_Connect_Generic_Client { /** * The OIDC/oAuth User Information endpoint URL. * - * @see OpenID_Connect_Generic_Option_Settings::endpoint_userinfo + * @see Hello_Login_Option_Settings::endpoint_userinfo * * @var string */ @@ -67,7 +67,7 @@ class OpenID_Connect_Generic_Client { /** * The OIDC/oAuth token validation endpoint URL. * - * @see OpenID_Connect_Generic_Option_Settings::endpoint_token + * @see Hello_Login_Option_Settings::endpoint_token * * @var string */ @@ -76,7 +76,7 @@ class OpenID_Connect_Generic_Client { /** * The login flow "ajax" endpoint URI. * - * @see OpenID_Connect_Generic_Option_Settings::redirect_uri + * @see Hello_Login_Option_Settings::redirect_uri * * @var string */ @@ -85,7 +85,7 @@ class OpenID_Connect_Generic_Client { /** * The specifically requested authentication contract at the IDP * - * @see OpenID_Connect_Generic_Option_Settings::acr_values + * @see Hello_Login_Option_Settings::acr_values * * @var string */ @@ -94,7 +94,7 @@ class OpenID_Connect_Generic_Client { /** * The state time limit. States are only valid for 3 minutes. * - * @see OpenID_Connect_Generic_Option_Settings::state_time_limit + * @see Hello_Login_Option_Settings::state_time_limit * * @var int */ @@ -103,23 +103,23 @@ class OpenID_Connect_Generic_Client { /** * The logger object instance. * - * @var OpenID_Connect_Generic_Option_Logger + * @var Hello_Login_Option_Logger */ private $logger; /** * Client constructor. * - * @param string $client_id @see OpenID_Connect_Generic_Option_Settings::client_id for description. - * @param string $client_secret @see OpenID_Connect_Generic_Option_Settings::client_secret for description. - * @param string $scope @see OpenID_Connect_Generic_Option_Settings::scope for description. - * @param string $endpoint_login @see OpenID_Connect_Generic_Option_Settings::endpoint_login for description. - * @param string $endpoint_userinfo @see OpenID_Connect_Generic_Option_Settings::endpoint_userinfo for description. - * @param string $endpoint_token @see OpenID_Connect_Generic_Option_Settings::endpoint_token for description. - * @param string $redirect_uri @see OpenID_Connect_Generic_Option_Settings::redirect_uri for description. - * @param string $acr_values @see OpenID_Connect_Generic_Option_Settings::acr_values for description. - * @param int $state_time_limit @see OpenID_Connect_Generic_Option_Settings::state_time_limit for description. - * @param OpenID_Connect_Generic_Option_Logger $logger The plugin logging object instance. + * @param string $client_id @see Hello_Login_Option_Settings::client_id for description. + * @param string $client_secret @see Hello_Login_Option_Settings::client_secret for description. + * @param string $scope @see Hello_Login_Option_Settings::scope for description. + * @param string $endpoint_login @see Hello_Login_Option_Settings::endpoint_login for description. + * @param string $endpoint_userinfo @see Hello_Login_Option_Settings::endpoint_userinfo for description. + * @param string $endpoint_token @see Hello_Login_Option_Settings::endpoint_token for description. + * @param string $redirect_uri @see Hello_Login_Option_Settings::redirect_uri for description. + * @param string $acr_values @see Hello_Login_Option_Settings::acr_values for description. + * @param int $state_time_limit @see Hello_Login_Option_Settings::state_time_limit for description. + * @param Hello_Login_Option_Logger $logger The plugin logging object instance. */ public function __construct( $client_id, $client_secret, $scope, $endpoint_login, $endpoint_userinfo, $endpoint_token, $redirect_uri, $acr_values, $state_time_limit, $logger ) { $this->client_id = $client_id; @@ -172,12 +172,12 @@ public function validate_authentication_request( $request ) { // Check the client request state. if ( ! isset( $request['state'] ) ) { - do_action( 'openid-connect-generic-no-state-provided' ); - return new WP_Error( 'missing-state', __( 'Missing state.', 'daggerhart-openid-connect-generic' ), $request ); + do_action( 'hello-login-no-state-provided' ); + return new WP_Error( 'missing-state', __( 'Missing state.', 'hello-login' ), $request ); } if ( ! $this->check_state( $request['state'] ) ) { - return new WP_Error( 'invalid-state', __( 'Invalid state.', 'daggerhart-openid-connect-generic' ), $request ); + return new WP_Error( 'invalid-state', __( 'Invalid state.', 'hello-login' ), $request ); } return $request; @@ -192,7 +192,7 @@ public function validate_authentication_request( $request ) { */ public function get_authentication_code( $request ) { if ( ! isset( $request['code'] ) ) { - return new WP_Error( 'missing-authentication-code', __( 'Missing authentication code.', 'daggerhart-openid-connect-generic' ), $request ); + return new WP_Error( 'missing-authentication-code', __( 'Missing authentication code.', 'hello-login' ), $request ); } return $request['code']; @@ -228,14 +228,14 @@ public function request_authentication_token( $code ) { } // Allow modifications to the request. - $request = apply_filters( 'openid-connect-generic-alter-request', $request, 'get-authentication-token' ); + $request = apply_filters( 'hello-login-alter-request', $request, 'get-authentication-token' ); // Call the server and ask for a token. $this->logger->log( $this->endpoint_token, 'request_authentication_token' ); $response = wp_remote_post( $this->endpoint_token, $request ); if ( is_wp_error( $response ) ) { - $response->add( 'request_authentication_token', __( 'Request for authentication token failed.', 'daggerhart-openid-connect-generic' ) ); + $response->add( 'request_authentication_token', __( 'Request for authentication token failed.', 'hello-login' ) ); } return $response; @@ -259,14 +259,14 @@ public function request_new_tokens( $refresh_token ) { ); // Allow modifications to the request. - $request = apply_filters( 'openid-connect-generic-alter-request', $request, 'refresh-token' ); + $request = apply_filters( 'hello-login-alter-request', $request, 'refresh-token' ); // Call the server and ask for new tokens. $this->logger->log( $this->endpoint_token, 'request_new_tokens' ); $response = wp_remote_post( $this->endpoint_token, $request ); if ( is_wp_error( $response ) ) { - $response->add( 'refresh_token', __( 'Refresh token failed.', 'daggerhart-openid-connect-generic' ) ); + $response->add( 'refresh_token', __( 'Refresh token failed.', 'hello-login' ) ); } return $response; @@ -281,7 +281,7 @@ public function request_new_tokens( $refresh_token ) { */ public function get_token_response( $token_result ) { if ( ! isset( $token_result['body'] ) ) { - return new WP_Error( 'missing-token-body', __( 'Missing token body.', 'daggerhart-openid-connect-generic' ), $token_result ); + return new WP_Error( 'missing-token-body', __( 'Missing token body.', 'hello-login' ), $token_result ); } // Extract the token response from token. @@ -289,7 +289,7 @@ public function get_token_response( $token_result ) { // Check that the token response body was able to be parsed. if ( is_null( $token_response ) ) { - return new WP_Error( 'invalid-token', __( 'Invalid token.', 'daggerhart-openid-connect-generic' ), $token_result ); + return new WP_Error( 'invalid-token', __( 'Invalid token.', 'hello-login' ), $token_result ); } if ( isset( $token_response['error'] ) ) { @@ -313,7 +313,7 @@ public function get_token_response( $token_result ) { */ public function request_userinfo( $access_token ) { // Allow modifications to the request. - $request = apply_filters( 'openid-connect-generic-alter-request', array(), 'get-userinfo' ); + $request = apply_filters( 'hello-login-alter-request', array(), 'get-userinfo' ); /* * Section 5.3.1 of the spec recommends sending the access token using the authorization header @@ -340,7 +340,7 @@ public function request_userinfo( $access_token ) { $response = wp_remote_post( $this->endpoint_userinfo, $request ); if ( is_wp_error( $response ) ) { - $response->add( 'request_userinfo', __( 'Request for userinfo failed.', 'daggerhart-openid-connect-generic' ) ); + $response->add( 'request_userinfo', __( 'Request for userinfo failed.', 'hello-login' ) ); } return $response; @@ -349,19 +349,21 @@ public function request_userinfo( $access_token ) { /** * Generate a new state, save it as a transient, and return the state hash. * - * @param string $redirect_to The redirect URL to be used after IDP authentication. + * @param string $redirect_to The redirect URL to be used after IDP authentication. + * @param string $pkce_code_verifier The PKCE code verifier to be sent during the authorization code exchange request. * * @return string */ - public function new_state( $redirect_to ) { + public function new_state( $redirect_to, $pkce_code_verifier = '' ) { // New state w/ timestamp. $state = md5( mt_rand() . microtime( true ) ); $state_value = array( $state => array( - 'redirect_to' => $redirect_to, + 'redirect_to' => $redirect_to, + 'code_verifier' => $pkce_code_verifier, ), ); - set_transient( 'openid-connect-generic-state--' . $state, $state_value, $this->state_time_limit ); + set_transient( 'hello-login-state--' . $state, $state_value, $this->state_time_limit ); return $state; } @@ -377,15 +379,15 @@ public function check_state( $state ) { $state_found = true; - if ( ! get_option( '_transient_openid-connect-generic-state--' . $state ) ) { - do_action( 'openid-connect-generic-state-not-found', $state ); + if ( ! get_option( '_transient_hello-login-state--' . $state ) ) { + do_action( 'hello-login-state-not-found', $state ); $state_found = false; } - $valid = get_transient( 'openid-connect-generic-state--' . $state ); + $valid = get_transient( 'hello-login-state--' . $state ); if ( ! $valid && $state_found ) { - do_action( 'openid-connect-generic-state-expired', $state ); + do_action( 'hello-login-state-expired', $state ); } return boolval( $valid ); @@ -400,7 +402,7 @@ public function check_state( $state ) { */ public function get_authentication_state( $request ) { if ( ! isset( $request['state'] ) ) { - return new WP_Error( 'missing-authentication-state', __( 'Missing authentication state.', 'daggerhart-openid-connect-generic' ), $request ); + return new WP_Error( 'missing-authentication-state', __( 'Missing authentication state.', 'hello-login' ), $request ); } return $request['state']; @@ -437,14 +439,14 @@ public function validate_token_response( $token_response ) { public function get_id_token_claim( $token_response ) { // Validate there is an id_token. if ( ! isset( $token_response['id_token'] ) ) { - return new WP_Error( 'no-identity-token', __( 'No identity token.', 'daggerhart-openid-connect-generic' ), $token_response ); + return new WP_Error( 'no-identity-token', __( 'No identity token.', 'hello-login' ), $token_response ); } // Break apart the id_token in the response for decoding. $tmp = explode( '.', $token_response['id_token'] ); if ( ! isset( $tmp[1] ) ) { - return new WP_Error( 'missing-identity-token', __( 'Missing identity token.', 'daggerhart-openid-connect-generic' ), $token_response ); + return new WP_Error( 'missing-identity-token', __( 'Missing identity token.', 'hello-login' ), $token_response ); } // Extract the id_token's claims from the token. @@ -471,18 +473,18 @@ public function get_id_token_claim( $token_response ) { */ public function validate_id_token_claim( $id_token_claim ) { if ( ! is_array( $id_token_claim ) ) { - return new WP_Error( 'bad-id-token-claim', __( 'Bad ID token claim.', 'daggerhart-openid-connect-generic' ), $id_token_claim ); + return new WP_Error( 'bad-id-token-claim', __( 'Bad ID token claim.', 'hello-login' ), $id_token_claim ); } // Validate the identification data and it's value. if ( ! isset( $id_token_claim['sub'] ) || empty( $id_token_claim['sub'] ) ) { - return new WP_Error( 'no-subject-identity', __( 'No subject identity.', 'daggerhart-openid-connect-generic' ), $id_token_claim ); + return new WP_Error( 'no-subject-identity', __( 'No subject identity.', 'hello-login' ), $id_token_claim ); } // Validate acr values when the option is set in the configuration. if ( ! empty( $this->acr_values ) && isset( $id_token_claim['acr'] ) ) { if ( $this->acr_values != $id_token_claim['acr'] ) { - return new WP_Error( 'no-match-acr', __( 'No matching acr values.', 'daggerhart-openid-connect-generic' ), $id_token_claim ); + return new WP_Error( 'no-match-acr', __( 'No matching acr values.', 'hello-login' ), $id_token_claim ); } } @@ -502,7 +504,7 @@ public function get_user_claim( $token_response ) { // Make sure we didn't get an error, and that the response body exists. if ( is_wp_error( $user_claim_result ) || ! isset( $user_claim_result['body'] ) ) { - return new WP_Error( 'bad-claim', __( 'Bad user claim.', 'daggerhart-openid-connect-generic' ), $user_claim_result ); + return new WP_Error( 'bad-claim', __( 'Bad user claim.', 'hello-login' ), $user_claim_result ); } $user_claim = json_decode( $user_claim_result['body'], true ); @@ -522,12 +524,12 @@ public function get_user_claim( $token_response ) { public function validate_user_claim( $user_claim, $id_token_claim ) { // Validate the user claim. if ( ! is_array( $user_claim ) ) { - return new WP_Error( 'invalid-user-claim', __( 'Invalid user claim.', 'daggerhart-openid-connect-generic' ), $user_claim ); + return new WP_Error( 'invalid-user-claim', __( 'Invalid user claim.', 'hello-login' ), $user_claim ); } // Allow for errors from the IDP. if ( isset( $user_claim['error'] ) ) { - $message = __( 'Error from the IDP.', 'daggerhart-openid-connect-generic' ); + $message = __( 'Error from the IDP.', 'hello-login' ); if ( ! empty( $user_claim['error_description'] ) ) { $message = $user_claim['error_description']; } @@ -536,14 +538,14 @@ public function validate_user_claim( $user_claim, $id_token_claim ) { // Make sure the id_token sub equals the user_claim sub, according to spec. if ( $id_token_claim['sub'] !== $user_claim['sub'] ) { - return new WP_Error( 'incorrect-user-claim', __( 'Incorrect user claim.', 'daggerhart-openid-connect-generic' ), func_get_args() ); + return new WP_Error( 'incorrect-user-claim', __( 'Incorrect user claim.', 'hello-login' ), func_get_args() ); } // Allow for other plugins to alter the login success. - $login_user = apply_filters( 'openid-connect-generic-user-login-test', true, $user_claim ); + $login_user = apply_filters( 'hello-login-user-login-test', true, $user_claim ); if ( ! $login_user ) { - return new WP_Error( 'unauthorized', __( 'Unauthorized access.', 'daggerhart-openid-connect-generic' ), $login_user ); + return new WP_Error( 'unauthorized', __( 'Unauthorized access.', 'hello-login' ), $login_user ); } return true; diff --git a/includes/openid-connect-generic-login-form.php b/includes/hello-login-login-form.php similarity index 72% rename from includes/openid-connect-generic-login-form.php rename to includes/hello-login-login-form.php index 4c76d9c..12cc861 100644 --- a/includes/openid-connect-generic-login-form.php +++ b/includes/hello-login-login-form.php @@ -2,7 +2,7 @@ /** * Login form and login button handlong class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Login * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart @@ -10,34 +10,34 @@ */ /** - * OpenID_Connect_Generic_Login_Form class. + * Hello_Login_Login_Form class. * * Login form and login button handlong. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Login */ -class OpenID_Connect_Generic_Login_Form { +class Hello_Login_Login_Form { /** * Plugin settings object. * - * @var OpenID_Connect_Generic_Option_Settings + * @var Hello_Login_Option_Settings */ private $settings; /** * Plugin client wrapper instance. * - * @var OpenID_Connect_Generic_Client_Wrapper + * @var Hello_Login_Client_Wrapper */ private $client_wrapper; /** * The class constructor. * - * @param OpenID_Connect_Generic_Option_Settings $settings A plugin settings object instance. - * @param OpenID_Connect_Generic_Client_Wrapper $client_wrapper A plugin client wrapper object instance. + * @param Hello_Login_Option_Settings $settings A plugin settings object instance. + * @param Hello_Login_Client_Wrapper $client_wrapper A plugin client wrapper object instance. */ public function __construct( $settings, $client_wrapper ) { $this->settings = $settings; @@ -45,10 +45,10 @@ public function __construct( $settings, $client_wrapper ) { } /** - * Create an instance of the OpenID_Connect_Generic_Login_Form class. + * Create an instance of the Hello_Login_Login_Form class. * - * @param OpenID_Connect_Generic_Option_Settings $settings A plugin settings object instance. - * @param OpenID_Connect_Generic_Client_Wrapper $client_wrapper A plugin client wrapper object instance. + * @param Hello_Login_Option_Settings $settings A plugin settings object instance. + * @param Hello_Login_Client_Wrapper $client_wrapper A plugin client wrapper object instance. * * @return void */ @@ -59,7 +59,7 @@ public static function register( $settings, $client_wrapper ) { add_filter( 'login_message', array( $login_form, 'handle_login_page' ), 99 ); // Add a shortcode for the login button. - add_shortcode( 'openid_connect_generic_login_button', array( $login_form, 'make_login_button' ) ); + add_shortcode( 'hello_login_button', array( $login_form, 'make_login_button' ) ); $login_form->handle_redirect_login_type_auto(); } @@ -120,7 +120,7 @@ public function make_error_output( $error_code, $error_message ) { ob_start(); ?>
- : + :
__( 'Login with OpenID Connect', 'daggerhart-openid-connect-generic' ), - ), - $atts, - 'openid_connect_generic_login_button' + array( + 'button_text' => __( 'ō Continue with Hellō', 'hello-login' ), + ), + $atts, + 'hello_login_button' ); - $text = apply_filters( 'openid-connect-generic-login-button-text', $atts['button_text'] ); - $text = esc_html( $text ); - $href = $this->client_wrapper->get_authentication_url( $atts ); $href = esc_url_raw( $href ); $login_button = << - {$text} +
+ +
HTML; return $login_button; - } /** diff --git a/includes/openid-connect-generic-option-logger.php b/includes/hello-login-option-logger.php similarity index 92% rename from includes/openid-connect-generic-option-logger.php rename to includes/hello-login-option-logger.php index 52b4246..9a9e8e8 100644 --- a/includes/openid-connect-generic-option-logger.php +++ b/includes/hello-login-option-logger.php @@ -2,7 +2,7 @@ /** * Plugin logging class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Logging * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart @@ -10,14 +10,14 @@ */ /** - * OpenID_Connect_Generic_Option_Logger class. + * Hello_Login_Option_Logger class. * * Simple class for logging messages to the options table. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Logging */ -class OpenID_Connect_Generic_Option_Logger { +class Hello_Login_Option_Logger { /** * Thw WordPress option name/key. @@ -259,19 +259,19 @@ public function get_logs_table( $logs = array() ) {
- +
- +
- + user_login : '0' ); ?>
- +
diff --git a/includes/openid-connect-generic-option-settings.php b/includes/hello-login-option-settings.php similarity index 96% rename from includes/openid-connect-generic-option-settings.php rename to includes/hello-login-option-settings.php index 8cc00a4..4e19c3f 100644 --- a/includes/openid-connect-generic-option-settings.php +++ b/includes/hello-login-option-settings.php @@ -2,7 +2,7 @@ /** * WordPress options handling class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Settings * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart @@ -14,7 +14,7 @@ * * WordPress options handling. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Settings * * Legacy Settings: @@ -34,6 +34,7 @@ * @property string $endpoint_token The IDP token validation endpoint URL. * @property string $endpoint_end_session The IDP logout endpoint URL. * @property string $acr_values The Authentication contract as defined on the IDP. + * @property bool $enable_pkce The flag to enable/disable PKCE support. * * Non-standard Settings: * @@ -58,7 +59,7 @@ * @property bool $enable_logging The flag to enable/disable logging. * @property int $log_limit The maximum number of log entries to keep. */ -class OpenID_Connect_Generic_Option_Settings { +class Hello_Login_Option_Settings { /** * WordPress option name/key. @@ -101,6 +102,7 @@ class OpenID_Connect_Generic_Option_Settings { 'redirect_on_logout' => 'OIDC_REDIRECT_ON_LOGOUT', 'redirect_user_back' => 'OIDC_REDIRECT_USER_BACK', 'acr_values' => 'OIDC_ACR_VALUES', + 'enable_pkce' => 'OIDC_ENABLE_PKCE', ); /** diff --git a/includes/openid-connect-generic-settings-page.php b/includes/hello-login-settings-page.php similarity index 66% rename from includes/openid-connect-generic-settings-page.php rename to includes/hello-login-settings-page.php index ac53c86..291380a 100644 --- a/includes/openid-connect-generic-settings-page.php +++ b/includes/hello-login-settings-page.php @@ -2,7 +2,7 @@ /** * Plugin Admin settings page class. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Settings * @author Jonathan Daggerhart * @copyright 2015-2020 daggerhart @@ -10,26 +10,26 @@ */ /** - * OpenID_Connect_Generic_Settings_Page class. + * Hello_Login_Settings_Page class. * * Admin settings page. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @category Settings */ -class OpenID_Connect_Generic_Settings_Page { +class Hello_Login_Settings_Page { /** * Local copy of the settings provided by the base plugin. * - * @var OpenID_Connect_Generic_Option_Settings + * @var Hello_Login_Option_Settings */ private $settings; /** * Instance of the plugin logger. * - * @var OpenID_Connect_Generic_Option_Logger + * @var Hello_Login_Option_Logger */ private $logger; @@ -46,7 +46,7 @@ class OpenID_Connect_Generic_Settings_Page { * * @var string */ - private $options_page_name = 'openid-connect-generic-settings'; + private $options_page_name = 'hello-login-settings'; /** * Options page settings group name. @@ -58,10 +58,10 @@ class OpenID_Connect_Generic_Settings_Page { /** * Settings page class constructor. * - * @param OpenID_Connect_Generic_Option_Settings $settings The plugin settings object. - * @param OpenID_Connect_Generic_Option_Logger $logger The plugin logging class object. + * @param Hello_Login_Option_Settings $settings The plugin settings object. + * @param Hello_Login_Option_Logger $logger The plugin logging class object. */ - public function __construct( OpenID_Connect_Generic_Option_Settings $settings, OpenID_Connect_Generic_Option_Logger $logger ) { + public function __construct( Hello_Login_Option_Settings $settings, Hello_Login_Option_Logger $logger ) { $this->settings = $settings; $this->logger = $logger; @@ -82,12 +82,12 @@ public function __construct( OpenID_Connect_Generic_Option_Settings $settings, O /** * Hook the settings page into WordPress. * - * @param OpenID_Connect_Generic_Option_Settings $settings A plugin settings object instance. - * @param OpenID_Connect_Generic_Option_Logger $logger A plugin logger object instance. + * @param Hello_Login_Option_Settings $settings A plugin settings object instance. + * @param Hello_Login_Option_Logger $logger A plugin logger object instance. * * @return void */ - public static function register( OpenID_Connect_Generic_Option_Settings $settings, OpenID_Connect_Generic_Option_Logger $logger ) { + public static function register( Hello_Login_Option_Settings $settings, Hello_Login_Option_Logger $logger ) { $settings_page = new self( $settings, $logger ); // Add our options page the the admin menu. @@ -105,8 +105,8 @@ public static function register( OpenID_Connect_Generic_Option_Settings $setting */ public function admin_menu() { add_options_page( - __( 'OpenID Connect - Generic Client', 'daggerhart-openid-connect-generic' ), - __( 'OpenID Connect Client', 'daggerhart-openid-connect-generic' ), + __( 'Hellō Login', 'hello-login' ), + __( 'Hellō Login', 'hello-login' ), 'manage_options', $this->options_page_name, array( $this, 'settings_page' ) @@ -130,28 +130,28 @@ public function admin_init() { add_settings_section( 'client_settings', - __( 'Client Settings', 'daggerhart-openid-connect-generic' ), + __( 'Client Settings', 'hello-login' ), array( $this, 'client_settings_description' ), $this->options_page_name ); add_settings_section( 'user_settings', - __( 'WordPress User Settings', 'daggerhart-openid-connect-generic' ), + __( 'WordPress User Settings', 'hello-login' ), array( $this, 'user_settings_description' ), $this->options_page_name ); add_settings_section( 'authorization_settings', - __( 'Authorization Settings', 'daggerhart-openid-connect-generic' ), + __( 'Authorization Settings', 'hello-login' ), array( $this, 'authorization_settings_description' ), $this->options_page_name ); add_settings_section( 'log_settings', - __( 'Log Settings', 'daggerhart-openid-connect-generic' ), + __( 'Log Settings', 'hello-login' ), array( $this, 'log_settings_description' ), $this->options_page_name ); @@ -208,195 +208,210 @@ private function get_settings_fields() { * - example (optional example will appear beneath description and be wrapped in ) */ $fields = array( + /* 'login_type' => array( - 'title' => __( 'Login Type', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Select how the client (login form) should provide login options.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Login Type', 'hello-login' ), + 'description' => __( 'Select how the client (login form) should provide login options.', 'hello-login' ), 'type' => 'select', 'options' => array( - 'button' => __( 'OpenID Connect button on login form', 'daggerhart-openid-connect-generic' ), - 'auto' => __( 'Auto Login - SSO', 'daggerhart-openid-connect-generic' ), + 'button' => __( 'OpenID Connect button on login form', 'hello-login' ), + 'auto' => __( 'Auto Login - SSO', 'hello-login' ), ), 'disabled' => defined( 'OIDC_LOGIN_TYPE' ), 'section' => 'client_settings', ), + */ 'client_id' => array( - 'title' => __( 'Client ID', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'The ID this client will be recognized as when connecting the to Identity provider server.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Client ID', 'hello-login' ), + 'description' => __( 'The client identifier provided by Hellō and set by Quickstart. Only edit if you have created a new client at console.hello.coop.', 'hello-login' ), 'example' => 'my-wordpress-client-id', 'type' => 'text', 'disabled' => defined( 'OIDC_CLIENT_ID' ), 'section' => 'client_settings', ), + /* 'client_secret' => array( - 'title' => __( 'Client Secret Key', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Arbitrary secret key the server expects from this client. Can be anything, but should be very unique.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Client Secret Key', 'hello-login' ), + 'description' => __( 'Arbitrary secret key the server expects from this client. Can be anything, but should be very unique.', 'hello-login' ), 'type' => 'text', 'disabled' => defined( 'OIDC_CLIENT_SECRET' ), 'section' => 'client_settings', ), + */ 'scope' => array( - 'title' => __( 'OpenID Scope', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Space separated list of scopes this client should access.', 'daggerhart-openid-connect-generic' ), - 'example' => 'email profile openid offline_access', + 'title' => __( 'Scopes', 'hello-login' ), + 'description' => __( 'Space separated list of scopes you are requesting - "openid" is required. Available claims at https://www.hello.dev/documentation/hello-claims.html.', 'hello-login' ), + 'example' => 'openid name nickname family_name given_name picture email phone profile_update ethereum', 'type' => 'text', 'disabled' => defined( 'OIDC_CLIENT_SCOPE' ), 'section' => 'client_settings', ), + /* 'endpoint_login' => array( - 'title' => __( 'Login Endpoint URL', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Identify provider authorization endpoint.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Login Endpoint URL', 'hello-login' ), + 'description' => __( 'Identify provider authorization endpoint.', 'hello-login' ), 'example' => 'https://example.com/oauth2/authorize', 'type' => 'text', 'disabled' => defined( 'OIDC_ENDPOINT_LOGIN_URL' ), 'section' => 'client_settings', ), 'endpoint_userinfo' => array( - 'title' => __( 'Userinfo Endpoint URL', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Identify provider User information endpoint.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Userinfo Endpoint URL', 'hello-login' ), + 'description' => __( 'Identify provider User information endpoint.', 'hello-login' ), 'example' => 'https://example.com/oauth2/UserInfo', 'type' => 'text', 'disabled' => defined( 'OIDC_ENDPOINT_USERINFO_URL' ), 'section' => 'client_settings', ), 'endpoint_token' => array( - 'title' => __( 'Token Validation Endpoint URL', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Identify provider token endpoint.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Token Validation Endpoint URL', 'hello-login' ), + 'description' => __( 'Identify provider token endpoint.', 'hello-login' ), 'example' => 'https://example.com/oauth2/token', 'type' => 'text', 'disabled' => defined( 'OIDC_ENDPOINT_TOKEN_URL' ), 'section' => 'client_settings', ), 'endpoint_end_session' => array( - 'title' => __( 'End Session Endpoint URL', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Identify provider logout endpoint.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'End Session Endpoint URL', 'hello-login' ), + 'description' => __( 'Identify provider logout endpoint.', 'hello-login' ), 'example' => 'https://example.com/oauth2/logout', 'type' => 'text', 'disabled' => defined( 'OIDC_ENDPOINT_LOGOUT_URL' ), 'section' => 'client_settings', ), 'acr_values' => array( - 'title' => __( 'ACR values', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Use a specific defined authentication contract from the IDP - optional.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'ACR values', 'hello-login' ), + 'description' => __( 'Use a specific defined authentication contract from the IDP - optional.', 'hello-login' ), 'type' => 'text', 'disabled' => defined( 'OIDC_ACR_VALUES' ), 'section' => 'client_settings', ), + 'enable_pkce' => array( + 'title' => __( 'Enable PKCE support', 'hello-login' ), + 'description' => __( 'If checked, add PKCE challenge during authentication requests.', 'hello-login' ), + 'type' => 'checkbox', + 'disabled' => defined( 'OIDC_ENABLE_PKCE' ), + 'section' => 'client_settings', + ), 'identity_key' => array( - 'title' => __( 'Identity Key', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Where in the user claim array to find the user\'s identification data. Possible standard values: preferred_username, name, or sub. If you\'re having trouble, use "sub".', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Identity Key', 'hello-login' ), + 'description' => __( 'Where in the user claim array to find the user\'s identification data. Possible standard values: preferred_username, name, or sub. If you\'re having trouble, use "sub".', 'hello-login' ), 'example' => 'preferred_username', 'type' => 'text', 'section' => 'client_settings', ), 'no_sslverify' => array( - 'title' => __( 'Disable SSL Verify', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Disable SSL Verify', 'hello-login' ), // translators: %1$s HTML tags for layout/styles, %2$s closing HTML tag for styles. - 'description' => sprintf( __( 'Do not require SSL verification during authorization. The OAuth extension uses curl to make the request. By default CURL will generally verify the SSL certificate to see if its valid an issued by an accepted CA. This setting disabled that verification.%1$sNot recommended for production sites.%2$s', 'daggerhart-openid-connect-generic' ), '
', '' ), + 'description' => sprintf( __( 'Do not require SSL verification during authorization. The OAuth extension uses curl to make the request. By default CURL will generally verify the SSL certificate to see if its valid an issued by an accepted CA. This setting disabled that verification.%1$sNot recommended for production sites.%2$s', 'hello-login' ), '
', '' ), 'type' => 'checkbox', 'section' => 'client_settings', ), 'http_request_timeout' => array( - 'title' => __( 'HTTP Request Timeout', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Set the timeout for requests made to the IDP. Default value is 5.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'HTTP Request Timeout', 'hello-login' ), + 'description' => __( 'Set the timeout for requests made to the IDP. Default value is 5.', 'hello-login' ), 'example' => 30, 'type' => 'text', 'section' => 'client_settings', ), + */ 'enforce_privacy' => array( - 'title' => __( 'Enforce Privacy', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Require users be logged in to see the site.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Enforce Privacy', 'hello-login' ), + 'description' => __( 'Require users be logged in to see the site.', 'hello-login' ), 'type' => 'checkbox', 'disabled' => defined( 'OIDC_ENFORCE_PRIVACY' ), 'section' => 'authorization_settings', ), + /* 'alternate_redirect_uri' => array( - 'title' => __( 'Alternate Redirect URI', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Provide an alternative redirect route. Useful if your server is causing issues with the default admin-ajax method. You must flush rewrite rules after changing this setting. This can be done by saving the Permalinks settings page.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Alternate Redirect URI', 'hello-login' ), + 'description' => __( 'Provide an alternative redirect route. Useful if your server is causing issues with the default admin-ajax method. You must flush rewrite rules after changing this setting. This can be done by saving the Permalinks settings page.', 'hello-login' ), 'type' => 'checkbox', 'section' => 'authorization_settings', ), 'nickname_key' => array( - 'title' => __( 'Nickname Key', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Where in the user claim array to find the user\'s nickname. Possible standard values: preferred_username, name, or sub.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Nickname Key', 'hello-login' ), + 'description' => __( 'Where in the user claim array to find the user\'s nickname. Possible standard values: preferred_username, name, or sub.', 'hello-login' ), 'example' => 'preferred_username', 'type' => 'text', 'section' => 'client_settings', ), 'email_format' => array( - 'title' => __( 'Email Formatting', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'String from which the user\'s email address is built. Specify "{email}" as long as the user claim contains an email claim.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Email Formatting', 'hello-login' ), + 'description' => __( 'String from which the user\'s email address is built. Specify "{email}" as long as the user claim contains an email claim.', 'hello-login' ), 'example' => '{email}', 'type' => 'text', 'section' => 'client_settings', ), 'displayname_format' => array( - 'title' => __( 'Display Name Formatting', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'String from which the user\'s display name is built.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Display Name Formatting', 'hello-login' ), + 'description' => __( 'String from which the user\'s display name is built.', 'hello-login' ), 'example' => '{given_name} {family_name}', 'type' => 'text', 'section' => 'client_settings', ), 'identify_with_username' => array( - 'title' => __( 'Identify with User Name', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'If checked, the user\'s identity will be determined by the user name instead of the email address.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Identify with User Name', 'hello-login' ), + 'description' => __( 'If checked, the user\'s identity will be determined by the user name instead of the email address.', 'hello-login' ), 'type' => 'checkbox', 'section' => 'client_settings', ), 'state_time_limit' => array( - 'title' => __( 'State time limit', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'State valid time in seconds. Defaults to 180', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'State time limit', 'hello-login' ), + 'description' => __( 'State valid time in seconds. Defaults to 180', 'hello-login' ), 'type' => 'number', 'section' => 'client_settings', ), 'token_refresh_enable' => array( - 'title' => __( 'Enable Refresh Token', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'If checked, support refresh tokens used to obtain access tokens from supported IDPs.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Enable Refresh Token', 'hello-login' ), + 'description' => __( 'If checked, support refresh tokens used to obtain access tokens from supported IDPs.', 'hello-login' ), 'type' => 'checkbox', 'section' => 'client_settings', ), + */ 'link_existing_users' => array( - 'title' => __( 'Link Existing Users', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'If a WordPress account already exists with the same identity as a newly-authenticated user over OpenID Connect, login as that user instead of generating an error.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Link Existing Users', 'hello-login' ), + 'description' => __( 'If a WordPress account already exists with the same identity as a newly-authenticated Hellō user, login as that user instead of generating an error.', 'hello-login' ), 'type' => 'checkbox', 'disabled' => defined( 'OIDC_LINK_EXISTING_USERS' ), 'section' => 'user_settings', ), 'create_if_does_not_exist' => array( - 'title' => __( 'Create user if does not exist', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'If the user identity is not linked to an existing WordPress user, it is created. If this setting is not enabled, and if the user authenticates with an account which is not linked to an existing WordPress user, then the authentication will fail.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Create user if does not exist', 'hello-login' ), + 'description' => __( 'If the user identity is not linked to an existing WordPress user, it is created. If this setting is not enabled, and if the user authenticates with an account which is not linked to an existing WordPress user, then the authentication will fail.', 'hello-login' ), 'type' => 'checkbox', 'disabled' => defined( 'OIDC_CREATE_IF_DOES_NOT_EXIST' ), 'section' => 'user_settings', ), 'redirect_user_back' => array( - 'title' => __( 'Redirect Back to Origin Page', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'After a successful OpenID Connect authentication, this will redirect the user back to the page on which they clicked the OpenID Connect login button. This will cause the login process to proceed in a traditional WordPress fashion. For example, users logging in through the default wp-login.php page would end up on the WordPress Dashboard and users logging in through the WooCommerce "My Account" page would end up on their account page.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Redirect Back to Origin Page', 'hello-login' ), + 'description' => __( 'After a successful authentication, this will redirect the user back to the page on which they clicked the Hellō login button. This will cause the login process to proceed in a traditional WordPress fashion. For example, users logging in through the default wp-login.php page would end up on the WordPress Dashboard and users logging in through the WooCommerce "My Account" page would end up on their account page.', 'hello-login' ), 'type' => 'checkbox', 'disabled' => defined( 'OIDC_REDIRECT_USER_BACK' ), 'section' => 'user_settings', ), 'redirect_on_logout' => array( - 'title' => __( 'Redirect to the login screen when session is expired', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'When enabled, this will automatically redirect the user back to the WordPress login page if their access token has expired.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Redirect to the login screen when session is expired', 'hello-login' ), + 'description' => __( 'When enabled, this will automatically redirect the user back to the WordPress login page if their access token has expired.', 'hello-login' ), 'type' => 'checkbox', 'disabled' => defined( 'OIDC_REDIRECT_ON_LOGOUT' ), 'section' => 'user_settings', ), 'enable_logging' => array( - 'title' => __( 'Enable Logging', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Very simple log messages for debugging purposes.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Enable Logging', 'hello-login' ), + 'description' => __( 'Very simple log messages for debugging purposes.', 'hello-login' ), 'type' => 'checkbox', 'section' => 'log_settings', ), 'log_limit' => array( - 'title' => __( 'Log Limit', 'daggerhart-openid-connect-generic' ), - 'description' => __( 'Number of items to keep in the log. These logs are stored as an option in the database, so space is limited.', 'daggerhart-openid-connect-generic' ), + 'title' => __( 'Log Limit', 'hello-login' ), + 'description' => __( 'Number of items to keep in the log. These logs are stored as an option in the database, so space is limited.', 'hello-login' ), 'type' => 'number', 'section' => 'log_settings', ), ); - return apply_filters( 'openid-connect-generic-settings-fields', $fields ); + return apply_filters( 'hello-login-settings-fields', $fields ); } @@ -428,17 +443,28 @@ public function sanitize_settings( $input ) { * @return void */ public function settings_page() { - wp_enqueue_style( 'daggerhart-openid-connect-generic-admin', plugin_dir_url( __DIR__ ) . 'css/styles-admin.css', array(), OpenID_Connect_Generic::VERSION, 'all' ); + wp_enqueue_style( 'hello-login-admin', plugin_dir_url( __DIR__ ) . 'css/styles-admin.css', array(), Hello_Login::VERSION, 'all' ); - $redirect_uri = admin_url( 'admin-ajax.php?action=openid-connect-authorize' ); + $redirect_uri = admin_url( 'admin-ajax.php?action=hello-login-callback' ); if ( $this->settings->alternate_redirect_uri ) { - $redirect_uri = site_url( '/openid-connect-authorize' ); + $redirect_uri = site_url( '/hello-login-callback' ); + } + + if ( isset( $_GET['client_id'] ) ) { + $this->settings->client_id = $_GET['client_id']; } ?>

+
+ + + + +
+
settings_field_group ); @@ -452,23 +478,46 @@ public function settings_page() { ?>
-

+

- +

- - [openid_connect_generic_login_button] + + [hello_login_button] +

+

+ + [hello_login_auth_url] +

+ +

+ +

+ + settings->client_id ); ?> +

+

+ + settings->client_secret ); ?> +

+

+ + settings->endpoint_login ); ?> +

+

+ + settings->endpoint_token ); ?>

- - [openid_connect_generic_auth_url] + + settings->endpoint_userinfo ); ?>

settings->enable_logging ) { ?> -

+

logger->get_logs_table() ); ?>
@@ -548,7 +597,7 @@ public function do_field_description( $field ) {

-
: +
:

@@ -561,7 +610,7 @@ public function do_field_description( $field ) { * @return void */ public function client_settings_description() { - esc_html_e( 'Enter your OpenID Connect identity provider settings.', 'daggerhart-openid-connect-generic' ); + esc_html_e( 'Enter your Hellō settings.', 'hello-login' ); } /** @@ -570,7 +619,7 @@ public function client_settings_description() { * @return void */ public function user_settings_description() { - esc_html_e( 'Modify the interaction between OpenID Connect and WordPress users.', 'daggerhart-openid-connect-generic' ); + esc_html_e( 'Modify the interaction between Hellō Login and WordPress users.', 'hello-login' ); } /** @@ -579,7 +628,7 @@ public function user_settings_description() { * @return void */ public function authorization_settings_description() { - esc_html_e( 'Control the authorization mechanics of the site.', 'daggerhart-openid-connect-generic' ); + esc_html_e( 'Control the authorization mechanics of the site.', 'hello-login' ); } /** @@ -588,6 +637,6 @@ public function authorization_settings_description() { * @return void */ public function log_settings_description() { - esc_html_e( 'Log information about login attempts through OpenID Connect Generic.', 'daggerhart-openid-connect-generic' ); + esc_html_e( 'Log information about login attempts through Hellō Login.', 'hello-login' ); } } diff --git a/languages/openid-connect-generic.pot b/languages/hello-login.pot similarity index 56% rename from languages/openid-connect-generic.pot rename to languages/hello-login.pot index 403e170..75c59ce 100644 --- a/languages/openid-connect-generic.pot +++ b/languages/hello-login.pot @@ -2,9 +2,9 @@ # This file is distributed under the GPL-2.0+. msgid "" msgstr "" -"Project-Id-Version: OpenID Connect Generic 3.9.1\n" +"Project-Id-Version: Hellō Login 1.0.0\n" "Report-Msgid-Bugs-To: " -"https://github.com/daggerhart/openid-connect-generic/issues\n" +"https://github.com/hellocoop/wordpress/issues\n" "POT-Creation-Date: 2022-08-19 04:06:16+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -25,273 +25,273 @@ msgstr "" "X-Textdomain-Support: yes\n" "X-Generator: grunt-wp-i18n 1.0.3\n" -#: includes/openid-connect-generic-client-wrapper.php:288 +#: includes/hello-login-client-wrapper.php:288 msgid "Session expired. Please login again." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:535 +#: includes/hello-login-client-wrapper.php:535 msgid "User identity is not linked to an existing WordPress user." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:589 +#: includes/hello-login-client-wrapper.php:589 msgid "Invalid user." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:775 +#: includes/hello-login-client-wrapper.php:775 msgid "No appropriate username found." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:785 +#: includes/hello-login-client-wrapper.php:785 #. translators: %1$s is the santitized version of the username from the IDP. msgid "Username %1$s could not be sanitized." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:807 +#: includes/hello-login-client-wrapper.php:807 #. translators: %1$s is the configured User Claim nickname key. msgid "No nickname found in user claim using key: %1$s." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:904 +#: includes/hello-login-client-wrapper.php:904 msgid "User claim incomplete." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:1006 +#: includes/hello-login-client-wrapper.php:1006 msgid "Bad user claim result." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:1070 +#: includes/hello-login-client-wrapper.php:1070 msgid "Can not authorize." msgstr "" -#: includes/openid-connect-generic-client-wrapper.php:1099 +#: includes/hello-login-client-wrapper.php:1099 msgid "Failed user creation." msgstr "" -#: includes/openid-connect-generic-client.php:176 +#: includes/hello-login-client.php:176 msgid "Missing state." msgstr "" -#: includes/openid-connect-generic-client.php:180 +#: includes/hello-login-client.php:180 msgid "Invalid state." msgstr "" -#: includes/openid-connect-generic-client.php:195 +#: includes/hello-login-client.php:195 msgid "Missing authentication code." msgstr "" -#: includes/openid-connect-generic-client.php:238 +#: includes/hello-login-client.php:238 msgid "Request for authentication token failed." msgstr "" -#: includes/openid-connect-generic-client.php:269 +#: includes/hello-login-client.php:269 msgid "Refresh token failed." msgstr "" -#: includes/openid-connect-generic-client.php:284 +#: includes/hello-login-client.php:284 msgid "Missing token body." msgstr "" -#: includes/openid-connect-generic-client.php:292 +#: includes/hello-login-client.php:292 msgid "Invalid token." msgstr "" -#: includes/openid-connect-generic-client.php:343 +#: includes/hello-login-client.php:343 msgid "Request for userinfo failed." msgstr "" -#: includes/openid-connect-generic-client.php:403 +#: includes/hello-login-client.php:403 msgid "Missing authentication state." msgstr "" -#: includes/openid-connect-generic-client.php:440 +#: includes/hello-login-client.php:440 msgid "No identity token." msgstr "" -#: includes/openid-connect-generic-client.php:447 +#: includes/hello-login-client.php:447 msgid "Missing identity token." msgstr "" -#: includes/openid-connect-generic-client.php:474 +#: includes/hello-login-client.php:474 msgid "Bad ID token claim." msgstr "" -#: includes/openid-connect-generic-client.php:479 +#: includes/hello-login-client.php:479 msgid "No subject identity." msgstr "" -#: includes/openid-connect-generic-client.php:485 +#: includes/hello-login-client.php:485 msgid "No matching acr values." msgstr "" -#: includes/openid-connect-generic-client.php:505 +#: includes/hello-login-client.php:505 msgid "Bad user claim." msgstr "" -#: includes/openid-connect-generic-client.php:525 +#: includes/hello-login-client.php:525 msgid "Invalid user claim." msgstr "" -#: includes/openid-connect-generic-client.php:530 +#: includes/hello-login-client.php:530 msgid "Error from the IDP." msgstr "" -#: includes/openid-connect-generic-client.php:539 +#: includes/hello-login-client.php:539 msgid "Incorrect user claim." msgstr "" -#: includes/openid-connect-generic-client.php:546 +#: includes/hello-login-client.php:546 msgid "Unauthorized access." msgstr "" -#: includes/openid-connect-generic-login-form.php:123 +#: includes/hello-login-login-form.php:123 #. translators: %1$s is the error code from the IDP. msgid "ERROR (%1$s)" msgstr "" -#: includes/openid-connect-generic-login-form.php:142 +#: includes/hello-login-login-form.php:142 msgid "Login with OpenID Connect" msgstr "" -#: includes/openid-connect-generic-option-logger.php:262 +#: includes/hello-login-option-logger.php:262 msgid "Type" msgstr "" -#: includes/openid-connect-generic-option-logger.php:266 +#: includes/hello-login-option-logger.php:266 msgid "Date" msgstr "" -#: includes/openid-connect-generic-option-logger.php:270 +#: includes/hello-login-option-logger.php:270 msgid "User" msgstr "" -#: includes/openid-connect-generic-option-logger.php:274 +#: includes/hello-login-option-logger.php:274 msgid "URI " msgstr "" -#: includes/openid-connect-generic-settings-page.php:108 +#: includes/hello-login-settings-page.php:108 msgid "OpenID Connect - Generic Client" msgstr "" -#: includes/openid-connect-generic-settings-page.php:109 +#: includes/hello-login-settings-page.php:109 msgid "OpenID Connect Client" msgstr "" -#: includes/openid-connect-generic-settings-page.php:133 +#: includes/hello-login-settings-page.php:133 msgid "Client Settings" msgstr "" -#: includes/openid-connect-generic-settings-page.php:140 +#: includes/hello-login-settings-page.php:140 msgid "WordPress User Settings" msgstr "" -#: includes/openid-connect-generic-settings-page.php:147 +#: includes/hello-login-settings-page.php:147 msgid "Authorization Settings" msgstr "" -#: includes/openid-connect-generic-settings-page.php:154 +#: includes/hello-login-settings-page.php:154 msgid "Log Settings" msgstr "" -#: includes/openid-connect-generic-settings-page.php:212 +#: includes/hello-login-settings-page.php:212 msgid "Login Type" msgstr "" -#: includes/openid-connect-generic-settings-page.php:213 +#: includes/hello-login-settings-page.php:213 msgid "Select how the client (login form) should provide login options." msgstr "" -#: includes/openid-connect-generic-settings-page.php:216 +#: includes/hello-login-settings-page.php:216 msgid "OpenID Connect button on login form" msgstr "" -#: includes/openid-connect-generic-settings-page.php:217 +#: includes/hello-login-settings-page.php:217 msgid "Auto Login - SSO" msgstr "" -#: includes/openid-connect-generic-settings-page.php:223 +#: includes/hello-login-settings-page.php:223 msgid "Client ID" msgstr "" -#: includes/openid-connect-generic-settings-page.php:224 +#: includes/hello-login-settings-page.php:224 msgid "" "The ID this client will be recognized as when connecting the to Identity " "provider server." msgstr "" -#: includes/openid-connect-generic-settings-page.php:231 +#: includes/hello-login-settings-page.php:231 msgid "Client Secret Key" msgstr "" -#: includes/openid-connect-generic-settings-page.php:232 +#: includes/hello-login-settings-page.php:232 msgid "" "Arbitrary secret key the server expects from this client. Can be anything, " "but should be very unique." msgstr "" -#: includes/openid-connect-generic-settings-page.php:238 +#: includes/hello-login-settings-page.php:238 msgid "OpenID Scope" msgstr "" -#: includes/openid-connect-generic-settings-page.php:239 +#: includes/hello-login-settings-page.php:239 msgid "Space separated list of scopes this client should access." msgstr "" -#: includes/openid-connect-generic-settings-page.php:246 +#: includes/hello-login-settings-page.php:246 msgid "Login Endpoint URL" msgstr "" -#: includes/openid-connect-generic-settings-page.php:247 +#: includes/hello-login-settings-page.php:247 msgid "Identify provider authorization endpoint." msgstr "" -#: includes/openid-connect-generic-settings-page.php:254 +#: includes/hello-login-settings-page.php:254 msgid "Userinfo Endpoint URL" msgstr "" -#: includes/openid-connect-generic-settings-page.php:255 +#: includes/hello-login-settings-page.php:255 msgid "Identify provider User information endpoint." msgstr "" -#: includes/openid-connect-generic-settings-page.php:262 +#: includes/hello-login-settings-page.php:262 msgid "Token Validation Endpoint URL" msgstr "" -#: includes/openid-connect-generic-settings-page.php:263 +#: includes/hello-login-settings-page.php:263 msgid "Identify provider token endpoint." msgstr "" -#: includes/openid-connect-generic-settings-page.php:270 +#: includes/hello-login-settings-page.php:270 msgid "End Session Endpoint URL" msgstr "" -#: includes/openid-connect-generic-settings-page.php:271 +#: includes/hello-login-settings-page.php:271 msgid "Identify provider logout endpoint." msgstr "" -#: includes/openid-connect-generic-settings-page.php:278 +#: includes/hello-login-settings-page.php:278 msgid "ACR values" msgstr "" -#: includes/openid-connect-generic-settings-page.php:279 +#: includes/hello-login-settings-page.php:279 msgid "Use a specific defined authentication contract from the IDP - optional." msgstr "" -#: includes/openid-connect-generic-settings-page.php:285 +#: includes/hello-login-settings-page.php:285 msgid "Identity Key" msgstr "" -#: includes/openid-connect-generic-settings-page.php:286 +#: includes/hello-login-settings-page.php:286 msgid "" "Where in the user claim array to find the user's identification data. " "Possible standard values: preferred_username, name, or sub. If you're " "having trouble, use \"sub\"." msgstr "" -#: includes/openid-connect-generic-settings-page.php:292 +#: includes/hello-login-settings-page.php:292 msgid "Disable SSL Verify" msgstr "" -#: includes/openid-connect-generic-settings-page.php:294 +#: includes/hello-login-settings-page.php:294 #. translators: %1$s HTML tags for layout/styles, %2$s closing HTML tag for #. styles. msgid "" @@ -302,27 +302,27 @@ msgid "" "sites.%2$s" msgstr "" -#: includes/openid-connect-generic-settings-page.php:299 +#: includes/hello-login-settings-page.php:299 msgid "HTTP Request Timeout" msgstr "" -#: includes/openid-connect-generic-settings-page.php:300 +#: includes/hello-login-settings-page.php:300 msgid "Set the timeout for requests made to the IDP. Default value is 5." msgstr "" -#: includes/openid-connect-generic-settings-page.php:306 +#: includes/hello-login-settings-page.php:306 msgid "Enforce Privacy" msgstr "" -#: includes/openid-connect-generic-settings-page.php:307 +#: includes/hello-login-settings-page.php:307 msgid "Require users be logged in to see the site." msgstr "" -#: includes/openid-connect-generic-settings-page.php:313 +#: includes/hello-login-settings-page.php:313 msgid "Alternate Redirect URI" msgstr "" -#: includes/openid-connect-generic-settings-page.php:314 +#: includes/hello-login-settings-page.php:314 msgid "" "Provide an alternative redirect route. Useful if your server is causing " "issues with the default admin-ajax method. You must flush rewrite rules " @@ -330,78 +330,78 @@ msgid "" "settings page." msgstr "" -#: includes/openid-connect-generic-settings-page.php:319 +#: includes/hello-login-settings-page.php:319 msgid "Nickname Key" msgstr "" -#: includes/openid-connect-generic-settings-page.php:320 +#: includes/hello-login-settings-page.php:320 msgid "" "Where in the user claim array to find the user's nickname. Possible " "standard values: preferred_username, name, or sub." msgstr "" -#: includes/openid-connect-generic-settings-page.php:326 +#: includes/hello-login-settings-page.php:326 msgid "Email Formatting" msgstr "" -#: includes/openid-connect-generic-settings-page.php:327 +#: includes/hello-login-settings-page.php:327 msgid "" "String from which the user's email address is built. Specify \"{email}\" as " "long as the user claim contains an email claim." msgstr "" -#: includes/openid-connect-generic-settings-page.php:333 +#: includes/hello-login-settings-page.php:333 msgid "Display Name Formatting" msgstr "" -#: includes/openid-connect-generic-settings-page.php:334 +#: includes/hello-login-settings-page.php:334 msgid "String from which the user's display name is built." msgstr "" -#: includes/openid-connect-generic-settings-page.php:340 +#: includes/hello-login-settings-page.php:340 msgid "Identify with User Name" msgstr "" -#: includes/openid-connect-generic-settings-page.php:341 +#: includes/hello-login-settings-page.php:341 msgid "" "If checked, the user's identity will be determined by the user name instead " "of the email address." msgstr "" -#: includes/openid-connect-generic-settings-page.php:346 +#: includes/hello-login-settings-page.php:346 msgid "State time limit" msgstr "" -#: includes/openid-connect-generic-settings-page.php:347 +#: includes/hello-login-settings-page.php:347 msgid "State valid time in seconds. Defaults to 180" msgstr "" -#: includes/openid-connect-generic-settings-page.php:352 +#: includes/hello-login-settings-page.php:352 msgid "Enable Refresh Token" msgstr "" -#: includes/openid-connect-generic-settings-page.php:353 +#: includes/hello-login-settings-page.php:353 msgid "" "If checked, support refresh tokens used to obtain access tokens from " "supported IDPs." msgstr "" -#: includes/openid-connect-generic-settings-page.php:358 +#: includes/hello-login-settings-page.php:358 msgid "Link Existing Users" msgstr "" -#: includes/openid-connect-generic-settings-page.php:359 +#: includes/hello-login-settings-page.php:359 msgid "" "If a WordPress account already exists with the same identity as a " "newly-authenticated user over OpenID Connect, login as that user instead of " "generating an error." msgstr "" -#: includes/openid-connect-generic-settings-page.php:365 +#: includes/hello-login-settings-page.php:365 msgid "Create user if does not exist" msgstr "" -#: includes/openid-connect-generic-settings-page.php:366 +#: includes/hello-login-settings-page.php:366 msgid "" "If the user identity is not linked to an existing WordPress user, it is " "created. If this setting is not enabled, and if the user authenticates with " @@ -409,11 +409,11 @@ msgid "" "authentication will fail." msgstr "" -#: includes/openid-connect-generic-settings-page.php:372 +#: includes/hello-login-settings-page.php:372 msgid "Redirect Back to Origin Page" msgstr "" -#: includes/openid-connect-generic-settings-page.php:373 +#: includes/hello-login-settings-page.php:373 msgid "" "After a successful OpenID Connect authentication, this will redirect the " "user back to the page on which they clicked the OpenID Connect login " @@ -424,94 +424,94 @@ msgid "" "account page." msgstr "" -#: includes/openid-connect-generic-settings-page.php:379 +#: includes/hello-login-settings-page.php:379 msgid "Redirect to the login screen when session is expired" msgstr "" -#: includes/openid-connect-generic-settings-page.php:380 +#: includes/hello-login-settings-page.php:380 msgid "" "When enabled, this will automatically redirect the user back to the " "WordPress login page if their access token has expired." msgstr "" -#: includes/openid-connect-generic-settings-page.php:386 +#: includes/hello-login-settings-page.php:386 msgid "Enable Logging" msgstr "" -#: includes/openid-connect-generic-settings-page.php:387 +#: includes/hello-login-settings-page.php:387 msgid "Very simple log messages for debugging purposes." msgstr "" -#: includes/openid-connect-generic-settings-page.php:392 +#: includes/hello-login-settings-page.php:392 msgid "Log Limit" msgstr "" -#: includes/openid-connect-generic-settings-page.php:393 +#: includes/hello-login-settings-page.php:393 msgid "" "Number of items to keep in the log. These logs are stored as an option in " "the database, so space is limited." msgstr "" -#: includes/openid-connect-generic-settings-page.php:455 +#: includes/hello-login-settings-page.php:455 msgid "Notes" msgstr "" -#: includes/openid-connect-generic-settings-page.php:458 +#: includes/hello-login-settings-page.php:458 msgid "Redirect URI" msgstr "" -#: includes/openid-connect-generic-settings-page.php:462 +#: includes/hello-login-settings-page.php:462 msgid "Login Button Shortcode" msgstr "" -#: includes/openid-connect-generic-settings-page.php:466 +#: includes/hello-login-settings-page.php:466 msgid "Authentication URL Shortcode" msgstr "" -#: includes/openid-connect-generic-settings-page.php:471 +#: includes/hello-login-settings-page.php:471 msgid "Logs" msgstr "" -#: includes/openid-connect-generic-settings-page.php:551 +#: includes/hello-login-settings-page.php:551 msgid "Example" msgstr "" -#: includes/openid-connect-generic-settings-page.php:564 +#: includes/hello-login-settings-page.php:564 msgid "Enter your OpenID Connect identity provider settings." msgstr "" -#: includes/openid-connect-generic-settings-page.php:573 +#: includes/hello-login-settings-page.php:573 msgid "Modify the interaction between OpenID Connect and WordPress users." msgstr "" -#: includes/openid-connect-generic-settings-page.php:582 +#: includes/hello-login-settings-page.php:582 msgid "Control the authorization mechanics of the site." msgstr "" -#: includes/openid-connect-generic-settings-page.php:591 -msgid "Log information about login attempts through OpenID Connect Generic." +#: includes/hello-login-settings-page.php:591 +msgid "Log information about login attempts through Hellō Login." msgstr "" -#: openid-connect-generic.php:213 +#: hello-login.php:213 msgid "Private site" msgstr "" #. Plugin Name of the plugin/theme -msgid "OpenID Connect Generic" +msgid "Hellō Login" msgstr "" #. Plugin URI of the plugin/theme -msgid "https://github.com/daggerhart/openid-connect-generic" +msgid "https://github.com/hellocoop/wordpress" msgstr "" #. Description of the plugin/theme -msgid "Connect to an OpenID Connect generic client using Authorization Code Flow." +msgid "A login and registration plugin for the Hellō service." msgstr "" #. Author of the plugin/theme -msgid "daggerhart" +msgid "hellocoop" msgstr "" #. Author URI of the plugin/theme -msgid "http://www.daggerhart.com" -msgstr "" \ No newline at end of file +msgid "https://www.hello.coop/" +msgstr "" diff --git a/package-lock.json b/package-lock.json index e9ff388..4045eb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "openid-connect-generic", - "version": "3.9.1", + "name": "hello-login", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1780,7 +1780,7 @@ "dev": true, "requires": { "semver": "~6.3.0", - "shelljs": "0.8.5" + "shelljs": "^0.8.5" }, "dependencies": { "shelljs": { @@ -3153,6 +3153,14 @@ "webpack-bundle-analyzer": "^4.4.2", "webpack-cli": "^4.9.1", "webpack-dev-server": "^4.4.0" + }, + "dependencies": { + "prettier": { + "version": "npm:wp-prettier@2.2.1-beta-1", + "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.2.1-beta-1.tgz", + "integrity": "sha512-+JHkqs9LC/JPp51yy1hzs3lQ7qeuWCwOcSzpQNeeY/G7oSpnF61vxt7hRh87zNRTr6ob2ndy0W8rVzhgrcA+Gw==", + "dev": true + } } }, "@wordpress/stylelint-config": { @@ -7207,12 +7215,6 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "dev": true - }, "gettext-parser": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-3.1.1.tgz", @@ -7453,7 +7455,7 @@ "integrity": "sha1-vyINBzhaKmi0cpzRZ1sU5vuDKFI=", "dev": true, "requires": { - "shelljs": "0.8.5" + "shelljs": "0.7.x" }, "dependencies": { "shelljs": { @@ -7597,7 +7599,7 @@ "dev": true, "requires": { "async": "~0.9.0", - "getobject": "1.0.0", + "getobject": "~0.1.0", "lodash": "^4.17.14" }, "dependencies": { @@ -7664,6 +7666,12 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "getobject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", + "integrity": "sha512-tbUz6AKKKr2YiMB+fLWIgq5ZeBOobop9YMMAU9dC54/ot2ksMXt3DOFyBuhZw6ptcVszEykgByK20j7W9jHFag==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -12667,6 +12675,11 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true + }, "minizlib": { "version": "1.3.3", "bundled": true, @@ -12709,6 +12722,13 @@ "dev": true, "requires": { "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true + } } }, "move-concurrently": { @@ -15479,12 +15499,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prettier": { - "version": "npm:wp-prettier@2.2.1-beta-1", - "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.2.1-beta-1.tgz", - "integrity": "sha512-+JHkqs9LC/JPp51yy1hzs3lQ7qeuWCwOcSzpQNeeY/G7oSpnF61vxt7hRh87zNRTr6ob2ndy0W8rVzhgrcA+Gw==", - "dev": true - }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", diff --git a/package.json b/package.json index 362b4ae..f4cc45b 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,21 @@ { - "name": "openid-connect-generic", - "version": "3.9.1", - "description": "OpenID Connect generic WordPress plugin.", + "name": "hello-login", + "version": "1.0.0", + "description": "Hellō WordPress plugin.", "main": "Gruntfile.js", "repository": { "type": "git", - "url": "https://github.com/daggerhart/openid-connect-generic" + "url": "https://github.com/hellocoop/wordpress" }, "keywords": [ "wordpress", - "openid" + "Hellō" ], - "author": "Jonathan Daggerhart", "license": "GPL-2.0-only", "bugs": { - "url": "https://github.com/daggerhart/openid-connect-generic/issues" + "url": "https://github.com/hellocoop/wordpress/issues" }, - "homepage": "https://github.com/daggerhart/openid-connect-generic#readme", + "homepage": "https://github.com/hellocoop/wordpress#readme", "dependencies": { "dev-require": "^0.1.0" }, @@ -52,8 +51,8 @@ "shelljs": "0.8.5" }, "wp-env": { - "plugin-dir": "daggerhart-openid-connect-generic", - "plugin-name": "OpenID Connect Generic", + "plugin-dir": "hello-login", + "plugin-name": "Hellō Login", "docker-template": "./docker-compose.wp-env.yml", "welcome-build-command": "npm start" }, @@ -77,7 +76,7 @@ "test": "npm run grunt test", "i18n:check": "npm run grunt checktextdomain", "i18n:make": "npm run grunt i18n", - "i18n:make:cli": "wp-env run cli wp i18n make-pot . languages/ --slug=daggerhart-openid-connect-generic --include=openid-connect-generic.php,includes", + "i18n:make:cli": "wp-env run cli wp i18n make-pot . languages/ --slug=hello-login --include=hello-login.php,includes", "lint": "npm run lint:php", "lint:php": "docker-compose run composer lint", "lint:php:fix": "docker-compose run composer lint-fix", diff --git a/phpcs.xml.dist b/phpcs.xml.dist index dcb614a..586637f 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -72,7 +72,7 @@ Multiple valid text domains can be provided as a comma-delimited list. --> - + diff --git a/readme.txt b/readme.txt index d10132c..62fd587 100644 --- a/readme.txt +++ b/readme.txt @@ -1,114 +1,53 @@ -=== OpenID Connect Generic Client === -Contributors: daggerhart, tnolte -Donate link: http://www.daggerhart.com/ -Tags: security, login, oauth2, openidconnect, apps, authentication, autologin, sso +=== Hellō Login === +Contributors: mariuss +Donate link: https://www.hello.dev/ +Tags: security, login, oauth2, openidconnect, apps, authentication, sso Requires at least: 4.9 Tested up to: 6.0.1 -Stable tag: 3.9.1 +Stable tag: 1.0.0 Requires PHP: 7.2 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html -A simple client that provides SSO or opt-in authentication against a generic OAuth2 Server implementation. +A login and registration plugin for the Hellō service. == Description == -This plugin allows to authenticate users against OpenID Connect OAuth2 API with Authorization Code Flow. -Once installed, it can be configured to automatically authenticate users (SSO), or provide a "Login with OpenID Connect" -button on the login form. After consent has been obtained, an existing user is automatically logged into WordPress, while -new users are created in WordPress database. +This plugin integrates the Hellō service with your site, simplifying login and registration of users. +You can request name, nickname, profile picture, as well as a verified email, phone, or ethereum address. -Much of the documentation can be found on the Settings > OpenID Connect Generic dashboard page. +This plugin uses the Hellō Quickstart service to get your site up and running in minutes. -Please submit issues to the Github repo: https://github.com/daggerhart/openid-connect-generic +Configuration and settings can be found in the Settings > Hellō Login dashboard page + +For details on the Hellō service see [hello.dev](https://hello.dev) + +Please submit issues and feature requests to the Github repo: [https://github.com/hellocoop/wordpress](https://github.com/hellocoop/wordpress) == Installation == 1. Upload to the `/wp-content/plugins/` directory -1. Activate the plugin -1. Visit Settings > OpenID Connect and configure to meet your needs +1. Activate the plugin in `Plugins` +1. In `Settings` > `Hellō Login` click the `Quickstart` button and complete Quickstart flow +1. Add the `[hello_login_button]` shortcode to pages for the Hellō login button == Frequently Asked Questions == -= What is the client's Redirect URI? = - -Most OAuth2 servers will require whitelisting a set of redirect URIs for security purposes. The Redirect URI provided -by this client is like so: https://example.com/wp-admin/admin-ajax.php?action=openid-connect-authorize += How do users login? = -Replace `example.com` with your domain name and path to WordPress. +Hellō offers users all popular social login methods including Apple, Facebook, Google, Line, Microsoft, Twitch, and Yahoo; +email or phone; or popular crypto wallets including MetaMask. The current choices can be seen at [https://wallet.hello.coop](https://wallet.hello.coop) +Hellō lets users change their provider without any effort on your part. -= Can I change the client's Redirect URI? = - -Some OAuth2 servers do not allow for a client redirect URI to contain a query string. The default URI provided by -this module leverages WordPress's `admin-ajax.php` endpoint as an easy way to provide a route that does not include -HTML, but this will naturally involve a query string. Fortunately, this plugin provides a setting that will make use of -an alternate redirect URI that does not include a query string. - -On the settings page for this plugin (Dashboard > Settings > OpenID Connect Generic) there is a checkbox for -**Alternate Redirect URI**. When checked, the plugin will use the Redirect URI -`https://example.com/openid-connect-authorize`. += What claims can I ask for about a user? = +Hellō supports all popular OpenID Connect claims and we are continually adding claims to Hellō. You can see the full list at [Hellō Claims](https://www.hello.dev/documentation/hello-claims.html) == Changelog == -= 3.9.1 = - -* Improvement: @timnolte - Refactors Composer setup and GitHub Actions. -* Improvement: @timnolte - Bumps WordPress tested version compatibility. - -= 3.9.0 = - -* Feature: @matchaxnb - Added support for additional configuration constants. -* Feature: @schanzen - Added support for agregated claims. -* Fix: @rkcreation - Fixed access token not updating user metadata after login. -* Fix: @danc1248 - Fixed user creation issue on Multisite Networks. -* Feature: @RobjS - Added plugin singleton to support for more developer customization. -* Feature: @jkouris - Added action hook to allow custom handling of session expiration. -* Fix: @tommcc - Fixed admin CSS loading only on the plugin settings screen. -* Feature: @rkcreation - Added method to refresh the user claim. -* Feature: @Glowsome - Added acr_values support & verification checks that it when defined in options is honored. -* Fix: @timnolte - Fixed regression which caused improper fallback on missing claims. -* Fix: @slykar - Fixed missing query string handling in redirect URL. -* Fix: @timnolte - Fixed issue with some user linking and user creation handling. -* Improvement: @timnolte - Fixed plugin settings typos and screen formatting. -* Security: @timnolte - Updated build tooling security vulnerabilities. -* Improvement: @timnolte - Changed build tooling scripts. - -= 3.8.5 = - -* Fix: @timnolte - Fixed missing URL request validation before use & ensure proper current page URL is setup for Redirect Back. -* Fix: @timnolte - Fixed Redirect URL Logic to Handle Sub-directory Installs. -* Fix: @timnolte - Fixed issue with redirecting user back when the openid_connect_generic_auth_url shortcode is used. - -= 3.8.4 = - -* Fix: @timnolte - Fixed invalid State object access for redirection handling. -* Improvement: @timnolte - Fixed local wp-env Docker development environment. -* Improvement: @timnolte - Fixed Composer scripts for linting and static analysis. - -= 3.8.3 = - -* Fix: @timnolte - Fixed problems with proper redirect handling. -* Improvement: @timnolte - Changes redirect handling to use State instead of cookies. -* Improvement: @timnolte - Refactored additional code to meet coding standards. - -= 3.8.2 = - -* Fix: @timnolte - Fixed reported XSS vulnerability on WordPress login screen. - -= 3.8.1 = - -* Fix: @timnolte - Prevent SSO redirect on password protected posts. -* Fix: @timnolte - CI/CD build issues. -* Fix: @timnolte - Invalid redirect handling on logout for Auto Login setting. - -= 3.8.0 = - -* Feature: @timnolte - Ability to use 6 new constants for setting client configuration instead of storing in the DB. -* Improvement: @timnolte - Plugin development & contribution updates. -* Improvement: @timnolte - Refactored to meet WordPress coding standards. -* Improvement: @timnolte - Refactored to provide localization. - --------- += 1.0.0 = -[See the previous changelogs here](https://github.com/oidc-wp/openid-connect-generic/blob/main/CHANGELOG.md#changelog) +* Forked https://github.com/oidc-wp/openid-connect-generic +* Improvement: @mariuss - Merged PR that adds [PKCE support](https://github.com/oidc-wp/openid-connect-generic/pull/421) +* Feature: @mariuss - Integrated Hellō Quickstart +* Feature: @mariuss - Removed unnecessary configuration options diff --git a/tests/phpstan-bootstrap.php b/tests/phpstan-bootstrap.php index 6271323..5724dcf 100644 --- a/tests/phpstan-bootstrap.php +++ b/tests/phpstan-bootstrap.php @@ -2,7 +2,7 @@ /** * Phpstan bootstrap file. * - * @package OpenID_Connect_Generic + * @package Hello_Login * @author Jonathan Daggerhart * @author Tim Nolte * @copyright 2015-2020 daggerhart