Plugin Directory

Changeset 3147410


Ignore:
Timestamp:
09/06/2024 07:51:30 AM (17 months ago)
Author:
nimeshatxecurify
Message:

Release version 5.1.8

  • Handled Fatal Errors when PHP extensions (CURL, DOM, OPENSSL) are disabled
  • Clarified error codes on the Test Configuration tab for easier troubleshooting
  • Fixed console warnings during registration and login in the Account Setup Tab
  • UI Improvements
Location:
miniorange-saml-20-single-sign-on
Files:
212 added
22 edited

Legend:

Unmodified
Added
Removed
  • miniorange-saml-20-single-sign-on/trunk/changelog.txt

    r2540474 r3147410  
    55This file contains older changelog entries, so we can keep the size of the standard WordPress readme.txt file reasonable.
    66For the latest changes, please refer to the "Changelog" section in the [readme.txt file](https://plugins.svn.wordpress.org/miniorange-saml-20-single-sign-on/trunk/readme.txt).
     7
     8= 5.0.9 =
     9* Fix for iconv() warning in linux environment
     10* Fix for upgrade to premium versions
     11* Minor UI improvements
     12
     13= 5.0.8 =
     14* WP 6.4 Compatibility
     15* Compatibility fix with Themify Plugin
     16* UI fixes
     17
     18= 5.0.7 =
     19* WP 6.3 Compatibility
     20* Added proper error message when wp-config.php is not writable for enabling debug logs
     21* Fix for warning in the list of IDP logos
     22
     23= 5.0.6 =
     24* Fix for NetIQ SAML IDP Logo
     25* Fix for x509 certificate in SAML SSO Configurations
     26
     27= 5.0.5 =
     28* Vulnerability fix for Broken Access Control in SSO Settings
     29
     30= 5.0.4 =
     31* Added additional exception handling checks to enhance the validation of SAML Response
     32* Added Steps to download the paid plugin
     33* Minor Bug Fixes
     34
     35= 5.0.3 =
     36* Added new IDPs like Siteminder, VMWare, OpenAthens
     37* Minor Bug Fixes
     38
     39= 5.0.2 =
     40* Added new IDPs like Sharepoint, Dynamic CRM, LastPass, Drupal
     41
     42= 5.0.1 =
     43* Compatibility with WordPress 6.2
     44* Added iconv encoding issue flow
     45* Fixed plugin update using FTP replace
     46* Fixed SSO widget title issue
     47* Fixed plugin deactivation issue
     48* Fixes in debug log functionality
     49
     50= 5.0.0 =
     51* Added PHPCS fixes
     52
     53= 4.9.32 =
     54* Security fix for Open Redirect Vulnerability
     55
     56= 4.9.31 =
     57* Fixes in logger functionality
     58
     59= 4.9.30 =
     60* Added an option to disable assertion validity
     61* Added custom Bootstrap CSS and JS
     62* Updated images to webp format
     63* Added Azure AD Integrations
     64* Cross browser UI fixes
     65
     66= 4.9.29 =
     67* Compatibility with WordPress 6.1
     68* Fixes for PHP 8.1
     69
     70= 4.9.28 =
     71* Fixed console warning
     72
     73= 4.9.27 =
     74* Plugin delete fix
     75
     76= 4.9.26 =
     77* Modified code flow for form save
     78* Made Utilities class static
     79* Improvements in logger flow
     80
     81= 4.9.25 =
     82* Updated intel-tel library
     83* Updated modenizr, Font Awesome, Time Picker libraries
     84* Improved design of success and error messages
     85* Added support for dynamic folder name for plugin
     86
     87= 4.9.24 =
     88* Updated Bootstrap version
     89* Sanitization fixes for global variables
     90
     91= 4.9.23 =
     92* Removed role mapping for existing users
     93
     94= 4.9.22 =
     95* Fixed a bug with post login redirection
     96* Fixed RelayState URL
     97
     98= 4.9.21 =
     99* Sanitization and Escaping fixes
     100* Role Mapping fix
     101
     102= 4.9.20 =
     103* Introduced Error Codes
     104* Removed some obsolete functions
     105
     106= 4.9.19 =
     107* Fixed UI compatibility with all themes
     108
     109= 4.9.18 =
     110* Minor UI fixes
     111
     112= 4.9.17 =
     113* Fixed Login button positioning
     114
     115= 4.9.16 =
     116* Revamped plugin's UI
     117* NameID Format fix for ADFS
     118
     119= 4.9.15 =
     120* Compatibility with WordPress 5.9
     121* Added Support for NameID Policy in SAML Request
     122
     123= 4.9.14 =
     124* Removed end of year sale
     125* Readme updates
     126
     127= 4.9.13 =
     128* License Banner fixes
     129
     130= 4.9.12 =
     131* Added discounted pricing for WordPress SSO plans
     132
     133= 4.9.11 =
     134* Updated licensing plans for SAML SSO
     135* Fixed bugs for Debug Framework
     136* Other UI fixes
     137
     138= 4.9.10 =
     139* Fixed an issue with broken plugin links
     140
     141= 4.9.09 =
     142* Added Debug Logs Framework
     143* Added new IDP's support for SSO
     144* WordPress 5.8 Compatibility
     145
     146= 4.9.08 =
     147* Demo request improvements
     148
     149= 4.9.07 =
     150* Licensing Update for WordPress SSO plans
     151
     152= 4.9.06 =
     153* UI changes and fixes
     154* Readme changes
     155
     156= 4.9.05 =
     157* UI improvements and fixes
     158* WordPress 5.7 Compatibility
     159
     160= 4.9.04 =
     161* Licensing Update for WordPress SSO plans
     162
     163= 4.9.03 =
     164* Added video plugin guides for WordPress SSO
     165
     166= 4.9.02 =
     167* Welcome page fixes
     168
     169= 4.9.01 =
     170* Added support of Localization
     171* WordPress 5.6 Loop back issue fix
     172* PHP 8 Compatibility
     173* Fixed SAML Login URL query parameters bug
     174* Removed end of year sale
     175
     176= 4.9.00 =
     177* Rolled out end of year sale
    7178
    8179= 4.8.99 =
  • miniorange-saml-20-single-sign-on/trunk/class-mo-saml-assertion.php

    r3110324 r3147410  
    234234            if ( isset( $_POST['RelayState'] ) && 'testValidate' === $_POST['RelayState'] ) {
    235235                Mo_SAML_Logger::mo_saml_add_log( 'Assertion encrypted', Mo_SAML_Logger::ERROR );
    236                 $error_cause   = $error_code['cause'];
    237                 $error_message = $error_code['testConfig_msg'];
    238                 mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    239                 mo_saml_download_logs( $error_cause, $error_message );
     236                mo_saml_display_test_config_error_page( $error_code );
    240237                exit;
    241238            } else {
     
    299296            // phpcs:ignore WordPress.Security.NonceVerification.Missing -- This POST is recieved from the IDP side and hence will not contain nonce.
    300297            if ( isset( $_POST['RelayState'] ) && 'testValidate' === $_POST['RelayState'] ) {
    301                 $error_cause   = $error_code['cause'];
    302                 $error_message = $error_code['testConfig_msg'];
    303                 mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    304                 mo_saml_download_logs( $error_cause, $error_message );
     298                mo_saml_display_test_config_error_page( $error_code );
    305299            } else {
    306300                Mo_SAML_Utilities::mo_saml_die( $error_code );
  • miniorange-saml-20-single-sign-on/trunk/class-mo-saml-customer.php

    r3110324 r3147410  
    178178
    179179        if ( $call_setup ) {
    180             $query = '[Call Request - WP SAML SP SSO Plugin] ' . $query;
     180            $query = '[Call Request - WP SAML SP SSO Plugin v' . Mo_Saml_Options_Plugin_Constants::VERSION . '] ' . $query;
    181181        } else {
    182             $query = '[WP SAML 2.0 SP SSO Plugin] ' . $query;
     182            $query = '[WP SAML 2.0 SP SSO Plugin v' . Mo_Saml_Options_Plugin_Constants::VERSION . '] ' . $query;
    183183        }
    184184
  • miniorange-saml-20-single-sign-on/trunk/class-mo-saml-logger.php

    r3110324 r3147410  
    4343     */
    4444    public static function mo_saml_is_log_file_writable() {
    45         return wp_is_writable( self::mo_saml_get_saml_log_directory() );
    46     }
    47 
    48     /***
     45        if ( is_dir( self::mo_saml_get_saml_log_directory() ) ) {
     46            return wp_is_writable( self::mo_saml_get_saml_log_directory() );
     47        }
     48    }
     49
     50    /**
    4951     * Initializes directory to write debug logs.
     52     *
     53     * @throws Exception Directory Not created.
    5054     */
    5155    public static function mo_saml_init() {
    52 
    5356        // For setting up debug directory for log files.
    54         $upload_dir = wp_upload_dir( null, false );
    55         if ( wp_is_writable( $upload_dir['basedir'] ) ) {
     57        $upload_dir     = wp_upload_dir( null, false );
     58        $log_dir        = self::mo_saml_get_saml_log_directory();
     59        $upload_basedir = str_replace( '\\', '/', $upload_dir['basedir'] );
     60        if ( wp_is_writable( $upload_basedir ) ) {
    5661            self::$log_file_writable = true;
    57             if ( ! is_dir( self::mo_saml_get_saml_log_directory() ) ) {
     62            if ( ! is_dir( $log_dir ) ) {
     63                global $wp_filesystem;
     64                if ( ! WP_Filesystem() ) {
     65                    return;
     66                }
     67                if ( ! $wp_filesystem->mkdir( $log_dir, 0755, true ) && ! is_dir( $log_dir ) ) {
     68                    throw new Exception( sprintf( 'Directory "%s" was not created', esc_html( $log_dir ) ) );
     69                }
    5870                self::mo_saml_create_files();
    5971            }
    6072        } else {
    61             add_action( 'admin_notices', 'mo_saml_directory_notice', 11 );
    62         }
    63     }
    64 
    65     /**
    66      * This function is to get saml log directory.
     73            add_action( 'admin_notices', array( __CLASS__, 'mo_saml_directory_notice' ) );
     74        }
     75    }
     76
     77    /**
     78     * This function is to get SAML log directory.
     79     *
     80     * @return string SAML log directory path.
    6781     */
    6882    public static function mo_saml_get_saml_log_directory() {
    6983        $upload_dir = wp_upload_dir( null, false );
    70 
    71         return $upload_dir['basedir'] . '/mo-saml-logs/';
     84        $log_dir    = $upload_dir['basedir'] . '/mo-saml-logs/';
     85        return str_replace( '\\', '/', $log_dir );
    7286    }
    7387
     
    135149     */
    136150    public static function mo_saml_get_log_files() {
    137         $files  = scandir( self::mo_saml_get_saml_log_directory() );
     151        $files  = is_dir( self::mo_saml_get_saml_log_directory() ) ? scandir( self::mo_saml_get_saml_log_directory() ) : '';
    138152        $result = array();
    139153        if ( ! empty( $files ) ) {
     
    169183
    170184    /**
    171      * Get the file path of current log file used by plugins.
     185     * Get the file path of the current log file used by plugins.
    172186     *
    173187     * @param string $handle //file path.
     188     * @return string|false The log file path or false on failure.
    174189     */
    175190    public static function mo_saml_get_log_file_path( $handle ) {
    176191        if ( function_exists( 'wp_hash' ) ) {
    177             return trailingslashit( self::mo_saml_get_saml_log_directory() ) . self::mo_saml_get_log_file_name( $handle );
     192            $log_file_path = trailingslashit( self::mo_saml_get_saml_log_directory() ) . self::mo_saml_get_log_file_name( $handle );
     193            return str_replace( '\\', '/', $log_file_path );
    178194        } else {
    179195            return false;
  • miniorange-saml-20-single-sign-on/trunk/class-mo-saml-login-validate.php

    r3123187 r3147410  
    7373        }
    7474        //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Ignore the nonce verification for SSO initiation.
    75         if ( ( isset( $_REQUEST['option'] ) && 'saml_user_login' === $_REQUEST['option'] ) || ( isset( $_REQUEST['option'] ) && 'testConfig' === $_REQUEST['option'] ) ) {
     75        if ( isset( $_REQUEST['option'] ) && ( 'saml_user_login' === $_REQUEST['option'] || 'testConfig' === $_REQUEST['option'] ) ) {
     76            //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Ignore the nonce verification for extensions installation checks.
     77            Mo_SAML_Utilities::mo_saml_check_required_extensions_installed( sanitize_text_field( wp_unslash( $_REQUEST['option'] ) ) );
    7678            //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Ignore the nonce verification for test config operation.
    7779            if ( 'testConfig' === $_REQUEST['option'] ) {
     
    199201                $error_code = Mo_Saml_Options_Enum_Error_Codes::$error_codes['WPSAMLERR003'];
    200202                if ( 'testValidate' === $relay_state ) {
    201 
    202                     $error_cause   = $error_code['cause'];
    203                     $error_message = $error_code['testConfig_msg'];
    204                     mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    205                     mo_saml_download_logs( $error_cause, $error_message );
     203                    mo_saml_display_test_config_error_page( $error_code );
    206204                    exit;
    207205                } else {
     
    253251                    $error_code = Mo_Saml_Options_Enum_Error_Codes::$error_codes['WPSAMLERR004'];
    254252                    if ( 'testValidate' === $relay_state ) {
    255                         $error_cause   = $error_code['cause'];
    256                         $error_message = $error_code['testConfig_msg'];
    257                         mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    258                         mo_saml_download_logs( $error_cause, $error_message );
     253                        $pem                       = '-----BEGIN CERTIFICATE-----<br>' . chunk_split( $saml_required_certificate, 64 ) . '<br>-----END CERTIFICATE-----';
     254                        $display_metadata_mismatch = '<p><strong>Certificate found in SAML Response: </strong><font face="Courier New";font-size:10pt><br><br>' . $pem . '</p></font>';
     255                        mo_saml_display_test_config_error_page( $error_code, $display_metadata_mismatch );
    259256                        exit;
    260257                    } else {
     
    265262                    $error_code = Mo_Saml_Options_Enum_Error_Codes::$error_codes['WPSAMLERR012'];
    266263                    if ( 'testValidate' === $relay_state ) {
    267                         $error_cause   = $error_code['cause'];
    268                         $error_message = $error_code['testConfig_msg'];
    269                         mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    270                         mo_saml_download_logs( $error_cause, $error_message );
     264                        mo_saml_display_test_config_error_page( $error_code );
    271265                        exit;
    272266                    } else {
     
    435429                    <div style="display:block;text-align:center;margin-bottom:4%;"><img style="width:15%;"src="' . esc_url( plugin_dir_url( __FILE__ ) ) . 'images/wrong.webp"></div>';
    436430        }
    437 
     431        $match_account_by = get_option( Mo_Saml_Options_Enum_Attribute_Mapping::ATTRIBUTE_ACCOUNT_MATCHER ) ? get_option( Mo_Saml_Options_Enum_Attribute_Mapping::ATTRIBUTE_ACCOUNT_MATCHER ) : 'email';
    438432        if ( strlen( $name_id ) > 60 ) {
    439433            echo '<p><font color="#FF0000" style="font-size:14pt;font-weight:bold">Warning: The NameID value is longer than 60 characters. User will not be created during SSO.</font></p>';
    440434        }
    441         $match_account_by = get_option( Mo_Saml_Options_Enum_Attribute_Mapping::ATTRIBUTE_ACCOUNT_MATCHER ) ? get_option( Mo_Saml_Options_Enum_Attribute_Mapping::ATTRIBUTE_ACCOUNT_MATCHER ) : 'email';
    442         if ( 'email' === $match_account_by && ! filter_var( $name_id, FILTER_VALIDATE_EMAIL ) ) {
     435        elseif ( 'email' === $match_account_by && ! filter_var( $name_id, FILTER_VALIDATE_EMAIL ) ) {
    443436            echo '<p><font color="#FF0000" style="font-size:14pt;font-weight:bold">Warning: The NameID value is not a valid Email ID</font></p>';
    444437        }
     
    662655        $error_code    = Mo_Saml_Options_Enum_Error_Codes::$error_codes['WPSAMLERR006'];
    663656        if ( 'testValidate' === $relay_state ) {
    664             $error_cause   = $error_code['cause'];
    665             $error_message = sprintf( $error_code['testConfig_msg'], $status_code );
    666             mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message, $statusmessage );
    667             mo_saml_download_logs( $error_cause, $error_message );
     657            $statusmessage = sprintf( $error_code['testconfig_msg'], $status_code );
     658            mo_saml_display_test_config_error_page( $error_code, '', $statusmessage );
    668659            exit;
    669660        } else {
  • miniorange-saml-20-single-sign-on/trunk/class-mo-saml-utilities.php

    r3110324 r3147410  
    6464     */
    6565    public static function mo_saml_generate_random_bytes( $length ) {
    66 
     66        self::mo_saml_check_required_extensions_installed();
    6767        return openssl_random_pseudo_bytes( $length );
    6868    }
     
    163163        return $ret;
    164164    }
     165
     166    /**
     167     * Get the list of required PHP extensions that are currently disabled.
     168     *
     169     * This function checks a predefined list of required PHP extensions and returns
     170     * an array of extensions that are not currently installed or enabled on the server.
     171     *
     172     * @return array List of disabled PHP extensions.
     173     */
     174    public static function mo_saml_get_disabled_extensions() {
     175        $required_php_extensions = Mo_Saml_Required_PHP_Extensions::PHP_EXTENSIONS;
     176        $disable_extensions      = array();
     177
     178        foreach ( $required_php_extensions as $key => $value ) {
     179            if ( ! self::mo_saml_required_extensions_installed( $key ) ) {
     180                array_push( $disable_extensions, $value );
     181            }
     182        }
     183
     184        return $disable_extensions;
     185    }
     186
     187    /**
     188     * Function to check extenstion installed or not.
     189     *
     190     * @param string $extension_name The name of the PHP extension to check for.
     191     *
     192     * @return boolean
     193     */
     194    public static function mo_saml_required_extensions_installed( $extension_name ) {
     195        return in_array( $extension_name, get_loaded_extensions(), true ) ? true : false;
     196    }
     197
     198    /**
     199     * Check if the required extensions are installed and handle errors appropriately.
     200     *
     201     * @param string $option To check whether the request is from test configuration or sso flow.
     202     */
     203    public static function mo_saml_check_required_extensions_installed( $option = '' ) {
     204        self::mo_saml_display_extension_error( 'dom', 'WPSAMLERR015', $option );
     205        self::mo_saml_display_extension_error( 'openssl', 'WPSAMLERR020', $option );
     206        self::mo_saml_display_extension_error( 'curl', 'WPSAMLERR032', $option );
     207    }
     208
     209    /**
     210     * Check if a specific extension is installed and displays errors as per their invocation context(test configuration or sso flow).
     211     *
     212     * @param string $extension The extension to check.
     213     * @param string $error_code_key The error code key to retrieve the error code.
     214     * @param string $option To check whether the request is from test configuration or sso flow.
     215     */
     216    private static function mo_saml_display_extension_error( $extension, $error_code_key, $option ) {
     217        if ( ! self::mo_saml_required_extensions_installed( $extension ) ) {
     218            $error_code = Mo_Saml_Options_Enum_Error_Codes::$error_codes[ $error_code_key ];
     219            if ( 'testConfig' === $option ) {
     220                mo_saml_display_test_config_error_page( $error_code );
     221                exit;
     222            }
     223            self::mo_saml_die( $error_code );
     224        }
     225    }
     226
     227    /**
     228     * Function to display the UI of the not installed extensions in plugin.
     229     *
     230     * @return void
     231     */
     232    public static function mo_saml_extension_disabled_modal() {
     233
     234        $valid_pages = Mo_Saml_Plugin_Pages::PLUGIN_PAGES;
     235
     236        //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Ignore the nonce verification.
     237        if ( ! empty( $_GET['page'] ) && ( in_array( $_GET['page'], $valid_pages, true ) ) ) {
     238
     239            $disable_extensions = self::mo_saml_get_disabled_extensions();
     240
     241            if ( ! empty( $disable_extensions ) ) {
     242                echo '
     243                <div class="mo_saml_activate_modal">
     244                    <div class="mo_saml_model_container">
     245                        <div class="mo_saml_modal_content">
     246                            <div class="mo_saml_modal_content_header">
     247                                <img src="' . esc_attr( plugin_dir_url( __FILE__ ) ) . 'images/miniorange_logo.webp" width="57px" height="56px">
     248                                <span class="mo_saml_modal_content_header-title">miniOrange SSO using SAML 2.0</span></br>
     249                            </div>
     250                            <div class="mo_saml_modal_content_extenstions"></br><span class="mo_saml_modal_content_extenstions-warning"><span class="mo_saml_modal_content_extenstions-warning2">Warning: Plugin disabled because required PHP extensions are missing.<br><br></span><span> Please enable the following PHP extensions:</span><br>';
     251                                    echo '<ol>';
     252                foreach ( $disable_extensions as $item ) {
     253                    echo '<li>' . esc_attr( $item ) . '</li>';
     254                }
     255                                    echo '</ol></span><br>
     256                                    <span>Please refresh the page after enabling the above extensions.</span>
     257                            </div>';
     258                            echo '<hr><p class="mo_saml_support_info">For any further issues, please send an email to <a href="mailto: [email protected]"><i>[email protected]</i></a></p>
     259                        </div>
     260                    </div>
     261                </div>';
     262                exit();
     263            }
     264        }
     265    }
     266
    165267    /**
    166268     * Converts Date to Timestamp.
     
    513615                    $error_code = Mo_Saml_Options_Enum_Error_Codes::$error_codes['WPSAMLERR009'];
    514616                    if ( 'testValidate' === $relay_state ) {
    515                         $error_cause   = $error_code['cause'];
    516                         $error_message = $error_code['testConfig_msg'];
    517                         mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    518                         mo_saml_download_logs( $error_cause, $error_message );
     617                        $display_metadata_mismatch = '<p><strong>Audience URI configured in Identity Provider: </strong>' . $audiences[0] . '<p>
     618                        <p><strong>Audience URI configured in the plugin: </strong>' . esc_html( $sp_entity_id ) . '</p>';
     619                        mo_saml_display_test_config_error_page( $error_code, $display_metadata_mismatch );
    519620                        exit;
    520621                    } else {
     
    537638            $error_code = Mo_Saml_Options_Enum_Error_Codes::$error_codes['WPSAMLERR010'];
    538639            if ( 'testValidate' === $relay_state ) {
    539                 $error_cause   = $error_code['cause'];
    540                 $error_message = $error_code['testConfig_msg'];
     640                $display_metadata_mismatch = '<p><strong>Entity ID in SAML Response: </strong>' . esc_html( $issuer ) . '<p>
     641                <p><strong>Entity ID configured in the plugin: </strong>' . esc_html( $issuer_to_validate_against ) . '</p>';
    541642                update_option( Mo_Saml_Sso_Constants::MO_SAML_REQUIRED_ISSUER, $issuer );
    542                 mo_saml_display_test_config_error_page( $error_code['code'], $error_cause, $error_message );
    543                 mo_saml_download_logs( $error_cause, $error_message );
     643                mo_saml_display_test_config_error_page( $error_code, $display_metadata_mismatch );
    544644                exit;
    545645            } else {
  • miniorange-saml-20-single-sign-on/trunk/class-mo-saml-wp-config-editor.php

    r3123187 r3147410  
    106106            $contents = $this->wp_config_src . $this->mo_saml_wp_config_normalize( $name, $value );
    107107        } else {
    108             if ( !is_string($this->wp_config_src) || false === strpos( $this->wp_config_src, $anchor ) ) {
     108            if ( ! is_string( $this->wp_config_src ) || false === strpos( $this->wp_config_src, $anchor ) ) {
    109109                update_option( 'mo_saml_message', __( 'Unable to locate placement anchor.', 'miniorange-saml-20-single-sign-on' ) );
    110110                Mo_SAML_Utilities::mo_saml_show_error_message();
     
    220220        } else {
    221221            // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Reading the wp-config.php.
    222        
    223222            $wp_config_src = file_get_contents( $this->wp_config_path );
    224223
  • miniorange-saml-20-single-sign-on/trunk/handlers/class-mo-saml-base-handler.php

    r3110324 r3147410  
    4848        if ( isset( $_POST['option'] ) ) {
    4949            $option = sanitize_text_field( wp_unslash( $_POST['option'] ) );
    50             check_admin_referer( $option );
     50            if ( 'mo_saml_register_customer' === $option || 'mo_saml_welcome_form' === $option ) {
     51                check_admin_referer( $option, $option . '_nonce' );
     52            } else {
     53                check_admin_referer( $option );
     54            }
    5155        }
    5256
  • miniorange-saml-20-single-sign-on/trunk/handlers/class-mo-saml-debug-log-handler.php

    r3123187 r3147410  
    7272     */
    7373    public static function mo_saml_cleanup_logs() {
     74        $file             = Mo_SAML_Logger::mo_saml_get_log_file_path( 'mo_saml' );
    7475        $retention_period = absint( apply_filters( 'mo_saml_logs_retention_period', 0 ) );
    7576        $timestamp        = strtotime( "-{$retention_period} days" );
     77        if ( ! file_exists( $file ) ) {
     78            $post_save = new Mo_SAML_Post_Save_Handler( Mo_Saml_Save_Status_Constants::ERROR, Mo_Saml_Messages::mo_saml_translate( 'LOG_FILE_NOT_FOUND' ) );
     79            $post_save->mo_saml_post_save_action();
     80            return;
     81        }
    7682        if ( is_callable( array( 'Mo_SAML_Logger', 'mo_saml_delete_logs_before_timestamp' ) ) ) {
    7783            Mo_SAML_Logger::mo_saml_delete_logs_before_timestamp( $timestamp );
  • miniorange-saml-20-single-sign-on/trunk/includes/css/notice.min.css

    r3115588 r3147410  
    1 .mo_notice_btn_style,.mo_notice_btn_text{vertical-align:middle}.mo_bg-cstm{background:#d5e2ff}.mo_shadow-cstm{box-shadow:0 2px 5px rgb(0 0 0 / 12%)}.mo_ps-5{padding-left:1rem!important}.mo_pb-5{padding-bottom:1rem!important}.mo_pe-5{padding-right:1rem!important}.mo_pt-3{padding-top:1rem!important}.mo_rounded{border-radius:.25rem!important}.mo_btn-cstm{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%)!important;border:none;font-size:1.1rem;padding:1px 1px 3px;color:#fff!important;cursor:pointer}.mo_mo-saml-bs-bs-btn[disabled],.mo_notice_btn_style{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%)}.mo_text-secondary{--bs-text-opacity:1;color:#464646}.mo_mo-saml-bs-bs-btn[disabled]{color:#fff!important;opacity:.65;cursor:not-allowed}.mo_mt-3{margin-top:1rem!important}.mo_me-3{margin-right:1rem!important}.mo_w-176{width:187px}.line_break_recommended{margin-bottom:46rem!important}.line_break_checkout{margin-bottom:23rem!important}.mo_notice_style{margin-top:2rem!important;margin-right:1rem;padding-bottom:1rem!important;font-size:.9rem}.mo_notice_btn_style{color:#fff;width:20%;font-size:.85rem;height:2rem}.mo_notice_cross_btn{background-color:transparent;border:none;float:right;cursor:pointer;}
     1.mo_bg-cstm{background:#d5e2ff}.mo_shadow-cstm{box-shadow:0 2px 5px rgb(0 0 0 / 12%)}.mo_ps-5{padding-left:1rem!important}.mo_pb-5{padding-bottom:1rem!important}.mo_pe-5{padding-right:1rem!important}.mo_pt-3{padding-top:1rem!important}.mo_rounded{border-radius:.25rem!important}.mo_btn-cstm{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%)!important;border:none;font-size:1.1rem;padding:1px 1px 3px;color:#fff!important;cursor:pointer}.mo_text-secondary{--bs-text-opacity:1;color:#464646}.mo_mo-saml-bs-bs-btn[disabled]{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%);color:#fff!important;opacity:.65;cursor:not-allowed}.mo_mt-3{margin-top:1rem!important}.mo_me-3{margin-right:1rem!important}.mo_w-176{width:187px}.line_break_recommended{margin-bottom:46rem!important}.line_break_checkout{margin-bottom:23rem!important}.mo_notice_style{margin-top:2rem!important;margin-right:1rem;padding-bottom:1rem!important;font-size:.9rem}.mo_notice_btn_style{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%);color:#fff;width:20%;font-size:.85rem;height:2rem;vertical-align:middle}.mo_notice_btn_text{vertical-align:middle}.mo_notice_cross_btn{background-color:transparent;border:none;float:right;cursor:pointer}.mo-saml-trial-notice-banner{margin:4px}.mo-saml-notice-content{display:flex;justify-content:left;align-items:center}.mo-saml-logo{width:40px;height:40px}.mo-saml-warning-text{padding:6px}.mo-saml-warning-title{color:red;font-weight:700}.mo-saml-extension-list{font-weight:700}
  • miniorange-saml-20-single-sign-on/trunk/includes/css/style_settings.min.css

    r2990786 r3147410  
    1 .mo-saml-fb-radio[type=radio]{display:none}.mo_saml_table_textbox{width:80%}.mo_saml_heading_margin{margin-left:0}.openid_social_login{padding:5px 0 0 0;clear:both;width:100%!important}.login_wid li input{width:85%;float:left;margin:2px}.mo_saml_local_pricing_free_tab{background-color:rgba(34,153,221,.82)!important}.mo_saml_local_pricing_paid_tab{background-color:#1a71a4!important}.mo_saml_local_pricing_text{font-size:14px!important;color:#fff!important;font-weight:600!important}.mo_saml_local_pricing_sub_header{margin:2px!important;color:#fff!important}.mo_saml_local_pricing_header{color:#fff!important;margin:4px!important}.mo_saml_local_pricing_table{text-align:center;font-size:15px!important;background-color:#fff}.mo_saml_premium_thumbnail{width:350px;padding:4px;margin-bottom:10px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.mo-fa-icon>tr>td>i.fa{color:#5b8a0f}.mo_align-center>tr>td{text-align:center!important}.mo_table-bordered,.mo_table-bordered>tbody>tr>td{border:1px solid #ddd}.mo_table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.mo_table-bordered>thead>tr>th{vertical-align:top!important}.mo_plan-desc{font-size:14px!important}.mo-display-logs{color:#3c763d;background-color:#dff0d8;padding:2%;margin-bottom:20px;text-align:center;border:1px solid #aedb9a;font-size:18pt}.mo-display-block{color:#050505;width:-moz-available;min-height:300px!important;overflow:auto;display:inline-block;background-color:#f6f6f6;padding:2%;margin-bottom:20px;text-align:left;border:1px solid #aedb9a;font-size:12pt}.mo_divider{width:5px;height:auto;display:inline-block}.tooltip{position:relative;display:inline-block;size:letter}.tooltip .tooltiptext{visibility:hidden;width:120px;background-color:grey;color:#fff;text-align:center;padding:5px 0;border-radius:6px;font-size:12px;position:absolute;z-index:1;bottom:125%;left:50%;margin-left:-60px;font-size:small;opacity:50;transition:opacity .3s}.tooltip .tooltiptext::after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#555 transparent transparent transparent}.tooltip:hover .tooltiptext{visibility:visible;opacity:1}.mo_modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.mo_modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0;margin-left:20%;margin-right:24%;margin-top:6%}.mo_saml_close{color:#aaa;float:right;font-size:28px;font-weight:700}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.modal-header{padding:15px}.modal-header .close{margin-top:-2px}.modal-body{position:relative;padding:15px;overflow-y:auto;overflow-x:hidden}.modal-dialog{position:relative;width:auto;margin:10px}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-footer{text-align:center;background-color:#fff}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.mo-span-circle{display:inline-block;padding:15px;line-height:100%;-moz-border-radius:50%;border-radius:50%;background-color:#000;color:#fff;text-align:center;font-size:2em}.mo-saml-nav-tab-cstm{color:#1d2238;font-size:1rem;font-weight:500;padding:.9rem 1rem;cursor:pointer;transition:.3s cubic-bezier(.4,0,.2,1)}.mo-saml-nav-tab-cstm:hover{background-color:#e5e7e9;color:#000}.mo-saml-nav-tab-active{border-bottom:3px solid #384e7e}.mo-saml-nav-tab-active:hover{background:#d6e2f2;border-bottom:3px solid #04072a}.mo_copy{border:1px solid #ccc;padding:8px;background-color:#fbfbfb;cursor:pointer}.mo_copy:active{background-color:#ccc}.copytooltip{position:relative;display:inline-block;size:letter}.copytooltip .copytooltiptext{visibility:hidden;width:120px;background-color:grey;color:#fff;text-align:center;padding:5px 0;border-radius:6px;font-size:12px;position:absolute;z-index:1;bottom:125%;left:50%;margin-left:-60px;font-size:small;opacity:50;transition:opacity .3s}.copytooltip .copytooltiptext::after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#555 transparent transparent transparent}.copytooltip:hover .copytooltiptext{visibility:visible;opacity:1}.mo_saml_padding_left_2{padding-left:2rem}.mo_demo_layout{margin-bottom:10px;padding-left:100px;padding-right:100px;border:none}.idp-guides-btns{display:flex;justify-content:center;text-align:center;padding:.5em 0 .5em 0}.guide-btn{background-color:#fff;border:1px solid #007cba;padding:.5em 0 .5em 1em;margin-right:2em;color:#007cba;font-weight:600;font-size:13px;border-radius:4px;box-shadow:2px 2px 5px rgba(0,0,0,.25);width:11em;letter-spacing:.4px;cursor:pointer}.idp-guides-logo.SimpleSAMLphp{width:18px;height:25px;margin-left:-9px;margin-right:2px;float:left}.idp-guides-logo{height:25px;width:24px;margin-right:2px;margin-left:-4px;float:left}.guide-btn:hover{background-color:#007cba;color:#fff}.modal{display:none;position:fixed;z-index:3;padding-top:100px;left:0;top:0;width:100%;height:100%;background-color:#000;background-color:rgba(0,0,0,.4);transition:all 1s}.modal-content{padding:20px;width:70%;border-radius:20px;box-shadow:5px 5px 5px rgba(0,0,0,.25);position:fixed;top:50%;left:55%;margin-right:-50%;transform:translate(-50%,-50%);height:650px;display:flex;background-color:#fff;flex-direction:column}.modal-button{width:15%;height:50px;font-size:20px!important}.editable{text-align:center;width:1em;height:1em}.sm{text-align:center;width:2vw;height:2vw;padding:1vw}.sm:hover{opacity:.6;cursor:pointer}.sm:active{opacity:.4;cursor:pointer}input[type=radio]:checked+label>.sm{border:2px solid #21ecdc}.call-setup-div{background:#d5e2ff;border-radius:5px;margin-top:10px;margin-right:10px;padding:10px}#call_setup_dets{display:none}.mo-saml-select-timezone{width:95%}.call-setup-heading{margin-top:0;margin-left:5px}.call-setup-label{padding-left:5px;font-size:15px}.call-setup-details{margin-left:5px;margin-top:5px}.call-setup-datetime{width:50%;float:left;position:relative;height:auto;min-height:100%!important}.call-setup-textbox{width:90%!important}.call-setup-notice{font-size:1rem}.saml-debug-button{min-width:200px;width:auto;margin:5px!important}a{outline:0!important}a,a:active,a:hover,a:visited{text-decoration:none!important}.lic-body{width:98%}#demo,#demo1{margin-right:1.4em;margin-left:0}td.text-start{padding:10px 15px}.nav-menu{display:flex;position:sticky;width:102%;top:32px;align-items:center;background:#2f4f4f;justify-content:space-evenly;z-index:1;box-shadow:2px 11px 10px #f7f7f7;height:3.1em}.goto-opt{padding:5px 0;font-size:1.6em!important}.goto-opt a{color:#fff;font-size:25px;font-weight:300}.goto-opt a:active,.goto-opt a:focus{color:#fff;box-shadow:none!important}.goto-opt a:hover{color:#fff}.goto-active{border-bottom:2px solid #fff;transition:2s;color:#fff}.plan-head-saml{color:#000;text-align:center;font-weight:350;margin-bottom:.1em;margin-top:.7em;width:100%}.faq-container{max-width:600px;margin:0 auto}.faq{background-color:transparent;border:1px solid #9fa4a8;border-radius:10px;padding:23px 22px 10px;position:relative;overflow:hidden;transition:.3s ease;cursor:pointer}.faq.active{background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.1),0 3px 6px rgba(0,0,0,.1)}.faq-title{margin:1px 35px 0 0;color:#000;margin-bottom:1.2em;font-weight:400;font-size:1.2em;text-align:left}.faq-text{display:none;border-top:1px solid #f4f4f4;text-align:left;font-size:1rem}.faq.active .faq-text{display:block}.faq-toggle{background-color:transparent;color:#000;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;padding:0;position:absolute;top:16px;right:20px;height:40px;width:30px;border:none;z-index:1000}.faq-toggle .fa-times{display:none}.faq.active .faq-toggle .fa-times{display:block}.faq.active .faq-toggle .fa-chevron-down{display:none}.works-step div{color:#e67e22;border:2px solid #e67e22;border-radius:50%;width:40px;height:40px;text-align:center;float:left;font-size:20px;margin-right:25px;margin-bottom:27px}.plugin-banner-text-saml{color:#1f3668;line-height:2}.text-color{color:#fe7e00!important}.reg-plans-saml{background:linear-gradient(45deg,#ffeabc,#ffe194);border-radius:9px;height:35.4em}.common-rot{transition:.3s}.single-site{display:flex;justify-content:center;margin-left:3px}.multi-site{display:flex;justify-content:center;margin-left:3px}.single-site-rot{transform:rotateY(0)}.multi-site-rot{transform:rotateY(180deg)}.reg-plans-saml:hover{background:linear-gradient(125deg,#ffeabc,#ffe194)}.incl-plan-saml{background:linear-gradient(145deg,#c1f4ff,#dcdcdc);border-radius:9px;padding:.1em 1em 1.5em;height:35.4em}.incl-plan-saml:hover{background:linear-gradient(254deg,#7ee8ff,#dcdcdc)}.display-1{font-size:2.5em;font-weight:200}.header-h3{font-size:1.5em;margin-top:20px;margin-bottom:-20px;color:#585858}.header-h4{color:#000;font-weight:500;font-size:1.2em}.price-list{border-top:1px solid #fff;border-bottom:1px solid #fff;font-size:1.3em;background:#ffecbb;border-radius:10px;height:324px}.price-list-incl{background:linear-gradient(145deg,#e2faff,#e1e1e1)}.upg-btn{display:inline-block}.license-btn-saml{color:#fff!important;font-size:1em;padding:.5em 2rem;border-radius:6px;background:#2f4f4f;cursor:pointer;margin-top:10px;width:160px;height:43px}.border-rad-saml{border-radius:50px;padding:.7em .1rem;margin-right:15px}.license-btn-saml:hover{background:linear-gradient(15deg,#2f4f4f,#669a9a)}.box-shadow-saml{border-bottom:1px solid #ddd!important;margin-bottom:0!important;padding:10px 15px}.feat-head-saml{text-align:center;padding:12px;font-size:25px;font-weight:400}.choose-plan-saml{display:block;font-weight:350;color:#000;padding:10px 0 0 15px}.clk-icn{border:.2px solid rgb(0 0 0);font-weight:700;margin-top:2em;padding:.5em 2em;color:#000!important}.saml-pills{background:#e1e1e1;list-style:none;display:inline-flex;padding-top:1em;padding-left:.5em;padding-right:.5em;padding-bottom:.6em;border-radius:40px}.price-tag{width:100px;display:flex;justify-content:center;align-items:center;height:47px;border-radius:8px 8px 0 8px;background:#f4c346;z-index:99;position:absolute;top:-24px;left:70%}.price-tag-mult{left:75.7%}.product::after{content:"";position:absolute;border-right:25px solid transparent;border-top:10px solid #e7b32e;left:93%;z-index:-1;top:22px}.price{margin-top:10px;color:#fff;font-size:16px}.sticky-menu-saml{position:sticky;top:5.2em;padding-top:3em;background-color:#fff;z-index:0}.hover-saml{border-right:5px solid #fcf0d3;border-radius:10px;height:35.4em}.hover-saml:hover{background:linear-gradient(45deg,#ffebbf,#fdefcc);height:35.4em;border-radius:9px}.tabs{margin-bottom:1em;margin-top:1.5em}.tabs a.active{background:#2f4f4f;cursor:default;padding:12px 3em;color:#fff;transition:.5s;pointer-events:none}.tabs a{cursor:pointer;padding:12px 3em;font-size:17px;text-align:center;font-weight:600;border-radius:30px;color:#000}.saml-text{text-align:left;font-size:1rem}.faq-toggle:focus{outline:0}.tooltip-saml{position:relative}.tooltip-saml .tooltiptext{display:none;width:250px;background-color:#000000d4;color:#fff;text-align:center;border-radius:6px;padding:1em 2em;left:7.7em;bottom:-12.8em;position:absolute;z-index:1}.tooltip-saml .tooltiptext::after{content:" ";position:absolute;top:50%;right:100%;margin-top:-28px;border-width:5px;border-style:solid;border-color:transparent #000 transparent transparent}.tooltip-saml:hover{cursor:pointer}.tooltip-saml:hover .tooltiptext{display:block}.plan-box{height:18em;background-color:#cab9c81a;border-radius:10px;margin:0 10px;box-shadow:0 4px 8px 0 rgba(0,0,0,.2);transition:.3s}.plan-box-up{padding:20px;border-bottom:4px solid #fff}.plan-box p{padding:20px;font-size:1rem;line-height:1.5}.tab-des{display:flex;padding:0;max-width:1200px;margin:0 auto 0;list-style:none;justify-content:center}.tab-link{display:block;padding:10px 15px;color:#2f4f4f;cursor:pointer;overflow:hidden}.active-tab{border-bottom:4px solid #2f4f4f!important;background-color:#08705c14}.integration-section{background:#f4f4f4;padding:0 2em 1em;border-radius:5px}@media screen and (min-width:1688px){.product::after{display:none}}@media screen and (max-width:1519px){.price-list{height:420px}.price-list-multi{height:269px}.price-tag{left:61%}.price-tag-mult{left:74%}.product::after{display:none}.hover-saml,.hover-saml:hover,.incl-plan-saml,.reg-plans-saml{height:40.6em}.multi-site-height,.multi-site-height:hover{height:33.3em}}@media screen and (max-width:1380px){.price-list{height:476px}.price-tag{left:56%}.price-list-multi{height:296px}.price-tag-mult{left:69%}.product::after{left:38px}.hover-saml,.hover-saml:hover,.incl-plan-saml,.reg-plans-saml{height:43.9em}.multi-site-height,.multi-site-height:hover{height:34.3em}}.cstm-iframe{padding:1rem;border:1px solid #dcdcde;background-color:#fff}.cstm-addon-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1.2;margin-right:-15px;margin-left:-15px;padding:1rem 1rem 0}.mt-2{margin-top:2px!important}.cstm-h4{font-size:1.5rem}.cstm-h5{font-size:1.25rem;margin:.5rem 0 1rem}.cstm-input{box-shadow:1px 1px 6px #e3e1e1!important;border:1px solid #d5d5d5!important;padding:0 1rem!important}label{font-size:13px}.form-head{position:relative}.form-head:after{content:"";display:block;height:5px;background:#1f3668;margin-top:9px;border-radius:30px}.form-head-bar:after{width:50px}.form-sep:after{width:100%;background:#6c757d;height:2.3px;margin-top:-13px}.prem-info{padding:1rem;background:#f4f4f4;border:4px solid #d5e2ff;border-radius:5px}.anonymous-text,.attr-info-text,.entity-info-text,.nameid-prem-text,.prem-info-text,.provide-metadata-text,.role-admin-prem-text,.role-prem-text{display:none;width:400px;background-color:#000000d4;color:#fff;font-size:1.1rem;text-align:center;border-radius:6px;padding:.6em .5em;left:19em;bottom:-.2em;position:absolute;z-index:1}.prem-info-text{left:-25.5em;bottom:-2em}.mo-saml-provide-metadata-txt{left:13.4em;bottom:0}.mo-saml-redir-opts-txt{left:26em;bottom:0}.provide-metadata-text{left:18.8em;bottom:55.8em}.attr-info-text{left:14.1em;bottom:.2em}.role-map-info-text{left:11.1em;bottom:.2em}.anonymous-text{left:-25.3em;bottom:-2.7em}.nameid-prem-text{bottom:-4.4em;left:-25.2em}.auto-redir-text{bottom:-4.3em}.auto-redir-wp-text{bottom:-4.3em}.shortcode-text{bottom:-2.7em}.role-prem-text{bottom:-4.7em;left:-25.3em}.role-admin-prem-text{bottom:-4.6em;left:-25.3em}.sso-btn-prem-text{bottom:-4.3em;left:-25.3em}.mo-saml-sso-log-txt{bottom:.1em;left:25.9em}.mo-saml-sso-widget-txt{bottom:.1em;left:16.9em}.mo-saml-redir-site-txt{bottom:.1em;left:25.1em}.mo-saml-redir-wp-log-txt{bottom:.1em;left:33.4em}.mo-saml-sso-shortcode-txt{bottom:.1em;left:18.9em}.prem-icn{position:absolute;z-index:10;display:inline-flex;right:32.5%;filter:drop-shadow(#f6f6f6 9px 4px 1px)}.auto-redir-prem-img{left:63.3%}.sso-btn-prem-img{left:63.3%}.anonymous-text::after,.attr-info-text::after,.entity-info-text::after,.mo-saml-error-tip::after,.nameid-prem-text::after,.prem-info-text::after,.provide-metadata-text::after,.role-admin-prem-text::after,.role-prem-text::after{content:" ";position:absolute;top:84%;right:100%;margin-top:-28px;border-width:5px;border-style:solid;border-color:transparent #000 transparent transparent}.anonymous-text::after,.nameid-prem-text::after,.prem-info-text::after,.role-admin-prem-text::after,.role-prem-text::after,.sso-btn-prem-text::after{border-color:transparent transparent transparent #000000fa;left:100%}.mo-saml-error-tip{display:none;align-items:center;background:#fff;border:1px solid #767676;border-radius:4px;padding:.2rem .5rem;left:56.3%;top:6.9em;color:#414141}.mo-saml-error-tip::after{top:1.1em;right:51.1%;border-color:#ff7a7a00 #0000 #000000c7 transparent}@media screen and (width:1228.8px){.mo-saml-error-tip{top:6.9em;width:46%}.mo-saml-error-tip::after{top:1.1em}}.auto-redir-text::after,.auto-redir-wp-text::after,.nameid-prem-text::after,.role-admin-prem-text::after,.role-prem-text::after,.sso-btn-prem-text::after{top:49%}.entity-info:hover,.prem-info:hover{cursor:text}.attr-info:hover .attr-info-text,.entity-info:hover .entity-info-text,.prem-info:hover .anonymous-text,.prem-info:hover .nameid-prem-text,.prem-info:hover .prem-info-text,.prem-info:hover .role-admin-prem-text,.prem-info:hover .role-prem-text,.prem-info:hover .sso-btn-prem-text,.provide-metadata-info:hover .provide-metadata-text{display:block!important}.mo-saml-switch[type=checkbox]{height:0;width:0;visibility:hidden}.mo-saml-switch-label{cursor:pointer;margin-top:-1.5rem;text-indent:-9999px;width:56px;height:30px;background:#bfbdbd;display:block;border-radius:100px;position:relative}.mo-saml-switch-label:after{content:"";position:absolute;top:5px;left:5px;width:20px;height:20px;background:#fff;border-radius:90px;transition:.1s}.mo-saml-switch:checked+.mo-saml-switch-label{background:#163d77}.mo-saml-switch:checked+.mo-saml-switch-label:after{left:calc(100% - 5px);transform:translateX(-100%)}.mo-saml-switch-label:active:after{width:40px}.btn-cstm{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%)!important;border:none;font-size:1.1rem;padding:.3rem 1.5rem;color:#fff!important;cursor:pointer}.mo-saml-bs-btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.mo-saml-bs-bs-btn[disabled]{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%);color:#fff!important;opacity:.65;cursor:not-allowed}.w-176{width:179px}.mo-saml-w-186{width:186px}.w-372{width:395px}.mo-saml-alredy-have-btn:hover{color:#76bdd0!important;cursor:pointer}.btn-cstm:hover{background-color:#1f3668c4!important}.shadow-cstm{box-shadow:0 2px 5px rgb(0 0 0 / 12%)}.bg-main-cstm{background:#f4f4f4}.mo-saml-margin-left{margin-left:-20px}.bg-cstm{background:#d5e2ff}.contact-us-cstm{bottom:4%;position:fixed;right:1%;box-sizing:border-box;-webkit-transition:all .3s linear;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease;transition:all .3s ease;z-index:10;height:58px;width:209px;background-color:#1f3668;cursor:pointer;border-radius:50px;box-shadow:4px 3px 6px 0 #272727d9}.mo-saml-scroll-cstm{overflow-y:auto;height:236px;overflow-x:hidden}.logo-saml-cstm{padding:1em 0;border-radius:15px;background:#fff;max-width:88px;margin-right:7px;margin-top:1rem;height:83px;box-shadow:inset 2px 2px 2px 0 rgb(255 255 255 / 50%),7px 7px 20px 0 rgb(0 0 0 / 10%),4px 4px 5px 0 rgb(0 0 0 / 10%);cursor:pointer}.logo-saml-cstm h6{font-size:.8rem!important;word-break:break-all;margin-bottom:-.5rem}.logo-saml-cstm a{font-size:.8rem!important;font-weight:500;word-break:break-all;color:#212529!important}.logo-saml-cstm:hover{opacity:.7;transition:.2s}.mo-saml-scroll-cstm::-webkit-scrollbar-track{box-shadow:inset 0 0 6px rgba(0,0,0,.3);-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:10px;background-color:#f5f5f5}.mo-saml-scroll-cstm::-webkit-scrollbar{width:12px;background-color:#f5f5f5}.mo-saml-scroll-cstm::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3);-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#555}.idp-search-box{background:0 0!important;border:none!important;border-bottom:2px solid #fff!important;color:#fff;padding:10px 54px!important;font-size:18px;height:2.64285714em;width:100%}.idp-search-box:focus{box-shadow:none!important}.idp-search-glass{top:51px;left:150px;position:absolute}.btn-prem{color:#fff;padding:10px 25px;cursor:pointer;border-radius:50px;transition:all .3s ease;position:relative;display:inline-block;box-shadow:inset 2px 2px 2px 0 rgba(255,255,255,.5),7px 7px 20px 0 rgba(0,0,0,.1),4px 4px 5px 0 rgba(0,0,0,.1)}.prem-btn-cstm{border:none;background:orange;color:#fff;overflow:hidden}.prem-btn-cstm:before{position:absolute;content:"";display:inline-block;top:-180px;left:0;width:15px;height:100%;background-color:#fff;animation:shiny-btn1 3s ease-in-out infinite}.prem-btn-cstm:hover{opacity:.7}.faq-btn-cstm{background-color:#89d8d3;background-image:linear-gradient(315deg,#89d8d3 0,#03c8a8 74%);border:none;z-index:1}.faq-btn-cstm:after{position:absolute;content:"";width:100%;height:0;bottom:0;left:0;z-index:-1;border-radius:5px;background-color:#4dccc6;background-image:linear-gradient(315deg,#4dccc6 0,#96e4df 74%);box-shadow:-7px -7px 20px 0 #fff9,-4px -4px 5px 0 #fff9,7px 7px 20px 0 #0002,4px 4px 5px 0 #0001;transition:all .3s ease}.faq-btn-cstm:hover{color:#fff}.faq-btn-cstm:hover:after{top:0;height:100%}.faq-btn-cstm:active{top:2px}@keyframes shiny-btn1{0%{-webkit-transform:scale(0) rotate(60deg);opacity:0}80%{-webkit-transform:scale(0) rotate(60deg);opacity:.5}81%{-webkit-transform:scale(4) rotate(60deg);opacity:1}100%{-webkit-transform:scale(30) rotate(60deg);opacity:0}}.pop-up-btns{line-height:10px;box-shadow:inset 2px 2px 2px 0 rgb(255 255 255 / 50%),7px 7px 20px 0 rgb(0 0 0 / 10%),4px 4px 5px 0 rgb(0 0 0 / 10%);border-radius:80px;color:#fff;background-color:orange}.pop-up-btns:hover{opacity:.7;color:#000}.contact-form-cstm{width:136%}.contact-form-head{padding:1rem;border-radius:8px;color:#4a4a4a;background:url(../../images/contact-form-bg.webp);background-size:cover}.contact-form-head p{line-height:1.8}.mo-saml-card-glass{background:url(../../images/dotted-bg-mo-saml.webp) right center/contain no-repeat,linear-gradient(153.07deg,rgb(213 226 255) -2.47%,rgb(243 247 255) 102.78%);border-radius:10px;padding:2em;width:136%}.mo-saml-ads-text{background:linear-gradient(135deg,rgb(255 255 255),rgba(255,255,255,.67));padding:.01rem 1.5rem 1em 1.5em;border-radius:30px;backdrop-filter:blur(2.5em)}.mo-saml-why-reg{font-size:.9rem}.reg-form{background:linear-gradient(153.07deg,rgb(213 226 255) -2.47%,rgb(249 249 249) 102.78%)}.reg-form input{border:1px solid #2b4d7f;background:0 0;border-radius:5px}.reg-form input:focus{box-shadow:none}#mo_saml_reg_back_btn,#mo_saml_reg_login_btn,.mo-saml-already-reg-field,.mo-saml-why-login-txt{display:none}.contact-form-body input,.contact-form-body textarea{background-color:#f3f7ff;border:1px solid #7090d5;padding:.2rem 1rem;width:100%}.contact-form-body input:focus,.contact-form-body textarea:focus{box-shadow:none}.mo-saml-call-setup{background:#f7f7f7;border-radius:20px}.bg-light{background-color:#d7d7d7!important}.cursor-disabled:hover{cursor:not-allowed}html{scroll-behavior:smooth}.mo-saml-tab-content,.mo-saml-tab-content1{display:none}#mo-saml-idp-manual-tab,#mo-saml-provide-metadata{display:block}.switch-tab-sp{background:#f7f7f7;padding:.5rem 1rem 0;display:flex;border-radius:10px;align-items:baseline;justify-content:center}.mo-saml-current{border-bottom:3px solid #042160;background:#f0f0f1;border-radius:2px}.switch-tab-sp a:hover{background-color:#e5e7e9}.switch-tab-sp a{color:#5d5d5d;font-weight:500}.switch-tab-sp a:focus{box-shadow:none}a:focus{box-shadow:none}.meta-data-table{border:1px solid #ddd;margin:1rem auto}.meta-data-table td{padding:.5rem .7rem}.meta-data-table tr:nth-child(even){background-color:#ebf1ff}#account-info-form,#addon-tab-form,#attr-role-tab-form,#cstm-idp-section,#demo-tab-form,#redir-sso-tab-form,#sp-meta-tab-form{transform:translate(-35px)}.mo-saml-opt-add-ons{margin-top:.6rem}.mo-saml-padding-block{padding:1.4rem 0}.mo-saml-btn-size{width:50px;background:#f8f9fa!important;margin-left:.5rem}.mo-saml-addons-logo{max-width:17%;height:auto;position:absolute;right:15px;top:80%}.mo-saml-addons-head{margin:1.1em 1.1em .5em;font-size:1.5rem;color:#5b5b5b;height:50px}.mo-saml-add-ons-cards{width:31.13%;float:left;height:336px;box-shadow:inset 2px 2px 2px 0 rgb(255 255 255 / 50%),7px 7px 20px 0 rgb(0 0 0 / 10%),4px 4px 5px 0 rgb(0 0 0 / 10%);display:block;background-size:cover;border-radius:15px;background:#fff;position:relative;overflow:hidden;margin-right:.6rem}@media screen and (max-width:1399px) and (min-width:1227px){.mo-saml-add-ons-cards{width:40.13%}}.mo-saml-addons-readmore{position:absolute;top:86%;left:3.8%;color:#0a0a0a;font-size:1.1rem;z-index:8;transition:all .6s ease;opacity:.8}.mo-saml-addons-readmore:hover{opacity:1;color:#000}.mo-saml-add-ons-tri{border-top:44px solid transparent;border-bottom:150px solid transparent;border-right:288px solid #f4f4f400;opacity:.4;position:absolute;display:block;top:0;right:-40%}.mo-saml-add-ons-tri:before{border-top:254px solid transparent;border-bottom:136px solid transparent;border-right:206px solid #e6eefd;position:absolute;content:"";display:block;top:-198px;right:-312px;z-index:-18}.mo-saml-add-ons-rect{width:487px;height:200px;position:absolute;top:75%;left:-78%;transform:rotate(30deg);z-index:5;filter:blur(1px);opacity:.9;transition:all .3s ease-in-out}.mo-saml-add-ons-rect:before{content:"";display:block;height:100%;background:#d5e2ff;z-index:2;transition:all .3s ease-in-out}code{line-height:1.9}.mo-saml-error-box{border:3px solid red}.mo-saml-form-head:after{content:"";display:block;height:5px;background:#1f3668;margin-top:9px;border-radius:30px}.mo-saml-form-head-bar:after{width:50px}.mo-saml-troubleshoot-table tr:nth-child(odd){background:#e9f0ff}.mo-saml-troubleshoot-table{border:1px solid #ddd;width:100%;margin-bottom:20px;border-collapse:collapse}.mo-saml-troubleshoot-table td{border:1px solid #ddd;padding:10px}.crown_img{width:35px!important}.note_img{width:25px!important;height:25px!important}.crown_img_small{width:20px!important}.error_msg{background-color:#ffdfdf!important;font-size:15px!important}.success_msg{background-color:#c8ffc8!important;font-size:15px!important}.radio-email input[type=radio]{opacity:0;position:fixed;width:0}.mo_saml_reg_page_header{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.mo_saml_feedback_email input[id=query_mail]{text-align:center;border:0 solid #000;border-style:solid;background:#f0f3f7;width:20vw;border-radius:6px}.mo_saml_download_paid_plugin_notice{background:#fef8e6;margin:2% 0 0;border-radius:4px;border:1.3px solid #f0d480;padding:0 7px;font:600 13px Inter;display:flex;align-items:center;gap:2%}
     1.mo-saml-fb-radio[type=radio]{display:none}.mo_saml_table_textbox{width:80%}.mo_saml_heading_margin{margin-left:0}.openid_social_login{padding:5px 0 0 0;clear:both;width:100%!important}.login_wid li input{width:85%;float:left;margin:2px}.mo_saml_local_pricing_free_tab{background-color:rgba(34,153,221,.82)!important}.mo_saml_local_pricing_paid_tab{background-color:#1a71a4!important}.mo_saml_local_pricing_text{font-size:14px!important;color:#fff!important;font-weight:600!important}.mo_saml_local_pricing_sub_header{margin:2px!important;color:#fff!important}.mo_saml_local_pricing_header{color:#fff!important;margin:4px!important}.mo_saml_local_pricing_table{text-align:center;font-size:15px!important;background-color:#fff}.mo_saml_premium_thumbnail{width:350px;padding:4px;margin-bottom:10px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.mo-fa-icon>tr>td>i.fa{color:#5b8a0f}.mo_align-center>tr>td{text-align:center!important}.mo_table-bordered,.mo_table-bordered>tbody>tr>td{border:1px solid #ddd}.mo_table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.mo_table-bordered>thead>tr>th{vertical-align:top!important}.mo_plan-desc{font-size:14px!important}.mo-display-logs{color:#3c763d;background-color:#dff0d8;padding:2%;margin-bottom:20px;text-align:center;border:1px solid #aedb9a;font-size:18pt}.mo-display-block{color:#050505;width:-moz-available;min-height:300px!important;overflow:auto;display:inline-block;background-color:#f6f6f6;padding:2%;margin-bottom:20px;text-align:left;border:1px solid #aedb9a;font-size:12pt}.mo_divider{width:5px;height:auto;display:inline-block}.tooltip{position:relative;display:inline-block;size:letter}.tooltip .tooltiptext{visibility:hidden;width:120px;background-color:grey;color:#fff;text-align:center;padding:5px 0;border-radius:6px;font-size:12px;position:absolute;z-index:1;bottom:125%;left:50%;margin-left:-60px;font-size:small;opacity:50;transition:opacity .3s}.tooltip .tooltiptext::after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#555 transparent transparent transparent}.tooltip:hover .tooltiptext{visibility:visible;opacity:1}.mo_modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.mo_modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0;margin-left:20%;margin-right:24%;margin-top:6%}.mo_saml_close{color:#aaa;float:right;font-size:28px;font-weight:700}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.modal-header{padding:15px}.modal-header .close{margin-top:-2px}.modal-body{position:relative;padding:15px;overflow-y:auto;overflow-x:hidden}.modal-dialog{position:relative;width:auto;margin:10px}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-footer{text-align:center;background-color:#fff}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.mo-span-circle{display:inline-block;padding:15px;line-height:100%;-moz-border-radius:50%;border-radius:50%;background-color:#000;color:#fff;text-align:center;font-size:2em}.mo-saml-nav-tab-cstm{color:#1d2238;font-size:1rem;font-weight:500;padding:.9rem 1rem;cursor:pointer;transition:.3s cubic-bezier(.4,0,.2,1)}.mo-saml-nav-tab-cstm:hover{background-color:#e5e7e9;color:#000}.mo-saml-nav-tab-active{border-bottom:3px solid #384e7e}.mo-saml-nav-tab-active:hover{background:#d6e2f2;border-bottom:3px solid #04072a}.mo_copy{border:1px solid #ccc;padding:8px;background-color:#fbfbfb;cursor:pointer}.mo_copy:active{background-color:#ccc}.copytooltip{position:relative;display:inline-block;size:letter}.copytooltip .copytooltiptext{visibility:hidden;width:120px;background-color:grey;color:#fff;text-align:center;padding:5px 0;border-radius:6px;font-size:12px;position:absolute;z-index:1;bottom:125%;left:50%;margin-left:-60px;font-size:small;opacity:50;transition:opacity .3s}.copytooltip .copytooltiptext::after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#555 transparent transparent transparent}.copytooltip:hover .copytooltiptext{visibility:visible;opacity:1}.mo_saml_padding_left_2{padding-left:2rem}.mo_demo_layout{margin-bottom:10px;padding-left:100px;padding-right:100px;border:none}.idp-guides-btns{display:flex;justify-content:center;text-align:center;padding:.5em 0 .5em 0}.guide-btn{background-color:#fff;border:1px solid #007cba;padding:.5em 0 .5em 1em;margin-right:2em;color:#007cba;font-weight:600;font-size:13px;border-radius:4px;box-shadow:2px 2px 5px rgba(0,0,0,.25);width:11em;letter-spacing:.4px;cursor:pointer}.idp-guides-logo.SimpleSAMLphp{width:18px;height:25px;margin-left:-9px;margin-right:2px;float:left}.idp-guides-logo{height:25px;width:24px;margin-right:2px;margin-left:-4px;float:left}.guide-btn:hover{background-color:#007cba;color:#fff}.modal{display:none;position:fixed;z-index:3;padding-top:100px;left:0;top:0;width:100%;height:100%;background-color:#000;background-color:rgba(0,0,0,.4);transition:all 1s}.modal-content{padding:20px;width:70%;border-radius:20px;box-shadow:5px 5px 5px rgba(0,0,0,.25);position:fixed;top:50%;left:55%;margin-right:-50%;transform:translate(-50%,-50%);height:650px;display:flex;background-color:#fff;flex-direction:column}.modal-button{width:15%;height:50px;font-size:20px!important}.editable{text-align:center;width:1em;height:1em}.sm{text-align:center;width:2vw;height:2vw;padding:1vw}.sm:hover{opacity:.6;cursor:pointer}.sm:active{opacity:.4;cursor:pointer}input[type=radio]:checked+label>.sm{border:2px solid #21ecdc}.call-setup-div{background:#d5e2ff;border-radius:5px;margin-top:10px;margin-right:10px;padding:10px}#call_setup_dets{display:none}.mo-saml-select-timezone{width:95%}.call-setup-heading{margin-top:0;margin-left:5px}.call-setup-label{padding-left:5px;font-size:15px}.call-setup-details{margin-left:5px;margin-top:5px}.call-setup-datetime{width:50%;float:left;position:relative;height:auto;min-height:100%!important}.call-setup-textbox{width:90%!important}.call-setup-notice{font-size:1rem}.saml-debug-button{min-width:200px;width:auto;margin:5px!important}a{outline:0!important}a,a:active,a:hover,a:visited{text-decoration:none!important}.lic-body{width:98%}#demo,#demo1{margin-right:1.4em;margin-left:0}td.text-start{padding:10px 15px}.nav-menu{display:flex;position:sticky;width:102%;top:32px;align-items:center;background:#2f4f4f;justify-content:space-evenly;z-index:1;box-shadow:2px 11px 10px #f7f7f7;height:3.1em}.goto-opt{padding:5px 0;font-size:1.6em!important}.goto-opt a{color:#fff;font-size:25px;font-weight:300}.goto-opt a:active,.goto-opt a:focus{color:#fff;box-shadow:none!important}.goto-opt a:hover{color:#fff}.goto-active{border-bottom:2px solid #fff;transition:2s;color:#fff}.plan-head-saml{color:#000;text-align:center;font-weight:350;margin-bottom:.1em;margin-top:.7em;width:100%}.faq-container{max-width:600px;margin:0 auto}.faq{background-color:transparent;border:1px solid #9fa4a8;border-radius:10px;padding:23px 22px 10px;position:relative;overflow:hidden;transition:.3s ease;cursor:pointer}.faq.active{background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.1),0 3px 6px rgba(0,0,0,.1)}.faq-title{margin:1px 35px 0 0;color:#000;margin-bottom:1.2em;font-weight:400;font-size:1.2em;text-align:left}.faq-text{display:none;border-top:1px solid #f4f4f4;text-align:left;font-size:1rem}.faq.active .faq-text{display:block}.faq-toggle{background-color:transparent;color:#000;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;padding:0;position:absolute;top:16px;right:20px;height:40px;width:30px;border:none;z-index:1000}.faq-toggle .fa-times{display:none}.faq.active .faq-toggle .fa-times{display:block}.faq.active .faq-toggle .fa-chevron-down{display:none}.works-step div{color:#e67e22;border:2px solid #e67e22;border-radius:50%;width:40px;height:40px;text-align:center;float:left;font-size:20px;margin-right:25px;margin-bottom:27px}.plugin-banner-text-saml{color:#1f3668;line-height:2}.text-color{color:#fe7e00!important}.reg-plans-saml{background:linear-gradient(45deg,#ffeabc,#ffe194);border-radius:9px;height:35.4em}.common-rot{transition:.3s}.single-site{display:flex;justify-content:center;margin-left:3px}.multi-site{display:flex;justify-content:center;margin-left:3px}.single-site-rot{transform:rotateY(0)}.multi-site-rot{transform:rotateY(180deg)}.reg-plans-saml:hover{background:linear-gradient(125deg,#ffeabc,#ffe194)}.incl-plan-saml{background:linear-gradient(145deg,#c1f4ff,#dcdcdc);border-radius:9px;padding:.1em 1em 1.5em;height:35.4em}.incl-plan-saml:hover{background:linear-gradient(254deg,#7ee8ff,#dcdcdc)}.display-1{font-size:2.5em;font-weight:200}.header-h3{font-size:1.5em;margin-top:20px;margin-bottom:-20px;color:#585858}.header-h4{color:#000;font-weight:500;font-size:1.2em}.price-list{border-top:1px solid #fff;border-bottom:1px solid #fff;font-size:1.3em;background:#ffecbb;border-radius:10px;height:324px}.price-list-incl{background:linear-gradient(145deg,#e2faff,#e1e1e1)}.upg-btn{display:inline-block}.license-btn-saml{color:#fff!important;font-size:1em;padding:.5em 2rem;border-radius:6px;background:#2f4f4f;cursor:pointer;margin-top:10px;width:160px;height:43px}.border-rad-saml{border-radius:50px;padding:.7em .1rem;margin-right:15px}.license-btn-saml:hover{background:linear-gradient(15deg,#2f4f4f,#669a9a)}.box-shadow-saml{border-bottom:1px solid #ddd!important;margin-bottom:0!important;padding:10px 15px}.feat-head-saml{text-align:center;padding:12px;font-size:25px;font-weight:400}.choose-plan-saml{display:block;font-weight:350;color:#000;padding:10px 0 0 15px}.clk-icn{border:.2px solid rgb(0 0 0);font-weight:700;margin-top:2em;padding:.5em 2em;color:#000!important}.saml-pills{background:#e1e1e1;list-style:none;display:inline-flex;padding-top:1em;padding-left:.5em;padding-right:.5em;padding-bottom:.6em;border-radius:40px}.price-tag{width:100px;display:flex;justify-content:center;align-items:center;height:47px;border-radius:8px 8px 0 8px;background:#f4c346;z-index:99;position:absolute;top:-24px;left:70%}.price-tag-mult{left:75.7%}.product::after{content:"";position:absolute;border-right:25px solid transparent;border-top:10px solid #e7b32e;left:93%;z-index:-1;top:22px}.price{margin-top:10px;color:#fff;font-size:16px}.sticky-menu-saml{position:sticky;top:5.2em;padding-top:3em;background-color:#fff;z-index:0}.hover-saml{border-right:5px solid #fcf0d3;border-radius:10px;height:35.4em}.hover-saml:hover{background:linear-gradient(45deg,#ffebbf,#fdefcc);height:35.4em;border-radius:9px}.tabs{margin-bottom:1em;margin-top:1.5em}.tabs a.active{background:#2f4f4f;cursor:default;padding:12px 3em;color:#fff;transition:.5s;pointer-events:none}.tabs a{cursor:pointer;padding:12px 3em;font-size:17px;text-align:center;font-weight:600;border-radius:30px;color:#000}.saml-text{text-align:left;font-size:1rem}.faq-toggle:focus{outline:0}.tooltip-saml{position:relative}.tooltip-saml .tooltiptext{display:none;width:250px;background-color:#000000d4;color:#fff;text-align:center;border-radius:6px;padding:1em 2em;left:7.7em;bottom:-12.8em;position:absolute;z-index:1}.tooltip-saml .tooltiptext::after{content:" ";position:absolute;top:50%;right:100%;margin-top:-28px;border-width:5px;border-style:solid;border-color:transparent #000 transparent transparent}.tooltip-saml:hover{cursor:pointer}.tooltip-saml:hover .tooltiptext{display:block}.plan-box{height:18em;background-color:#cab9c81a;border-radius:10px;margin:0 10px;box-shadow:0 4px 8px 0 rgba(0,0,0,.2);transition:.3s}.plan-box-up{padding:20px;border-bottom:4px solid #fff}.plan-box p{padding:20px;font-size:1rem;line-height:1.5}.tab-des{display:flex;padding:0;max-width:1200px;margin:0 auto 0;list-style:none;justify-content:center}.tab-link{display:block;padding:10px 15px;color:#2f4f4f;cursor:pointer;overflow:hidden}.active-tab{border-bottom:4px solid #2f4f4f!important;background-color:#08705c14}.integration-section{background:#f4f4f4;padding:0 2em 1em;border-radius:5px}@media screen and (min-width:1688px){.product::after{display:none}}@media screen and (max-width:1519px){.price-list{height:420px}.price-list-multi{height:269px}.price-tag{left:61%}.price-tag-mult{left:74%}.product::after{display:none}.hover-saml,.hover-saml:hover,.incl-plan-saml,.reg-plans-saml{height:40.6em}.multi-site-height,.multi-site-height:hover{height:33.3em}}@media screen and (max-width:1380px){.price-list{height:476px}.price-tag{left:56%}.price-list-multi{height:296px}.price-tag-mult{left:69%}.product::after{left:38px}.hover-saml,.hover-saml:hover,.incl-plan-saml,.reg-plans-saml{height:43.9em}.multi-site-height,.multi-site-height:hover{height:34.3em}}.cstm-iframe{padding:1rem;border:1px solid #dcdcde;background-color:#fff}.cstm-addon-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1.2;margin-right:-15px;margin-left:-15px;padding:1rem 1rem 0}.mt-2{margin-top:2px!important}.cstm-h4{font-size:1.5rem}.cstm-h5{font-size:1.25rem;margin:.5rem 0 1rem}.cstm-input{box-shadow:1px 1px 6px #e3e1e1!important;border:1px solid #d5d5d5!important;padding:0 1rem!important}label{font-size:13px}.form-head{position:relative}.form-head:after{content:"";display:block;height:5px;background:#1f3668;margin-top:9px;border-radius:30px}.form-head-bar:after{width:50px}.form-sep:after{width:100%;background:#6c757d;height:2.3px;margin-top:-13px}.prem-info{padding:1rem;background:#f4f4f4;border:4px solid #d5e2ff;border-radius:5px}.anonymous-text,.attr-info-text,.entity-info-text,.nameid-prem-text,.prem-info-text,.provide-metadata-text,.role-admin-prem-text,.role-prem-text{display:none;width:400px;background-color:#000000d4;color:#fff;font-size:1.1rem;text-align:center;border-radius:6px;padding:.6em .5em;left:19em;bottom:-.2em;position:absolute;z-index:1}.prem-info-text{left:-25.5em;bottom:-2em}.mo-saml-provide-metadata-txt{left:13.4em;bottom:0}.mo-saml-redir-opts-txt{left:26em;bottom:0}.provide-metadata-text{left:18.8em;bottom:55.8em}.attr-info-text{left:14.1em;bottom:.2em}.role-map-info-text{left:11.1em;bottom:.2em}.anonymous-text{left:-25.3em;bottom:-2.7em}.nameid-prem-text{bottom:-4.4em;left:-25.2em}.auto-redir-text{bottom:-4.3em}.auto-redir-wp-text{bottom:-4.3em}.shortcode-text{bottom:-2.7em}.role-prem-text{bottom:-4.7em;left:-25.3em}.role-admin-prem-text{bottom:-4.6em;left:-25.3em}.sso-btn-prem-text{bottom:-4.3em;left:-25.3em}.mo-saml-sso-log-txt{bottom:.1em;left:25.9em}.mo-saml-sso-widget-txt{bottom:.1em;left:16.9em}.mo-saml-redir-site-txt{bottom:.1em;left:25.1em}.mo-saml-redir-wp-log-txt{bottom:.1em;left:33.4em}.mo-saml-sso-shortcode-txt{bottom:.1em;left:18.9em}.prem-icn{position:absolute;z-index:10;display:inline-flex;right:32.5%;filter:drop-shadow(#f6f6f6 9px 4px 1px)}.auto-redir-prem-img{left:63.3%}.sso-btn-prem-img{left:63.3%}.anonymous-text::after,.attr-info-text::after,.entity-info-text::after,.mo-saml-error-tip::after,.nameid-prem-text::after,.prem-info-text::after,.provide-metadata-text::after,.role-admin-prem-text::after,.role-prem-text::after{content:" ";position:absolute;top:84%;right:100%;margin-top:-28px;border-width:5px;border-style:solid;border-color:transparent #000 transparent transparent}.anonymous-text::after,.nameid-prem-text::after,.prem-info-text::after,.role-admin-prem-text::after,.role-prem-text::after,.sso-btn-prem-text::after{border-color:transparent transparent transparent #000000fa;left:100%}.mo-saml-error-tip{display:none;align-items:center;background:#fff;border:1px solid #767676;border-radius:4px;padding:.2rem .5rem;left:56.3%;top:6.9em;color:#414141}.mo-saml-error-tip::after{top:1.1em;right:51.1%;border-color:#ff7a7a00 #0000 #000000c7 transparent}@media screen and (width:1228.8px){.mo-saml-error-tip{top:6.9em;width:46%}.mo-saml-error-tip::after{top:1.1em}}.auto-redir-text::after,.auto-redir-wp-text::after,.nameid-prem-text::after,.role-admin-prem-text::after,.role-prem-text::after,.sso-btn-prem-text::after{top:49%}.entity-info:hover,.prem-info:hover{cursor:text}.attr-info:hover .attr-info-text,.entity-info:hover .entity-info-text,.prem-info:hover .anonymous-text,.prem-info:hover .nameid-prem-text,.prem-info:hover .prem-info-text,.prem-info:hover .role-admin-prem-text,.prem-info:hover .role-prem-text,.prem-info:hover .sso-btn-prem-text,.provide-metadata-info:hover .provide-metadata-text{display:block!important}.mo-saml-switch[type=checkbox]{height:0;width:0;visibility:hidden}.mo-saml-switch-label{cursor:pointer;margin-top:-1.5rem;text-indent:-9999px;width:56px;height:30px;background:#bfbdbd;display:block;border-radius:100px;position:relative}.mo-saml-switch-label:after{content:"";position:absolute;top:5px;left:5px;width:20px;height:20px;background:#fff;border-radius:90px;transition:.1s}.mo-saml-switch:checked+.mo-saml-switch-label{background:#163d77}.mo-saml-switch:checked+.mo-saml-switch-label:after{left:calc(100% - 5px);transform:translateX(-100%)}.mo-saml-switch-label:active:after{width:40px}.btn-cstm{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%)!important;border:none;font-size:1.1rem;padding:.3rem 1.5rem;color:#fff!important;cursor:pointer}.mo-saml-bs-btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.mo-saml-bs-bs-btn[disabled]{background:linear-gradient(0deg,rgb(14 42 71) 0,rgb(26 69 138) 100%);color:#fff!important;opacity:.65;cursor:not-allowed}.w-176{width:179px}.mo-saml-w-186{width:186px}.w-372{width:395px}.mo-saml-alredy-have-btn:hover{color:#76bdd0!important;cursor:pointer}.btn-cstm:hover{background-color:#1f3668c4!important}.shadow-cstm{box-shadow:0 2px 5px rgb(0 0 0 / 12%)}.bg-main-cstm{background:#f4f4f4}.mo-saml-margin-left{margin-left:-20px}.bg-cstm{background:#d5e2ff}.contact-us-cstm{bottom:4%;position:fixed;right:1%;box-sizing:border-box;-webkit-transition:all .3s linear;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease;transition:all .3s ease;z-index:10;height:58px;width:209px;background-color:#1f3668;cursor:pointer;border-radius:50px;box-shadow:4px 3px 6px 0 #272727d9}.mo-saml-scroll-cstm{overflow-y:auto;height:236px;overflow-x:hidden}.logo-saml-cstm{padding:1em 0;border-radius:15px;background:#fff;max-width:88px;margin-right:7px;margin-top:1rem;height:83px;box-shadow:inset 2px 2px 2px 0 rgb(255 255 255 / 50%),7px 7px 20px 0 rgb(0 0 0 / 10%),4px 4px 5px 0 rgb(0 0 0 / 10%);cursor:pointer}.logo-saml-cstm h6{font-size:.8rem!important;word-break:break-all;margin-bottom:-.5rem}.logo-saml-cstm a{font-size:.8rem!important;font-weight:500;word-break:break-all;color:#212529!important}.logo-saml-cstm:hover{opacity:.7;transition:.2s}.mo-saml-scroll-cstm::-webkit-scrollbar-track{box-shadow:inset 0 0 6px rgba(0,0,0,.3);-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:10px;background-color:#f5f5f5}.mo-saml-scroll-cstm::-webkit-scrollbar{width:12px;background-color:#f5f5f5}.mo-saml-scroll-cstm::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3);-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#555}.idp-search-box{background:0 0!important;border:none!important;border-bottom:2px solid #fff!important;color:#fff;padding:10px 54px!important;font-size:18px;height:2.64285714em;width:100%}.idp-search-box:focus{box-shadow:none!important}.idp-search-glass{top:51px;left:150px;position:absolute}.btn-prem{color:#fff;padding:10px 25px;cursor:pointer;border-radius:50px;transition:all .3s ease;position:relative;display:inline-block;box-shadow:inset 2px 2px 2px 0 rgba(255,255,255,.5),7px 7px 20px 0 rgba(0,0,0,.1),4px 4px 5px 0 rgba(0,0,0,.1)}.prem-btn-cstm{border:none;background:orange;color:#fff;overflow:hidden}.prem-btn-cstm:before{position:absolute;content:"";display:inline-block;top:-180px;left:0;width:15px;height:100%;background-color:#fff;animation:shiny-btn1 3s ease-in-out infinite}.prem-btn-cstm:hover{box-shadow:1px 1px 5px 1px rgb(0 0 0 / 22%) inset}.faq-btn-cstm{background-color:#89d8d3;background-image:linear-gradient(315deg,#89d8d3 0,#03c8a8 74%);border:none;z-index:1}.faq-btn-cstm:after{position:absolute;content:"";width:100%;height:0;bottom:0;left:0;z-index:-1;border-radius:5px;background-color:#4dccc6;background-image:linear-gradient(315deg,#4dccc6 0,#96e4df 74%);box-shadow:-7px -7px 20px 0 #fff9,-4px -4px 5px 0 #fff9,7px 7px 20px 0 #0002,4px 4px 5px 0 #0001;transition:all .3s ease}.faq-btn-cstm:hover{color:#fff}.faq-btn-cstm:hover:after{top:0;height:100%}.faq-btn-cstm:active{top:2px}@keyframes shiny-btn1{0%{-webkit-transform:scale(0) rotate(60deg);opacity:0}80%{-webkit-transform:scale(0) rotate(60deg);opacity:.5}81%{-webkit-transform:scale(4) rotate(60deg);opacity:1}100%{-webkit-transform:scale(30) rotate(60deg);opacity:0}}.pop-up-btns{line-height:10px;box-shadow:inset 2px 2px 2px 0 rgb(255 255 255 / 50%),7px 7px 20px 0 rgb(0 0 0 / 10%),4px 4px 5px 0 rgb(0 0 0 / 10%);border-radius:80px;color:#fff;background-color:orange}.pop-up-btns:hover{opacity:.7;color:#000}.contact-form-cstm{width:136%}.contact-form-head{padding:1rem;border-radius:8px;color:#4a4a4a;background:url(../../images/contact-form-bg.webp);background-size:cover}.contact-form-head p{line-height:1.8}.mo-saml-card-glass{background:url(../../images/dotted-bg-mo-saml.webp) right center/contain no-repeat,linear-gradient(153.07deg,rgb(213 226 255) -2.47%,rgb(243 247 255) 102.78%);border-radius:10px;padding:2em;width:136%}.mo-saml-ads-text{background:linear-gradient(135deg,rgb(255 255 255),rgba(255,255,255,.67));padding:.01rem 1.5rem 1em 1.5em;border-radius:30px;backdrop-filter:blur(2.5em)}.mo-saml-why-reg{font-size:.9rem}.reg-form{background:linear-gradient(153.07deg,rgb(213 226 255) -2.47%,rgb(249 249 249) 102.78%)}.reg-form input{border:1px solid #2b4d7f;background:0 0;border-radius:5px}.reg-form input:focus{box-shadow:none}#mo_saml_reg_back_btn,#mo_saml_reg_login_btn,.mo-saml-already-reg-field,.mo-saml-why-login-txt{display:none}.contact-form-body input,.contact-form-body textarea{background-color:#f3f7ff;border:1px solid #7090d5;padding:.2rem 1rem;width:100%}.contact-form-body input:focus,.contact-form-body textarea:focus{box-shadow:none}.mo-saml-call-setup{background:#f7f7f7;border-radius:20px}.bg-light{background-color:#d7d7d7!important}.cursor-disabled:hover{cursor:not-allowed}html{scroll-behavior:smooth}.mo-saml-tab-content,.mo-saml-tab-content1{display:none}#mo-saml-idp-manual-tab,#mo-saml-provide-metadata{display:block}.switch-tab-sp{background:#f7f7f7;padding:.5rem 1rem 0;display:flex;border-radius:10px;align-items:baseline;justify-content:center}.mo-saml-current{border-bottom:3px solid #042160;background:#f0f0f1;border-radius:2px}.switch-tab-sp a:hover{background-color:#e5e7e9}.switch-tab-sp a{color:#5d5d5d;font-weight:500}.switch-tab-sp a:focus{box-shadow:none}a:focus{box-shadow:none}.meta-data-table{border:1px solid #ddd;margin:1rem auto}.meta-data-table td{padding:.5rem .7rem}.meta-data-table tr:nth-child(even){background-color:#ebf1ff}#account-info-form,#addon-tab-form,#attr-role-tab-form,#cstm-idp-section,#demo-tab-form,#redir-sso-tab-form,#sp-meta-tab-form{transform:translate(-35px)}.mo-saml-opt-add-ons{margin-top:.6rem}.mo-saml-padding-block{padding:1.4rem 0}.mo-saml-btn-size{width:50px;background:#f8f9fa!important;margin-left:.5rem}.mo-saml-addons-logo{max-width:17%;height:auto;position:absolute;right:15px;top:80%}.mo_saml_version_display{font-size:15px;font-weight:400}.mo-saml-addons-head{margin:1.1em 1.1em .5em;font-size:1.5rem;color:#5b5b5b;height:50px}.mo-saml-add-ons-cards{width:31.13%;float:left;height:336px;box-shadow:inset 2px 2px 2px 0 rgb(255 255 255 / 50%),7px 7px 20px 0 rgb(0 0 0 / 10%),4px 4px 5px 0 rgb(0 0 0 / 10%);display:block;background-size:cover;border-radius:15px;background:#fff;position:relative;overflow:hidden;margin-right:.6rem}@media screen and (max-width:1399px) and (min-width:1227px){.mo-saml-add-ons-cards{width:40.13%}}.mo-saml-addons-readmore{position:absolute;top:86%;left:3.8%;color:#0a0a0a;font-size:1.1rem;z-index:8;transition:all .6s ease;opacity:.8}.mo-saml-addons-readmore:hover{opacity:1;color:#000}.mo-saml-add-ons-tri{border-top:44px solid transparent;border-bottom:150px solid transparent;border-right:288px solid #f4f4f400;opacity:.4;position:absolute;display:block;top:0;right:-40%}.mo-saml-add-ons-tri:before{border-top:254px solid transparent;border-bottom:136px solid transparent;border-right:206px solid #e6eefd;position:absolute;content:"";display:block;top:-198px;right:-312px;z-index:-18}.mo-saml-add-ons-rect{width:487px;height:200px;position:absolute;top:75%;left:-78%;transform:rotate(30deg);z-index:5;filter:blur(1px);opacity:.9;transition:all .3s ease-in-out}.mo-saml-add-ons-rect:before{content:"";display:block;height:100%;background:#d5e2ff;z-index:2;transition:all .3s ease-in-out}code{line-height:1.9}.mo-saml-error-box{border:3px solid red}.mo-saml-form-head:after{content:"";display:block;height:5px;background:#1f3668;margin-top:9px;border-radius:30px}.mo-saml-form-head-bar:after{width:50px}.mo-saml-troubleshoot-table tr:nth-child(odd){background:#e9f0ff}.mo-saml-troubleshoot-table{border:1px solid #ddd;width:100%;margin-bottom:20px;border-collapse:collapse}.mo-saml-troubleshoot-table td{border:1px solid #ddd;padding:10px}.crown_img{width:35px!important}.note_img{width:25px!important;height:25px!important}.crown_img_small{width:20px!important}.error_msg{background-color:#ffdfdf!important;font-size:15px!important}.success_msg{background-color:#c8ffc8!important;font-size:15px!important}.radio-email input[type=radio]{opacity:0;position:fixed;width:0}.mo_saml_reg_page_header{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.mo_saml_feedback_email input[id=query_mail]{text-align:center;border:0 solid #000;border-style:solid;background:#f0f3f7;width:20vw;border-radius:6px}.mo_saml_download_paid_plugin_notice{background:#fef8e6;margin:2% 0 0;border-radius:4px;border:1.3px solid #f0d480;padding:0 7px;font:600 13px Inter;display:flex;align-items:center;gap:2%}.mo_saml_activate_modal{display:block;position:fixed;z-index:30;left:0;top:0;background:#fff;width:100vw;height:100vh;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.596);align-content:center}.mo_saml_model_container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%}.mo_saml_modal_content{background-color:#fff;padding:20px;min-width:560px;margin:auto;align-content:center;border:1px solid #ccc}.mo_saml_modal_content_header{display:flex;justify-content:left;margin:1%}.mo_saml_modal_content_header-title{font-weight:700;font-size:22px;font-family:sans-serif;margin:9px 0 8px 13px}.mo_saml_modal_content_extenstions{margin:15px 15px}.mo_saml_modal_content_extenstions-warning{font-family:sans-serif}.mo_saml_modal_content_extenstions-warning2{font-weight:700;color:red}.mo_saml_trial_notice_banner{padding:16px;position:relative;font-size:14px}.mo_saml_support_info{text-align:center}
  • miniorange-saml-20-single-sign-on/trunk/includes/lib/class-mo-saml-options-enum-error-codes.php

    r3123187 r3147410  
    2727            'fix'            => 'Please turn off assertion encryption in your IDP to test the SSO flow.',
    2828            'cause'          => 'Encrypted Assertion From IDP',
    29             'testConfig_msg' => 'Your IdP is sending encrypted assertion which is not supported in free version.',
     29            'testconfig_msg' => 'Your IdP is sending encrypted assertion which is not supported in free version.',
    3030        ),
    3131        'WPSAMLERR002' => array(
     
    3434            'fix'            => 'Please configure your IDP to send a NameID attribute. If it is already configured then the user with which you are trying might have the blank NameID mapped attribute.',
    3535            'cause'          => 'NameID missing',
    36             'testConfig_msg' => 'NameID may not be configured at the IDP or the user does not have a valid NameID value.',
     36            'testconfig_msg' => 'NameID may not be configured at the IDP or the user does not have a valid NameID value.',
    3737        ),
    3838        'WPSAMLERR003' => array(
     
    4141            'fix'            => 'It is required by the SAML 2.0 standard that either the response or assertion is signed. Please enable the same in your IDP.',
    4242            'cause'          => 'Unsigned Response or Assertion',
    43             'testConfig_msg' => 'No signature found in SAML Response or Assertion. Please sign at least one of them.',
     43            'testconfig_msg' => 'No signature found in SAML Response or Assertion. Please sign at least one of them.',
    4444        ),
    4545        'WPSAMLERR004' => array(
    4646            'code'           => 'WPSAMLERR004',
    47             'description'    => 'This error ocurrs  when certificate present in SAML Response does not match with the certificate configured in the plugin.',
    48             'fix'            => 'To fix this error, copy the certificate value shown in the Test Configuration window and paste it in X.509 Certificate field in Service Provider Setup tab of the plugin.',
     47            'description'    => 'This error occurs  when certificate present in SAML Response does not match with the certificate configured in the plugin.',
     48            'fix'            => '<ol><li>Copy paste the certificate provided above in X.509 Certificate under Service Provider Setup tab or click on the Fix Issue button below to do the same.</li><li>If issue persists disable <b>Character encoding</b> under Service Provider Setup tab.</li></ol>',
    4949            'cause'          => 'Mismatch in Certificate',
    50             'testConfig_msg' => 'X.509 Certificate field in plugin does not match the certificate found in SAML Response.',
     50            'testconfig_msg' => 'X.509 Certificate field in plugin does not match the certificate found in SAML Response.',
    5151        ),
    5252        'WPSAMLERR005' => array(
    5353            'code'           => 'WPSAMLERR005',
    5454            'description'    => 'This error is displayed when there is an issue in creating user in WordPress.',
    55             'fix'            => 'There has been some issue with user creation in wordpress copy the error message and reach out us at <a href="mailto:[email protected]">[email protected]</a> with your registered email.',
     55            'fix'            => 'There has been some issue with user creation in wordpress copy the error message and reach out to us at <a href="mailto:[email protected]">[email protected]</a> with your registered email.',
    5656            'cause'          => 'User Creation Failed',
    57             'testConfig_msg' => 'Something went wrong while creating the user. Please reach out to us with the debug logs.',
     57            'testconfig_msg' => 'Something went wrong while creating the user. Please reach out to us with the debug logs.',
    5858        ),
    5959        'WPSAMLERR006' => array(
     
    6565            'fix'            => 'You will need to double check the configuration between your IDP and SP to fix this issue.',
    6666            'cause'          => 'Invalid Status Code',
    67             'testConfig_msg' => 'Identity Provider has sent %s status code in SAML Response. Please check IdP logs.',
     67            'testconfig_msg' => 'Identity Provider has sent %s status code in SAML Response. Please check IdP logs.',
    6868        ),
    6969        'WPSAMLERR007' => array(
     
    7272            'fix'            => 'You will need to sync the time between your IDP and SP or you can turn off the <b>Assertion Time Validity</b> toggle in the Service Provider Setup tab.',
    7373            'cause'          => 'SP clock is behind IDP',
    74             'testConfig_msg' => '',
     74            'testconfig_msg' => '',
    7575        ),
    7676        'WPSAMLERR008' => array(
     
    7979            'fix'            => 'You will need to sync the time between your IDP and SP or you can turn off the <b>Assertion Time Validity</b> toggle in the Service Provider Setup tab.',
    8080            'cause'          => 'SP clock is ahead of IDP',
    81             'testConfig_msg' => '',
     81            'testconfig_msg' => '',
    8282        ),
    8383        'WPSAMLERR009' => array(
    84             'code'            => 'WPSAMLERR009',
    85             'description'     => 'This error indicates that the Audience URI is not correctly configured at your Identity Provider.',
    86             'fix'             => '<ul style="list-style: none;"><li style="list-style-type: none;">Copy the Audience URI configured in the Identity Provider from above and paste it into the SP EntityID/Issuer field in the Plugin\'s settings. </li><li style="list-style-type: none; font-weight: bold; text-align: center; margin: 10px 0;">OR </li><li style="list-style-type: none;">Copy the Audience URI configured in the plugin from above and paste it into the Audience URI field in the Identity Provider.</li></ul>',
    87             'cause'           => 'Invalid Audience URI',
    88             'test_config_msg' => 'The value of Audience URI in the plugin settings does not match the value of Audience URI received from the Identity Provider.',
     84            'code'           => 'WPSAMLERR009',
     85            'description'    => 'This error indicates that the Audience URI is not correctly configured at your Identity Provider.',
     86            'fix'            => '<ul style="list-style: none;"><li style="list-style-type: none;">Copy the Audience URI configured in the Identity Provider from above and paste it into the SP EntityID/Issuer field in the Service Provider Metadata Tab. </li><li style="list-style-type: none; font-weight: bold; text-align: center; margin: 10px 0;">OR </li><li style="list-style-type: none;">Copy the Audience URI configured in the plugin from above and paste it into the Audience URI field in the Identity Provider.</li></ul>',
     87            'cause'          => 'Invalid Audience URI',
     88            'testconfig_msg' => 'The value of Audience URI in the plugin settings does not match the value of Audience URI received from the Identity Provider.',
    8989        ),
    9090        'WPSAMLERR010' => array(
    9191            'code'           => 'WPSAMLERR010',
    9292            'description'    => 'This happens when you have configured wrong IDP Entity ID in the plugin.',
    93             'fix'            => 'To fix this navigate to Service Provider Setup tab and paste the correct IDP Entity ID in the required field.',
     93            'fix'            => 'To fix this navigate to Service Provider Setup tab and paste the correct IDP Entity ID in the required field or click on the Fix Issue button below to do the same.',
    9494            'cause'          => 'Wrong IDP Entity ID',
    95             'testConfig_msg' => 'IdP Entity ID configured and the one found in SAML Response do not match',
     95            'testconfig_msg' => 'IdP Entity ID configured and the one found in SAML Response do not match',
    9696        ),
    9797        'WPSAMLERR011' => array(
     
    100100            'fix'            => 'To fix this issue, please configure your IDP to send a valid email address as the NameID value, which should be less than 60 characters in length.',
    101101            'cause'          => 'Username length limit exceeded',
    102             'testConfig_msg' => 'The NameID value is greater than 60 characters in length. Please configure your IDP to send a proper NameID value.',
     102            'testconfig_msg' => 'The NameID value is greater than 60 characters in length. Please configure your IDP to send a proper NameID value.',
    103103        ),
    104104        'WPSAMLERR012' => array(
    105105            'code'           => 'WPSAMLERR012',
    106106            'description'    => 'This error occurs when certificate present in SAML Response does not match with the certificate configured in the plugin after encoding.',
    107             'fix'            => 'To fix this error, turn off the <b>Character encoding</b> toggle in the Service Provider Setup tab.',
     107            'fix'            => 'To fix this error, turn off the <b>Character encoding</b> toggle in the Service Provider Setup tab or click on the Fix Issue button below to do the same.',
    108108            'cause'          => 'Mismatch in Certificate',
    109             'testConfig_msg' => 'X.509 Certificate in plugin does not match the certificate found in SAML Response due to the character encoding.',
     109            'testconfig_msg' => 'X.509 Certificate in plugin does not match the certificate found in SAML Response due to the character encoding.',
    110110        ),
    111111        'WPSAMLERR013' => array(
    112             'code'            => 'WPSAMLERR013',
    113             'description'     => 'Unable to find a certificate matching the configured fingerprint.',
    114             'fix'             => 'Please copy the IDP certificate from your IDP and paste it in the X509 Certificate input field in the Service Provider Setup tab of the plugin.',
    115             'cause'           => 'Certificate Not Found',
    116             'test_config_msg' => 'Unable to find a certificate matching the configured fingerprint.',
     112            'code'           => 'WPSAMLERR013',
     113            'description'    => 'Unable to find a certificate matching the configured fingerprint.',
     114            'fix'            => 'Please copy the IDP certificate from your IDP and paste it in the X509 Certificate input field in the Service Provider Setup tab of the plugin.',
     115            'cause'          => 'Certificate Not Found',
     116            'testconfig_msg' => 'Unable to find a certificate matching the configured fingerprint.',
    117117        ),
    118118        'WPSAMLERR014' => array(
    119             'code'            => 'WPSAMLERR014',
    120             'description'     => 'This error occurs when an incorrect certificate is added on the Identity Provider for Encryption.',
    121             'fix'             => 'Please check if the certificate added in Identity Provider is the same as the certificate provided in the Service Provider Metadata tab of the Plugin.',
    122             'cause'           => 'Encryption Certificate Mismatch',
    123             'test_config_msg' => 'Incorrect certificate added on the Identity Provider for Encryption',
     119            'code'           => 'WPSAMLERR014',
     120            'description'    => 'This error occurs when an incorrect certificate is added on the Identity Provider for Encryption.',
     121            'fix'            => 'Please check if the certificate added in Identity Provider is the same as the certificate provided in the Service Provider Metadata tab of the Plugin.',
     122            'cause'          => 'Encryption Certificate Mismatch',
     123            'testconfig_msg' => 'Incorrect certificate added on the Identity Provider for Encryption',
    124124        ),
    125125        'WPSAMLERR015' => array(
    126             'code'        => 'WPSAMLERR015',
    127             'description' => 'This error code is shown to users when DOM extension is not installed.',
    128             'fix'         => 'Ask your hosting provider or internal team to install DOM extension.',
    129             'cause'       => 'DOM extension not found while parsing SAML Response, SAML Logout Response or SAML Metadata.',
     126            'code'           => 'WPSAMLERR015',
     127            'description'    => 'This error code is shown to users when DOM extension is not installed.',
     128            'fix'            => 'Ask your hosting provider or internal team to install DOM extension.',
     129            'cause'          => 'DOM extension not found while parsing SAML Response, SAML Logout Response or SAML Metadata.',
     130            'testconfig_msg' => 'This error code indicates that the DOM extension is not installed or disabled.',
    130131        ),
    131132        'WPSAMLERR016' => array(
     
    133134            'description' => 'This error code is shown to users when the plugin detects a duplicate saml response',
    134135            'fix'         => 'User will need to initiate the SSO again.',
    135             'cause'       => 'Either user have reloaded the page while plugin was processing SAMLResponse or someone has tried to send a duplicated SAMLResponse.',
     136            'cause'       => 'Either user has reloaded the page while plugin was processing SAMLResponse or someone has tried to send a duplicated SAMLResponse.',
    136137        ),
    137138        'WPSAMLERR017' => array(
     
    154155        ),
    155156        'WPSAMLERR020' => array(
    156             'code'        => 'WPSAMLERR020',
    157             'description' => 'This error is displayed when the PHP openssl extension is not installed or disabled.',
    158             'fix'         => 'Please ensure that the OpenSSL extension is installed and activated in order to activate the plugin.',
    159             'cause'       => 'PHP openssl extension is either not installed or disabled.',
     157            'code'           => 'WPSAMLERR020',
     158            'description'    => 'This error is displayed when the PHP openssl extension is not installed or disabled.',
     159            'fix'            => 'Please ensure that the OpenSSL extension is installed and activated in order to activate the plugin.',
     160            'cause'          => 'PHP openssl extension is either not installed or disabled.',
     161            'testconfig_msg' => 'This error code indicates that the OpenSSL extension is not installed or disabled.',
    160162        ),
    161163        'WPSAMLERR021' => array(
     
    180182            'code'        => 'WPSAMLERR024',
    181183            'description' => 'This error code is shown to users when the plugin receives invalid assertion in saml response.',
    182             'fix'         => 'Please send SAML tracer while reproducing the whole issue to [email protected].',
     184            'fix'         => 'Please send <a target="_blank" href="' . Mo_Saml_External_Links::SAML_TRACER_FAQ . '">SAML tracer</a> while reproducing the whole issue to <a href="mailto:[email protected]">[email protected]</a>.',
    183185            'cause'       => 'Invalid SAML Assertion',
    184186        ),
     
    186188            'code'        => 'WPSAMLERR025',
    187189            'description' => 'This error code is shown to users when the plugin is unable to process the Logout Request.',
    188             'fix'         => 'Please send SAML tracer while reproducing the whole issue to [email protected].',
     190            'fix'         => 'Please send <a target="_blank" href="' . Mo_Saml_External_Links::SAML_TRACER_FAQ . '">SAML tracer</a> while reproducing the whole issue to <a href="mailto:[email protected]">[email protected]</a>.',
    189191            'cause'       => 'Invalid Logout Request',
    190192        ),
     
    192194            'code'        => 'WPSAMLERR026',
    193195            'description' => 'This error code is shown to users when the plugin is unable to process SAML Metadata.',
    194             'fix'         => 'Please reach out to [email protected] with the metadata you are trying to import/ your IDP metadata URL.',
     196            'fix'         => 'Please reach out to <a href="mailto:[email protected]">[email protected]</a> with the metadata you are trying to import/ your IDP metadata URL.',
    195197            'cause'       => 'Invalid Metadata file/URL',
    196198        ),
     
    198200            'code'        => 'WPSAMLERR027',
    199201            'description' => 'This error code is shown to users when the plugin is unable to decrypt encrypted elements in SAML Response.',
    200             'fix'         => 'Please send SAML tracer while reproducing the whole issue to [email protected].',
     202            'fix'         => 'Please send <a target="_blank" href="' . Mo_Saml_External_Links::SAML_TRACER_FAQ . '">SAML tracer</a> while reproducing the whole issue to <a href="mailto:[email protected]">[email protected]</a>.',
    201203            'cause'       => 'Incorrect IDP certificates',
    202204        ),
     
    204206            'code'        => 'WPSAMLERR028',
    205207            'description' => 'This error code is shown to users when the plugin is unable to process XML with xmlseclibs.',
    206             'fix'         => 'Please send SAML tracer while reproducing the whole issue to [email protected].',
     208            'fix'         => 'Please send <a target="_blank" href="' . Mo_Saml_External_Links::SAML_TRACER_FAQ . '">SAML tracer</a> while reproducing the whole issue to <a href="mailto:[email protected]">[email protected]</a>.',
    207209            'cause'       => 'Unable to process XML',
    208210        ),
    209211        'WPSAMLERR029' => array(
    210             'code'            => 'WPSAMLERR029',
    211             'description'     => 'This error code is shown to users when the plugin license has expired and hence the SSO has stopped working.',
    212             'fix'             => 'Please renew your plugin license to get the SSO working.',
    213             'cause'           => 'Plugin License Expired',
    214             'test_config_msg' => 'This error code indicates that the plugin license has expired.',
     212            'code'           => 'WPSAMLERR029',
     213            'description'    => 'This error code is shown to users when the plugin license has expired and hence the SSO has stopped working.',
     214            'fix'            => 'Please renew your plugin license to get the SSO working.',
     215            'cause'          => 'Plugin License Expired',
     216            'testconfig_msg' => 'This error code indicates that the plugin license has expired.',
    215217        ),
    216218        'WPSAMLERR030' => array(
    217             'code'            => 'WPSAMLERR030',
    218             'description'     => 'This error code occurs when the same plugin license is used on multiple sites or an incorrect license key is entered.',
    219             'fix'             => 'Please contact your administrator to use the correct license.',
    220             'cause'           => 'Invalid License Found.',
    221             'test_config_msg' => 'This error code indicates that the plugin license is invalid.',
     219            'code'           => 'WPSAMLERR030',
     220            'description'    => 'This error code occurs when the same plugin license is used on multiple sites or an incorrect license key is entered.',
     221            'fix'            => 'Please contact your administrator to use the correct license.',
     222            'cause'          => 'Invalid License Found.',
     223            'testconfig_msg' => 'This error code indicates that the plugin license is invalid.',
    222224        ),
    223225        'WPSAMLERR031' => array(
    224             'code'            => 'WPSAMLERR031',
    225             'description'     => 'This error code indicates that there has been some issue with how you have activated your license.',
    226             'fix'             => 'Reach out to us at [email protected] from your registered email address',
    227             'cause'           => 'License File missing from the plugin.',
    228             'test_config_msg' => 'This error code indicates that there is some issue with license activation.',
     226            'code'           => 'WPSAMLERR031',
     227            'description'    => 'This error code indicates that there has been some issue with how you have activated your license.',
     228            'fix'            => 'Reach out to us at <a href="mailto:[email protected]">[email protected]</a> from your registered email address',
     229            'cause'          => 'License File missing from the plugin.',
     230            'testconfig_msg' => 'This error code indicates that there is some issue with license activation.',
    229231        ),
    230232        'WPSAMLERR032' => array(
    231             'code'        => 'WPSAMLERR032',
    232             'description' => 'This error is displayed when the Curl extension is not installed or disabled.',
    233             'fix'         => 'Please ensure that the Curl extension is installed and activated in order to activate the plugin.',
    234             'cause'       => 'Curl extension is either not installed or disabled.',
     233            'code'           => 'WPSAMLERR032',
     234            'description'    => 'This error is displayed when the Curl extension is not installed or disabled.',
     235            'fix'            => 'Please ensure that the Curl extension is installed and activated in order to activate the plugin.',
     236            'cause'          => 'Curl extension is either not installed or disabled.',
     237            'testconfig_msg' => 'This error code indicates that the Curl extension is not installed or disabled.',
     238
    235239        ),
    236240        'WPSAMLERR033' => array(
    237241            'code'        => 'WPSAMLERR033',
    238242            'description' => 'This error occurred while parsing encrypted XML.',
    239             'fix'         => 'Either SAML Response sent by IDP is not correct. Send IdP configurations and plugin configurations to [email protected] for further debugging.',
     243            'fix'         => 'Either SAML Response sent by IDP is not correct. Send IdP configurations and plugin configurations to <a href="mailto:[email protected]">[email protected]</a> for further debugging.',
    240244            'cause'       => 'IdP is not configured correctly or the SAML Response contains insecure elements.',
    241245        ),
     
    259263        ),
    260264        'WPSAMLERR037' => array(
    261             'code'            => 'WPSAMLERR037',
    262             'description'     => 'This error code indicates that you have provided a empty value to the UserName/Email.',
    263             'fix'             => 'Please provide a valid value to the UserName/Email attribute name in Attribute Mapping tab.',
    264             'cause'           => 'UserName/Email Missing',
    265             'test_config_msg' => 'This error code indicates that the UserName/Email attribute value is empty.',
     265            'code'           => 'WPSAMLERR037',
     266            'description'    => 'This error code indicates that you have provided an empty value to the UserName/Email.',
     267            'fix'            => 'Please provide a valid value to the UserName/Email attribute name in Attribute Mapping tab.',
     268            'cause'          => 'UserName/Email Missing',
     269            'testconfig_msg' => 'This error code indicates that the UserName/Email attribute value is empty.',
    266270        ),
    267271        'WPSAMLERR038' => array(
     
    274278            'code'        => 'WPSAMLERR039',
    275279            'description' => 'This error is displayed when you have enabled SSO on more sites than the license purchased for.',
    276             'fix'         => 'Please ensure that the SSO is enabled only on the sites for which you have purchased the license or reach out to us at [email protected] to upgrade your license.',
     280            'fix'         => 'Please ensure that the SSO is enabled only on the sites for which you have purchased the license or reach out to us at <a href="mailto:[email protected]">[email protected]</a> to upgrade your license.',
    277281            'cause'       => 'Subsite Limit Exceeded.',
    278282        ),
  • miniorange-saml-20-single-sign-on/trunk/includes/lib/class-mo-saml-options-enum.php

    r3123187 r3147410  
    1616 */
    1717class Mo_Saml_Options_Enum extends Mo_SAML_Basic_Enum {
    18     const SAML_MESSAGE                   = 'mo_saml_message';
    19     const NEW_USER                       = 'mo_is_new_user';
     18    const SAML_MESSAGE         = 'mo_saml_message';
     19    const NEW_USER             = 'mo_is_new_user';
     20    const PLUGIN_DO_ACTIVATION = 'mo_plugin_do_activation_redirect';
     21}
     22
     23/**
     24 * Defines Required PHP extensions
     25 */
     26class Mo_Saml_Required_PHP_Extensions extends Mo_SAML_Basic_Enum {
     27    const PHP_EXTENSIONS = array(
     28        'curl'    => 'CURL',
     29        'dom'     => 'DOM',
     30        'openssl' => 'OpenSSL',
     31    );
     32}
     33
     34/**
     35 * Plugin page to show the extensions disabled or uninstalled.
     36 */
     37class Mo_Saml_Plugin_Pages extends Mo_SAML_Basic_Enum {
     38    const PLUGIN_PAGES = array(
     39        'mo_saml_settings',
     40        'mo_saml_enable_debug_logs',
     41    );
     42}
     43
     44/**
     45 * Defines constants for Redirection SSO Links tab.
     46 */
     47class Mo_Saml_Options_Enum_Sso_Login extends Mo_SAML_Basic_Enum {
     48    const SSO_BUTTON                     = 'mo_saml_add_sso_button_wp';
    2049    const MO_SAML_KEEP_SETTINGS_DELETION = 'mo_saml_keep_settings_on_deletion';
    21     const PLUGIN_DO_ACTIVATION           = 'mo_plugin_do_activation_redirect';
    22 }
    23 
    24 /**
    25  * Defines constants for Redirection SSO Links tab.
    26  */
    27 class Mo_Saml_Options_Enum_Sso_Login extends Mo_SAML_Basic_Enum {
    28     const SSO_BUTTON = 'mo_saml_add_sso_button_wp';
    2950}
    3051
     
    193214    const APPLICATION_NAME = 'WP miniOrange SAML 2.0 SSO Plugin';
    194215    const APPLICATION_TYPE = 'SAML';
    195     const VERSION          = '5.1.7';
     216    const VERSION          = '5.1.8';
    196217    const HOSTNAME         = 'https://login.xecurify.com';
    197218    const WP_VERSION       = '6.5';
     
    468489        'power_bi'                    => 'https://plugins.miniorange.com/microsoft-power-bi-embed-for-wordpress',
    469490        'sharepoint'                  => 'https://plugins.miniorange.com/microsoft-sharepoint-wordpress-integration',
    470 
    471 
     491        'salesforce_community_addon'  => 'https://plugins.miniorange.com/single-sign-on-sso-login-into-wordpress-for-multiple-salesforce-communities',
     492        'ip_whitelisting_addon'       => 'https://plugins.miniorange.com/wordpress-ip-whitelisting',
     493        'azure_multi_tenant_addon'    => 'https://plugins.miniorange.com/azure-ad-multi-tenant-single-sign-on-sso-login-wordpress',
    472494    );
    473495
     
    509531            'profile_picture_add_on'      => __( 'Profile Picture Add-on', 'miniorange-saml-20-single-sign-on' ),
    510532            'paid_mem_pro'                => __( 'PaidMembership Pro Integrator', 'miniorange-saml-20-single-sign-on' ),
     533            'salesforce_community_addon'  => __( 'Salesforce Community Add-on', 'miniorange-saml-20-single-sign-on' ),
     534            'ip_whitelisting_addon'       => __( 'IP Whitelisting Add-on', 'miniorange-saml-20-single-sign-on' ),
     535            'azure_multi_tenant_addon'    => __( 'Azure Multitenant Add-on', 'miniorange-saml-20-single-sign-on' ),
    511536        );
    512537    }
  • miniorange-saml-20-single-sign-on/trunk/login.php

    r3123187 r3147410  
    44 * Plugin URI: https://miniorange.com/
    55 * Description: miniOrange SAML plugin allows sso/login using Azure, Azure B2C, Okta, ADFS, Keycloak, Onelogin, Salesforce, Google Apps (Gsuite), Salesforce, Shibboleth, Centrify, Ping, Auth0 and other Identity Providers. It acts as a SAML Service Provider which can be configured to establish a trust between the plugin and IDP to securely authenticate and login the user to WordPress site.
    6  * Version: 5.1.7
     6 * Version: 5.1.8
    77 * Author: miniOrange
    88 * Author URI: https://miniorange.com/
     
    4040        add_action( 'admin_enqueue_scripts', array( $this, 'plugin_settings_script' ) );
    4141        add_action( 'admin_enqueue_scripts', array( $this, 'plugin_settings_style' ) );
     42        register_activation_hook( __FILE__, array( $this, 'mo_saml_sso_activate' ) );
    4243        add_action( 'admin_init', array( Mo_SAML_Base_Handler::class, 'mo_saml_save_settings_handler' ) );
    4344        add_action( 'admin_init', array( 'Mo_SAML_Logger', 'mo_saml_admin_notices' ) );
     45        add_action( 'admin_init', array( $this, 'mo_saml_do_plugin_extension_checks' ) );
    4446        add_action( 'admin_footer', array( $this, 'feedback_request' ) );
    4547        add_action( 'admin_menu', array( $this, 'miniorange_sso_menu' ) );
     
    7173
    7274    /**
     75     * This function enabled the keep setting intact toggle if it is disabled when activating the plugin.
     76     */
     77    public function mo_saml_sso_activate() {
     78        if ( ! get_option( Mo_Saml_Options_Enum_Sso_Login::MO_SAML_KEEP_SETTINGS_DELETION ) ) {
     79            add_option( Mo_Saml_Options_Enum_Sso_Login::MO_SAML_KEEP_SETTINGS_DELETION, 'true' );
     80        }
     81    }
     82
     83    /**
    7384     * Ensures fatal errors are logged so they can be picked up in the status report.
    7485     *
     
    8899    }
    89100
     101    /**
     102     * Function to display the notice on the specific pages.
     103     */
     104    public function mo_saml_do_plugin_extension_checks() {
     105        $valid_pages = 'mo_saml_settings';
     106        // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- reading page parameter.
     107        if ( ! ( ! empty( $_GET['page'] ) && ( $_GET['page'] === $valid_pages ) ) && current_user_can( 'manage_options' ) ) {
     108            add_action( 'admin_notices', array( $this, 'mo_saml_show_disabled_extension_notice' ) );
     109        }
     110    }
     111
     112    /**
     113     * Function shows a notice incase any required extensions are not enabled.
     114     */
     115    public function mo_saml_show_disabled_extension_notice() {
     116        $disable_extension = Mo_SAML_Utilities::mo_saml_get_disabled_extensions();
     117
     118        if ( ! empty( $disable_extension ) ) {
     119            $extension_display_line = implode( ', ', $disable_extension );
     120            echo '
     121            <div class="notice notice-warning mo-saml-trial-notice-banner">
     122                <div class="mo-saml-notice-content">
     123                    <img src="' . esc_attr( plugin_dir_url( __FILE__ ) ) . 'images/miniorange_logo.webp" class="mo-saml-logo">
     124                    <span class="mo-saml-warning-text">
     125                        <span class="mo-saml-warning-title">Warning:</span> Following PHP extensions (<i class="mo-saml-extension-list">' . esc_attr( $extension_display_line ) . '</i>) are disabled which are important for SSO configuration. Please enable these extensions to continue using SSO on your site.
     126                    </span>
     127                </div>
     128            </div>';
     129        }
     130    }
    90131
    91132    /**
     
    221262        $mo_date_current_notice = gmdate( 'Y-m-d' );
    222263
    223         if ( isset( $_POST['mo_idp_close_notice'] ) && check_admin_referer( 'mo_idp_close_notice' ) ) {
     264        if ( isset( $_POST['mo_idp_close_notice_nonce'] ) && check_admin_referer( 'mo_idp_close_notice', 'mo_idp_close_notice_nonce' ) ) {
    224265            $mo_date_expire_notice = gmdate( 'Y-m-d', strtotime( $mo_date_current_notice . '+7 day' ) );
    225266            update_option( Mo_Saml_Sso_Constants::MO_SAML_EXPIRE_NOTICE, $mo_date_expire_notice );
     
    235276            $display = 'block';
    236277        }
     278
    237279        if ( $mo_date_current_notice < get_option( Mo_Saml_Sso_Constants::MO_SAML_EXPIRE_NOTICE ) && ! empty( get_option( Mo_Saml_Sso_Constants::MO_SAML_CLOSE_NOTICE ) ) && get_option( Mo_Saml_Sso_Constants::MO_SAML_CLOSE_NOTICE ) ) {
    238280            $display = 'none';
    239281        }
     282
    240283        if ( current_user_can( 'manage_options' ) ) {
    241284            mo_saml_display_plugin_notice( $display );
  • miniorange-saml-20-single-sign-on/trunk/mo-saml-import-export.php

    r3110324 r3147410  
    7878
    7979            if ( ! empty( $_POST['mo_saml_keep_settings_intact'] ) ) {
    80                 update_option( Mo_Saml_Options_Enum::MO_SAML_KEEP_SETTINGS_DELETION, 'true' );
     80                update_option( Mo_Saml_Options_Enum_Sso_Login::MO_SAML_KEEP_SETTINGS_DELETION, 'true' );
    8181            } else {
    82                 update_option( Mo_Saml_Options_Enum::MO_SAML_KEEP_SETTINGS_DELETION, '' );
     82                update_option( Mo_Saml_Options_Enum_Sso_Login::MO_SAML_KEEP_SETTINGS_DELETION, '' );
    8383            }
    8484            update_option( 'mo_saml_message', 'Keep Settings Intact Option Updated Successfully.' );
  • miniorange-saml-20-single-sign-on/trunk/mo-saml-settings-page.php

    r3110324 r3147410  
    2020 */
    2121function mo_saml_register_saml_sso() {
     22
     23    Mo_SAML_Utilities::mo_saml_extension_disabled_modal();
    2224    // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- reading tab name
    2325    if ( isset( $_GET['tab'] ) ) {
     
    4143    <div id="mo_saml_settings" >
    4244        <?php
     45        if ( ! Mo_SAML_Utilities::mo_saml_is_sp_configured() ) {
    4346            mo_saml_display_welcome_page();
     47        }
    4448
    4549        mo_saml_display_plugin_header();
     
    110114 * This function displays test configuration error.
    111115 *
    112  * @param string $error_code error code.
    113  *
    114  * @param string $error_cause error cause.
    115  *
    116  * @param string $error_message error message.
    117  *
    118  * @param string $statusmessage status message.
    119  */
    120 function mo_saml_display_test_config_error_page( $error_code, $error_cause, $error_message, $statusmessage = '' ) {
     116 * @param string $error_code error code .
     117 * @param string $display_metadata_mismatch The metadata recieved in SMAL response and stored in plugin if the error corresponds to a mismatched metadata .
     118 * @param string $status_message The status sent by Identity Provider.
     119 */
     120function mo_saml_display_test_config_error_page( $error_code, $display_metadata_mismatch = '', $status_message = '' ) {
     121    $error_fix     = $error_code['fix'];
     122    $error_cause   = $error_code['cause'];
     123    $error_message = ! empty( $error_code['testconfig_msg'] ) ? $error_code['testconfig_msg'] : '';
     124    if ( ob_get_level() > 0 ) {
     125        ob_end_clean();
     126    }
     127
    121128    echo '<div style="font-family:Calibri;padding:0 3%;">';
    122     echo '<div style="color: #a94442;background-color: #f2dede;padding: 15px;margin-bottom: 20px;text-align:center;border:1px solid #E6B3B2;font-size:18pt;">' . esc_attr( 'ERROR: ' . $error_code ) . '</div>
    123                 <div style="color: #a94442;font-size:14pt; margin-bottom:20px;text-align: justify"><p><strong>' . esc_attr( 'Error' ) . '</strong>: ' . esc_attr( $error_cause ) . ' </p>
    124                
    125                 <p><strong>' . esc_attr_x( 'Possible Cause: ', '', 'miniorange-saml-20-single-sign-on' ) . '</strong>' . esc_attr( $error_message ) . ' </p>';
    126     if ( ! empty( $statusmessage ) ) {
    127         echo '<p><strong>Status Message in the SAML Response:</strong> <br/>' . esc_attr( $statusmessage ) . '</p><br>';
    128     }
    129     if ( 'WPSAMLERR010' === $error_code || 'WPSAMLERR004' === $error_code || 'WPSAMLERR012' === $error_code ) {
    130         $option_id = '';
    131         switch ( $error_code ) {
     129    echo '<div style="color: #a94442;background-color: #f2dede;padding: 15px;margin-bottom: 20px;text-align:center;border:1px solid #E6B3B2;font-size:18pt;"> ERROR ' . esc_html( $error_code['code'] ) . '</div>
     130    <div style="color: #a94442;font-size:14pt; margin-bottom:20px;"><p><strong>Error: </strong>' .  wp_kses_post( $error_cause )  . '</p>
     131    <p>Please contact your administrator and report the following error:</p>
     132    <p><strong>Possible Cause: </strong>' . esc_html( $error_message ) . '</p>';
     133    if ( ! empty( $status_message ) ) {
     134        echo '<p><strong>Status Message in the SAML Response:</strong> <br/>' . esc_html( $status_message ) . '</p><br>';
     135    }
     136    if ( ! empty( $display_metadata_mismatch ) ) {
     137        echo wp_kses(
     138            $display_metadata_mismatch,
     139            array(
     140                'p'      => array(
     141                    'strong' => array(),
     142                ),
     143                'strong' => array(),
     144            )
     145        );
     146    }
     147    echo '<p><strong>Solution:</strong></p>
     148        ' . wp_kses_post( $error_fix ) . '
     149    </div>
     150    <div style="margin:3%;display:block;text-align:center;">';
     151        if ( 'WPSAMLERR010' === $error_code['code'] || 'WPSAMLERR004' === $error_code['code'] || 'WPSAMLERR012' === $error_code['code'] ) {
     152            $option_id = '';
     153        switch ( $error_code['code'] ) {
    132154            case 'WPSAMLERR004':
    133155                $option_id = 'mo_fix_certificate';
     
    150172            </form>     
    151173          </div>';
    152     }
    153     echo '</div>
    154         </div>';
     174    } else {
     175        echo '<div style="margin:3%;display:block;text-align:center;"><input style="padding:1%;width:100px;background: #0091CD none repeat scroll 0% 0%;cursor: pointer;font-size:15px;border-width: 1px;border-style: solid;border-radius: 3px;white-space: nowrap;box-sizing: border-box;border-color: #0073AA;box-shadow: 0px 1px 0px rgba(120, 200, 230, 0.6) inset;color: #FFF;"type="button" value="Done" onClick="self.close();"></div>';
     176    }
     177    echo '</div>';
     178    mo_saml_download_logs( $error_message, $error_cause );
     179    exit;
    155180}
    156181/**
     
    176201                    <div style="margin:3%;display:block;text-align:center;">
    177202                   
    178                 <input class="miniorange-button" style="margin-left:60px" type="button" value="' . esc_attr_x( 'Close', '', 'miniorange-saml-20-single-sign-on' ) . '" onclick="self.close()"></form>           
     203                <input class="miniorange-button" type="button" value="' . esc_attr_x( 'Close', '', 'miniorange-saml-20-single-sign-on' ) . '" onclick="self.close()"></form>           
    179204                </div>    ';
    180205    echo '&nbsp;&nbsp;';
  • miniorange-saml-20-single-sign-on/trunk/readme.txt

    r3123187 r3147410  
    44Tags: SAML, SSO, Single Sign On, login, Azure AD
    55Requires at least: 3.7
    6 Tested up to: 6.5
     6Tested up to: 6.6
    77Requires PHP: 5.6
    8 Stable tag: 5.1.7
     8Stable tag: 5.1.8
    99License: MIT/Expat
    1010License URI: https://docs.miniorange.com/mit-license
     
    293293== Changelog ==
    294294
     295= 5.1.8 =
     296* Handled Fatal Errors when PHP extensions (CURL, DOM, OPENSSL) are disabled
     297* Clarified error codes on the Test Configuration tab for easier troubleshooting
     298* Fixed console warnings during registration and login in the Account Setup Tab
     299* UI Improvements
     300
    295301= 5.1.7 =
    296302* Compatibility with WordPress 6.6
     
    322328* SSO button Fix on update
    323329
    324 = 5.0.9 =
    325 * Fix for iconv() warning in linux environment
    326 * Fix for upgrade to premium versions
    327 * Minor UI improvements
    328 
    329 = 5.0.8 =
    330 * WP 6.4 Compatibility
    331 * Compatibility fix with Themify Plugin
    332 * UI fixes
    333 
    334 = 5.0.7 =
    335 * WP 6.3 Compatibility
    336 * Added proper error message when wp-config.php is not writable for enabling debug logs
    337 * Fix for warning in the list of IDP logos
    338 
    339 = 5.0.6 =
    340 * Fix for NetIQ SAML IDP Logo
    341 * Fix for x509 certificate in SAML SSO Configurations
    342 
    343 = 5.0.5 =
    344 * Vulnerability fix for Broken Access Control in SSO Settings
    345 
    346 = 5.0.4 =
    347 * Added additional exception handling checks to enhance the validation of SAML Response
    348 * Added Steps to download the paid plugin
    349 * Minor Bug Fixes
    350 
    351 = 5.0.3 =
    352 * Added new IDPs like Siteminder, VMWare, OpenAthens
    353 * Minor Bug Fixes
    354 
    355 = 5.0.2 =
    356 * Added new IDPs like Sharepoint, Dynamic CRM, LastPass, Drupal
    357 
    358 = 5.0.1 =
    359 * Compatibility with WordPress 6.2
    360 * Added iconv encoding issue flow
    361 * Fixed plugin update using FTP replace
    362 * Fixed SSO widget title issue
    363 * Fixed plugin deactivation issue
    364 * Fixes in debug log functionality
    365 
    366 = 5.0.0 =
    367 * Added PHPCS fixes
    368 
    369 = 4.9.32 =
    370 * Security fix for Open Redirect Vulnerability
    371 
    372 = 4.9.31 =
    373 * Fixes in logger functionality
    374 
    375 = 4.9.30 =
    376 * Added an option to disable assertion validity
    377 * Added custom Bootstrap CSS and JS
    378 * Updated images to webp format
    379 * Added Azure AD Integrations
    380 * Cross browser UI fixes
    381 
    382 = 4.9.29 =
    383 * Compatibility with WordPress 6.1
    384 * Fixes for PHP 8.1
    385 
    386 = 4.9.28 =
    387 * Fixed console warning
    388 
    389 = 4.9.27 =
    390 * Plugin delete fix
    391 
    392 = 4.9.26 =
    393 * Modified code flow for form save
    394 * Made Utilities class static
    395 * Improvements in logger flow
    396 
    397 = 4.9.25 =
    398 * Updated intel-tel library
    399 * Updated modenizr, Font Awesome, Time Picker libraries
    400 * Improved design of success and error messages
    401 * Added support for dynamic folder name for plugin
    402 
    403 = 4.9.24 =
    404 * Updated Bootstrap version
    405 * Sanitization fixes for global variables
    406 
    407 = 4.9.23 =
    408 * Removed role mapping for existing users
    409 
    410 = 4.9.22 =
    411 * Fixed a bug with post login redirection
    412 * Fixed RelayState URL
    413 
    414 = 4.9.21 =
    415 * Sanitization and Escaping fixes
    416 * Role Mapping fix
    417 
    418 = 4.9.20 =
    419 * Introduced Error Codes
    420 * Removed some obsolete functions
    421 
    422 = 4.9.19 =
    423 * Fixed UI compatibility with all themes
    424 
    425 = 4.9.18 =
    426 * Minor UI fixes
    427 
    428 = 4.9.17 =
    429 * Fixed Login button positioning
    430 
    431 = 4.9.16 =
    432 * Revamped plugin's UI
    433 * NameID Format fix for ADFS
    434 
    435 = 4.9.15 =
    436 * Compatibility with WordPress 5.9
    437 * Added Support for NameID Policy in SAML Request
    438 
    439 = 4.9.14 =
    440 * Removed end of year sale
    441 * Readme updates
    442 
    443 = 4.9.13 =
    444 * License Banner fixes
    445 
    446 = 4.9.12 =
    447 * Added discounted pricing for WordPress SSO plans
    448 
    449 = 4.9.11 =
    450 * Updated licensing plans for SAML SSO
    451 * Fixed bugs for Debug Framework
    452 * Other UI fixes
    453 
    454 = 4.9.10 =
    455 * Fixed an issue with broken plugin links
    456 
    457 = 4.9.09 =
    458 * Added Debug Logs Framework
    459 * Added new IDP's support for SSO
    460 * WordPress 5.8 Compatibility
    461 
    462 = 4.9.08 =
    463 * Demo request improvements
    464 
    465 = 4.9.07 =
    466 * Licensing Update for WordPress SSO plans
    467 
    468 = 4.9.06 =
    469 * UI changes and fixes
    470 * Readme changes
    471 
    472 = 4.9.05 =
    473 * UI improvements and fixes
    474 * WordPress 5.7 Compatibility
    475 
    476 = 4.9.04 =
    477 * Licensing Update for WordPress SSO plans
    478 
    479 = 4.9.03 =
    480 * Added video plugin guides for WordPress SSO
    481 
    482 = 4.9.02 =
    483 * Welcome page fixes
    484 
    485 = 4.9.01 =
    486 * Added support of Localization
    487 * WordPress 5.6 Loop back issue fix
    488 * PHP 8 Compatibility
    489 * Fixed SAML Login URL query parameters bug
    490 * Removed end of year sale
    491 
    492 = 4.9.00 =
    493 * Rolled out end of year sale
    494 
    495330For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/miniorange-saml-20-single-sign-on/trunk/changelog.txt) provided with the plugin.
    496331
    497332== Upgrade Notice ==
     333
     334= 5.1.8 =
     335* Handled Fatal Errors when PHP extensions (CURL, DOM, OPENSSL) are disabled
     336* Clarified error codes on the Test Configuration tab for easier troubleshooting
     337* Fixed console warnings during registration and login in the Account Setup Tab
     338* UI Improvements
    498339
    499340= 5.1.7 =
  • miniorange-saml-20-single-sign-on/trunk/views/mo-saml-account-setup.php

    r3123187 r3147410  
    9797                    <form name="f" method="post" action="">
    9898                        <input type="hidden" name="option" value="mo_saml_register_customer" />
    99                         <?php wp_nonce_field( 'mo_saml_register_customer' ); ?>
     99                        <?php wp_nonce_field( 'mo_saml_register_customer', 'mo_saml_register_customer_nonce' ); ?>
    100100
    101101                        <div class="mo-saml-bootstrap-row mo-saml-bootstrap-align-items-center mo-saml-bootstrap-justify-content-center mo-saml-bootstrap-mt-4 mo-saml-reg-field">
     
    112112                            </div>
    113113                            <div class="mo-saml-bootstrap-col-md-6 mo-saml-bootstrap-ps-0">
    114                                 <input class="mo-saml-bootstrap-w-100 mo-saml-reg-text-field" required type="password" name="password" placeholder="<?php esc_html_e( 'Password (Min. length 6)', 'miniorange-saml-20-single-sign-on' ); ?>" minlength="6" pattern="^[(\w)*(!@#$.%^&amp;*-_)*]+$" title="Minimum 6 characters should be present. Maximum 15 characters should be present. Only following symbols (!@#.$%^&amp;*) should be present.">
     114                                <input class="mo-saml-bootstrap-w-100 mo-saml-reg-text-field" required type="password" name="password" placeholder="<?php esc_html_e( 'Password (Min. length 6)', 'miniorange-saml-20-single-sign-on' ); ?>" minlength="6" title="Minimum 6 characters should be present. Maximum 15 characters should be present. Only following symbols (!@#.$%^&amp;*) should be present.">
    115115                            </div>
    116116                        </div>
     
    120120                            </div>
    121121                            <div class="mo-saml-bootstrap-col-md-6 mo-saml-bootstrap-ps-0">
    122                                 <input class="mo-saml-bootstrap-w-100 mo-saml-reg-text-field" required type="password" name="confirmPassword" placeholder="<?php esc_html_e( 'Confirm your password', 'miniorange-saml-20-single-sign-on' ); ?>" minlength="6" pattern="^[(\w)*(!@#$.%^&amp;*-_)*]+$">
     122                                <input class="mo-saml-bootstrap-w-100 mo-saml-reg-text-field" required type="password" name="confirmPassword" placeholder="<?php esc_html_e( 'Confirm your password', 'miniorange-saml-20-single-sign-on' ); ?>" minlength="6" >
    123123                            </div>
    124124                        </div>
     
    137137                            </div>
    138138                            <div class="mo-saml-bootstrap-col-md-7 mo-saml-bootstrap-ps-0">
    139                                 <input class="mo-saml-bootstrap-w-100 mo-saml-login-text-field" required type="password" name="password" disabled="true" placeholder="Password (Min. length 6)" minlength="6" pattern="^[(\w)*(!@#$.%^&amp;*-_)*]+$" title="Minimum 6 characters should be present. Maximum 15 characters should be present. Only following symbols (!@#.$%^&amp;*) should be present.">
     139                                <input class="mo-saml-bootstrap-w-100 mo-saml-login-text-field" required type="password" name="password" disabled="true" placeholder="Password (Min. length 6)" minlength="6" title="Minimum 6 characters should be present. Maximum 15 characters should be present. Only following symbols (!@#.$%^&amp;*) should be present.">
    140140                            </div>
    141141                        </div>
  • miniorange-saml-20-single-sign-on/trunk/views/mo-saml-addons.php

    r3123187 r3147410  
    3939        'paid_mem_pro'                => __( 'Map your users to different Paid MembershipPro membership levels as per the group information sent by your Identity Provider.', 'miniorange-saml-20-single-sign-on' ),
    4040        'profile_picture_add_on'      => __( 'Maps raw image data or URL received from your Identity Provider into Gravatar for the user.', 'miniorange-saml-20-single-sign-on' ),
     41        'salesforce_community_addon'  => __( 'It simplifies the process of configuring multiple communities by allowing you to configure login and logout URLs for each community in one place. This enables users from various Salesforce Communities to seamlessly single sign-on (SSO) into your WordPress site.', 'miniorange-saml-20-single-sign-on' ),
     42        'ip_whitelisting_addon'       => __( 'Allows the whitelisted users to bypass redirection to the IDP for authentication based on their IP address.', 'miniorange-saml-20-single-sign-on' ),
     43        'azure_multi_tenant_addon'    => __( 'It reduces the requirement of configuring multiple tenants separately. All the users from the configured tenants will be able to perform SSO login using only a single Azure AD application with a common endpoint.', 'miniorange-saml-20-single-sign-on' ),
    4144    );
    4245    ?>
  • miniorange-saml-20-single-sign-on/trunk/views/mo-saml-notice.php

    r3123187 r3147410  
    2121        <form action = "" method = "POST">
    2222            <button type = "submit" name = "mo_idp_close_notice" class="mo_notice_cross_btn" value = "mo_idp_close_notice">X</button>
    23             <?php wp_nonce_field( 'mo_idp_close_notice' ); ?>
     23            <?php wp_nonce_field( 'mo_idp_close_notice', 'mo_idp_close_notice_nonce' ); ?>
    2424        </form>
    2525        <h7 class="mo_text-secondary mo-saml-bootstrap-text-black"><?php esc_html_e( 'It seems you are using ', 'miniorange-saml-20-single-sign-on' ); ?><b>&nbsp;<span class = "mo-saml-bootstrap-text-black" id ="idp_ads_check_idp_name">  </span></b>&nbsp;<?php esc_html_e( 'as your IDP. Hence, you might be interested in our other ', 'miniorange-saml-20-single-sign-on' ); ?> <a href="https://plugins.miniorange.com/wordpress-azure-office365-integrations" target="_blank" rel="noopener noreferrer" style="text-decoration: none;"><?php esc_html_e( 'Microsoft Integrations', 'miniorange-saml-20-single-sign-on' ); ?></a>
  • miniorange-saml-20-single-sign-on/trunk/views/mo-saml-plugin-core.php

    r3123187 r3147410  
    103103    </div>
    104104    <form method="post" action="" id="mo_saml_welcome_form">
    105         <?php wp_nonce_field( 'mo_saml_welcome_form' ); ?>
     105        <?php wp_nonce_field( 'mo_saml_welcome_form', 'mo_saml_welcome_form_nonce' ); ?>
    106106        <input type="hidden" name="option" value="mo_saml_welcome_form">
    107107    </form>
     
    125125
    126126    $sandbox_url = 'https://sandbox.miniorange.com/?mo_plugin=mo_saml&referer=' . site_url();
     127    $version     = 'v' . Mo_Saml_Options_Plugin_Constants::VERSION;
    127128    ?>
    128129    <div class="wrap shadow-cstm mo-saml-bootstrap-p-3 mo-saml-bootstrap-me-0 mo-saml-bootstrap-mt-0 mo-saml-margin-left">
    129130        <div class="mo-saml-bootstrap-row align-items-top">
    130             <div class="mo-saml-bootstrap-col-md-4 mo-saml-bootstrap-h3 mo-saml-bootstrap-ps-4">
     131            <div class="mo-saml-bootstrap-col-md-5 mo-saml-bootstrap-h3 mo-saml-bootstrap-ps-4">
    131132                <?php esc_html_e( 'miniOrange SSO using SAML 2.0', 'miniorange-saml-20-single-sign-on' ); ?>
    132             </div>
    133             <div class="mo-saml-bootstrap-col-md-4 mo-saml-bootstrap-text-end mo-saml-bootstrap-d-flex mo-saml-bootstrap-align-items-center">
    134                 <a class="mo-saml-bootstrap-pb-3 mo-saml-bootstrap-pt-3 mo-saml-bootstrap-ps-4 mo-saml-bootstrap-pe-4 pop-up-btns" target="_blank" href="<?php echo esc_url( $sandbox_url ); ?>"><?php esc_html_e( 'Try Paid Features', 'miniorange-saml-20-single-sign-on' ); ?></a>
     133                <span class="mo_saml_version_display"> <?php echo '[ ' . esc_html( $version ) . ' ]'; ?> </span>
     134            </div>
     135            <div class="mo-saml-bootstrap-col-md-3 mo-saml-bootstrap-text-end mo-saml-bootstrap-d-flex mo-saml-bootstrap-align-items-center">
     136                <a class="mo-saml-bootstrap-text-white mo-saml-bootstrap-ps-4 mo-saml-bootstrap-pe-4 mo-saml-bootstrap-pt-2 mo-saml-bootstrap-pb-2 btn-prem prem-btn-cstm" target="_blank" href="<?php echo esc_url( $sandbox_url ); ?>"><?php esc_html_e( 'Try Paid Features', 'miniorange-saml-20-single-sign-on' ); ?></a>
    135137            </div>
    136138            <div class="mo-saml-bootstrap-col-md-4 mo-saml-bootstrap-text-end mo-saml-bootstrap-d-flex mo-saml-bootstrap-align-items-center mo-saml-bootstrap-justify-content-end">
Note: See TracChangeset for help on using the changeset viewer.