From 8852c9d52e37897160ae23391f64df4bd508ee8d Mon Sep 17 00:00:00 2001 From: Robert Staddon Date: Wed, 18 May 2016 11:20:24 -0500 Subject: [PATCH 1/7] Increment version and update readme --- openid-connect-generic.php | 2 +- readme.md | 9 +++++++++ readme.txt | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/openid-connect-generic.php b/openid-connect-generic.php index 01fe328..80c13cc 100644 --- a/openid-connect-generic.php +++ b/openid-connect-generic.php @@ -3,7 +3,7 @@ Plugin Name: OpenID Connect - Generic Client Plugin URI: https://github.com/daggerhart/openid-connect-generic Description: Connect to an OpenID Connect identity provider with Authorization Code Flow -Version: 3.0.3 +Version: 3.0.5 Author: daggerhart Author URI: http://www.daggerhart.com License: GPLv2 Copyright (c) 2015 daggerhart diff --git a/readme.md b/readme.md index 89c81eb..5911ffe 100644 --- a/readme.md +++ b/readme.md @@ -34,6 +34,15 @@ Replace `example.com` with your domain name and path to WordPress. ### Changelog +**3.0.5** + +* Added [openid_connect_generic_login_button] shortcode to allow the login button to be placed anywhere +* Added setting to "Redirect Back to Origin Page" after a successful login instead of redirecting to the home page. + +**3.0.4** + +* 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 diff --git a/readme.txt b/readme.txt index 5d648bc..fcf3930 100644 --- a/readme.txt +++ b/readme.txt @@ -40,6 +40,15 @@ Replace `example.com` with your domain name and path to WordPress. == Changelog == += 3.0.5 = + +* Added [openid_connect_generic_login_button] shortcode to allow the login button to be placed anywhere +* Added setting to "Redirect Back to Origin Page" after a successful login instead of redirecting to the home page. + += 3.0.4 = + +* 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 From 669e3b8030ae1316ac08f99198e39c1009fe4a19 Mon Sep 17 00:00:00 2001 From: Robert Staddon Date: Wed, 18 May 2016 11:22:28 -0500 Subject: [PATCH 2/7] Add shortcode for login button [openid_connect_generic_login_button] --- includes/openid-connect-generic-login-form.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/includes/openid-connect-generic-login-form.php b/includes/openid-connect-generic-login-form.php index 3760017..e580cbe 100644 --- a/includes/openid-connect-generic-login-form.php +++ b/includes/openid-connect-generic-login-form.php @@ -26,6 +26,9 @@ class OpenID_Connect_Generic_Login_Form { // alter the login form as dictated by settings 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' ) ); + return $login_form; } From 6b5d6a9782959a3423d53883dc2cc962069cf5b7 Mon Sep 17 00:00:00 2001 From: Robert Staddon Date: Wed, 18 May 2016 11:26:28 -0500 Subject: [PATCH 3/7] Add "Redirect Back to Origin Page" setting This setting would override the default action of redirecting the user to the home page after a successful login and instead redirect the user back to the page on which they clicked the OpenID Connect login button. This would cause the login process to proceed in a traditional WordPress fashion. --- includes/openid-connect-generic-settings-page.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/includes/openid-connect-generic-settings-page.php b/includes/openid-connect-generic-settings-page.php index a05588e..5859071 100644 --- a/includes/openid-connect-generic-settings-page.php +++ b/includes/openid-connect-generic-settings-page.php @@ -117,6 +117,12 @@ class OpenID_Connect_Generic_Settings_Page { 'type' => 'checkbox', 'section' => 'user_settings', ), + 'redirect_user_back' => array( + 'title' => __( 'Redirect Back to Origin Page' ), + 'description' => __( 'After a successful OpenID Connect authentication, this will override the default action of redirecting the user to the home page and instead 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.' ), + 'type' => 'checkbox', + 'section' => 'user_settings', + ), 'enable_logging' => array( 'title' => __( 'Enable Logging' ), 'description' => __( 'Very simple log messages for debugging purposes.' ), From 398612eaf1689612513862341dbb7d8ee731f651 Mon Sep 17 00:00:00 2001 From: Robert Staddon Date: Wed, 18 May 2016 11:31:28 -0500 Subject: [PATCH 4/7] Redirect to origin page instead of home page if setting enabled To know the origin page URL, read the value of a cookie that was set when the button was created. --- .../openid-connect-generic-client-wrapper.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/includes/openid-connect-generic-client-wrapper.php b/includes/openid-connect-generic-client-wrapper.php index fed9858..eedee92 100644 --- a/includes/openid-connect-generic-client-wrapper.php +++ b/includes/openid-connect-generic-client-wrapper.php @@ -12,7 +12,10 @@ class OpenID_Connect_Generic_Client_Wrapper { // internal tracking cookie key private $cookie_id_key = 'openid-connect-generic-identity'; - + + // user redirect cookie key + public $cookie_redirect_key = 'openid-connect-generic-redirect'; + // WP_Error if there was a problem, or false if no error private $error = false; @@ -258,8 +261,14 @@ class OpenID_Connect_Generic_Client_Wrapper { // log our success $this->logger->log( "Successful login for: {$user->user_login} ({$user->ID})", 'login-success' ); - // go home! - wp_redirect( home_url() ); + // redirect back to the origin page if enabled + if( $this->settings->redirect_user_back && !empty( $redirect_url = esc_url( $_COOKIE[ $this->cookie_redirect_key ] ) ) ) { + wp_redirect( $redirect_url ); + } + // otherwise, go home! + else { + wp_redirect( home_url() ); + } } /** From 6cd6cc126a44419903642e19804f1a466788262c Mon Sep 17 00:00:00 2001 From: Robert Staddon Date: Wed, 18 May 2016 11:36:57 -0500 Subject: [PATCH 5/7] Record the URL of the current page when creating a login button --- includes/openid-connect-generic-login-form.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/includes/openid-connect-generic-login-form.php b/includes/openid-connect-generic-login-form.php index e580cbe..00e3eb1 100644 --- a/includes/openid-connect-generic-login-form.php +++ b/includes/openid-connect-generic-login-form.php @@ -86,6 +86,16 @@ class OpenID_Connect_Generic_Login_Form { $text = apply_filters( 'openid-connect-generic-login-button-text', __( 'Login with OpenID Connect' ) ); $href = $this->client_wrapper->get_authentication_url(); + // record the URL of this page if set to redirect back to origin page + if( $this->settings->redirect_user_back ) { + $redirect_expiry = time() + DAY_IN_SECONDS; + if ( $GLOBALS['pagenow'] == 'wp-login.php' ) + $redirect_url = admin_url(); + else + $redirect_url = home_url( esc_url( add_query_arg( NULL, NULL ) ) ); + setcookie( $this->client_wrapper->cookie_redirect_key, $redirect_url, $redirect_expiry, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); + } + ob_start(); ?>