public function plugin_updated($version, $previous_version)
 {
     $settings_changes = false;
     if ($previous_version) {
         if (version_compare($previous_version, '2.2.9.1', '<')) {
             $this->onboarding->set_first_login_true();
         }
         if (version_compare($previous_version, '2.1', '<')) {
             if (!session_id()) {
                 @session_start();
             }
             if (isset($_SESSION['logged_in_at'])) {
                 $session = ClefSession::start();
                 $session->set('logged_in_at', $_SESSION['logged_in_at']);
             }
         }
         if (version_compare($previous_version, '2.0', '<')) {
             $this->onboarding->migrate_global_login_count();
             $this->badge->hide_prompt();
             if ($this->settings->get('clef_password_settings_disable_certain_passwords') == "Disabled") {
                 $this->settings->set('clef_password_settings_disable_certain_passwords', '');
             }
         }
         if (version_compare($previous_version, "1.9.1.1", '<')) {
             $this->badge->hide_prompt();
         }
         if (version_compare($previous_version, "1.9", '<')) {
             if (!$previous_version) {
                 $previous_version = $version;
             }
             $this->settings->get('installed_at', $previous_version);
         }
         if (version_compare($previous_version, "1.8.0", '<')) {
             $settings_changes = array("clef_password_settings_override_key" => "clef_override_settings_key");
         }
     } else {
         $this->settings->set('installed_at', $version);
         $this->settings->set('clef_form_settings_embed_clef', 1);
         $this->settings->set_saved_affiliates();
     }
     if ($settings_changes) {
         foreach ($settings_changes as $old_name => $new_name) {
             $value = $this->settings->get($old_name);
             if ($value) {
                 $this->settings->set($new_name, $value);
                 $this->settings->remove($old_name);
             }
         }
     }
     $this->settings->set("version", $version);
 }
 public function ajax_connect_clef_account_with_oauth_code()
 {
     if (!ClefUtils::isset_POST('identifier')) {
         return new WP_Error("invalid_oauth_code", __("invalid OAuth Code", "clef"));
     }
     try {
         $info = ClefUtils::exchange_oauth_code_for_info(ClefUtils::isset_POST('identifier'), $this->settings);
     } catch (LoginException $e) {
         return new WP_Error("bad_oauth_exchange", $e->getMessage());
     }
     $result = ClefUtils::associate_clef_id($info->id);
     if (is_wp_error($result)) {
         return $result;
     } else {
         $session = ClefSession::start();
         $session->set('logged_in_at', time());
         return array("success" => true);
     }
 }
 public function connect_clef_account()
 {
     if (ClefUtils::isset_GET('connect_clef_account') && ClefUtils::isset_get('code')) {
         try {
             $info = ClefUtils::exchange_oauth_code_for_info(ClefUtils::isset_GET('code'), $this->settings);
             $result = ClefUtils::associate_clef_id($info->id);
             if (is_wp_error($result)) {
                 $this->connect_error = $result;
             } else {
                 $session = ClefSession::start();
                 $session->set('logged_in_at', time());
                 return;
             }
         } catch (LoginException $e) {
             $this->connect_error = new WP_Error("bad_oauth_exchange", $e->getMessage());
         } catch (ClefStateException $e) {
             $this->connect_error = new WP_Error("bad_state_parameter", $e->getMessage());
         }
     }
 }
 public function logged_out_check($opts = array("redirect" => false))
 {
     $logged_out = false;
     // if the user is logged into WP but logged out with Clef, sign them out of Wordpress
     if (is_user_logged_in()) {
         $session = ClefSession::start();
         if ($session->get('logged_in_at') && $session->get('logged_in_at') < get_user_meta(wp_get_current_user()->ID, "logged_out_at", true)) {
             wp_logout();
             $logged_out = true;
         } else {
             $logged_out = false;
         }
     }
     if ($opts['redirect'] && $logged_out) {
         wp_redirect(wp_login_url());
         exit;
     } else {
         return $logged_out;
     }
 }
 public static function verify_state()
 {
     $state = ClefUtils::isset_GET('state') ? ClefUtils::isset_GET('state') : ClefUtils::isset_POST('state');
     $session = ClefSession::start();
     if ($session->get('state') && $state && $session->get('state') == $state) {
         $session->set('state', null);
         return true;
     } else {
         throw new ClefStateException('The state parameter is not verified. Please refresh your page and try again, you may be experiencing a CSRF attempt');
     }
 }
 public function ajax_connect_clef_account_with_clef_id()
 {
     if (!ClefUtils::isset_POST('identifier')) {
         return new WP_Error("invalid_clef_id", __("invalid Clef ID", "wpclef"));
     }
     $result = ClefUtils::associate_clef_id($_POST["identifier"]);
     if (is_wp_error($result)) {
         return $result;
     } else {
         $session = ClefSession::start();
         $session->set('logged_in_at', time());
         return array("success" => true);
     }
 }
    public function display_connect_clef_account_success()
    {
        $session = ClefSession::start();
        if ($session->get('clef_account_connected_on_login')) {
            $session->set('clef_account_connected_on_login', null);
            ?>
            <div class="updated clef-flash connect-clef-account-on-login-message">
                <img src="<?php 
            echo CLEF_URL . 'assets/dist/img/gradient_icon_32.png';
            ?>
" alt="Clef">
                <p><?php 
            _e('Success. <b>Your Clef account has been connected!</b>', 'clef');
            ?>
</p>
            </div>
            <?php 
        }
    }
 public static function start()
 {
     if (!isset(self::$instance) || self::$instance === null) {
         self::$instance = new self();
     }
     return self::$instance;
 }