PK +\ Persistent/Persistent.phpnu W+A storage === NULL) { if (is_user_logged_in()) { $this->storage = new Transient(); } else { $this->storage = new Session(); } } } public static function set($key, $value) { self::$instance->storage->set($key, $value); } public static function get($key) { return self::$instance->storage->get($key); } public static function delete($key) { self::$instance->storage->delete($key); } /** * @param $user_login * @param WP_User $user */ public function transferSessionToUser($user_login, $user = null) { if (!$user) { // For do_action( 'wp_login' ) calls that lacked passing the 2nd arg. $user = get_user_by('login', $user_login); } $newStorage = new Transient($user->ID); /** * $this->storage might be NULL if init action not called yet */ if ($this->storage !== NULL) { $newStorage->transferData($this->storage); } $this->storage = $newStorage; } public static function clear() { self::$instance->storage->clear(); } } new Persistent();PK +\R# # Persistent/Storage/Transient.phpnu W+A sessionId = 'nsl_persistent_' . $user_id; } }PK +\=+ s\ \ Persistent/Storage/Session.phpnu W+A sessionName = 'wordpress_nsl'; } if (defined('NSL_SESSION_NAME')) { $this->sessionName = NSL_SESSION_NAME; } $this->sessionName = apply_filters('nsl_session_name', $this->sessionName); } public function clear() { parent::clear(); $this->destroy(); } private function destroy() { $sessionID = $this->sessionId; if ($sessionID) { $this->setCookie($sessionID, time() - YEAR_IN_SECONDS, apply_filters('nsl_session_use_secure_cookie', false)); add_action('shutdown', array( $this, 'destroySiteTransient' )); } } public function destroySiteTransient() { $sessionID = $this->sessionId; if ($sessionID) { delete_site_transient('nsl_' . $sessionID); } } protected function load($createSession = false) { static $isLoaded = false; if ($this->sessionId === null) { if (isset($_COOKIE[$this->sessionName])) { $this->sessionId = 'nsl_persistent_' . md5(SECURE_AUTH_KEY . $_COOKIE[$this->sessionName]); } else if ($createSession) { $unique = uniqid('nsl', true); $this->setCookie($unique, apply_filters('nsl_session_cookie_expiration', 0), apply_filters('nsl_session_use_secure_cookie', false)); $this->sessionId = 'nsl_persistent_' . md5(SECURE_AUTH_KEY . $unique); $isLoaded = true; } } if (!$isLoaded) { if ($this->sessionId !== null) { $data = maybe_unserialize(get_site_transient($this->sessionId)); if (is_array($data)) { $this->data = $data; } $isLoaded = true; } } } private function setCookie($value, $expire, $secure = false) { setcookie($this->sessionName, $value, $expire, COOKIEPATH ? COOKIEPATH : '/', COOKIE_DOMAIN, $secure); } }PK +\Lt- Persistent/Storage/Abstract.phpnu W+A load(true); $this->data[$key] = $value; $this->store(); } public function get($key) { $this->load(); if (isset($this->data[$key])) { return $this->data[$key]; } return null; } public function delete($key) { $this->load(); if (isset($this->data[$key])) { unset($this->data[$key]); $this->store(); } } public function clear() { $this->data = array(); $this->store(); } protected function load($createSession = false) { static $isLoaded = false; if (!$isLoaded) { $data = maybe_unserialize(get_site_transient($this->sessionId)); if (is_array($data)) { $this->data = $data; } $isLoaded = true; } } private function store() { if (empty($this->data)) { delete_site_transient($this->sessionId); } else { set_site_transient($this->sessionId, $this->data, apply_filters('nsl_persistent_expiration', HOUR_IN_SECONDS)); } } /** * @param StorageAbstract $storage */ public function transferData($storage) { $this->data = $storage->data; $this->store(); $storage->clear(); } }PK +\6 REST.phpnu W+A \w[\w\s\-]*)/get_user', array( 'args' => array( 'provider' => array( 'required' => true, 'validate_callback' => array( $this, 'validate_provider' ) ), 'access_token' => array( 'required' => true, ), ), array( 'methods' => 'POST', 'callback' => array( $this, 'get_user' ) ), )); } public function validate_provider($providerID) { return NextendSocialLogin::isProviderEnabled($providerID); } /** * @param WP_REST_Request $request Full details about the request. * * @return WP_Error|WP_REST_Response */ public function get_user($request) { $provider = NextendSocialLogin::$enabledProviders[$request['provider']]; try { $user = $provider->findUserByAccessToken($request['access_token']); } catch (Exception $e) { return new WP_Error('error', $e->getMessage()); } return $user; } } new REST(); PK +\Π Notices.phpnu W+A get_error_messages() as $m) { self::add('error', $m); } } else { self::add('error', $message); } } public static function getErrors() { if (isset(self::$notices['error'])) { $errors = self::$notices['error']; unset(self::$notices['error']); self::set(); return $errors; } return false; } public static function addSuccess($message) { self::add('success', $message); } public static function displayNotices() { $html = self::getHTML(); if (!empty($html)) { echo '
' . $message . '
'; } } if (isset(self::$notices['error'])) { foreach (self::$notices['error'] AS $message) { $html .= '' . $message . '
' . sprintf(__('%1$s collects data when a visitor register, login or link the account with with any of the enabled social provider. It collects the following data: email address, name, social provider identifier and access token. Also it can collect profile picture and more fields with the Pro Addon\'s sync data feature.'), 'Nextend Social Login') . '
'; $content .= '' . sprintf(__('%1$s stores the personal data on your site and does not share it with anyone except the access token which used for the authenticated communication with the social providers.'), 'Nextend Social Login') . '
'; $content .= '' . sprintf(__('%1$s use the access token what the social provider gave to communicate with the providers to verify account and securely access personal data.'), 'Nextend Social Login') . '
'; $content .= '' . sprintf(__('%1$s removes the collected personal data when the user deleted from WordPress.'), 'Nextend Social Login') . '
'; $content .= '' . sprintf(__('%1$s use the personal data collected by the social providers to create account on your site when the visitor authorize it.'), 'Nextend Social Login') . '
'; $content .= '' . sprintf(__('Yes, %1$s must create a cookie for visitors who use the social login authorization flow. This cookie required for every provider to secure the communication and to redirect the user back to the last location.'), 'Nextend Social Login') . '
'; $content .= '' . __('No') . '
'; $content .= '' . __('No') . '
'; wp_add_privacy_policy_content('Nextend Social Login', wp_kses_post($content)); } public function register_exporter($exporters) { $exporters['nextend-facebook-connect'] = array( 'exporter_friendly_name' => 'Nextend Social Login', 'callback' => array( $this, 'exporter' ), ); return $exporters; } public function exporter($email_address, $page = 1) { $email_address = trim($email_address); $data_to_export = array(); $user = get_user_by('email', $email_address); if (!$user) { return array( 'data' => array(), 'done' => true, ); } $user_data_to_export = array(); foreach (NextendSocialLogin::$allowedProviders AS $provider) { $user_data_to_export = array_merge($user_data_to_export, $provider->exportPersonalData($user->ID)); } if (!empty($user_data_to_export)) { $data_to_export[] = array( 'group_id' => 'user', 'group_label' => __('User'), 'item_id' => "user-{$user->ID}", 'data' => $user_data_to_export, ); } return array( 'data' => $data_to_export, 'done' => true, ); } public function register_eraser($erasers) { $erasers['nextend-facebook-connect'] = array( 'exporter_friendly_name' => 'Nextend Social Login', 'callback' => array( $this, 'eraser' ), ); return $erasers; } public function eraser($email_address, $page = 1) { return array( 'items_removed' => false, 'items_retained' => false, 'messages' => array(), 'done' => true, ); } } new GDPR();PK +\ Persistent/Persistent.phpnu W+A PK +\R# # Persistent/Storage/Transient.phpnu W+A PK +\=+ s\ \ Persistent/Storage/Session.phpnu W+A PK +\Lt- 0 Persistent/Storage/Abstract.phpnu W+A PK +\6 r REST.phpnu W+A PK +\Π W! Notices.phpnu W+A PK +\u u6 GDPR.phpnu W+A PK Q eK