WordPress.org

Making WordPress.org

Changeset 2322


Ignore:
Timestamp:
01/19/16 16:14:08 (2 years ago)
Author:
stephdau
Message:

WordPress.org SSO:

  • updating WP plugin with a path router/validator for login.wordpress.org
  • adding a is_valid_wporg_sso_path filter

See #1524

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/common/includes/wporg-sso/wp-plugin.php

    r2318 r2322  
    1212if ( class_exists( 'WPOrg_SSO' ) && ! class_exists( 'WP_WPOrg_SSO' ) ) { 
    1313    class WP_WPOrg_SSO extends WPOrg_SSO { 
     14        /** 
     15         * List of valid paths on login.wordpress.org 
     16         * @var array 
     17         */ 
     18        public $valid_sso_paths = array( 
     19            '/', 
     20            '/checkemail', 
     21            '/loggedout', 
     22            '/lostpassword', 
     23            '/oauth', 
     24        ); 
     25         
    1426        /** 
    1527         * Constructor: add our action(s)/filter(s) 
     
    7385                if ( ! preg_match( '!/wp-login\.php$!', $this->script ) ) { 
    7486                    // ... but not on its login screen. 
    75                     if ( preg_match( '!^/(\?.*)?$!', $_SERVER['REQUEST_URI'] ) ) { 
    76                         // If at host root (/) 
    77                         if ( ! empty( $_GET['action'] ) ) { 
    78                             // If there's an action, it's really meant for wp-login.php, redirect 
    79                             $get = $_GET; 
    80                             if ( in_array( $get['action'], array( 'logout', 'loggedout' ) ) ) { 
    81                                 // But make sure to show our custom screen when needed 
    82                                 $get['redirect_to'] = '/?screen=loggedout'; 
     87                    if ( preg_match( '!^(' . implode( '|', $this->valid_sso_paths ) . ')([/?]{1,2}.*)?$!', $_SERVER['REQUEST_URI'] ) ) { 
     88                        // If we're on the path of interest 
     89                         
     90                        // Add a custom filter others can apply (theme, etc). 
     91                        add_filter( 'is_valid_wporg_sso_path' , '__return_true' ); 
     92                         
     93                        if ( preg_match( '!^/(\?.*)?$!', $_SERVER['REQUEST_URI'] ) ) { 
     94                            // If at host root (/) 
     95                            if ( ! empty( $_GET['action'] ) ) { 
     96                                // If there's an action, it's really meant for wp-login.php, redirect 
     97                                $get = $_GET; 
     98                                if ( in_array( $get['action'], array( 'logout', 'loggedout' ) ) ) { 
     99                                    // But make sure to show our custom screen when needed 
     100                                    $get['redirect_to'] = '/loggedout/'; 
     101                                } 
     102                                $this->_safe_redirect( add_query_arg( $get, $this->sso_login_url . '/wp-login.php' ) ); 
     103                                return; 
     104                            } else { 
     105                                // Else let the theme render, or redirect if logged in 
     106                                if ( is_user_logged_in() ) { 
     107                                    $this->_redirect_to_profile(); 
     108                                } else { 
     109                                    if ( empty( $_GET['screen'] ) ) { 
     110                                        add_filter( 'login_form_defaults', array( &$this, 'login_form_defaults' ) ); 
     111                                    } 
     112                                } 
     113                                return; 
    83114                            } 
    84                             $this->_safe_redirect( add_query_arg( $get, $this->sso_login_url . '/wp-login.php' ) ); 
    85                             return; 
    86                         } else { 
    87                             // Else let the theme render, or redirect if logged in 
    88                             if ( is_user_logged_in() ) { 
    89                                 $this->_redirect_to_profile(); 
    90                             } else { 
    91                                 if ( empty( $_GET['screen'] ) ) { 
    92                                     add_filter( 'login_form_defaults', array( &$this, 'login_form_defaults' ) ); 
    93                                 } 
    94                             } 
    95                             return; 
    96                         } 
    97                     } elseif ( preg_match( '!^/oauth([/?]{1}.*)?$!', $_SERVER['REQUEST_URI'] ) ) { 
    98                         // Let the theme render for oauth paths (/oauth, /oauth/, /oauth/*, but 
    99                         // not /notoauth or /oauthnot), or redirect if logged in 
    100                         if ( is_user_logged_in() ) { 
     115                        } else if ( is_user_logged_in() ) { 
     116                            // Otherwise, redirect to the login screen. 
    101117                            $this->_redirect_to_profile(); 
    102118                        } 
    103                         return; 
    104119                    } elseif ( is_user_logged_in() ) { 
    105120                        // Logged in catch all, before last fallback 
     
    109124                        $this->_safe_redirect( $this->sso_login_url ); 
    110125                    } 
    111                  
    112126                } else { 
    113127                    // if on login screen, filter network_site_url to make sure our forms go to the SSO host, not wordpress.org 
     
    160174            } 
    161175 
    162             if ( !empty( $_GET['redirect_to'] ) ) { 
     176            if ( ! empty( $_GET['redirect_to'] ) ) { 
    163177                $this->_safe_redirect( wp_unslash( $_GET['redirect_to'] ) ); 
    164178            } else { 
Note: See TracChangeset for help on using the changeset viewer.