Changeset 3437645
- Timestamp:
- 01/12/2026 11:26:34 AM (3 months ago)
- Location:
- login-me-now
- Files:
-
- 2 added
- 42 edited
- 1 copied
-
tags/1.14 (copied) (copied from login-me-now/trunk)
-
tags/1.14/app/Admin/Notices/BlackFridayNotice.php (modified) (2 diffs)
-
tags/1.14/app/Logins/GoogleLogin/Controller.php (modified) (4 diffs)
-
tags/1.14/config.php (modified) (1 diff)
-
tags/1.14/login-me-now.php (modified) (1 diff)
-
tags/1.14/readme.txt (modified) (2 diffs)
-
tags/1.14/vendor/composer/installed.json (modified) (7 diffs)
-
tags/1.14/vendor/composer/installed.php (modified) (4 diffs)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/ErrorHandler.php (modified) (2 diffs)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php (modified) (3 diffs)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php (modified) (2 diffs)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php (modified) (3 diffs)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php (modified) (1 diff)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php (modified) (1 diff)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php (modified) (1 diff)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php (modified) (1 diff)
-
tags/1.14/vendor/monolog/monolog/src/Monolog/SignalHandler.php (modified) (1 diff)
-
tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php (modified) (1 diff)
-
tags/1.14/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php (modified) (1 diff)
-
tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php (modified) (1 diff)
-
tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php (added)
-
tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php (modified) (1 diff)
-
tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php (modified) (7 diffs)
-
trunk/app/Admin/Notices/BlackFridayNotice.php (modified) (2 diffs)
-
trunk/app/Logins/GoogleLogin/Controller.php (modified) (4 diffs)
-
trunk/config.php (modified) (1 diff)
-
trunk/login-me-now.php (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/vendor/composer/installed.json (modified) (7 diffs)
-
trunk/vendor/composer/installed.php (modified) (4 diffs)
-
trunk/vendor/monolog/monolog/src/Monolog/ErrorHandler.php (modified) (2 diffs)
-
trunk/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php (modified) (3 diffs)
-
trunk/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php (modified) (2 diffs)
-
trunk/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php (modified) (3 diffs)
-
trunk/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php (modified) (1 diff)
-
trunk/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php (modified) (1 diff)
-
trunk/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php (modified) (1 diff)
-
trunk/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php (modified) (1 diff)
-
trunk/vendor/monolog/monolog/src/Monolog/SignalHandler.php (modified) (1 diff)
-
trunk/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php (modified) (1 diff)
-
trunk/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php (modified) (1 diff)
-
trunk/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php (modified) (1 diff)
-
trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php (added)
-
trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php (modified) (1 diff)
-
trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
login-me-now/tags/1.14/app/Admin/Notices/BlackFridayNotice.php
r3396479 r3437645 4 4 5 5 class BlackFridayNotice { 6 private const USER_META_KEY = 'login_me_now_ bfcm_2025_notice_dismissed';6 private const USER_META_KEY = 'login_me_now_new_year_2025_notice_dismissed'; 7 7 8 8 public function __construct() { … … 61 61 ); 62 62 63 $cta_url = 'https://loginmenow.com/pricing/?utm_source=plugin&utm_medium=dashboard&utm_campaign= bfcm2025';64 $headline = __( ' 🔥 Black Friday Lifetime Deal – Ends Soon!', 'login-me-now' );65 $body = __( ' GetLogin Me Now Pro for Life – no renewals, all features, one-time price. Social Login, Magic Links, OTP Login, User Switching & more.', 'login-me-now' );63 $cta_url = 'https://loginmenow.com/pricing/?utm_source=plugin&utm_medium=dashboard&utm_campaign=newyear2025'; 64 $headline = __( '✨ New Year Lifetime Deal – Starts Now!', 'login-me-now' ); 65 $body = __( 'Kick off the New Year with Login Me Now Pro for Life – no renewals, all features, one-time price. Social Login, Magic Links, OTP Login, User Switching & more.', 'login-me-now' ); 66 66 $button = __( '🎁 Claim 50% OFF LTD Now', 'login-me-now' ); 67 $deadline = __( '🎁 Offer ends Cyber Monday (Dec 2)', 'login-me-now' );67 $deadline = __( '🎁 Limited-time New Year offer', 'login-me-now' ); 68 68 69 69 printf( -
login-me-now/tags/1.14/app/Logins/GoogleLogin/Controller.php
r3147204 r3437645 8 8 namespace LoginMeNow\Logins\GoogleLogin; 9 9 10 use Firebase\JWT\JWT; 10 11 use Google_Client; 11 12 use LoginMeNow\Common\Singleton; … … 15 16 class Controller { 16 17 use Singleton; 18 19 private const JWT_LEEWAY = 60; 17 20 18 21 public function listen(): void { … … 52 55 } 53 56 54 $data = $client->verifyIdToken( $id_token ); 57 JWT::$leeway = self::JWT_LEEWAY; 58 $data = $client->verifyIdToken( $id_token ); 55 59 if ( ! $data || is_wp_error( $data ) ) { 56 60 error_log( 'Login Me Now ( ! $data || is_wp_error( $data ) )- ' . print_r( $data, true ) ); … … 106 110 $client_id = SettingsRepository::init()->get( 'google_client_id' ); 107 111 $client = new Google_Client( ['client_id' => esc_html( $client_id )] ); 108 $data = $client->verifyIdToken( $id_token ); 112 JWT::$leeway = self::JWT_LEEWAY; 113 $data = $client->verifyIdToken( $id_token ); 109 114 110 115 if ( ! $data || is_wp_error( $data ) ) { -
login-me-now/tags/1.14/config.php
r3417862 r3437645 2 2 3 3 return [ 4 'version' => '1.1 3',4 'version' => '1.14', 5 5 'min_php' => '7.4', 6 6 'db_version' => '1.0.0', -
login-me-now/tags/1.14/login-me-now.php
r3417862 r3437645 5 5 * Author: LoginMeNow.com 6 6 * Author URI: https://loginmenow.com/ 7 * Version: 1.1 37 * Version: 1.14 8 8 * Tested up to: 6.9 9 9 * Requires PHP: 7.4 -
login-me-now/tags/1.14/readme.txt
r3417862 r3437645 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 1.1 37 Stable tag: 1.14 8 8 License: GPLv3 or any later version 9 9 … … 161 161 == Changelog == 162 162 163 = 1.14 – Jan 12, 2026 = 164 * Add: JWT leeway for Google Login 165 * Fix: Redirect URL Issue 166 163 167 = 1.13 – Dec 12, 2025 = 164 168 * Add WodPress Latest compatibility -
login-me-now/tags/1.14/vendor/composer/installed.json
r3417862 r3437645 640 640 { 641 641 "name": "monolog/monolog", 642 "version": "2.1 0.0",643 "version_normalized": "2.1 0.0.0",642 "version": "2.11.0", 643 "version_normalized": "2.11.0.0", 644 644 "source": { 645 645 "type": "git", 646 646 "url": "https://github.com/Seldaek/monolog.git", 647 "reference": " 5cf826f2991858b54d5c3809bee745560a1042a7"648 }, 649 "dist": { 650 "type": "zip", 651 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/ 5cf826f2991858b54d5c3809bee745560a1042a7",652 "reference": " 5cf826f2991858b54d5c3809bee745560a1042a7",647 "reference": "37308608e599f34a1a4845b16440047ec98a172a" 648 }, 649 "dist": { 650 "type": "zip", 651 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/37308608e599f34a1a4845b16440047ec98a172a", 652 "reference": "37308608e599f34a1a4845b16440047ec98a172a", 653 653 "shasum": "" 654 654 }, … … 668 668 "guzzlehttp/guzzle": "^7.4", 669 669 "guzzlehttp/psr7": "^2.2", 670 "mongodb/mongodb": "^1.8 ",670 "mongodb/mongodb": "^1.8 || ^2.0", 671 671 "php-amqplib/php-amqplib": "~2.4 || ^3", 672 672 "phpspec/prophecy": "^1.15", … … 696 696 "ruflin/elastica": "Allow sending log messages to an Elastic Search server" 697 697 }, 698 "time": "202 4-11-12T12:43:37+00:00",698 "time": "2026-01-01T13:05:00+00:00", 699 699 "type": "library", 700 700 "extra": { … … 729 729 "support": { 730 730 "issues": "https://github.com/Seldaek/monolog/issues", 731 "source": "https://github.com/Seldaek/monolog/tree/2.1 0.0"731 "source": "https://github.com/Seldaek/monolog/tree/2.11.0" 732 732 }, 733 733 "funding": [ … … 868 868 { 869 869 "name": "phpseclib/phpseclib", 870 "version": "3.0.4 7",871 "version_normalized": "3.0.4 7.0",870 "version": "3.0.48", 871 "version_normalized": "3.0.48.0", 872 872 "source": { 873 873 "type": "git", 874 874 "url": "https://github.com/phpseclib/phpseclib.git", 875 "reference": " 9d6ca36a6c2dd434765b1071b2644a1c683b385d"876 }, 877 "dist": { 878 "type": "zip", 879 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/ 9d6ca36a6c2dd434765b1071b2644a1c683b385d",880 "reference": " 9d6ca36a6c2dd434765b1071b2644a1c683b385d",875 "reference": "64065a5679c50acb886e82c07aa139b0f757bb89" 876 }, 877 "dist": { 878 "type": "zip", 879 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89", 880 "reference": "64065a5679c50acb886e82c07aa139b0f757bb89", 881 881 "shasum": "" 882 882 }, … … 896 896 "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." 897 897 }, 898 "time": "2025-1 0-06T01:07:24+00:00",898 "time": "2025-12-15T11:51:42+00:00", 899 899 "type": "library", 900 900 "installation-source": "dist", … … 961 961 "support": { 962 962 "issues": "https://github.com/phpseclib/phpseclib/issues", 963 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.4 7"963 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.48" 964 964 }, 965 965 "funding": [ -
login-me-now/tags/1.14/vendor/composer/installed.php
r3417862 r3437645 2 2 'root' => array( 3 3 'name' => 'pluginly/login-me-now', 4 'pretty_version' => 'v1.1 3',5 'version' => '1.1 3.0.0',6 'reference' => ' 8632c40c4b3aa9317e95d606946e726898ea2e02',4 'pretty_version' => 'v1.14', 5 'version' => '1.14.0.0', 6 'reference' => '2237cca85fee4a665d02b21d045a24df8758e819', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 84 84 ), 85 85 'monolog/monolog' => array( 86 'pretty_version' => '2.1 0.0',87 'version' => '2.1 0.0.0',88 'reference' => ' 5cf826f2991858b54d5c3809bee745560a1042a7',86 'pretty_version' => '2.11.0', 87 'version' => '2.11.0.0', 88 'reference' => '37308608e599f34a1a4845b16440047ec98a172a', 89 89 'type' => 'library', 90 90 'install_path' => __DIR__ . '/../monolog/monolog', … … 111 111 ), 112 112 'phpseclib/phpseclib' => array( 113 'pretty_version' => '3.0.4 7',114 'version' => '3.0.4 7.0',115 'reference' => ' 9d6ca36a6c2dd434765b1071b2644a1c683b385d',113 'pretty_version' => '3.0.48', 114 'version' => '3.0.48.0', 115 'reference' => '64065a5679c50acb886e82c07aa139b0f757bb89', 116 116 'type' => 'library', 117 117 'install_path' => __DIR__ . '/../phpseclib/phpseclib', … … 120 120 ), 121 121 'pluginly/login-me-now' => array( 122 'pretty_version' => 'v1.1 3',123 'version' => '1.1 3.0.0',124 'reference' => ' 8632c40c4b3aa9317e95d606946e726898ea2e02',122 'pretty_version' => 'v1.14', 123 'version' => '1.14.0.0', 124 'reference' => '2237cca85fee4a665d02b21d045a24df8758e819', 125 125 'type' => 'library', 126 126 'install_path' => __DIR__ . '/../../', -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/ErrorHandler.php
r3045854 r3437645 169 169 E_USER_WARNING => LogLevel::WARNING, 170 170 E_USER_NOTICE => LogLevel::NOTICE, 171 E_STRICT => LogLevel::NOTICE,171 2048 => LogLevel::NOTICE, // E_STRICT 172 172 E_RECOVERABLE_ERROR => LogLevel::ERROR, 173 173 E_DEPRECATED => LogLevel::NOTICE, … … 293 293 case E_USER_NOTICE: 294 294 return 'E_USER_NOTICE'; 295 case E_STRICT:295 case 2048: 296 296 return 'E_STRICT'; 297 297 case E_RECOVERABLE_ERROR: -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php
r2911753 r3437645 27 27 /** @var int */ 28 28 private $maxNestingLevel; 29 /** @var bool */30 private $isLegacyMongoExt;31 29 32 30 /** … … 38 36 $this->maxNestingLevel = max($maxNestingLevel, 0); 39 37 $this->exceptionTraceAsString = $exceptionTraceAsString; 40 41 $this->isLegacyMongoExt = extension_loaded('mongodb') && version_compare((string) phpversion('mongodb'), '1.1.9', '<=');42 38 } 43 39 … … 130 126 protected function formatDate(\DateTimeInterface $value, int $nestingLevel): UTCDateTime 131 127 { 132 if ($this->isLegacyMongoExt) {133 return $this->legacyGetMongoDbDateTime($value);134 }135 136 return $this->getMongoDbDateTime($value);137 }138 139 private function getMongoDbDateTime(\DateTimeInterface $value): UTCDateTime140 {141 128 return new UTCDateTime((int) floor(((float) $value->format('U.u')) * 1000)); 142 129 } 143 144 /**145 * This is needed to support MongoDB Driver v1.19 and below146 *147 * See https://github.com/mongodb/mongo-php-driver/issues/426148 *149 * It can probably be removed in 2.1 or later once MongoDB's 1.2 is released and widely adopted150 */151 private function legacyGetMongoDbDateTime(\DateTimeInterface $value): UTCDateTime152 {153 $milliseconds = floor(((float) $value->format('U.u')) * 1000);154 155 $milliseconds = (PHP_INT_SIZE == 8) //64-bit OS?156 ? (int) $milliseconds157 : (string) $milliseconds;158 159 // @phpstan-ignore-next-line160 return new UTCDateTime($milliseconds);161 }162 130 } -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php
r2911753 r3437645 50 50 $curlError = curl_error($ch); 51 51 52 if ( $closeAfterDone) {52 if (\PHP_VERSION_ID < 80000 && $closeAfterDone) { 53 53 curl_close($ch); 54 54 } … … 60 60 } 61 61 62 if ( $closeAfterDone) {62 if (\PHP_VERSION_ID < 80000 && $closeAfterDone) { 63 63 curl_close($ch); 64 64 } -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php
r2911753 r3437645 12 12 namespace Monolog\Handler; 13 13 14 use MongoDB\Client; 15 use MongoDB\Collection; 14 16 use MongoDB\Driver\BulkWrite; 15 17 use MongoDB\Driver\Manager; 16 use MongoDB\Client;17 use Monolog\Logger;18 18 use Monolog\Formatter\FormatterInterface; 19 19 use Monolog\Formatter\MongoDBFormatter; 20 use Monolog\Logger; 20 21 21 22 /** … … 34 35 class MongoDBHandler extends AbstractProcessingHandler 35 36 { 36 /** @var \MongoDB\Collection */37 /** @var Collection */ 37 38 private $collection; 38 39 /** @var Client|Manager */ 39 40 private $manager; 40 /** @var string */41 private $namespace ;41 /** @var string|null */ 42 private $namespace = null; 42 43 43 44 /** … … 55 56 56 57 if ($mongodb instanceof Client) { 57 $this->collection = $mongodb->selectCollection($database, $collection);58 $this->collection = method_exists($mongodb, 'getCollection') ? $mongodb->getCollection($database, $collection) : $mongodb->selectCollection($database, $collection); 58 59 } else { 59 60 $this->manager = $mongodb; -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
r3199190 r3437645 168 168 // are cleaning up/rotating at the same time 169 169 set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool { 170 return false;170 return true; 171 171 }); 172 172 unlink($file); -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php
r3110130 r3437645 234 234 protected function sendCurl(string $message): void 235 235 { 236 if ('' === trim($message)) { 237 return; 238 } 239 236 240 $ch = curl_init(); 237 241 $url = self::BOT_API . $this->apiKey . '/SendMessage'; -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php
r2911753 r3437645 65 65 } 66 66 67 $branches = `git branch -v --no-abbrev`;67 $branches = shell_exec('git branch -v --no-abbrev'); 68 68 if ($branches && preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { 69 69 return self::$cache = [ -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php
r2911753 r3437645 64 64 } 65 65 66 $result = explode(' ', trim( `hg id -nb`));66 $result = explode(' ', trim((string) shell_exec('hg id -nb'))); 67 67 68 68 if (count($result) >= 3) { -
login-me-now/tags/1.14/vendor/monolog/monolog/src/Monolog/SignalHandler.php
r2911753 r3437645 81 81 public function handleSignal(int $signo, $siginfo = null): void 82 82 { 83 /** @var array<int, string> $signals */ 83 84 static $signals = []; 84 85 -
login-me-now/tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php
r3147204 r3437645 142 142 $result['MGFHash'] = str_replace('id-', '', $params['maskGenAlgorithm']['parameters']['algorithm']); 143 143 if (isset($params['saltLength'])) { 144 $result['saltLength'] = (int) $params['saltLength']->toString();144 $result['saltLength'] = (int) "$params[saltLength]"; 145 145 } 146 146 -
login-me-now/tags/1.14/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php
r3384718 r3437645 790 790 $temp = $decoded['content']; 791 791 if (isset($mapping['implicit'])) { 792 $temp = new BigInteger($decoded['content'], -256); 792 $temp = new BigInteger($temp, -256); 793 } 794 if (!$temp instanceof BigInteger) { 795 return false; 793 796 } 794 797 if (isset($mapping['mapping'])) { -
login-me-now/tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php
r3384718 r3437645 155 155 while (bccomp($current, '0', 0) > 0) { 156 156 $temp = self::BCMOD_THREE_PARAMS ? bcmod($current, '16777216', 0) : bcmod($current, '16777216'); 157 $value = chr($temp >> 16) . chr( $temp >> 8) . chr($temp) . $value;157 $value = chr($temp >> 16) . chr(($temp >> 8) & 0xFF) . chr($temp & 0xFF) . $value; 158 158 $current = bcdiv($current, '16777216', 0); 159 159 } -
login-me-now/tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
r3384718 r3437645 3463 3463 } 3464 3464 } 3465 3466 3465 /** 3467 3466 * Returns all errors on the SFTP layer -
login-me-now/tags/1.14/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
r3384718 r3437645 680 680 * @var array 681 681 */ 682 pr ivate$packet_size_client_to_server = [];682 protected $packet_size_client_to_server = []; 683 683 684 684 /** … … 2942 2942 return true; 2943 2943 } 2944 if ($callback === false) { 2945 return true; 2946 } 2944 2947 2945 2948 $output = ''; … … 3998 4001 case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4 3999 4002 Strings::shift($payload, 1); 4000 list($request_name ) = Strings::unpackSSH2('s', $payload);4003 list($request_name, $want_reply) = Strings::unpackSSH2('sb', $payload); 4001 4004 $this->errors[] = "SSH_MSG_GLOBAL_REQUEST: $request_name"; 4002 $this->send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE)); 4005 if ($want_reply) { 4006 $this->send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE)); 4007 } 4003 4008 $payload = $this->get_binary_packet(); 4004 4009 break; … … 4237 4242 $this->errors[count($this->errors) - 1] .= "\r\n$error_message"; 4238 4243 } 4239 4240 4244 if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) { 4241 4245 if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) { … … 4246 4250 $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE; 4247 4251 } 4248 4249 4252 continue 3; 4250 4253 case 'exit-status': … … 4256 4259 continue 3; 4257 4260 default: 4258 // "Some systems may not implement signals, in which case they SHOULD ignore this message." 4259 // -- http://tools.ietf.org/html/rfc4254#section-6.9 4261 list($want_reply) = Strings::unpackSSH2('b', $response); 4262 if ($want_reply) { 4263 // "If the request is not recognized or is not supported for the channel, 4264 // SSH_MSG_CHANNEL_FAILURE is returned." 4265 // -- https://datatracker.ietf.org/doc/html/rfc4254#page-10 4266 $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_FAILURE, $this->server_channels[$channel])); 4267 } 4260 4268 continue 3; 4261 4269 } … … 4715 4723 * @return void 4716 4724 */ 4717 pr ivatefunction close_channel($client_channel)4725 protected function close_channel($client_channel) 4718 4726 { 4719 4727 // see http://tools.ietf.org/html/rfc4254#section-5.3 -
login-me-now/trunk/app/Admin/Notices/BlackFridayNotice.php
r3396479 r3437645 4 4 5 5 class BlackFridayNotice { 6 private const USER_META_KEY = 'login_me_now_ bfcm_2025_notice_dismissed';6 private const USER_META_KEY = 'login_me_now_new_year_2025_notice_dismissed'; 7 7 8 8 public function __construct() { … … 61 61 ); 62 62 63 $cta_url = 'https://loginmenow.com/pricing/?utm_source=plugin&utm_medium=dashboard&utm_campaign= bfcm2025';64 $headline = __( ' 🔥 Black Friday Lifetime Deal – Ends Soon!', 'login-me-now' );65 $body = __( ' GetLogin Me Now Pro for Life – no renewals, all features, one-time price. Social Login, Magic Links, OTP Login, User Switching & more.', 'login-me-now' );63 $cta_url = 'https://loginmenow.com/pricing/?utm_source=plugin&utm_medium=dashboard&utm_campaign=newyear2025'; 64 $headline = __( '✨ New Year Lifetime Deal – Starts Now!', 'login-me-now' ); 65 $body = __( 'Kick off the New Year with Login Me Now Pro for Life – no renewals, all features, one-time price. Social Login, Magic Links, OTP Login, User Switching & more.', 'login-me-now' ); 66 66 $button = __( '🎁 Claim 50% OFF LTD Now', 'login-me-now' ); 67 $deadline = __( '🎁 Offer ends Cyber Monday (Dec 2)', 'login-me-now' );67 $deadline = __( '🎁 Limited-time New Year offer', 'login-me-now' ); 68 68 69 69 printf( -
login-me-now/trunk/app/Logins/GoogleLogin/Controller.php
r3147204 r3437645 8 8 namespace LoginMeNow\Logins\GoogleLogin; 9 9 10 use Firebase\JWT\JWT; 10 11 use Google_Client; 11 12 use LoginMeNow\Common\Singleton; … … 15 16 class Controller { 16 17 use Singleton; 18 19 private const JWT_LEEWAY = 60; 17 20 18 21 public function listen(): void { … … 52 55 } 53 56 54 $data = $client->verifyIdToken( $id_token ); 57 JWT::$leeway = self::JWT_LEEWAY; 58 $data = $client->verifyIdToken( $id_token ); 55 59 if ( ! $data || is_wp_error( $data ) ) { 56 60 error_log( 'Login Me Now ( ! $data || is_wp_error( $data ) )- ' . print_r( $data, true ) ); … … 106 110 $client_id = SettingsRepository::init()->get( 'google_client_id' ); 107 111 $client = new Google_Client( ['client_id' => esc_html( $client_id )] ); 108 $data = $client->verifyIdToken( $id_token ); 112 JWT::$leeway = self::JWT_LEEWAY; 113 $data = $client->verifyIdToken( $id_token ); 109 114 110 115 if ( ! $data || is_wp_error( $data ) ) { -
login-me-now/trunk/config.php
r3417862 r3437645 2 2 3 3 return [ 4 'version' => '1.1 3',4 'version' => '1.14', 5 5 'min_php' => '7.4', 6 6 'db_version' => '1.0.0', -
login-me-now/trunk/login-me-now.php
r3417862 r3437645 5 5 * Author: LoginMeNow.com 6 6 * Author URI: https://loginmenow.com/ 7 * Version: 1.1 37 * Version: 1.14 8 8 * Tested up to: 6.9 9 9 * Requires PHP: 7.4 -
login-me-now/trunk/readme.txt
r3417862 r3437645 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 1.1 37 Stable tag: 1.14 8 8 License: GPLv3 or any later version 9 9 … … 161 161 == Changelog == 162 162 163 = 1.14 – Jan 12, 2026 = 164 * Add: JWT leeway for Google Login 165 * Fix: Redirect URL Issue 166 163 167 = 1.13 – Dec 12, 2025 = 164 168 * Add WodPress Latest compatibility -
login-me-now/trunk/vendor/composer/installed.json
r3417862 r3437645 640 640 { 641 641 "name": "monolog/monolog", 642 "version": "2.1 0.0",643 "version_normalized": "2.1 0.0.0",642 "version": "2.11.0", 643 "version_normalized": "2.11.0.0", 644 644 "source": { 645 645 "type": "git", 646 646 "url": "https://github.com/Seldaek/monolog.git", 647 "reference": " 5cf826f2991858b54d5c3809bee745560a1042a7"648 }, 649 "dist": { 650 "type": "zip", 651 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/ 5cf826f2991858b54d5c3809bee745560a1042a7",652 "reference": " 5cf826f2991858b54d5c3809bee745560a1042a7",647 "reference": "37308608e599f34a1a4845b16440047ec98a172a" 648 }, 649 "dist": { 650 "type": "zip", 651 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/37308608e599f34a1a4845b16440047ec98a172a", 652 "reference": "37308608e599f34a1a4845b16440047ec98a172a", 653 653 "shasum": "" 654 654 }, … … 668 668 "guzzlehttp/guzzle": "^7.4", 669 669 "guzzlehttp/psr7": "^2.2", 670 "mongodb/mongodb": "^1.8 ",670 "mongodb/mongodb": "^1.8 || ^2.0", 671 671 "php-amqplib/php-amqplib": "~2.4 || ^3", 672 672 "phpspec/prophecy": "^1.15", … … 696 696 "ruflin/elastica": "Allow sending log messages to an Elastic Search server" 697 697 }, 698 "time": "202 4-11-12T12:43:37+00:00",698 "time": "2026-01-01T13:05:00+00:00", 699 699 "type": "library", 700 700 "extra": { … … 729 729 "support": { 730 730 "issues": "https://github.com/Seldaek/monolog/issues", 731 "source": "https://github.com/Seldaek/monolog/tree/2.1 0.0"731 "source": "https://github.com/Seldaek/monolog/tree/2.11.0" 732 732 }, 733 733 "funding": [ … … 868 868 { 869 869 "name": "phpseclib/phpseclib", 870 "version": "3.0.4 7",871 "version_normalized": "3.0.4 7.0",870 "version": "3.0.48", 871 "version_normalized": "3.0.48.0", 872 872 "source": { 873 873 "type": "git", 874 874 "url": "https://github.com/phpseclib/phpseclib.git", 875 "reference": " 9d6ca36a6c2dd434765b1071b2644a1c683b385d"876 }, 877 "dist": { 878 "type": "zip", 879 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/ 9d6ca36a6c2dd434765b1071b2644a1c683b385d",880 "reference": " 9d6ca36a6c2dd434765b1071b2644a1c683b385d",875 "reference": "64065a5679c50acb886e82c07aa139b0f757bb89" 876 }, 877 "dist": { 878 "type": "zip", 879 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89", 880 "reference": "64065a5679c50acb886e82c07aa139b0f757bb89", 881 881 "shasum": "" 882 882 }, … … 896 896 "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." 897 897 }, 898 "time": "2025-1 0-06T01:07:24+00:00",898 "time": "2025-12-15T11:51:42+00:00", 899 899 "type": "library", 900 900 "installation-source": "dist", … … 961 961 "support": { 962 962 "issues": "https://github.com/phpseclib/phpseclib/issues", 963 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.4 7"963 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.48" 964 964 }, 965 965 "funding": [ -
login-me-now/trunk/vendor/composer/installed.php
r3417862 r3437645 2 2 'root' => array( 3 3 'name' => 'pluginly/login-me-now', 4 'pretty_version' => 'v1.1 3',5 'version' => '1.1 3.0.0',6 'reference' => ' 8632c40c4b3aa9317e95d606946e726898ea2e02',4 'pretty_version' => 'v1.14', 5 'version' => '1.14.0.0', 6 'reference' => '2237cca85fee4a665d02b21d045a24df8758e819', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 84 84 ), 85 85 'monolog/monolog' => array( 86 'pretty_version' => '2.1 0.0',87 'version' => '2.1 0.0.0',88 'reference' => ' 5cf826f2991858b54d5c3809bee745560a1042a7',86 'pretty_version' => '2.11.0', 87 'version' => '2.11.0.0', 88 'reference' => '37308608e599f34a1a4845b16440047ec98a172a', 89 89 'type' => 'library', 90 90 'install_path' => __DIR__ . '/../monolog/monolog', … … 111 111 ), 112 112 'phpseclib/phpseclib' => array( 113 'pretty_version' => '3.0.4 7',114 'version' => '3.0.4 7.0',115 'reference' => ' 9d6ca36a6c2dd434765b1071b2644a1c683b385d',113 'pretty_version' => '3.0.48', 114 'version' => '3.0.48.0', 115 'reference' => '64065a5679c50acb886e82c07aa139b0f757bb89', 116 116 'type' => 'library', 117 117 'install_path' => __DIR__ . '/../phpseclib/phpseclib', … … 120 120 ), 121 121 'pluginly/login-me-now' => array( 122 'pretty_version' => 'v1.1 3',123 'version' => '1.1 3.0.0',124 'reference' => ' 8632c40c4b3aa9317e95d606946e726898ea2e02',122 'pretty_version' => 'v1.14', 123 'version' => '1.14.0.0', 124 'reference' => '2237cca85fee4a665d02b21d045a24df8758e819', 125 125 'type' => 'library', 126 126 'install_path' => __DIR__ . '/../../', -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/ErrorHandler.php
r3045854 r3437645 169 169 E_USER_WARNING => LogLevel::WARNING, 170 170 E_USER_NOTICE => LogLevel::NOTICE, 171 E_STRICT => LogLevel::NOTICE,171 2048 => LogLevel::NOTICE, // E_STRICT 172 172 E_RECOVERABLE_ERROR => LogLevel::ERROR, 173 173 E_DEPRECATED => LogLevel::NOTICE, … … 293 293 case E_USER_NOTICE: 294 294 return 'E_USER_NOTICE'; 295 case E_STRICT:295 case 2048: 296 296 return 'E_STRICT'; 297 297 case E_RECOVERABLE_ERROR: -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php
r2911753 r3437645 27 27 /** @var int */ 28 28 private $maxNestingLevel; 29 /** @var bool */30 private $isLegacyMongoExt;31 29 32 30 /** … … 38 36 $this->maxNestingLevel = max($maxNestingLevel, 0); 39 37 $this->exceptionTraceAsString = $exceptionTraceAsString; 40 41 $this->isLegacyMongoExt = extension_loaded('mongodb') && version_compare((string) phpversion('mongodb'), '1.1.9', '<=');42 38 } 43 39 … … 130 126 protected function formatDate(\DateTimeInterface $value, int $nestingLevel): UTCDateTime 131 127 { 132 if ($this->isLegacyMongoExt) {133 return $this->legacyGetMongoDbDateTime($value);134 }135 136 return $this->getMongoDbDateTime($value);137 }138 139 private function getMongoDbDateTime(\DateTimeInterface $value): UTCDateTime140 {141 128 return new UTCDateTime((int) floor(((float) $value->format('U.u')) * 1000)); 142 129 } 143 144 /**145 * This is needed to support MongoDB Driver v1.19 and below146 *147 * See https://github.com/mongodb/mongo-php-driver/issues/426148 *149 * It can probably be removed in 2.1 or later once MongoDB's 1.2 is released and widely adopted150 */151 private function legacyGetMongoDbDateTime(\DateTimeInterface $value): UTCDateTime152 {153 $milliseconds = floor(((float) $value->format('U.u')) * 1000);154 155 $milliseconds = (PHP_INT_SIZE == 8) //64-bit OS?156 ? (int) $milliseconds157 : (string) $milliseconds;158 159 // @phpstan-ignore-next-line160 return new UTCDateTime($milliseconds);161 }162 130 } -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php
r2911753 r3437645 50 50 $curlError = curl_error($ch); 51 51 52 if ( $closeAfterDone) {52 if (\PHP_VERSION_ID < 80000 && $closeAfterDone) { 53 53 curl_close($ch); 54 54 } … … 60 60 } 61 61 62 if ( $closeAfterDone) {62 if (\PHP_VERSION_ID < 80000 && $closeAfterDone) { 63 63 curl_close($ch); 64 64 } -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php
r2911753 r3437645 12 12 namespace Monolog\Handler; 13 13 14 use MongoDB\Client; 15 use MongoDB\Collection; 14 16 use MongoDB\Driver\BulkWrite; 15 17 use MongoDB\Driver\Manager; 16 use MongoDB\Client;17 use Monolog\Logger;18 18 use Monolog\Formatter\FormatterInterface; 19 19 use Monolog\Formatter\MongoDBFormatter; 20 use Monolog\Logger; 20 21 21 22 /** … … 34 35 class MongoDBHandler extends AbstractProcessingHandler 35 36 { 36 /** @var \MongoDB\Collection */37 /** @var Collection */ 37 38 private $collection; 38 39 /** @var Client|Manager */ 39 40 private $manager; 40 /** @var string */41 private $namespace ;41 /** @var string|null */ 42 private $namespace = null; 42 43 43 44 /** … … 55 56 56 57 if ($mongodb instanceof Client) { 57 $this->collection = $mongodb->selectCollection($database, $collection);58 $this->collection = method_exists($mongodb, 'getCollection') ? $mongodb->getCollection($database, $collection) : $mongodb->selectCollection($database, $collection); 58 59 } else { 59 60 $this->manager = $mongodb; -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
r3199190 r3437645 168 168 // are cleaning up/rotating at the same time 169 169 set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool { 170 return false;170 return true; 171 171 }); 172 172 unlink($file); -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php
r3110130 r3437645 234 234 protected function sendCurl(string $message): void 235 235 { 236 if ('' === trim($message)) { 237 return; 238 } 239 236 240 $ch = curl_init(); 237 241 $url = self::BOT_API . $this->apiKey . '/SendMessage'; -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php
r2911753 r3437645 65 65 } 66 66 67 $branches = `git branch -v --no-abbrev`;67 $branches = shell_exec('git branch -v --no-abbrev'); 68 68 if ($branches && preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { 69 69 return self::$cache = [ -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php
r2911753 r3437645 64 64 } 65 65 66 $result = explode(' ', trim( `hg id -nb`));66 $result = explode(' ', trim((string) shell_exec('hg id -nb'))); 67 67 68 68 if (count($result) >= 3) { -
login-me-now/trunk/vendor/monolog/monolog/src/Monolog/SignalHandler.php
r2911753 r3437645 81 81 public function handleSignal(int $signo, $siginfo = null): void 82 82 { 83 /** @var array<int, string> $signals */ 83 84 static $signals = []; 84 85 -
login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php
r3147204 r3437645 142 142 $result['MGFHash'] = str_replace('id-', '', $params['maskGenAlgorithm']['parameters']['algorithm']); 143 143 if (isset($params['saltLength'])) { 144 $result['saltLength'] = (int) $params['saltLength']->toString();144 $result['saltLength'] = (int) "$params[saltLength]"; 145 145 } 146 146 -
login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php
r3384718 r3437645 790 790 $temp = $decoded['content']; 791 791 if (isset($mapping['implicit'])) { 792 $temp = new BigInteger($decoded['content'], -256); 792 $temp = new BigInteger($temp, -256); 793 } 794 if (!$temp instanceof BigInteger) { 795 return false; 793 796 } 794 797 if (isset($mapping['mapping'])) { -
login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php
r3384718 r3437645 155 155 while (bccomp($current, '0', 0) > 0) { 156 156 $temp = self::BCMOD_THREE_PARAMS ? bcmod($current, '16777216', 0) : bcmod($current, '16777216'); 157 $value = chr($temp >> 16) . chr( $temp >> 8) . chr($temp) . $value;157 $value = chr($temp >> 16) . chr(($temp >> 8) & 0xFF) . chr($temp & 0xFF) . $value; 158 158 $current = bcdiv($current, '16777216', 0); 159 159 } -
login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
r3384718 r3437645 3463 3463 } 3464 3464 } 3465 3466 3465 /** 3467 3466 * Returns all errors on the SFTP layer -
login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
r3384718 r3437645 680 680 * @var array 681 681 */ 682 pr ivate$packet_size_client_to_server = [];682 protected $packet_size_client_to_server = []; 683 683 684 684 /** … … 2942 2942 return true; 2943 2943 } 2944 if ($callback === false) { 2945 return true; 2946 } 2944 2947 2945 2948 $output = ''; … … 3998 4001 case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4 3999 4002 Strings::shift($payload, 1); 4000 list($request_name ) = Strings::unpackSSH2('s', $payload);4003 list($request_name, $want_reply) = Strings::unpackSSH2('sb', $payload); 4001 4004 $this->errors[] = "SSH_MSG_GLOBAL_REQUEST: $request_name"; 4002 $this->send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE)); 4005 if ($want_reply) { 4006 $this->send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE)); 4007 } 4003 4008 $payload = $this->get_binary_packet(); 4004 4009 break; … … 4237 4242 $this->errors[count($this->errors) - 1] .= "\r\n$error_message"; 4238 4243 } 4239 4240 4244 if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) { 4241 4245 if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) { … … 4246 4250 $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE; 4247 4251 } 4248 4249 4252 continue 3; 4250 4253 case 'exit-status': … … 4256 4259 continue 3; 4257 4260 default: 4258 // "Some systems may not implement signals, in which case they SHOULD ignore this message." 4259 // -- http://tools.ietf.org/html/rfc4254#section-6.9 4261 list($want_reply) = Strings::unpackSSH2('b', $response); 4262 if ($want_reply) { 4263 // "If the request is not recognized or is not supported for the channel, 4264 // SSH_MSG_CHANNEL_FAILURE is returned." 4265 // -- https://datatracker.ietf.org/doc/html/rfc4254#page-10 4266 $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_FAILURE, $this->server_channels[$channel])); 4267 } 4260 4268 continue 3; 4261 4269 } … … 4715 4723 * @return void 4716 4724 */ 4717 pr ivatefunction close_channel($client_channel)4725 protected function close_channel($client_channel) 4718 4726 { 4719 4727 // see http://tools.ietf.org/html/rfc4254#section-5.3
Note: See TracChangeset
for help on using the changeset viewer.