Plugin Directory

Changeset 2967574


Ignore:
Timestamp:
09/15/2023 04:11:55 PM (3 years ago)
Author:
heymehedi
Message:

version update v1.0.0

Location:
login-me-now
Files:
1142 added
58 edited

Legend:

Unmodified
Added
Removed
  • login-me-now/trunk/README.md

    r2874668 r2967574  
    1 Login Me Now – A simple and user-friendly plugin to Login Directly to Dashboard from [Login Me Now Chrome Extension](https://chrome.google.com/webstore/detail/login-me-now/kkkofomlfhbepmpiplggmfpomdnkljoh)
     1# login me now
  • login-me-now/trunk/composer.json

    r2933044 r2967574  
    11{
     2    "name": "halalbrains/login-me-now",
     3    "autoload": {
     4        "psr-4": {
     5            "LoginMeNow\\": "App",
     6            "LoginMeNow\\Abstracts\\": "App/Common/Abstracts",
     7            "LoginMeNow\\Traits\\": "App/Common/Traits",
     8            "LoginMeNow\\Model\\": "App/Models",
     9            "LoginMeNow\\Routes\\": "App/Routes",
     10            "LoginMeNow\\GoogleLogin\\": "App/Modules/GoogleLogin",
     11            "LoginMeNow\\FacebookLogin\\": "App/Modules/FacebookLogin",
     12            "LoginMeNow\\OnetimeNumber\\": "App/Modules/OnetimeNumber",
     13            "LoginMeNow\\UserSwitching\\": "App/Modules/UserSwitching",
     14            "LoginMeNow\\LoginLink\\": "App/Modules/LoginLink",
     15            "LoginMeNow\\BrowserToken\\": "App/Modules/BrowserToken",
     16            "LoginMeNow\\AdvanceSharing\\": "App/Modules/AdvanceSharing"
     17        }
     18    },
     19    "authors": [
     20        {
     21            "name": "yes"
     22        }
     23    ],
    224    "require": {
     25        "php": ">=7.4",
    326        "firebase/php-jwt": "^6.3",
    427        "google/apiclient": "^2.12.1"
  • login-me-now/trunk/composer.lock

    r2933044 r2967574  
    55        "This file is @generated automatically"
    66    ],
    7     "content-hash": "b49adda719510d060821aeed0ab443de",
     7    "content-hash": "0f37e6464d87f2e169dcbdc4db831d61",
    88    "packages": [
    99        {
    1010            "name": "firebase/php-jwt",
    11             "version": "v6.5.0",
     11            "version": "v6.8.1",
    1212            "source": {
    1313                "type": "git",
    1414                "url": "https://github.com/firebase/php-jwt.git",
    15                 "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2"
    16             },
    17             "dist": {
    18                 "type": "zip",
    19                 "url": "https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2",
    20                 "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2",
     15                "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26"
     16            },
     17            "dist": {
     18                "type": "zip",
     19                "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5dbc8959427416b8ee09a100d7a8588c00fb2e26",
     20                "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26",
    2121                "shasum": ""
    2222            },
     
    6666            "support": {
    6767                "issues": "https://github.com/firebase/php-jwt/issues",
    68                 "source": "https://github.com/firebase/php-jwt/tree/v6.5.0"
    69             },
    70             "time": "2023-05-12T15:47:07+00:00"
     68                "source": "https://github.com/firebase/php-jwt/tree/v6.8.1"
     69            },
     70            "time": "2023-07-14T18:33:00+00:00"
    7171        },
    7272        {
     
    141141        {
    142142            "name": "google/apiclient-services",
    143             "version": "v0.303.0",
     143            "version": "v0.312.0",
    144144            "source": {
    145145                "type": "git",
    146146                "url": "https://github.com/googleapis/google-api-php-client-services.git",
    147                 "reference": "b9c143453a94d5e6ed7257d065dcc5662619eaf4"
    148             },
    149             "dist": {
    150                 "type": "zip",
    151                 "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/b9c143453a94d5e6ed7257d065dcc5662619eaf4",
    152                 "reference": "b9c143453a94d5e6ed7257d065dcc5662619eaf4",
     147                "reference": "45d47fed73b28254c511882bc743b1690a99558d"
     148            },
     149            "dist": {
     150                "type": "zip",
     151                "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/45d47fed73b28254c511882bc743b1690a99558d",
     152                "reference": "45d47fed73b28254c511882bc743b1690a99558d",
    153153                "shasum": ""
    154154            },
     
    179179            "support": {
    180180                "issues": "https://github.com/googleapis/google-api-php-client-services/issues",
    181                 "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.303.0"
    182             },
    183             "time": "2023-06-04T01:12:12+00:00"
     181                "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.312.0"
     182            },
     183            "time": "2023-08-14T00:56:12+00:00"
    184184        },
    185185        {
     
    369369        {
    370370            "name": "guzzlehttp/promises",
    371             "version": "2.0.0",
     371            "version": "2.0.1",
    372372            "source": {
    373373                "type": "git",
    374374                "url": "https://github.com/guzzle/promises.git",
    375                 "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6"
    376             },
    377             "dist": {
    378                 "type": "zip",
    379                 "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
    380                 "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
     375                "reference": "111166291a0f8130081195ac4556a5587d7f1b5d"
     376            },
     377            "dist": {
     378                "type": "zip",
     379                "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d",
     380                "reference": "111166291a0f8130081195ac4556a5587d7f1b5d",
    381381                "shasum": ""
    382382            },
     
    432432            "support": {
    433433                "issues": "https://github.com/guzzle/promises/issues",
    434                 "source": "https://github.com/guzzle/promises/tree/2.0.0"
     434                "source": "https://github.com/guzzle/promises/tree/2.0.1"
    435435            },
    436436            "funding": [
     
    448448                }
    449449            ],
    450             "time": "2023-05-21T13:50:22+00:00"
     450            "time": "2023-08-03T15:11:55+00:00"
    451451        },
    452452        {
    453453            "name": "guzzlehttp/psr7",
    454             "version": "2.5.0",
     454            "version": "2.6.0",
    455455            "source": {
    456456                "type": "git",
    457457                "url": "https://github.com/guzzle/psr7.git",
    458                 "reference": "b635f279edd83fc275f822a1188157ffea568ff6"
    459             },
    460             "dist": {
    461                 "type": "zip",
    462                 "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
    463                 "reference": "b635f279edd83fc275f822a1188157ffea568ff6",
     458                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
     459            },
     460            "dist": {
     461                "type": "zip",
     462                "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
     463                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
    464464                "shasum": ""
    465465            },
     
    548548            "support": {
    549549                "issues": "https://github.com/guzzle/psr7/issues",
    550                 "source": "https://github.com/guzzle/psr7/tree/2.5.0"
     550                "source": "https://github.com/guzzle/psr7/tree/2.6.0"
    551551            },
    552552            "funding": [
     
    564564                }
    565565            ],
    566             "time": "2023-04-17T16:11:26+00:00"
     566            "time": "2023-08-03T15:06:02+00:00"
    567567        },
    568568        {
     
    787787        {
    788788            "name": "phpseclib/phpseclib",
    789             "version": "3.0.19",
     789            "version": "3.0.21",
    790790            "source": {
    791791                "type": "git",
    792792                "url": "https://github.com/phpseclib/phpseclib.git",
    793                 "reference": "cc181005cf548bfd8a4896383bb825d859259f95"
    794             },
    795             "dist": {
    796                 "type": "zip",
    797                 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95",
    798                 "reference": "cc181005cf548bfd8a4896383bb825d859259f95",
     793                "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1"
     794            },
     795            "dist": {
     796                "type": "zip",
     797                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
     798                "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
    799799                "shasum": ""
    800800            },
     
    877877            "support": {
    878878                "issues": "https://github.com/phpseclib/phpseclib/issues",
    879                 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.19"
     879                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.21"
    880880            },
    881881            "funding": [
     
    893893                }
    894894            ],
    895             "time": "2023-03-05T17:13:09+00:00"
     895            "time": "2023-07-09T15:24:48+00:00"
    896896        },
    897897        {
     
    12721272    "prefer-stable": false,
    12731273    "prefer-lowest": false,
    1274     "platform": [],
     1274    "platform": {
     1275        "php": ">=7.4"
     1276    },
    12751277    "platform-dev": [],
    1276     "plugin-api-version": "2.3.0"
     1278    "plugin-api-version": "2.1.0"
    12771279}
  • login-me-now/trunk/login-me-now.php

    r2933044 r2967574  
    11<?php
    2 /*
    3 Plugin Name: Login Me Now
    4 Plugin URI: https://wordpress.org/plugins/login-me-now/
    5 Description: Simple and Timer Saver One Click Login WordPress Plugin for Chrome Extension
    6 Author: Login Me Now
    7 Author URI: https://loginmenow.com/
    8 Text Domain: login-me-now
    9 Requires PHP: 7.4
    10 Domain Path: /languages
    11 Version: 0.99
     2/**
     3 * Plugin Name: Login Me Now
     4 * Description: 1 click passwordless login, social login & user switching
     5 * Author: Login Me Now
     6 * Author URI: https://loginmenow.com/
     7 * Version: 1.0.0
     8 * Requires PHP: 7.4
     9 * License: GPL2
     10 * Text Domain: login-me-now
     11 *
     12 * Released under the GPL license
     13 * http://www.opensource.org/licenses/gpl-license.php
     14 *
     15 * This is an add-on for WordPress
     16 * http://wordpress.org/
     17 *
     18 * **********************************************************************
     19 * This program is free software; you can redistribute it and/or modify
     20 * it under the terms of the GNU General Public License as published by
     21 * the Free Software Foundation; either version 2 of the License, or
     22 * (at your option) any later version.
     23 *
     24 * This program is distributed in the hope that it will be useful,
     25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     27 * GNU General Public License for more details.
     28 *
     29 * You should have received a copy of the GNU General Public License
     30 * along with this program; if not, write to the Free Software
     31 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     32 * **********************************************************************
    1233 */
    1334
    14 defined( 'ABSPATH' ) || die( 'No direct script access allowed!' );
     35use LoginMeNow\App;
    1536
    16 if ( defined( 'LOGIN_ME_NOW_VERSION' ) ) {
    17     return;
     37// don't call the file directly
     38if ( ! defined( 'ABSPATH' ) ) {
     39    exit;
    1840}
    1941
     42/**
     43 * LoginMeNow class
     44 *
     45 * This class holds the entire LoginMeNow plugin
     46 */
     47final class LoginMeNow {
     48    public string $version  = '1.0.0';
     49    private string $min_php = '7.4';
     50    public object $app;
     51    private static $instance;
    2052
    21 define( 'LOGIN_ME_NOW_VERSION', '0.99' );
    22 define( 'LOGIN_ME_NOW_PRO_UPGRADE_URL', 'https://loginmenow.com/' );
     53    /**
     54     * Initializes the LoginMeNow() class
     55     * Checks for an existing LoginMeNow() instance
     56     * and if it doesn't find one, creates it.
     57     */
     58    public static function init(): object {
     59        if ( ! isset( self::$instance ) && ! ( self::$instance instanceof LoginMeNow ) ) {
     60            self::$instance = new LoginMeNow();
     61            self::$instance->setup();
     62        }
    2363
    24 define( 'LOGIN_ME_NOW_BASE_DIR', plugin_dir_path( __FILE__ ) );
    25 define( 'LOGIN_ME_NOW_BASE_URL', plugin_dir_url( __FILE__ ) );
    26 define( 'LOGIN_ME_NOW_MODULES', plugin_dir_path( __FILE__ ) . 'modules/' );
     64        return self::$instance;
     65    }
     66
     67    /**
     68     * Setup the plugin
     69     *
     70     * Sets up all the appropriate hooks and actions within our plugin.
     71     */
     72    private function setup(): void {
     73        // dry check on older PHP versions, if found deactivate itself with an error
     74        register_activation_hook( __FILE__, [$this, 'auto_deactivate'] );
     75
     76        if ( ! $this->is_supported_php() ) {
     77            return;
     78        }
     79
     80        $this->define_constants();
     81        $this->includes();
     82        $this->app = App::init();
     83
     84        do_action( 'login_me_now_loaded' );
     85    }
     86
     87    /**
     88     * Check if the PHP version is supported
     89     */
     90    public function is_supported_php(): bool {
     91        if ( version_compare( PHP_VERSION, $this->min_php, '<' ) ) {
     92            return false;
     93        }
     94
     95        return true;
     96    }
     97
     98    /**
     99     * Bail out if the php version is lower than
     100     */
     101    public function auto_deactivate(): void {
     102        if ( $this->is_supported_php() ) {
     103            return;
     104        }
     105
     106        deactivate_plugins( basename( __FILE__ ) );
     107
     108        $error = __( '<h1>An Error Occurred</h1>', 'login-me-now' );
     109        $error .= __( '<h2>Your installed PHP Version is: ', 'login-me-now' ) . PHP_VERSION . '</h2>';
     110        $error .= __( '<p>The <strong>Login Me Now</strong> plugin requires PHP version <strong>', 'login-me-now' ) . $this->min_php . __( '</strong> or greater', 'login-me-now' );
     111        $error .= __( '<p>The version of your PHP is ', 'login-me-now' ) . '<a href="http://php.net/supported-versions.php" target="_blank"><strong>' . __( 'unsupported and old', 'login-me-now' ) . '</strong></a>.';
     112        $error .= __( 'You should update your PHP software or contact your host regarding this matter.</p>', 'login-me-now' );
     113        wp_die(
     114            wp_kses_post( $error ),
     115            esc_html__( 'Plugin Activation Error', 'login-me-now' ),
     116            [
     117                'response'  => 200,
     118                'back_link' => true,
     119            ]
     120        );
     121    }
     122
     123    /**
     124     * Define the constants
     125     */
     126    private function define_constants(): void {
     127        define( 'LOGIN_ME_NOW_VERSION', $this->version );
     128        define( 'LOGIN_ME_NOW_FILE', __FILE__ );
     129        define( 'LOGIN_ME_NOW_URL', plugins_url( '', LOGIN_ME_NOW_FILE ) );
     130        define( 'LOGIN_ME_NOW_PATH', dirname( LOGIN_ME_NOW_FILE ) );
     131        define( 'LOGIN_ME_NOW_APP_PATH', LOGIN_ME_NOW_PATH . '/App/' );
     132        define( 'LOGIN_ME_NOW_APP_URL', LOGIN_ME_NOW_URL . '/App/' );
     133
     134        define( 'LOGIN_ME_NOW_INCLUDES', LOGIN_ME_NOW_APP_PATH . 'Common' );
     135        define( 'LOGIN_ME_NOW_MODULES', LOGIN_ME_NOW_APP_PATH . 'Modules' );
     136        define( 'LOGIN_ME_NOW_ASSETS', LOGIN_ME_NOW_APP_URL . 'Assets' );
     137
     138        define( 'LOGIN_ME_NOW_ADMIN_URL', LOGIN_ME_NOW_APP_URL . 'Admin' );
     139        define( 'LOGIN_ME_NOW_ADMIN_PATH', LOGIN_ME_NOW_APP_PATH . 'Admin' );
     140
     141        define( 'LOGIN_ME_NOW_MENU_SLUG', apply_filters( 'login_me_now_menu_slug', 'login-me-now' ) );
     142        define( 'LOGIN_ME_NOW_MENU_CAPABILITY', apply_filters( 'login_me_now_menu_capability', 'manage_options' ) );
     143
     144        define( 'LOGIN_ME_NOW_PRO_UPGRADE_URL', 'https://loginmenow.com/' );
     145    }
     146
     147    private function includes(): void {
     148        include __DIR__ . '/vendor/autoload.php';
     149    }
     150}
    27151
    28152/**
    29  * Load dependencies managed by composer
     153 * Init the LoginMeNow plugin
    30154 */
    31 require_once LOGIN_ME_NOW_BASE_DIR . 'vendor/autoload.php';
     155function LoginMeNow() {
     156    return LoginMeNow::init();
     157}
    32158
    33 /**
    34  * Load necessary classes
    35  */
    36 require_once LOGIN_ME_NOW_BASE_DIR . 'includes/init.php';
    37 require_once LOGIN_ME_NOW_BASE_DIR . 'modules/init.php';
    38 require_once LOGIN_ME_NOW_BASE_DIR . 'admin/class-login-me-now-admin-loader.php';
    39 require_once LOGIN_ME_NOW_BASE_DIR . 'routes/init.php';
     159// kick it off
     160LoginMeNow();
     161
     162// include __DIR__ . '/Tests/init.php';
  • login-me-now/trunk/readme.txt

    r2933044 r2967574  
    1 === Login Me Now - 1 click login without password ===
    2 Contributors: HeyMehedi, HalalBrains, HiMrFaruk
    3 Tags: login, password, password-less, wp-login, secure login
     1=== Login Me Now – 1 click passwordless login, social login & user switching ===
     2Contributors: HalalBrains
     3Tags: login, password, secure-login, wp-login, social-login
    44Requires at least: 5.6
    55Tested up to: 6.2
    66Requires PHP: 7.4
    7 Stable tag: 0.99
     7Stable tag: 1.0.0
    88License: GPLv3 or Any Later Version
    99
    10 Login Me Now - A simple and user-friendly plugin to Login Directly to the Dashboard from Chrome Extension
     10Login Me Now – 1 click passwordless login, social login & user switching
    1111
    1212== Description ==
  • login-me-now/trunk/vendor/autoload.php

    r2911753 r2967574  
    33// autoload.php @generated by Composer
    44
    5 if (PHP_VERSION_ID < 50600) {
    6     if (!headers_sent()) {
    7         header('HTTP/1.1 500 Internal Server Error');
    8     }
    9     $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
    10     if (!ini_get('display_errors')) {
    11         if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
    12             fwrite(STDERR, $err);
    13         } elseif (!headers_sent()) {
    14             echo $err;
    15         }
    16     }
    17     trigger_error(
    18         $err,
    19         E_USER_ERROR
    20     );
    21 }
    22 
    235require_once __DIR__ . '/composer/autoload_real.php';
    246
    25 return ComposerAutoloaderInit026869af995aef16fea57d1e5ee46649::getLoader();
     7return ComposerAutoloaderInita52b64522988d5ee0e431730396c184f::getLoader();
  • login-me-now/trunk/vendor/composer/ClassLoader.php

    r2911753 r2967574  
    4343class ClassLoader
    4444{
    45     /** @var \Closure(string):void */
    46     private static $includeFile;
    47 
    48     /** @var ?string */
    4945    private $vendorDir;
    5046
    5147    // PSR-4
    52     /**
    53      * @var array[]
    54      * @psalm-var array<string, array<string, int>>
    55      */
    5648    private $prefixLengthsPsr4 = array();
    57     /**
    58      * @var array[]
    59      * @psalm-var array<string, array<int, string>>
    60      */
    6149    private $prefixDirsPsr4 = array();
    62     /**
    63      * @var array[]
    64      * @psalm-var array<string, string>
    65      */
    6650    private $fallbackDirsPsr4 = array();
    6751
    6852    // PSR-0
    69     /**
    70      * @var array[]
    71      * @psalm-var array<string, array<string, string[]>>
    72      */
    7353    private $prefixesPsr0 = array();
    74     /**
    75      * @var array[]
    76      * @psalm-var array<string, string>
    77      */
    7854    private $fallbackDirsPsr0 = array();
    7955
    80     /** @var bool */
    8156    private $useIncludePath = false;
    82 
    83     /**
    84      * @var string[]
    85      * @psalm-var array<string, string>
    86      */
    8757    private $classMap = array();
    88 
    89     /** @var bool */
    9058    private $classMapAuthoritative = false;
    91 
    92     /**
    93      * @var bool[]
    94      * @psalm-var array<string, bool>
    95      */
    9659    private $missingClasses = array();
    97 
    98     /** @var ?string */
    9960    private $apcuPrefix;
    10061
    101     /**
    102      * @var self[]
    103      */
    10462    private static $registeredLoaders = array();
    10563
    106     /**
    107      * @param ?string $vendorDir
    108      */
    10964    public function __construct($vendorDir = null)
    11065    {
    11166        $this->vendorDir = $vendorDir;
    112         self::initializeIncludeClosure();
    113     }
    114 
    115     /**
    116      * @return string[]
    117      */
     67    }
     68
    11869    public function getPrefixes()
    11970    {
     
    12576    }
    12677
    127     /**
    128      * @return array[]
    129      * @psalm-return array<string, array<int, string>>
    130      */
    13178    public function getPrefixesPsr4()
    13279    {
     
    13481    }
    13582
    136     /**
    137      * @return array[]
    138      * @psalm-return array<string, string>
    139      */
    14083    public function getFallbackDirs()
    14184    {
     
    14386    }
    14487
    145     /**
    146      * @return array[]
    147      * @psalm-return array<string, string>
    148      */
    14988    public function getFallbackDirsPsr4()
    15089    {
     
    15291    }
    15392
    154     /**
    155      * @return string[] Array of classname => path
    156      * @psalm-return array<string, string>
    157      */
    15893    public function getClassMap()
    15994    {
     
    16297
    16398    /**
    164      * @param string[] $classMap Class to filename map
    165      * @psalm-param array<string, string> $classMap
    166      *
    167      * @return void
     99     * @param array $classMap Class to filename map
    168100     */
    169101    public function addClassMap(array $classMap)
     
    180112     * appending or prepending to the ones previously set for this prefix.
    181113     *
    182      * @param string          $prefix  The prefix
    183      * @param string[]|string $paths   The PSR-0 root directories
    184      * @param bool            $prepend Whether to prepend the directories
    185      *
    186      * @return void
     114     * @param string       $prefix  The prefix
     115     * @param array|string $paths   The PSR-0 root directories
     116     * @param bool         $prepend Whether to prepend the directories
    187117     */
    188118    public function add($prefix, $paths, $prepend = false)
     
    227157     * appending or prepending to the ones previously set for this namespace.
    228158     *
    229      * @param string          $prefix  The prefix/namespace, with trailing '\\'
    230      * @param string[]|string $paths   The PSR-4 base directories
    231      * @param bool            $prepend Whether to prepend the directories
     159     * @param string       $prefix  The prefix/namespace, with trailing '\\'
     160     * @param array|string $paths   The PSR-4 base directories
     161     * @param bool         $prepend Whether to prepend the directories
    232162     *
    233163     * @throws \InvalidArgumentException
    234      *
    235      * @return void
    236164     */
    237165    public function addPsr4($prefix, $paths, $prepend = false)
     
    277205     * replacing any others previously set for this prefix.
    278206     *
    279      * @param string          $prefix The prefix
    280      * @param string[]|string $paths  The PSR-0 base directories
    281      *
    282      * @return void
     207     * @param string       $prefix The prefix
     208     * @param array|string $paths  The PSR-0 base directories
    283209     */
    284210    public function set($prefix, $paths)
     
    295221     * replacing any others previously set for this namespace.
    296222     *
    297      * @param string          $prefix The prefix/namespace, with trailing '\\'
    298      * @param string[]|string $paths  The PSR-4 base directories
     223     * @param string       $prefix The prefix/namespace, with trailing '\\'
     224     * @param array|string $paths  The PSR-4 base directories
    299225     *
    300226     * @throws \InvalidArgumentException
    301      *
    302      * @return void
    303227     */
    304228    public function setPsr4($prefix, $paths)
     
    320244     *
    321245     * @param bool $useIncludePath
    322      *
    323      * @return void
    324246     */
    325247    public function setUseIncludePath($useIncludePath)
     
    344266     *
    345267     * @param bool $classMapAuthoritative
    346      *
    347      * @return void
    348268     */
    349269    public function setClassMapAuthoritative($classMapAuthoritative)
     
    366286     *
    367287     * @param string|null $apcuPrefix
    368      *
    369      * @return void
    370288     */
    371289    public function setApcuPrefix($apcuPrefix)
     
    388306     *
    389307     * @param bool $prepend Whether to prepend the autoloader or not
    390      *
    391      * @return void
    392308     */
    393309    public function register($prepend = false)
     
    409325    /**
    410326     * Unregisters this instance as an autoloader.
    411      *
    412      * @return void
    413327     */
    414328    public function unregister()
     
    430344    {
    431345        if ($file = $this->findFile($class)) {
    432             $includeFile = self::$includeFile;
    433             $includeFile($file);
     346            includeFile($file);
    434347
    435348            return true;
     
    491404    }
    492405
    493     /**
    494      * @param  string       $class
    495      * @param  string       $ext
    496      * @return string|false
    497      */
    498406    private function findFileWithExtension($class, $ext)
    499407    {
     
    561469        return false;
    562470    }
    563 
    564     /**
    565      * @return void
    566      */
    567     private static function initializeIncludeClosure()
    568     {
    569         if (self::$includeFile !== null) {
    570             return;
    571         }
    572 
    573         /**
    574          * Scope isolated include.
    575          *
    576          * Prevents access to $this/self from included files.
    577          *
    578          * @param  string $file
    579          * @return void
    580          */
    581         self::$includeFile = \Closure::bind(static function($file) {
    582             include $file;
    583         }, null, null);
    584     }
    585471}
     472
     473/**
     474 * Scope isolated include.
     475 *
     476 * Prevents access to $this/self from included files.
     477 */
     478function includeFile($file)
     479{
     480    include $file;
     481}
  • login-me-now/trunk/vendor/composer/InstalledVersions.php

    r2911753 r2967574  
    2121 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
    2222 *
    23  * To require its presence, you can require `composer-runtime-api ^2.0`
    24  *
    25  * @final
     23 * To require it's presence, you can require `composer-runtime-api ^2.0`
    2624 */
    2725class InstalledVersions
    2826{
    29     /**
    30      * @var mixed[]|null
    31      * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
    32      */
    3327    private static $installed;
    34 
    35     /**
    36      * @var bool|null
    37      */
    3828    private static $canGetVendors;
    39 
    40     /**
    41      * @var array[]
    42      * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
    43      */
    4429    private static $installedByVendor = array();
    4530
     
    9984        foreach (self::getInstalled() as $installed) {
    10085            if (isset($installed['versions'][$packageName])) {
    101                 return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
     86                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
    10287            }
    10388        }
     
    120105    public static function satisfies(VersionParser $parser, $packageName, $constraint)
    121106    {
    122         $constraint = $parser->parseConstraints((string) $constraint);
     107        $constraint = $parser->parseConstraints($constraint);
    123108        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
    124109
     
    244229    /**
    245230     * @return array
    246      * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
     231     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
    247232     */
    248233    public static function getRootPackage()
     
    258243     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
    259244     * @return array[]
    260      * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
     245     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
    261246     */
    262247    public static function getRawData()
     
    281266     *
    282267     * @return array[]
    283      * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     268     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
    284269     */
    285270    public static function getAllRawData()
     
    304289     * @return void
    305290     *
    306      * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
     291     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
    307292     */
    308293    public static function reload($data)
     
    314299    /**
    315300     * @return array[]
    316      * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     301     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
    317302     */
    318303    private static function getInstalled()
     
    329314                    $installed[] = self::$installedByVendor[$vendorDir];
    330315                } elseif (is_file($vendorDir.'/composer/installed.php')) {
    331                     /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
    332                     $required = require $vendorDir.'/composer/installed.php';
    333                     $installed[] = self::$installedByVendor[$vendorDir] = $required;
     316                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
    334317                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
    335318                        self::$installed = $installed[count($installed) - 1];
     
    343326            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
    344327            if (substr(__DIR__, -8, 1) !== 'C') {
    345                 /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
    346                 $required = require __DIR__ . '/installed.php';
    347                 self::$installed = $required;
     328                self::$installed = require __DIR__ . '/installed.php';
    348329            } else {
    349330                self::$installed = array();
    350331            }
    351332        }
    352 
    353         if (self::$installed !== array()) {
    354             $installed[] = self::$installed;
    355         }
     333        $installed[] = self::$installed;
    356334
    357335        return $installed;
  • login-me-now/trunk/vendor/composer/autoload_classmap.php

    r2933044 r2967574  
    33// autoload_classmap.php @generated by Composer
    44
    5 $vendorDir = dirname(__DIR__);
     5$vendorDir = dirname(dirname(__FILE__));
    66$baseDir = dirname($vendorDir);
    77
  • login-me-now/trunk/vendor/composer/autoload_files.php

    r2933044 r2967574  
    33// autoload_files.php @generated by Composer
    44
    5 $vendorDir = dirname(__DIR__);
     5$vendorDir = dirname(dirname(__FILE__));
    66$baseDir = dirname($vendorDir);
    77
     
    1010    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
    1111    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
     12    'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
    1213    '1f87db08236948d07391152dccb70f04' => $vendorDir . '/google/apiclient-services/autoload.php',
    13     'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
    1414    'a8d3953fd9959404dd22d3dfcd0a79f0' => $vendorDir . '/google/apiclient/src/aliases.php',
    1515);
  • login-me-now/trunk/vendor/composer/autoload_namespaces.php

    r2852355 r2967574  
    33// autoload_namespaces.php @generated by Composer
    44
    5 $vendorDir = dirname(__DIR__);
     5$vendorDir = dirname(dirname(__FILE__));
    66$baseDir = dirname($vendorDir);
    77
  • login-me-now/trunk/vendor/composer/autoload_psr4.php

    r2911753 r2967574  
    33// autoload_psr4.php @generated by Composer
    44
    5 $vendorDir = dirname(__DIR__);
     5$vendorDir = dirname(dirname(__FILE__));
    66$baseDir = dirname($vendorDir);
    77
     
    99    'phpseclib3\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
    1010    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
    11     'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
     11    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
    1212    'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
    1313    'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
    1414    'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
    1515    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
     16    'LoginMeNow\\UserSwitching\\' => array($baseDir . '/App/Modules/UserSwitching'),
     17    'LoginMeNow\\Traits\\' => array($baseDir . '/App/Common/Traits'),
     18    'LoginMeNow\\Routes\\' => array($baseDir . '/App/Routes'),
     19    'LoginMeNow\\OnetimeNumber\\' => array($baseDir . '/App/Modules/OnetimeNumber'),
     20    'LoginMeNow\\Model\\' => array($baseDir . '/App/Models'),
     21    'LoginMeNow\\LoginLink\\' => array($baseDir . '/App/Modules/LoginLink'),
     22    'LoginMeNow\\GoogleLogin\\' => array($baseDir . '/App/Modules/GoogleLogin'),
     23    'LoginMeNow\\FacebookLogin\\' => array($baseDir . '/App/Modules/FacebookLogin'),
     24    'LoginMeNow\\BrowserToken\\' => array($baseDir . '/App/Modules/BrowserToken'),
     25    'LoginMeNow\\AdvanceSharing\\' => array($baseDir . '/App/Modules/AdvanceSharing'),
     26    'LoginMeNow\\Abstracts\\' => array($baseDir . '/App/Common/Abstracts'),
     27    'LoginMeNow\\' => array($baseDir . '/App'),
    1628    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
    1729    'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
  • login-me-now/trunk/vendor/composer/autoload_real.php

    r2911753 r2967574  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit026869af995aef16fea57d1e5ee46649
     5class ComposerAutoloaderInita52b64522988d5ee0e431730396c184f
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit026869af995aef16fea57d1e5ee46649', 'loadClassLoader'), true, true);
    28         self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit026869af995aef16fea57d1e5ee46649', 'loadClassLoader'));
     27        spl_autoload_register(array('ComposerAutoloaderInita52b64522988d5ee0e431730396c184f', 'loadClassLoader'), true, true);
     28        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
     29        spl_autoload_unregister(array('ComposerAutoloaderInita52b64522988d5ee0e431730396c184f', 'loadClassLoader'));
    3030
    31         require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInit026869af995aef16fea57d1e5ee46649::getInitializer($loader));
     31        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     32        if ($useStaticLoader) {
     33            require __DIR__ . '/autoload_static.php';
     34
     35            call_user_func(\Composer\Autoload\ComposerStaticInita52b64522988d5ee0e431730396c184f::getInitializer($loader));
     36        } else {
     37            $map = require __DIR__ . '/autoload_namespaces.php';
     38            foreach ($map as $namespace => $path) {
     39                $loader->set($namespace, $path);
     40            }
     41
     42            $map = require __DIR__ . '/autoload_psr4.php';
     43            foreach ($map as $namespace => $path) {
     44                $loader->setPsr4($namespace, $path);
     45            }
     46
     47            $classMap = require __DIR__ . '/autoload_classmap.php';
     48            if ($classMap) {
     49                $loader->addClassMap($classMap);
     50            }
     51        }
    3352
    3453        $loader->register(true);
    3554
    36         $filesToLoad = \Composer\Autoload\ComposerStaticInit026869af995aef16fea57d1e5ee46649::$files;
    37         $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
    38             if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
    39                 $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
    40 
    41                 require $file;
    42             }
    43         }, null, null);
    44         foreach ($filesToLoad as $fileIdentifier => $file) {
    45             $requireFile($fileIdentifier, $file);
     55        if ($useStaticLoader) {
     56            $includeFiles = Composer\Autoload\ComposerStaticInita52b64522988d5ee0e431730396c184f::$files;
     57        } else {
     58            $includeFiles = require __DIR__ . '/autoload_files.php';
     59        }
     60        foreach ($includeFiles as $fileIdentifier => $file) {
     61            composerRequirea52b64522988d5ee0e431730396c184f($fileIdentifier, $file);
    4662        }
    4763
     
    4965    }
    5066}
     67
     68function composerRequirea52b64522988d5ee0e431730396c184f($fileIdentifier, $file)
     69{
     70    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
     71        require $file;
     72
     73        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
     74    }
     75}
  • login-me-now/trunk/vendor/composer/autoload_static.php

    r2933044 r2967574  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit026869af995aef16fea57d1e5ee46649
     7class ComposerStaticInita52b64522988d5ee0e431730396c184f
    88{
    99    public static $files = array (
     
    1111        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
    1212        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
     13        'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
    1314        '1f87db08236948d07391152dccb70f04' => __DIR__ . '/..' . '/google/apiclient-services/autoload.php',
    14         'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
    1515        'a8d3953fd9959404dd22d3dfcd0a79f0' => __DIR__ . '/..' . '/google/apiclient/src/aliases.php',
    1616    );
     
    3232        array (
    3333            'Monolog\\' => 8,
     34        ),
     35        'L' =>
     36        array (
     37            'LoginMeNow\\UserSwitching\\' => 25,
     38            'LoginMeNow\\Traits\\' => 18,
     39            'LoginMeNow\\Routes\\' => 18,
     40            'LoginMeNow\\OnetimeNumber\\' => 25,
     41            'LoginMeNow\\Model\\' => 17,
     42            'LoginMeNow\\LoginLink\\' => 21,
     43            'LoginMeNow\\GoogleLogin\\' => 23,
     44            'LoginMeNow\\FacebookLogin\\' => 25,
     45            'LoginMeNow\\BrowserToken\\' => 24,
     46            'LoginMeNow\\AdvanceSharing\\' => 26,
     47            'LoginMeNow\\Abstracts\\' => 21,
     48            'LoginMeNow\\' => 11,
    3449        ),
    3550        'G' =>
     
    5974        'Psr\\Http\\Message\\' =>
    6075        array (
    61             0 => __DIR__ . '/..' . '/psr/http-factory/src',
    62             1 => __DIR__ . '/..' . '/psr/http-message/src',
     76            0 => __DIR__ . '/..' . '/psr/http-message/src',
     77            1 => __DIR__ . '/..' . '/psr/http-factory/src',
    6378        ),
    6479        'Psr\\Http\\Client\\' =>
     
    7792        array (
    7893            0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
     94        ),
     95        'LoginMeNow\\UserSwitching\\' =>
     96        array (
     97            0 => __DIR__ . '/../..' . '/App/Modules/UserSwitching',
     98        ),
     99        'LoginMeNow\\Traits\\' =>
     100        array (
     101            0 => __DIR__ . '/../..' . '/App/Common/Traits',
     102        ),
     103        'LoginMeNow\\Routes\\' =>
     104        array (
     105            0 => __DIR__ . '/../..' . '/App/Routes',
     106        ),
     107        'LoginMeNow\\OnetimeNumber\\' =>
     108        array (
     109            0 => __DIR__ . '/../..' . '/App/Modules/OnetimeNumber',
     110        ),
     111        'LoginMeNow\\Model\\' =>
     112        array (
     113            0 => __DIR__ . '/../..' . '/App/Models',
     114        ),
     115        'LoginMeNow\\LoginLink\\' =>
     116        array (
     117            0 => __DIR__ . '/../..' . '/App/Modules/LoginLink',
     118        ),
     119        'LoginMeNow\\GoogleLogin\\' =>
     120        array (
     121            0 => __DIR__ . '/../..' . '/App/Modules/GoogleLogin',
     122        ),
     123        'LoginMeNow\\FacebookLogin\\' =>
     124        array (
     125            0 => __DIR__ . '/../..' . '/App/Modules/FacebookLogin',
     126        ),
     127        'LoginMeNow\\BrowserToken\\' =>
     128        array (
     129            0 => __DIR__ . '/../..' . '/App/Modules/BrowserToken',
     130        ),
     131        'LoginMeNow\\AdvanceSharing\\' =>
     132        array (
     133            0 => __DIR__ . '/../..' . '/App/Modules/AdvanceSharing',
     134        ),
     135        'LoginMeNow\\Abstracts\\' =>
     136        array (
     137            0 => __DIR__ . '/../..' . '/App/Common/Abstracts',
     138        ),
     139        'LoginMeNow\\' =>
     140        array (
     141            0 => __DIR__ . '/../..' . '/App',
    79142        ),
    80143        'GuzzleHttp\\Psr7\\' =>
     
    135198    {
    136199        return \Closure::bind(function () use ($loader) {
    137             $loader->prefixLengthsPsr4 = ComposerStaticInit026869af995aef16fea57d1e5ee46649::$prefixLengthsPsr4;
    138             $loader->prefixDirsPsr4 = ComposerStaticInit026869af995aef16fea57d1e5ee46649::$prefixDirsPsr4;
    139             $loader->classMap = ComposerStaticInit026869af995aef16fea57d1e5ee46649::$classMap;
     200            $loader->prefixLengthsPsr4 = ComposerStaticInita52b64522988d5ee0e431730396c184f::$prefixLengthsPsr4;
     201            $loader->prefixDirsPsr4 = ComposerStaticInita52b64522988d5ee0e431730396c184f::$prefixDirsPsr4;
     202            $loader->classMap = ComposerStaticInita52b64522988d5ee0e431730396c184f::$classMap;
    140203
    141204        }, null, ClassLoader::class);
  • login-me-now/trunk/vendor/composer/installed.json

    r2933044 r2967574  
    33        {
    44            "name": "firebase/php-jwt",
    5             "version": "v6.5.0",
    6             "version_normalized": "6.5.0.0",
     5            "version": "v6.8.1",
     6            "version_normalized": "6.8.1.0",
    77            "source": {
    88                "type": "git",
    99                "url": "https://github.com/firebase/php-jwt.git",
    10                 "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2"
    11             },
    12             "dist": {
    13                 "type": "zip",
    14                 "url": "https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2",
    15                 "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2",
     10                "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26"
     11            },
     12            "dist": {
     13                "type": "zip",
     14                "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5dbc8959427416b8ee09a100d7a8588c00fb2e26",
     15                "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26",
    1616                "shasum": ""
    1717            },
     
    3131                "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
    3232            },
    33             "time": "2023-05-12T15:47:07+00:00",
     33            "time": "2023-07-14T18:33:00+00:00",
    3434            "type": "library",
    3535            "installation-source": "dist",
     
    6363            "support": {
    6464                "issues": "https://github.com/firebase/php-jwt/issues",
    65                 "source": "https://github.com/firebase/php-jwt/tree/v6.5.0"
     65                "source": "https://github.com/firebase/php-jwt/tree/v6.8.1"
    6666            },
    6767            "install-path": "../firebase/php-jwt"
     
    141141        {
    142142            "name": "google/apiclient-services",
    143             "version": "v0.303.0",
    144             "version_normalized": "0.303.0.0",
     143            "version": "v0.312.0",
     144            "version_normalized": "0.312.0.0",
    145145            "source": {
    146146                "type": "git",
    147147                "url": "https://github.com/googleapis/google-api-php-client-services.git",
    148                 "reference": "b9c143453a94d5e6ed7257d065dcc5662619eaf4"
    149             },
    150             "dist": {
    151                 "type": "zip",
    152                 "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/b9c143453a94d5e6ed7257d065dcc5662619eaf4",
    153                 "reference": "b9c143453a94d5e6ed7257d065dcc5662619eaf4",
     148                "reference": "45d47fed73b28254c511882bc743b1690a99558d"
     149            },
     150            "dist": {
     151                "type": "zip",
     152                "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/45d47fed73b28254c511882bc743b1690a99558d",
     153                "reference": "45d47fed73b28254c511882bc743b1690a99558d",
    154154                "shasum": ""
    155155            },
     
    160160                "phpunit/phpunit": "^5.7||^8.5.13"
    161161            },
    162             "time": "2023-06-04T01:12:12+00:00",
     162            "time": "2023-08-14T00:56:12+00:00",
    163163            "type": "library",
    164164            "installation-source": "dist",
     
    182182            "support": {
    183183                "issues": "https://github.com/googleapis/google-api-php-client-services/issues",
    184                 "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.303.0"
     184                "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.312.0"
    185185            },
    186186            "install-path": "../google/apiclient-services"
     
    378378        {
    379379            "name": "guzzlehttp/promises",
    380             "version": "2.0.0",
    381             "version_normalized": "2.0.0.0",
     380            "version": "2.0.1",
     381            "version_normalized": "2.0.1.0",
    382382            "source": {
    383383                "type": "git",
    384384                "url": "https://github.com/guzzle/promises.git",
    385                 "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6"
    386             },
    387             "dist": {
    388                 "type": "zip",
    389                 "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
    390                 "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
     385                "reference": "111166291a0f8130081195ac4556a5587d7f1b5d"
     386            },
     387            "dist": {
     388                "type": "zip",
     389                "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d",
     390                "reference": "111166291a0f8130081195ac4556a5587d7f1b5d",
    391391                "shasum": ""
    392392            },
     
    398398                "phpunit/phpunit": "^8.5.29 || ^9.5.23"
    399399            },
    400             "time": "2023-05-21T13:50:22+00:00",
     400            "time": "2023-08-03T15:11:55+00:00",
    401401            "type": "library",
    402402            "extra": {
     
    444444            "support": {
    445445                "issues": "https://github.com/guzzle/promises/issues",
    446                 "source": "https://github.com/guzzle/promises/tree/2.0.0"
     446                "source": "https://github.com/guzzle/promises/tree/2.0.1"
    447447            },
    448448            "funding": [
     
    464464        {
    465465            "name": "guzzlehttp/psr7",
    466             "version": "2.5.0",
    467             "version_normalized": "2.5.0.0",
     466            "version": "2.6.0",
     467            "version_normalized": "2.6.0.0",
    468468            "source": {
    469469                "type": "git",
    470470                "url": "https://github.com/guzzle/psr7.git",
    471                 "reference": "b635f279edd83fc275f822a1188157ffea568ff6"
    472             },
    473             "dist": {
    474                 "type": "zip",
    475                 "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
    476                 "reference": "b635f279edd83fc275f822a1188157ffea568ff6",
     471                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
     472            },
     473            "dist": {
     474                "type": "zip",
     475                "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
     476                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
    477477                "shasum": ""
    478478            },
     
    495495                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
    496496            },
    497             "time": "2023-04-17T16:11:26+00:00",
     497            "time": "2023-08-03T15:06:02+00:00",
    498498            "type": "library",
    499499            "extra": {
     
    563563            "support": {
    564564                "issues": "https://github.com/guzzle/psr7/issues",
    565                 "source": "https://github.com/guzzle/psr7/tree/2.5.0"
     565                "source": "https://github.com/guzzle/psr7/tree/2.6.0"
    566566            },
    567567            "funding": [
     
    811811        {
    812812            "name": "phpseclib/phpseclib",
    813             "version": "3.0.19",
    814             "version_normalized": "3.0.19.0",
     813            "version": "3.0.21",
     814            "version_normalized": "3.0.21.0",
    815815            "source": {
    816816                "type": "git",
    817817                "url": "https://github.com/phpseclib/phpseclib.git",
    818                 "reference": "cc181005cf548bfd8a4896383bb825d859259f95"
    819             },
    820             "dist": {
    821                 "type": "zip",
    822                 "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95",
    823                 "reference": "cc181005cf548bfd8a4896383bb825d859259f95",
     818                "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1"
     819            },
     820            "dist": {
     821                "type": "zip",
     822                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
     823                "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
    824824                "shasum": ""
    825825            },
     
    839839                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
    840840            },
    841             "time": "2023-03-05T17:13:09+00:00",
     841            "time": "2023-07-09T15:24:48+00:00",
    842842            "type": "library",
    843843            "installation-source": "dist",
     
    904904            "support": {
    905905                "issues": "https://github.com/phpseclib/phpseclib/issues",
    906                 "source": "https://github.com/phpseclib/phpseclib/tree/3.0.19"
     906                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.21"
    907907            },
    908908            "funding": [
  • login-me-now/trunk/vendor/composer/installed.php

    r2933044 r2967574  
    11<?php return array(
    22    'root' => array(
    3         'name' => '__root__',
    43        'pretty_version' => 'dev-master',
    54        'version' => 'dev-master',
    6         'reference' => '67ab278990cf6ea914610b24342ebfa80a2f54eb',
    75        'type' => 'library',
    86        'install_path' => __DIR__ . '/../../',
    97        'aliases' => array(),
     8        'reference' => '2dbb85dd82352433c4b6befcc78484084dcff081',
     9        'name' => 'halalbrains/login-me-now',
    1010        'dev' => true,
    1111    ),
    1212    'versions' => array(
    13         '__root__' => array(
    14             'pretty_version' => 'dev-master',
    15             'version' => 'dev-master',
    16             'reference' => '67ab278990cf6ea914610b24342ebfa80a2f54eb',
    17             'type' => 'library',
    18             'install_path' => __DIR__ . '/../../',
    19             'aliases' => array(),
    20             'dev_requirement' => false,
    21         ),
    2213        'firebase/php-jwt' => array(
    23             'pretty_version' => 'v6.5.0',
    24             'version' => '6.5.0.0',
    25             'reference' => 'e94e7353302b0c11ec3cfff7180cd0b1743975d2',
     14            'pretty_version' => 'v6.8.1',
     15            'version' => '6.8.1.0',
    2616            'type' => 'library',
    2717            'install_path' => __DIR__ . '/../firebase/php-jwt',
    2818            'aliases' => array(),
     19            'reference' => '5dbc8959427416b8ee09a100d7a8588c00fb2e26',
    2920            'dev_requirement' => false,
    3021        ),
     
    3223            'pretty_version' => 'v2.15.0',
    3324            'version' => '2.15.0.0',
     25            'type' => 'library',
     26            'install_path' => __DIR__ . '/../google/apiclient',
     27            'aliases' => array(),
    3428            'reference' => '49787fa30b8d8313146a61efbf77ed1fede723c2',
    35             'type' => 'library',
    36             'install_path' => __DIR__ . '/../google/apiclient',
    37             'aliases' => array(),
    3829            'dev_requirement' => false,
    3930        ),
    4031        'google/apiclient-services' => array(
    41             'pretty_version' => 'v0.303.0',
    42             'version' => '0.303.0.0',
    43             'reference' => 'b9c143453a94d5e6ed7257d065dcc5662619eaf4',
     32            'pretty_version' => 'v0.312.0',
     33            'version' => '0.312.0.0',
    4434            'type' => 'library',
    4535            'install_path' => __DIR__ . '/../google/apiclient-services',
    4636            'aliases' => array(),
     37            'reference' => '45d47fed73b28254c511882bc743b1690a99558d',
    4738            'dev_requirement' => false,
    4839        ),
     
    5041            'pretty_version' => 'v1.28.0',
    5142            'version' => '1.28.0.0',
     43            'type' => 'library',
     44            'install_path' => __DIR__ . '/../google/auth',
     45            'aliases' => array(),
    5246            'reference' => '07f7f6305f1b7df32b2acf6e101c1225c839c7ac',
    53             'type' => 'library',
    54             'install_path' => __DIR__ . '/../google/auth',
    55             'aliases' => array(),
    5647            'dev_requirement' => false,
    5748        ),
     
    5950            'pretty_version' => '7.7.0',
    6051            'version' => '7.7.0.0',
     52            'type' => 'library',
     53            'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
     54            'aliases' => array(),
    6155            'reference' => 'fb7566caccf22d74d1ab270de3551f72a58399f5',
    62             'type' => 'library',
    63             'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
    64             'aliases' => array(),
    6556            'dev_requirement' => false,
    6657        ),
    6758        'guzzlehttp/promises' => array(
    68             'pretty_version' => '2.0.0',
    69             'version' => '2.0.0.0',
    70             'reference' => '3a494dc7dc1d7d12e511890177ae2d0e6c107da6',
     59            'pretty_version' => '2.0.1',
     60            'version' => '2.0.1.0',
    7161            'type' => 'library',
    7262            'install_path' => __DIR__ . '/../guzzlehttp/promises',
    7363            'aliases' => array(),
     64            'reference' => '111166291a0f8130081195ac4556a5587d7f1b5d',
    7465            'dev_requirement' => false,
    7566        ),
    7667        'guzzlehttp/psr7' => array(
    77             'pretty_version' => '2.5.0',
    78             'version' => '2.5.0.0',
    79             'reference' => 'b635f279edd83fc275f822a1188157ffea568ff6',
     68            'pretty_version' => '2.6.0',
     69            'version' => '2.6.0.0',
    8070            'type' => 'library',
    8171            'install_path' => __DIR__ . '/../guzzlehttp/psr7',
    8272            'aliases' => array(),
     73            'reference' => '8bd7c33a0734ae1c5d074360512beb716bef3f77',
     74            'dev_requirement' => false,
     75        ),
     76        'halalbrains/login-me-now' => array(
     77            'pretty_version' => 'dev-master',
     78            'version' => 'dev-master',
     79            'type' => 'library',
     80            'install_path' => __DIR__ . '/../../',
     81            'aliases' => array(),
     82            'reference' => '2dbb85dd82352433c4b6befcc78484084dcff081',
    8383            'dev_requirement' => false,
    8484        ),
     
    8686            'pretty_version' => '2.9.1',
    8787            'version' => '2.9.1.0',
     88            'type' => 'library',
     89            'install_path' => __DIR__ . '/../monolog/monolog',
     90            'aliases' => array(),
    8891            'reference' => 'f259e2b15fb95494c83f52d3caad003bbf5ffaa1',
    89             'type' => 'library',
    90             'install_path' => __DIR__ . '/../monolog/monolog',
    91             'aliases' => array(),
    9292            'dev_requirement' => false,
    9393        ),
     
    9595            'pretty_version' => 'v2.6.3',
    9696            'version' => '2.6.3.0',
     97            'type' => 'library',
     98            'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
     99            'aliases' => array(),
    97100            'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
    98             'type' => 'library',
    99             'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
    100             'aliases' => array(),
    101101            'dev_requirement' => false,
    102102        ),
     
    104104            'pretty_version' => 'v9.99.100',
    105105            'version' => '9.99.100.0',
     106            'type' => 'library',
     107            'install_path' => __DIR__ . '/../paragonie/random_compat',
     108            'aliases' => array(),
    106109            'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',
    107             'type' => 'library',
    108             'install_path' => __DIR__ . '/../paragonie/random_compat',
    109             'aliases' => array(),
    110110            'dev_requirement' => false,
    111111        ),
    112112        'phpseclib/phpseclib' => array(
    113             'pretty_version' => '3.0.19',
    114             'version' => '3.0.19.0',
    115             'reference' => 'cc181005cf548bfd8a4896383bb825d859259f95',
     113            'pretty_version' => '3.0.21',
     114            'version' => '3.0.21.0',
    116115            'type' => 'library',
    117116            'install_path' => __DIR__ . '/../phpseclib/phpseclib',
    118117            'aliases' => array(),
     118            'reference' => '4580645d3fc05c189024eb3b834c6c1e4f0f30a1',
    119119            'dev_requirement' => false,
    120120        ),
     
    122122            'pretty_version' => '1.0.1',
    123123            'version' => '1.0.1.0',
     124            'type' => 'library',
     125            'install_path' => __DIR__ . '/../psr/cache',
     126            'aliases' => array(),
    124127            'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
    125             'type' => 'library',
    126             'install_path' => __DIR__ . '/../psr/cache',
    127             'aliases' => array(),
    128128            'dev_requirement' => false,
    129129        ),
     
    131131            'pretty_version' => '1.0.2',
    132132            'version' => '1.0.2.0',
     133            'type' => 'library',
     134            'install_path' => __DIR__ . '/../psr/http-client',
     135            'aliases' => array(),
    133136            'reference' => '0955afe48220520692d2d09f7ab7e0f93ffd6a31',
    134             'type' => 'library',
    135             'install_path' => __DIR__ . '/../psr/http-client',
    136             'aliases' => array(),
    137137            'dev_requirement' => false,
    138138        ),
     
    146146            'pretty_version' => '1.0.2',
    147147            'version' => '1.0.2.0',
     148            'type' => 'library',
     149            'install_path' => __DIR__ . '/../psr/http-factory',
     150            'aliases' => array(),
    148151            'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
    149             'type' => 'library',
    150             'install_path' => __DIR__ . '/../psr/http-factory',
    151             'aliases' => array(),
    152152            'dev_requirement' => false,
    153153        ),
     
    161161            'pretty_version' => '2.0',
    162162            'version' => '2.0.0.0',
     163            'type' => 'library',
     164            'install_path' => __DIR__ . '/../psr/http-message',
     165            'aliases' => array(),
    163166            'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
    164             'type' => 'library',
    165             'install_path' => __DIR__ . '/../psr/http-message',
    166             'aliases' => array(),
    167167            'dev_requirement' => false,
    168168        ),
     
    176176            'pretty_version' => '1.1.4',
    177177            'version' => '1.1.4.0',
     178            'type' => 'library',
     179            'install_path' => __DIR__ . '/../psr/log',
     180            'aliases' => array(),
    178181            'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
    179             'type' => 'library',
    180             'install_path' => __DIR__ . '/../psr/log',
    181             'aliases' => array(),
    182182            'dev_requirement' => false,
    183183        ),
     
    191191            'pretty_version' => '3.0.3',
    192192            'version' => '3.0.3.0',
     193            'type' => 'library',
     194            'install_path' => __DIR__ . '/../ralouphie/getallheaders',
     195            'aliases' => array(),
    193196            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
    194             'type' => 'library',
    195             'install_path' => __DIR__ . '/../ralouphie/getallheaders',
    196             'aliases' => array(),
    197197            'dev_requirement' => false,
    198198        ),
     
    200200            'pretty_version' => 'v2.5.2',
    201201            'version' => '2.5.2.0',
     202            'type' => 'library',
     203            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
     204            'aliases' => array(),
    202205            'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
    203             'type' => 'library',
    204             'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
    205             'aliases' => array(),
    206206            'dev_requirement' => false,
    207207        ),
  • login-me-now/trunk/vendor/firebase/php-jwt/CHANGELOG.md

    r2933044 r2967574  
    11# Changelog
     2
     3## [6.8.1](https://github.com/firebase/php-jwt/compare/v6.8.0...v6.8.1) (2023-07-14)
     4
     5
     6### Bug Fixes
     7
     8* accept float claims but round down to ignore them ([#492](https://github.com/firebase/php-jwt/issues/492)) ([3936842](https://github.com/firebase/php-jwt/commit/39368423beeaacb3002afa7dcb75baebf204fe7e))
     9* different BeforeValidException messages for nbf and iat ([#526](https://github.com/firebase/php-jwt/issues/526)) ([0a53cf2](https://github.com/firebase/php-jwt/commit/0a53cf2986e45c2bcbf1a269f313ebf56a154ee4))
     10
     11## [6.8.0](https://github.com/firebase/php-jwt/compare/v6.7.0...v6.8.0) (2023-06-14)
     12
     13
     14### Features
     15
     16* add support for P-384 curve ([#515](https://github.com/firebase/php-jwt/issues/515)) ([5de4323](https://github.com/firebase/php-jwt/commit/5de4323f4baf4d70bca8663bd87682a69c656c3d))
     17
     18
     19### Bug Fixes
     20
     21* handle invalid http responses ([#508](https://github.com/firebase/php-jwt/issues/508)) ([91c39c7](https://github.com/firebase/php-jwt/commit/91c39c72b22fc3e1191e574089552c1f2041c718))
     22
     23## [6.7.0](https://github.com/firebase/php-jwt/compare/v6.6.0...v6.7.0) (2023-06-14)
     24
     25
     26### Features
     27
     28* add ed25519 support to JWK (public keys) ([#452](https://github.com/firebase/php-jwt/issues/452)) ([e53979a](https://github.com/firebase/php-jwt/commit/e53979abae927de916a75b9d239cfda8ce32be2a))
     29
     30## [6.6.0](https://github.com/firebase/php-jwt/compare/v6.5.0...v6.6.0) (2023-06-13)
     31
     32
     33### Features
     34
     35* allow get headers when decoding token ([#442](https://github.com/firebase/php-jwt/issues/442)) ([fb85f47](https://github.com/firebase/php-jwt/commit/fb85f47cfaeffdd94faf8defdf07164abcdad6c3))
     36
     37
     38### Bug Fixes
     39
     40* only check iat if nbf is not used ([#493](https://github.com/firebase/php-jwt/issues/493)) ([398ccd2](https://github.com/firebase/php-jwt/commit/398ccd25ea12fa84b9e4f1085d5ff448c21ec797))
    241
    342## [6.5.0](https://github.com/firebase/php-jwt/compare/v6.4.0...v6.5.0) (2023-05-12)
  • login-me-now/trunk/vendor/firebase/php-jwt/README.md

    r2933044 r2967574  
    4646$jwt = JWT::encode($payload, $key, 'HS256');
    4747$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    48 
    4948print_r($decoded);
     49
     50// Pass a stdClass in as the third parameter to get the decoded header values
     51$decoded = JWT::decode($jwt, new Key($key, 'HS256'), $headers = new stdClass());
     52print_r($headers);
    5053
    5154/*
     
    7174this library. This is because without verifying the JWT, the header values could have been tampered with.
    7275Any value pulled from an unverified header should be treated as if it could be any string sent in from an
    73 attacker.  If this is something you still want to do in your application for whatever reason, it's possible to 
    74 decode the header values manually simply by calling `json_decode` and `base64_decode` on the JWT 
     76attacker.  If this is something you still want to do in your application for whatever reason, it's possible to
     77decode the header values manually simply by calling `json_decode` and `base64_decode` on the JWT
    7578header part:
    7679```php
     
    374377
    375378```php
     379use Firebase\JWT\JWT;
     380use UnexpectedValueException;
    376381try {
    377382    $decoded = JWT::decode($payload, $keys);
  • login-me-now/trunk/vendor/firebase/php-jwt/src/CachedKeySet.php

    r2911753 r2967574  
    179179            $request = $this->httpFactory->createRequest('GET', $this->jwksUri);
    180180            $jwksResponse = $this->httpClient->sendRequest($request);
     181            if ($jwksResponse->getStatusCode() !== 200) {
     182                throw new UnexpectedValueException(
     183                    sprintf('HTTP Error: %d %s for URI "%s"',
     184                        $jwksResponse->getStatusCode(),
     185                        $jwksResponse->getReasonPhrase(),
     186                        $this->jwksUri,
     187                    ),
     188                    $jwksResponse->getStatusCode()
     189                );
     190            }
    181191            $this->keySet = $this->formatJwksForCache((string) $jwksResponse->getBody());
    182192
  • login-me-now/trunk/vendor/firebase/php-jwt/src/JWK.php

    r2911753 r2967574  
    2828        'P-256' => '1.2.840.10045.3.1.7', // Len: 64
    2929        'secp256k1' => '1.3.132.0.10', // Len: 64
    30         // 'P-384' => '1.3.132.0.34', // Len: 96 (not yet supported)
     30        'P-384' => '1.3.132.0.34', // Len: 96
    3131        // 'P-521' => '1.3.132.0.35', // Len: 132 (not supported)
     32    ];
     33
     34    // For keys with "kty" equal to "OKP" (Octet Key Pair), the "crv" parameter must contain the key subtype.
     35    // This library supports the following subtypes:
     36    private const OKP_SUBTYPES = [
     37        'Ed25519' => true, // RFC 8037
    3238    ];
    3339
     
    146152                $publicKey = self::createPemFromCrvAndXYCoordinates($jwk['crv'], $jwk['x'], $jwk['y']);
    147153                return new Key($publicKey, $jwk['alg']);
     154            case 'OKP':
     155                if (isset($jwk['d'])) {
     156                    // The key is actually a private key
     157                    throw new UnexpectedValueException('Key data must be for a public key');
     158                }
     159
     160                if (!isset($jwk['crv'])) {
     161                    throw new UnexpectedValueException('crv not set');
     162                }
     163
     164                if (empty(self::OKP_SUBTYPES[$jwk['crv']])) {
     165                    throw new DomainException('Unrecognised or unsupported OKP key subtype');
     166                }
     167
     168                if (empty($jwk['x'])) {
     169                    throw new UnexpectedValueException('x not set');
     170                }
     171
     172                // This library works internally with EdDSA keys (Ed25519) encoded in standard base64.
     173                $publicKey = JWT::convertBase64urlToBase64($jwk['x']);
     174                return new Key($publicKey, $jwk['alg']);
    148175            default:
    149                 // Currently only RSA is supported
    150176                break;
    151177        }
     
    157183     * Converts the EC JWK values to pem format.
    158184     *
    159      * @param   string  $crv The EC curve (only P-256 is supported)
     185     * @param   string  $crv The EC curve (only P-256 & P-384 is supported)
    160186     * @param   string  $x   The EC x-coordinate
    161187     * @param   string  $y   The EC y-coordinate
  • login-me-now/trunk/vendor/firebase/php-jwt/src/JWT.php

    r2933044 r2967574  
    7979     *                                                                      'HS256', 'HS384', 'HS512', 'RS256', 'RS384'
    8080     *                                                                      and 'RS512'.
     81     * @param stdClass               $headers                               Optional. Populates stdClass with headers.
    8182     *
    8283     * @return stdClass The JWT's payload as a PHP object
     
    9596    public static function decode(
    9697        string $jwt,
    97         $keyOrKeyArray
     98        $keyOrKeyArray,
     99        stdClass &$headers = null
    98100    ): stdClass {
    99101        // Validate JWT
     
    112114            throw new UnexpectedValueException('Invalid header encoding');
    113115        }
     116        if ($headers !== null) {
     117            $headers = $header;
     118        }
    114119        $payloadRaw = static::urlsafeB64Decode($bodyb64);
    115120        if (null === ($payload = static::jsonDecode($payloadRaw))) {
     
    148153        // Check the nbf if it is defined. This is the time that the
    149154        // token can actually be used. If it's not yet that time, abort.
    150         if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) {
     155        if (isset($payload->nbf) && floor($payload->nbf) > ($timestamp + static::$leeway)) {
    151156            throw new BeforeValidException(
    152                 'Cannot handle token prior to ' . \date(DateTime::ISO8601, $payload->nbf)
     157                'Cannot handle token with nbf prior to ' . \date(DateTime::ISO8601, (int) $payload->nbf)
    153158            );
    154159        }
     
    157162        // using tokens that have been created for later use (and haven't
    158163        // correctly used the nbf claim).
    159         if (isset($payload->iat) && $payload->iat > ($timestamp + static::$leeway)) {
     164        if (!isset($payload->nbf) && isset($payload->iat) && floor($payload->iat) > ($timestamp + static::$leeway)) {
    160165            throw new BeforeValidException(
    161                 'Cannot handle token prior to ' . \date(DateTime::ISO8601, $payload->iat)
     166                'Cannot handle token with iat prior to ' . \date(DateTime::ISO8601, (int) $payload->iat)
    162167            );
    163168        }
     
    216221     * @param string $msg  The message to sign
    217222     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $key  The secret key.
    218      * @param string $alg  Supported algorithms are 'ES384','ES256', 'ES256K', 'HS256',
     223     * @param string $alg  Supported algorithms are 'EdDSA', 'ES384', 'ES256', 'ES256K', 'HS256',
    219224     *                    'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
    220225     *
     
    279284     * @param string $msg         The original message (header and body)
    280285     * @param string $signature   The original signature
    281      * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $keyMaterial For HS*, a string key works. for RS*, must be an instance of OpenSSLAsymmetricKey
     286     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $keyMaterial For Ed*, ES*, HS*, a string key works. for RS*, must be an instance of OpenSSLAsymmetricKey
    282287     * @param string $alg         The algorithm
    283288     *
     
    401406    public static function urlsafeB64Decode(string $input): string
    402407    {
     408        return \base64_decode(self::convertBase64UrlToBase64($input));
     409    }
     410
     411    /**
     412     * Convert a string in the base64url (URL-safe Base64) encoding to standard base64.
     413     *
     414     * @param string $input A Base64 encoded string with URL-safe characters (-_ and no padding)
     415     *
     416     * @return string A Base64 encoded string with standard characters (+/) and padding (=), when
     417     * needed.
     418     *
     419     * @see https://www.rfc-editor.org/rfc/rfc4648
     420     */
     421    public static function convertBase64UrlToBase64(string $input): string
     422    {
    403423        $remainder = \strlen($input) % 4;
    404424        if ($remainder) {
     
    406426            $input .= \str_repeat('=', $padlen);
    407427        }
    408         return \base64_decode(\strtr($input, '-_', '+/'));
     428        return \strtr($input, '-_', '+/');
    409429    }
    410430
  • login-me-now/trunk/vendor/google/apiclient-services/src/Oauth2/Resource/UserinfoV2Me.php

    r2911753 r2967574  
    3434   *
    3535   * @param array $optParams Optional parameters.
    36    * @return Userinfo
     36   * @return UserinfoModel
    3737   */
    3838  public function get($optParams = [])
  • login-me-now/trunk/vendor/guzzlehttp/promises/CHANGELOG.md

    r2933044 r2967574  
    22
    33
    4 ## 2.0.0 - TBC
     4## 2.0.1 - 2023-08-03
     5
     6### Changed
     7
     8- PHP 8.3 support
     9
     10
     11## 2.0.0 - 2023-05-21
    512
    613### Added
  • login-me-now/trunk/vendor/guzzlehttp/promises/README.md

    r2933044 r2967574  
    4242|---------|------------------------|--------------|
    4343| 1.x     | Bug and security fixes | >=5.5,<8.3   |
    44 | 2.x     | Latest                 | >=7.2.5,<8.3 |
     44| 2.x     | Latest                 | >=7.2.5,<8.4 |
    4545
    4646
  • login-me-now/trunk/vendor/guzzlehttp/promises/src/RejectionException.php

    r2933044 r2967574  
    1919     * @param string|null $description Optional description.
    2020     */
    21     public function __construct($reason, $description = null)
     21    public function __construct($reason, ?string $description = null)
    2222    {
    2323        $this->reason = $reason;
  • login-me-now/trunk/vendor/guzzlehttp/psr7/CHANGELOG.md

    r2911753 r2967574  
    66and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
    77
    8 ## Unreleased
     8## 2.6.0 - 2023-08-03
     9
     10### Changed
     11
     12- Updated the mime type map to add some new entries, fix a couple of invalid entries, and remove an invalid entry
     13- Fallback to `application/octet-stream` if we are unable to guess the content type for a multipart file upload
     14
     15## 2.5.1 - 2023-08-03
     16
     17### Fixed
     18
     19- Corrected mime type for `.acc` files to `audio/aac`
     20
     21### Changed
     22
     23- PHP 8.3 support
    924
    1025## 2.5.0 - 2023-04-17
  • login-me-now/trunk/vendor/guzzlehttp/psr7/README.md

    r2911753 r2967574  
    99
    1010
    11 # Installation
     11## Features
     12
     13This package comes with a number of stream implementations and stream
     14decorators.
     15
     16
     17## Installation
    1218
    1319```shell
     
    1521```
    1622
    17 # Stream implementation
    18 
    19 This package comes with a number of stream implementations and stream
    20 decorators.
     23## Version Guidance
     24
     25| Version | Status              | PHP Version  |
     26|---------|---------------------|--------------|
     27| 1.x     | Security fixes only | >=5.4,<8.1   |
     28| 2.x     | Latest              | >=7.2.5,<8.4 |
    2129
    2230
     
    856864
    857865
    858 ## Version Guidance
    859 
    860 | Version | Status         | PHP Version      |
    861 |---------|----------------|------------------|
    862 | 1.x     | Security fixes | >=5.4,<8.1       |
    863 | 2.x     | Latest         | ^7.2.5 \|\| ^8.0 |
    864 
    865 
    866866## Security
    867867
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/AppendStream.php

    r2911753 r2967574  
    4141        try {
    4242            $this->rewind();
     43
    4344            return $this->getContents();
    4445        } catch (\Throwable $e) {
     
    4748            }
    4849            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);
     50
    4951            return '';
    5052        }
     
    168170            } catch (\Exception $e) {
    169171                throw new \RuntimeException('Unable to seek stream '
    170                     . $i . ' of the AppendStream', 0, $e);
     172                    .$i.' of the AppendStream', 0, $e);
    171173            }
    172174        }
     
    198200                    break;
    199201                }
    200                 $this->current++;
     202                ++$this->current;
    201203            }
    202204
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/FnStream.php

    r2911753 r2967574  
    1919        '__toString', 'close', 'detach', 'rewind',
    2020        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
    21         'isReadable', 'read', 'getContents', 'getMetadata'
     21        'isReadable', 'read', 'getContents', 'getMetadata',
    2222    ];
    2323
     
    3434        // Create the functions on the class
    3535        foreach ($methods as $name => $fn) {
    36             $this->{'_fn_' . $name} = $fn;
     36            $this->{'_fn_'.$name} = $fn;
    3737        }
    3838    }
     
    4646    {
    4747        throw new \BadMethodCallException(str_replace('_fn_', '', $name)
    48             . '() is not implemented in the FnStream');
     48            .'() is not implemented in the FnStream');
    4949    }
    5050
     
    100100            }
    101101            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);
     102
    102103            return '';
    103104        }
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Header.php

    r2911753 r2967574  
    9090            $isQuoted = false;
    9191            $isEscaped = false;
    92             for ($i = 0, $max = \strlen($value); $i < $max; $i++) {
     92            for ($i = 0, $max = \strlen($value); $i < $max; ++$i) {
    9393                if ($isEscaped) {
    9494                    $v .= $value[$i];
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/HttpFactory.php

    r2911753 r2967574  
    2424 * and inject the instance of this class multiple times.
    2525 */
    26 final class HttpFactory implements
    27     RequestFactoryInterface,
    28     ResponseFactoryInterface,
    29     ServerRequestFactoryInterface,
    30     StreamFactoryInterface,
    31     UploadedFileFactoryInterface,
    32     UriFactoryInterface
     26final class HttpFactory implements RequestFactoryInterface, ResponseFactoryInterface, ServerRequestFactoryInterface, StreamFactoryInterface, UploadedFileFactoryInterface, UriFactoryInterface
    3327{
    3428    public function createUploadedFile(
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/InflateStream.php

    r2911753 r2967574  
    1414 * to a Guzzle stream resource to be used as a Guzzle stream.
    1515 *
    16  * @link http://tools.ietf.org/html/rfc1950
    17  * @link http://tools.ietf.org/html/rfc1952
    18  * @link http://php.net/manual/en/filters.compression.php
     16 * @see http://tools.ietf.org/html/rfc1950
     17 * @see http://tools.ietf.org/html/rfc1952
     18 * @see http://php.net/manual/en/filters.compression.php
    1919 */
    2020final class InflateStream implements StreamInterface
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Message.php

    r2911753 r2967574  
    1919    {
    2020        if ($message instanceof RequestInterface) {
    21             $msg = trim($message->getMethod() . ' '
    22                     . $message->getRequestTarget())
    23                 . ' HTTP/' . $message->getProtocolVersion();
     21            $msg = trim($message->getMethod().' '
     22                    .$message->getRequestTarget())
     23                .' HTTP/'.$message->getProtocolVersion();
    2424            if (!$message->hasHeader('host')) {
    25                 $msg .= "\r\nHost: " . $message->getUri()->getHost();
     25                $msg .= "\r\nHost: ".$message->getUri()->getHost();
    2626            }
    2727        } elseif ($message instanceof ResponseInterface) {
    28             $msg = 'HTTP/' . $message->getProtocolVersion() . ' '
    29                 . $message->getStatusCode() . ' '
    30                 . $message->getReasonPhrase();
     28            $msg = 'HTTP/'.$message->getProtocolVersion().' '
     29                .$message->getStatusCode().' '
     30                .$message->getReasonPhrase();
    3131        } else {
    3232            throw new \InvalidArgumentException('Unknown message type');
     
    3636            if (strtolower($name) === 'set-cookie') {
    3737                foreach ($values as $value) {
    38                     $msg .= "\r\n{$name}: " . $value;
     38                    $msg .= "\r\n{$name}: ".$value;
    3939                }
    4040            } else {
    41                 $msg .= "\r\n{$name}: " . implode(', ', $values);
     41                $msg .= "\r\n{$name}: ".implode(', ', $values);
    4242            }
    4343        }
    4444
    45         return "{$msg}\r\n\r\n" . $message->getBody();
     45        return "{$msg}\r\n\r\n".$message->getBody();
    4646    }
    4747
     
    191191        $scheme = substr($host, -4) === ':443' ? 'https' : 'http';
    192192
    193         return $scheme . '://' . $host . '/' . ltrim($path, '/');
     193        return $scheme.'://'.$host.'/'.ltrim($path, '/');
    194194    }
    195195
     
    232232        // responses without space and reason as well.
    233233        if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) {
    234             throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']);
     234            throw new \InvalidArgumentException('Invalid response string: '.$data['start-line']);
    235235        }
    236236        $parts = explode(' ', $data['start-line'], 3);
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/MessageTrait.php

    r2911753 r2967574  
    1717
    1818    /** @var array<string, string> Map of lowercase header name => original name at registration */
    19     private $headerNames  = [];
     19    private $headerNames = [];
    2020
    2121    /** @var string */
     
    3838        $new = clone $this;
    3939        $new->protocol = $version;
     40
    4041        return $new;
    4142    }
     
    136137        $new = clone $this;
    137138        $new->stream = $body;
     139
    138140        return $new;
    139141    }
     
    225227        }
    226228
    227         if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) {
     229        if (!preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) {
    228230            throw new \InvalidArgumentException(
    229231                sprintf('"%s" is not valid header name.', $header)
     
    255257        // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting
    256258        // folding is not likely to break any legitimate use case.
    257         if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) {
     259        if (!preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) {
    258260            throw new \InvalidArgumentException(
    259261                sprintf('"%s" is not valid header value.', $value)
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/MimeType.php

    r2911753 r2967574  
    1919        '123' => 'application/vnd.lotus-1-2-3',
    2020        'aab' => 'application/x-authorware-bin',
    21         'aac' => 'audio/x-acc',
     21        'aac' => 'audio/aac',
    2222        'aam' => 'application/x-authorware-map',
    2323        'aas' => 'application/x-authorware-seg',
     
    3030        'acutc' => 'application/vnd.acucorp',
    3131        'adp' => 'audio/adpcm',
     32        'adts' => 'audio/aac',
    3233        'aep' => 'application/vnd.audiograph',
    3334        'afm' => 'application/x-font-type1',
     
    4243        'ait' => 'application/vnd.dvb.ait',
    4344        'ami' => 'application/vnd.amiga.ami',
     45        'aml' => 'application/automationml-aml+xml',
     46        'amlx' => 'application/automationml-amlx+zip',
    4447        'amr' => 'audio/amr',
    4548        'apk' => 'application/vnd.android.package-archive',
    4649        'apng' => 'image/apng',
    4750        'appcache' => 'text/cache-manifest',
     51        'appinstaller' => 'application/appinstaller',
    4852        'application' => 'application/x-ms-application',
     53        'appx' => 'application/appx',
     54        'appxbundle' => 'application/appxbundle',
    4955        'apr' => 'application/vnd.lotus-approach',
    5056        'arc' => 'application/x-freearc',
     
    9197        'bpmn' => 'application/octet-stream',
    9298        'bsp' => 'model/vnd.valve.source.compiled-map',
     99        'btf' => 'image/prs.btif',
    93100        'btif' => 'image/prs.btif',
    94101        'buffer' => 'application/octet-stream',
     
    142149        'cla' => 'application/vnd.claymore',
    143150        'class' => 'application/octet-stream',
     151        'cld' => 'model/vnd.cld',
    144152        'clkk' => 'application/vnd.crick.clicker.keyboard',
    145153        'clkp' => 'application/vnd.crick.clicker.palette',
     
    176184        'cu' => 'application/cu-seeme',
    177185        'curl' => 'text/vnd.curl',
     186        'cwl' => 'application/cwl',
    178187        'cww' => 'application/prs.cww',
    179188        'cxt' => 'application/x-director',
     
    198207        'dfac' => 'application/vnd.dreamfactory',
    199208        'dgc' => 'application/x-dgc-compressed',
     209        'dib' => 'image/bmp',
    200210        'dic' => 'text/x-c',
    201211        'dir' => 'application/x-director',
     
    220230        'dp' => 'application/vnd.osgi.dp',
    221231        'dpg' => 'application/vnd.dpgraph',
     232        'dpx' => 'image/dpx',
    222233        'dra' => 'audio/vnd.dra',
    223234        'drle' => 'image/dicom-rle',
     
    256267        'eps' => 'application/postscript',
    257268        'epub' => 'application/epub+zip',
    258         'es' => 'application/ecmascript',
    259269        'es3' => 'application/vnd.eszigno3+xml',
    260270        'esa' => 'application/vnd.osgi.subsystem',
     
    449459        'jsonml' => 'application/jsonml+json',
    450460        'jsx' => 'text/jsx',
     461        'jt' => 'model/jt',
    451462        'jxr' => 'image/jxr',
    452463        'jxra' => 'image/jxra',
     
    553564        'mj2' => 'video/mj2',
    554565        'mjp2' => 'video/mj2',
    555         'mjs' => 'application/javascript',
     566        'mjs' => 'text/javascript',
    556567        'mk3d' => 'video/x-matroska',
    557568        'mka' => 'audio/x-matroska',
     
    603614        'msh' => 'model/mesh',
    604615        'msi' => 'application/x-msdownload',
     616        'msix' => 'application/msix',
     617        'msixbundle' => 'application/msixbundle',
    605618        'msl' => 'application/vnd.mobius.msl',
    606619        'msm' => 'application/octet-stream',
     
    776789        'pwn' => 'application/vnd.3m.post-it-notes',
    777790        'pya' => 'audio/vnd.ms-playready.media.pya',
     791        'pyo' => 'model/vnd.pytha.pyox',
     792        'pyox' => 'model/vnd.pytha.pyox',
    778793        'pyv' => 'video/vnd.ms-playready.media.pyv',
    779794        'qam' => 'application/vnd.epson.quickanime',
     
    924939        'stc' => 'application/vnd.sun.xml.calc.template',
    925940        'std' => 'application/vnd.sun.xml.draw.template',
     941        'step' => 'application/STEP',
    926942        'stf' => 'application/vnd.wt.stf',
    927943        'sti' => 'application/vnd.sun.xml.impress.template',
    928944        'stk' => 'application/hyperstudio',
    929945        'stl' => 'model/stl',
     946        'stp' => 'application/STEP',
    930947        'stpx' => 'model/step+xml',
    931948        'stpxz' => 'model/step-xml+zip',
     
    10141031        'umj' => 'application/vnd.umajin',
    10151032        'unityweb' => 'application/vnd.unity',
     1033        'uo' => 'application/vnd.uoml+xml',
    10161034        'uoml' => 'application/vnd.uoml+xml',
    10171035        'uri' => 'text/uri-list',
    10181036        'uris' => 'text/uri-list',
    10191037        'urls' => 'text/uri-list',
     1038        'usda' => 'model/vnd.usda',
    10201039        'usdz' => 'model/vnd.usdz+zip',
    10211040        'ustar' => 'application/x-ustar',
     
    10971116        'webp' => 'image/webp',
    10981117        'wg' => 'application/vnd.pmi.widget',
     1118        'wgsl' => 'text/wgsl',
    10991119        'wgt' => 'application/widget',
    11001120        'wif' => 'application/watcherinfo+xml',
     
    11511171        'xenc' => 'application/xenc+xml',
    11521172        'xer' => 'application/patch-ops-error+xml',
    1153         'xfdf' => 'application/vnd.adobe.xfdf',
     1173        'xfdf' => 'application/xfdf',
    11541174        'xfdl' => 'application/vnd.xfdl',
    11551175        'xht' => 'application/xhtml+xml',
     1176        'xhtm' => 'application/vnd.pwg-xhtml-print+xml',
    11561177        'xhtml' => 'application/xhtml+xml',
    11571178        'xhvml' => 'application/xv+xml',
     
    11841205        'xpx' => 'application/vnd.intercon.formnet',
    11851206        'xsd' => 'application/xml',
     1207        'xsf' => 'application/prs.xsf+xml',
    11861208        'xsl' => 'application/xml',
    11871209        'xslt' => 'application/xslt+xml',
     
    12191241     * Determines the mimetype of a file by looking at its extension.
    12201242     *
    1221      * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
     1243     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
    12221244     */
    12231245    public static function fromFilename(string $filename): ?string
     
    12291251     * Maps a file extensions to a mimetype.
    12301252     *
    1231      * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
     1253     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
    12321254     */
    12331255    public static function fromExtension(string $extension): ?string
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/MultipartStream.php

    r2911753 r2967574  
    6161        }
    6262
    63         return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n";
     63        return "--{$this->boundary}\r\n".trim($str)."\r\n\r\n";
    6464    }
    6565
     
    7373        foreach ($elements as $element) {
    7474            if (!is_array($element)) {
    75                 throw new \UnexpectedValueException("An array is expected");
     75                throw new \UnexpectedValueException('An array is expected');
    7676            }
    7777            $this->addElement($stream, $element);
     
    138138        $type = $this->getHeader($headers, 'content-type');
    139139        if (!$type && ($filename === '0' || $filename)) {
    140             if ($type = MimeType::fromFilename($filename)) {
    141                 $headers['Content-Type'] = $type;
    142             }
     140            $headers['Content-Type'] = MimeType::fromFilename($filename) ?? 'application/octet-stream';
    143141        }
    144142
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/PumpStream.php

    r2911753 r2967574  
    6161            }
    6262            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);
     63
    6364            return '';
    6465        }
     
    170171                if ($data === false || $data === null) {
    171172                    $this->source = null;
     173
    172174                    return;
    173175                }
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Query.php

    r2911753 r2967574  
    9494                $v = is_bool($v) ? (int) $v : $v;
    9595                if ($v !== null) {
    96                     $qs .= '=' . $encoder((string) $v);
     96                    $qs .= '='.$encoder((string) $v);
    9797                }
    9898                $qs .= '&';
     
    102102                    $vv = is_bool($vv) ? (int) $vv : $vv;
    103103                    if ($vv !== null) {
    104                         $qs .= '=' . $encoder((string) $vv);
     104                        $qs .= '='.$encoder((string) $vv);
    105105                    }
    106106                    $qs .= '&';
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Request.php

    r2911753 r2967574  
    7070        }
    7171        if ($this->uri->getQuery() != '') {
    72             $target .= '?' . $this->uri->getQuery();
     72            $target .= '?'.$this->uri->getQuery();
    7373        }
    7474
     
    8686        $new = clone $this;
    8787        $new->requestTarget = $requestTarget;
     88
    8889        return $new;
    8990    }
     
    99100        $new = clone $this;
    100101        $new->method = strtoupper($method);
     102
    101103        return $new;
    102104    }
     
    132134
    133135        if (($port = $this->uri->getPort()) !== null) {
    134             $host .= ':' . $port;
     136            $host .= ':'.$port;
    135137        }
    136138
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Response.php

    r2911753 r2967574  
    139139        }
    140140        $new->reasonPhrase = (string) $reasonPhrase;
     141
    141142        return $new;
    142143    }
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Rfc7230.php

    r2911753 r2967574  
    1515     * Note: header delimiter (\r\n) is modified to \r?\n to accept line feed only delimiters for BC reasons.
    1616     *
    17      * @link    https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15
     17     * @see https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15
    1818     *
    1919     * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/ServerRequest.php

    r2911753 r2967574  
    145145            $spec = [
    146146                'tmp_name' => $files['tmp_name'][$key],
    147                 'size'     => $files['size'][$key] ?? null,
    148                 'error'    => $files['error'][$key] ?? null,
    149                 'name'     => $files['name'][$key] ?? null,
    150                 'type'     => $files['type'][$key] ?? null,
     147                'size' => $files['size'][$key] ?? null,
     148                'error' => $files['error'][$key] ?? null,
     149                'name' => $files['name'][$key] ?? null,
     150                'type' => $files['type'][$key] ?? null,
    151151            ];
    152152            $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);
     
    183183    private static function extractHostAndPortFromAuthority(string $authority): array
    184184    {
    185         $uri = 'http://' . $authority;
     185        $uri = 'http://'.$authority;
    186186        $parts = parse_url($uri);
    187187        if (false === $parts) {
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Stream.php

    r2911753 r2967574  
    6262        $meta = stream_get_meta_data($this->stream);
    6363        $this->seekable = $meta['seekable'];
    64         $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']);
    65         $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']);
     64        $this->readable = (bool) preg_match(self::READABLE_MODES, $meta['mode']);
     65        $this->writable = (bool) preg_match(self::WRITABLE_MODES, $meta['mode']);
    6666        $this->uri = $this->getMetadata('uri');
    6767    }
     
    8181                $this->seek(0);
    8282            }
     83
    8384            return $this->getContents();
    8485        } catch (\Throwable $e) {
     
    8788            }
    8889            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);
     90
    8991            return '';
    9092        }
     
    146148        if (is_array($stats) && isset($stats['size'])) {
    147149            $this->size = $stats['size'];
     150
    148151            return $this->size;
    149152        }
     
    208211        if (fseek($this->stream, $offset, $whence) === -1) {
    209212            throw new \RuntimeException('Unable to seek to stream position '
    210                 . $offset . ' with whence ' . var_export($whence, true));
     213                .$offset.' with whence '.var_export($whence, true));
    211214        }
    212215    }
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php

    r2911753 r2967574  
    3232        if ($name === 'stream') {
    3333            $this->stream = $this->createStream();
     34
    3435            return $this->stream;
    3536        }
     
    4445                $this->seek(0);
    4546            }
     47
    4648            return $this->getContents();
    4749        } catch (\Throwable $e) {
     
    5052            }
    5153            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);
     54
    5255            return '';
    5356        }
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/StreamWrapper.php

    r2911753 r2967574  
    4242        } else {
    4343            throw new \InvalidArgumentException('The stream must be readable, '
    44                 . 'writable, or both.');
     44                .'writable, or both.');
    4545        }
    4646
     
    5656    {
    5757        return stream_context_create([
    58             'guzzle' => ['stream' => $stream]
     58            'guzzle' => ['stream' => $stream],
    5959        ]);
    6060    }
     
    116116    public function stream_cast(int $cast_as)
    117117    {
    118         $stream = clone($this->stream);
     118        $stream = clone $this->stream;
    119119        $resource = $stream->detach();
    120120
     
    128128    {
    129129        static $modeMap = [
    130             'r'  => 33060,
     130            'r' => 33060,
    131131            'rb' => 33060,
    132132            'r+' => 33206,
    133             'w'  => 33188,
    134             'wb' => 33188
     133            'w' => 33188,
     134            'wb' => 33188,
    135135        ];
    136136
    137137        return [
    138             'dev'     => 0,
    139             'ino'     => 0,
    140             'mode'    => $modeMap[$this->mode],
    141             'nlink'   => 0,
    142             'uid'     => 0,
    143             'gid'     => 0,
    144             'rdev'    => 0,
    145             'size'    => $this->stream->getSize() ?: 0,
    146             'atime'   => 0,
    147             'mtime'   => 0,
    148             'ctime'   => 0,
     138            'dev' => 0,
     139            'ino' => 0,
     140            'mode' => $modeMap[$this->mode],
     141            'nlink' => 0,
     142            'uid' => 0,
     143            'gid' => 0,
     144            'rdev' => 0,
     145            'size' => $this->stream->getSize() ?: 0,
     146            'atime' => 0,
     147            'mtime' => 0,
     148            'ctime' => 0,
    149149            'blksize' => 0,
    150             'blocks'  => 0
     150            'blocks' => 0,
    151151        ];
    152152    }
     
    158158    {
    159159        return [
    160             'dev'     => 0,
    161             'ino'     => 0,
    162             'mode'    => 0,
    163             'nlink'   => 0,
    164             'uid'     => 0,
    165             'gid'     => 0,
    166             'rdev'    => 0,
    167             'size'    => 0,
    168             'atime'   => 0,
    169             'mtime'   => 0,
    170             'ctime'   => 0,
     160            'dev' => 0,
     161            'ino' => 0,
     162            'mode' => 0,
     163            'nlink' => 0,
     164            'uid' => 0,
     165            'gid' => 0,
     166            'rdev' => 0,
     167            'size' => 0,
     168            'atime' => 0,
     169            'mtime' => 0,
     170            'ctime' => 0,
    171171            'blksize' => 0,
    172             'blocks'  => 0
     172            'blocks' => 0,
    173173        ];
    174174    }
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Uri.php

    r2911753 r2967574  
    2626
    2727    private const DEFAULT_PORTS = [
    28         'http'  => 80,
     28        'http' => 80,
    2929        'https' => 443,
    3030        'ftp' => 21,
     
    4242     * Unreserved characters for use in a regex.
    4343     *
    44      * @link https://tools.ietf.org/html/rfc3986#section-2.3
     44     * @see https://tools.ietf.org/html/rfc3986#section-2.3
    4545     */
    4646    private const CHAR_UNRESERVED = 'a-zA-Z0-9_\-\.~';
     
    4949     * Sub-delims for use in a regex.
    5050     *
    51      * @link https://tools.ietf.org/html/rfc3986#section-2.2
     51     * @see https://tools.ietf.org/html/rfc3986#section-2.2
    5252     */
    5353    private const CHAR_SUB_DELIMS = '!\$&\'\(\)\*\+,;=';
     
    8888        }
    8989    }
     90
    9091    /**
    9192     * UTF-8 aware \parse_url() replacement.
     
    122123        );
    123124
    124         $result = parse_url($prefix . $encodedUrl);
     125        $result = parse_url($prefix.$encodedUrl);
    125126
    126127        if ($result === false) {
     
    162163     * that format).
    163164     *
    164      * @link https://tools.ietf.org/html/rfc3986#section-5.3
     165     * @see https://tools.ietf.org/html/rfc3986#section-5.3
    165166     */
    166167    public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string
     
    170171        // weak type checks to also accept null until we can add scalar type hints
    171172        if ($scheme != '') {
    172             $uri .= $scheme . ':';
     173            $uri .= $scheme.':';
    173174        }
    174175
    175176        if ($authority != '' || $scheme === 'file') {
    176             $uri .= '//' . $authority;
     177            $uri .= '//'.$authority;
    177178        }
    178179
    179180        if ($authority != '' && $path != '' && $path[0] != '/') {
    180             $path = '/' . $path;
     181            $path = '/'.$path;
    181182        }
    182183
     
    184185
    185186        if ($query != '') {
    186             $uri .= '?' . $query;
     187            $uri .= '?'.$query;
    187188        }
    188189
    189190        if ($fragment != '') {
    190             $uri .= '#' . $fragment;
     191            $uri .= '#'.$fragment;
    191192        }
    192193
     
    219220     * @see Uri::isAbsolutePathReference
    220221     * @see Uri::isRelativePathReference
    221      * @link https://tools.ietf.org/html/rfc3986#section-4
     222     * @see https://tools.ietf.org/html/rfc3986#section-4
    222223     */
    223224    public static function isAbsolute(UriInterface $uri): bool
     
    231232     * A relative reference that begins with two slash characters is termed an network-path reference.
    232233     *
    233      * @link https://tools.ietf.org/html/rfc3986#section-4.2
     234     * @see https://tools.ietf.org/html/rfc3986#section-4.2
    234235     */
    235236    public static function isNetworkPathReference(UriInterface $uri): bool
     
    243244     * A relative reference that begins with a single slash character is termed an absolute-path reference.
    244245     *
    245      * @link https://tools.ietf.org/html/rfc3986#section-4.2
     246     * @see https://tools.ietf.org/html/rfc3986#section-4.2
    246247     */
    247248    public static function isAbsolutePathReference(UriInterface $uri): bool
     
    258259     * A relative reference that does not begin with a slash character is termed a relative-path reference.
    259260     *
    260      * @link https://tools.ietf.org/html/rfc3986#section-4.2
     261     * @see https://tools.ietf.org/html/rfc3986#section-4.2
    261262     */
    262263    public static function isRelativePathReference(UriInterface $uri): bool
     
    277278     * @param UriInterface|null $base An optional base URI to compare against
    278279     *
    279      * @link https://tools.ietf.org/html/rfc3986#section-4.4
     280     * @see https://tools.ietf.org/html/rfc3986#section-4.4
    280281     */
    281282    public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool
     
    353354     * Creates a URI from a hash of `parse_url` components.
    354355     *
    355      * @link http://php.net/manual/en/function.parse-url.php
     356     * @see http://php.net/manual/en/function.parse-url.php
    356357     *
    357358     * @throws MalformedUriException If the components do not form a valid URI.
     
    375376        $authority = $this->host;
    376377        if ($this->userInfo !== '') {
    377             $authority = $this->userInfo . '@' . $authority;
     378            $authority = $this->userInfo.'@'.$authority;
    378379        }
    379380
    380381        if ($this->port !== null) {
    381             $authority .= ':' . $this->port;
     382            $authority .= ':'.$this->port;
    382383        }
    383384
     
    436437        $info = $this->filterUserInfoComponent($user);
    437438        if ($password !== null) {
    438             $info .= ':' . $this->filterUserInfoComponent($password);
     439            $info .= ':'.$this->filterUserInfoComponent($password);
    439440        }
    440441
     
    564565            : '';
    565566        if (isset($parts['pass'])) {
    566             $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']);
     567            $this->userInfo .= ':'.$this->filterUserInfoComponent($parts['pass']);
    567568        }
    568569
     
    596597
    597598        return preg_replace_callback(
    598             '/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/',
     599            '/(?:[^%'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.']+|%(?![A-Fa-f0-9]{2}))/',
    599600            [$this, 'rawurlencodeMatchZero'],
    600601            $component
     
    628629
    629630        $port = (int) $port;
    630         if (0 > $port || 0xffff < $port) {
     631        if (0 > $port || 0xFFFF < $port) {
    631632            throw new \InvalidArgumentException(
    632633                sprintf('Invalid port: %d. Must be between 0 and 65535', $port)
     
    665666
    666667        if ($value !== null) {
    667             $queryString .= '=' . strtr($value, self::QUERY_SEPARATORS_REPLACEMENT);
     668            $queryString .= '='.strtr($value, self::QUERY_SEPARATORS_REPLACEMENT);
    668669        }
    669670
     
    692693
    693694        return preg_replace_callback(
    694             '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/',
     695            '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/]++|%(?![A-Fa-f0-9]{2}))/',
    695696            [$this, 'rawurlencodeMatchZero'],
    696697            $path
     
    712713
    713714        return preg_replace_callback(
    714             '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/',
     715            '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/',
    715716            [$this, 'rawurlencodeMatchZero'],
    716717            $str
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/UriNormalizer.php

    r2911753 r2967574  
    1212 * @author Tobias Schultze
    1313 *
    14  * @link https://tools.ietf.org/html/rfc3986#section-6
     14 * @see https://tools.ietf.org/html/rfc3986#section-6
    1515 */
    1616final class UriNormalizer
     
    120120     * @param int          $flags A bitmask of normalizations to apply, see constants
    121121     *
    122      * @link https://tools.ietf.org/html/rfc3986#section-6.2
     122     * @see https://tools.ietf.org/html/rfc3986#section-6.2
    123123     */
    124124    public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface
     
    175175     * @param int          $normalizations A bitmask of normalizations to apply, see constants
    176176     *
    177      * @link https://tools.ietf.org/html/rfc3986#section-6.1
     177     * @see https://tools.ietf.org/html/rfc3986#section-6.1
    178178     */
    179179    public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/UriResolver.php

    r2911753 r2967574  
    1212 * @author Tobias Schultze
    1313 *
    14  * @link https://tools.ietf.org/html/rfc3986#section-5
     14 * @see https://tools.ietf.org/html/rfc3986#section-5
    1515 */
    1616final class UriResolver
     
    1919     * Removes dot segments from a path and returns the new path.
    2020     *
    21      * @link http://tools.ietf.org/html/rfc3986#section-5.2.4
     21     * @see http://tools.ietf.org/html/rfc3986#section-5.2.4
    2222     */
    2323    public static function removeDotSegments(string $path): string
     
    4141        if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) {
    4242            // Re-add the leading slash if necessary for cases like "/.."
    43             $newPath = '/' . $newPath;
     43            $newPath = '/'.$newPath;
    4444        } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) {
    4545            // Add the trailing slash if necessary
     
    5454     * Converts the relative URI into a new URI that is resolved against the base URI.
    5555     *
    56      * @link http://tools.ietf.org/html/rfc3986#section-5.2
     56     * @see http://tools.ietf.org/html/rfc3986#section-5.2
    5757     */
    5858    public static function resolve(UriInterface $base, UriInterface $rel): UriInterface
     
    8181                } else {
    8282                    if ($targetAuthority != '' && $base->getPath() === '') {
    83                         $targetPath = '/' . $rel->getPath();
     83                        $targetPath = '/'.$rel->getPath();
    8484                    } else {
    8585                        $lastSlashPos = strrpos($base->getPath(), '/');
     
    8787                            $targetPath = $rel->getPath();
    8888                        } else {
    89                             $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath();
     89                            $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1).$rel->getPath();
    9090                        }
    9191                    }
     
    186186        }
    187187        $targetSegments[] = $targetLastSegment;
    188         $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments);
     188        $relativePath = str_repeat('../', count($sourceSegments)).implode('/', $targetSegments);
    189189
    190190        // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./".
  • login-me-now/trunk/vendor/guzzlehttp/psr7/src/Utils.php

    r2911753 r2967574  
    9191                $buffer .= $buf;
    9292            }
     93
    9394            return $buffer;
    9495        }
     
    175176                    $scheme = $changes['uri']->getScheme();
    176177                    if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) {
    177                         $changes['set_headers']['Host'] .= ':' . $port;
     178                        $changes['set_headers']['Host'] .= ':'.$port;
    178179                    }
    179180                }
     
    292293                fseek($stream, 0);
    293294            }
     295
    294296            return new Stream($stream, $options);
    295297        }
     
    309311                    $resource = $stream;
    310312                }
     313
    311314                return new Stream($resource, $options);
    312315            case 'object':
     
    321324                        $result = $resource->current();
    322325                        $resource->next();
     326
    323327                        return $result;
    324328                    }, $options);
     
    335339        }
    336340
    337         throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource));
     341        throw new \InvalidArgumentException('Invalid resource type: '.gettype($resource));
    338342    }
    339343
  • login-me-now/trunk/vendor/phpseclib/phpseclib/BACKERS.md

    r2911753 r2967574  
    1414- Tharyrok
    1515- [cjhaas](https://github.com/cjhaas)
     16- [istiak-tridip](https://github.com/istiak-tridip)
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.php

    r2911753 r2967574  
    918918     * @param string $password
    919919     * @param string $method
    920      * @param string[] ...$func_args
     920     * @param int|string ...$func_args
    921921     * @throws \LengthException if pbkdf1 is being used and the derived key length exceeds the hash length
    922922     * @throws \RuntimeException if bcrypt is being used and a salt isn't provided
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php

    r2911753 r2967574  
    842842            self::ENCRYPTION_NONE
    843843        ];
    844         $numSelected = 0;
     844        $encryptedCount = 0;
    845845        $selected = 0;
    846846        foreach ($masks as $mask) {
    847847            if ($padding & $mask) {
    848848                $selected = $mask;
    849                 $numSelected++;
     849                $encryptedCount++;
    850850            }
    851851        }
    852         if ($numSelected > 1) {
     852        if ($encryptedCount > 1) {
    853853            throw new InconsistentSetupException('Multiple encryption padding modes have been selected; at most only one should be selected');
    854854        }
     
    860860            self::SIGNATURE_PKCS1
    861861        ];
    862         $numSelected = 0;
     862        $signatureCount = 0;
    863863        $selected = 0;
    864864        foreach ($masks as $mask) {
    865865            if ($padding & $mask) {
    866866                $selected = $mask;
    867                 $numSelected++;
     867                $signatureCount++;
    868868            }
    869869        }
    870         if ($numSelected > 1) {
     870        if ($signatureCount > 1) {
    871871            throw new InconsistentSetupException('Multiple signature padding modes have been selected; at most only one should be selected');
    872872        }
     
    874874
    875875        $new = clone $this;
    876         $new->encryptionPadding = $encryptionPadding;
    877         $new->signaturePadding = $signaturePadding;
     876        if ($encryptedCount) {
     877            $new->encryptionPadding = $encryptionPadding;
     878        }
     879        if ($signatureCount) {
     880            $new->signaturePadding = $signaturePadding;
     881        }
    878882        return $new;
    879883    }
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php

    r2911753 r2967574  
    2222namespace phpseclib3\File;
    2323
    24 use DateTime;
    2524use phpseclib3\Common\Functions\Strings;
    2625use phpseclib3\File\ASN1\Element;
     
    206205        }
    207206
    208         return [self::decode_ber($encoded)];
     207        return [$decoded];
    209208    }
    210209
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/File/X509.php

    r2911753 r2967574  
    165165     * @var array
    166166     */
    167     private $CAs;
     167    private $CAs = [];
    168168
    169169    /**
     
    316316                'id-at-role' => '2.5.4.72',
    317317                'id-at-postalAddress' => '2.5.4.16',
     318                'jurisdictionOfIncorporationCountryName' => '1.3.6.1.4.1.311.60.2.1.3',
     319                'jurisdictionOfIncorporationStateOrProvinceName' => '1.3.6.1.4.1.311.60.2.1.2',
     320                'jurisdictionLocalityName' => '1.3.6.1.4.1.311.60.2.1.1',
     321                'id-at-businessCategory' => '2.5.4.15',
    318322
    319323                //'id-domainComponent' => '0.9.2342.19200300.100.1.25',
     
    15391543    {
    15401544        switch (strtolower($propName)) {
     1545            case 'jurisdictionofincorporationcountryname':
     1546            case 'jurisdictioncountryname':
     1547            case 'jurisdictionc':
     1548                return 'jurisdictionOfIncorporationCountryName';
     1549            case 'jurisdictionofincorporationstateorprovincename':
     1550            case 'jurisdictionstateorprovincename':
     1551            case 'jurisdictionst':
     1552                return 'jurisdictionOfIncorporationStateOrProvinceName';
     1553            case 'jurisdictionlocalityname':
     1554            case 'jurisdictionl':
     1555                return 'jurisdictionLocalityName';
     1556            case 'id-at-businesscategory':
     1557            case 'businesscategory':
     1558                return 'id-at-businessCategory';
    15411559            case 'id-at-countryname':
    15421560            case 'countryname':
     
    20312049            return false;
    20322050        }
    2033         if (empty($this->CAs)) {
    2034             return $chain;
    2035         }
    20362051        while (true) {
    20372052            $currentCert = $chain[count($chain) - 1];
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php

    r2911753 r2967574  
    101101        self::$mainEngine = $fqmain;
    102102
    103         if (!in_array('Default', $modexps)) {
    104             $modexps[] = 'DefaultEngine';
    105         }
    106 
    107103        $found = false;
    108104        foreach ($modexps as $modexp) {
     
    144140                ['PHP64', ['OpenSSL']],
    145141                ['BCMath', ['OpenSSL']],
    146                 ['PHP32', ['OpenSSL']]
     142                ['PHP32', ['OpenSSL']],
     143                ['PHP64', ['DefaultEngine']],
     144                ['PHP32', ['DefaultEngine']]
    147145            ];
    148146            foreach ($engines as $engine) {
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.php

    r2911753 r2967574  
    645645        }
    646646
     647        if ($this->compare($n) > 0) {
     648            list(, $temp) = $this->divide($n);
     649            return $temp->powModInner($e, $n);
     650        }
     651
    647652        return $this->powModInner($e, $n);
    648653    }
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php

    r2911753 r2967574  
    9494     * @access private
    9595     */
    96     private $packet_types = [];
     96    private static $packet_types = [];
    9797
    9898    /**
     
    103103     * @access private
    104104     */
    105     private $status_codes = [];
     105    private static $status_codes = [];
    106106
    107107    /** @var array<int, string> */
    108     private $attributes;
     108    private static $attributes;
    109109
    110110    /** @var array<int, string> */
    111     private $open_flags;
     111    private static $open_flags;
    112112
    113113    /** @var array<int, string> */
    114     private $open_flags5;
     114    private static $open_flags5;
    115115
    116116    /** @var array<int, string> */
    117     private $file_types;
     117    private static $file_types;
    118118
    119119    /**
     
    351351     * Connects to an SFTP server
    352352     *
    353      * @param string $host
     353     * $host can either be a string, representing the host, or a stream resource.
     354     *
     355     * @param mixed $host
    354356     * @param int $port
    355357     * @param int $timeout
     
    361363        $this->max_sftp_packet = 1 << 15;
    362364
    363         $this->packet_types = [
    364             1  => 'NET_SFTP_INIT',
    365             2  => 'NET_SFTP_VERSION',
    366             3  => 'NET_SFTP_OPEN',
    367             4  => 'NET_SFTP_CLOSE',
    368             5  => 'NET_SFTP_READ',
    369             6  => 'NET_SFTP_WRITE',
    370             7  => 'NET_SFTP_LSTAT',
    371             9  => 'NET_SFTP_SETSTAT',
    372             10 => 'NET_SFTP_FSETSTAT',
    373             11 => 'NET_SFTP_OPENDIR',
    374             12 => 'NET_SFTP_READDIR',
    375             13 => 'NET_SFTP_REMOVE',
    376             14 => 'NET_SFTP_MKDIR',
    377             15 => 'NET_SFTP_RMDIR',
    378             16 => 'NET_SFTP_REALPATH',
    379             17 => 'NET_SFTP_STAT',
    380             18 => 'NET_SFTP_RENAME',
    381             19 => 'NET_SFTP_READLINK',
    382             20 => 'NET_SFTP_SYMLINK',
    383             21 => 'NET_SFTP_LINK',
    384 
    385             101 => 'NET_SFTP_STATUS',
    386             102 => 'NET_SFTP_HANDLE',
    387             103 => 'NET_SFTP_DATA',
    388             104 => 'NET_SFTP_NAME',
    389             105 => 'NET_SFTP_ATTRS',
    390 
    391             200 => 'NET_SFTP_EXTENDED'
    392         ];
    393         $this->status_codes = [
    394             0 => 'NET_SFTP_STATUS_OK',
    395             1 => 'NET_SFTP_STATUS_EOF',
    396             2 => 'NET_SFTP_STATUS_NO_SUCH_FILE',
    397             3 => 'NET_SFTP_STATUS_PERMISSION_DENIED',
    398             4 => 'NET_SFTP_STATUS_FAILURE',
    399             5 => 'NET_SFTP_STATUS_BAD_MESSAGE',
    400             6 => 'NET_SFTP_STATUS_NO_CONNECTION',
    401             7 => 'NET_SFTP_STATUS_CONNECTION_LOST',
    402             8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED',
    403             9 => 'NET_SFTP_STATUS_INVALID_HANDLE',
    404             10 => 'NET_SFTP_STATUS_NO_SUCH_PATH',
    405             11 => 'NET_SFTP_STATUS_FILE_ALREADY_EXISTS',
    406             12 => 'NET_SFTP_STATUS_WRITE_PROTECT',
    407             13 => 'NET_SFTP_STATUS_NO_MEDIA',
    408             14 => 'NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM',
    409             15 => 'NET_SFTP_STATUS_QUOTA_EXCEEDED',
    410             16 => 'NET_SFTP_STATUS_UNKNOWN_PRINCIPAL',
    411             17 => 'NET_SFTP_STATUS_LOCK_CONFLICT',
    412             18 => 'NET_SFTP_STATUS_DIR_NOT_EMPTY',
    413             19 => 'NET_SFTP_STATUS_NOT_A_DIRECTORY',
    414             20 => 'NET_SFTP_STATUS_INVALID_FILENAME',
    415             21 => 'NET_SFTP_STATUS_LINK_LOOP',
    416             22 => 'NET_SFTP_STATUS_CANNOT_DELETE',
    417             23 => 'NET_SFTP_STATUS_INVALID_PARAMETER',
    418             24 => 'NET_SFTP_STATUS_FILE_IS_A_DIRECTORY',
    419             25 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT',
    420             26 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED',
    421             27 => 'NET_SFTP_STATUS_DELETE_PENDING',
    422             28 => 'NET_SFTP_STATUS_FILE_CORRUPT',
    423             29 => 'NET_SFTP_STATUS_OWNER_INVALID',
    424             30 => 'NET_SFTP_STATUS_GROUP_INVALID',
    425             31 => 'NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK'
    426         ];
    427         // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1
    428         // the order, in this case, matters quite a lot - see \phpseclib3\Net\SFTP::_parseAttributes() to understand why
    429         $this->attributes = [
    430             0x00000001 => 'NET_SFTP_ATTR_SIZE',
    431             0x00000002 => 'NET_SFTP_ATTR_UIDGID',          // defined in SFTPv3, removed in SFTPv4+
    432             0x00000080 => 'NET_SFTP_ATTR_OWNERGROUP',      // defined in SFTPv4+
    433             0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',
    434             0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',
    435             0x00000010 => 'NET_SFTP_ATTR_CREATETIME',      // SFTPv4+
    436             0x00000020 => 'NET_SFTP_ATTR_MODIFYTIME',
    437             0x00000040 => 'NET_SFTP_ATTR_ACL',
    438             0x00000100 => 'NET_SFTP_ATTR_SUBSECOND_TIMES',
    439             0x00000200 => 'NET_SFTP_ATTR_BITS',            // SFTPv5+
    440             0x00000400 => 'NET_SFTP_ATTR_ALLOCATION_SIZE', // SFTPv6+
    441             0x00000800 => 'NET_SFTP_ATTR_TEXT_HINT',
    442             0x00001000 => 'NET_SFTP_ATTR_MIME_TYPE',
    443             0x00002000 => 'NET_SFTP_ATTR_LINK_COUNT',
    444             0x00004000 => 'NET_SFTP_ATTR_UNTRANSLATED_NAME',
    445             0x00008000 => 'NET_SFTP_ATTR_CTIME',
    446             // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers
    447             // yields inconsistent behavior depending on how php is compiled.  so we left shift -1 (which, in
    448             // two's compliment, consists of all 1 bits) by 31.  on 64-bit systems this'll yield 0xFFFFFFFF80000000.
    449             // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.
    450             (PHP_INT_SIZE == 4 ? -1 : 0xFFFFFFFF) => 'NET_SFTP_ATTR_EXTENDED'
    451         ];
    452         // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3
    453         // the flag definitions change somewhat in SFTPv5+.  if SFTPv5+ support is added to this library, maybe name
    454         // the array for that $this->open5_flags and similarly alter the constant names.
    455         $this->open_flags = [
    456             0x00000001 => 'NET_SFTP_OPEN_READ',
    457             0x00000002 => 'NET_SFTP_OPEN_WRITE',
    458             0x00000004 => 'NET_SFTP_OPEN_APPEND',
    459             0x00000008 => 'NET_SFTP_OPEN_CREATE',
    460             0x00000010 => 'NET_SFTP_OPEN_TRUNCATE',
    461             0x00000020 => 'NET_SFTP_OPEN_EXCL',
    462             0x00000040 => 'NET_SFTP_OPEN_TEXT' // defined in SFTPv4
    463         ];
    464         // SFTPv5+ changed the flags up:
    465         // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-8.1.1.3
    466         $this->open_flags5 = [
    467             // when SSH_FXF_ACCESS_DISPOSITION is a 3 bit field that controls how the file is opened
    468             0x00000000 => 'NET_SFTP_OPEN_CREATE_NEW',
    469             0x00000001 => 'NET_SFTP_OPEN_CREATE_TRUNCATE',
    470             0x00000002 => 'NET_SFTP_OPEN_OPEN_EXISTING',
    471             0x00000003 => 'NET_SFTP_OPEN_OPEN_OR_CREATE',
    472             0x00000004 => 'NET_SFTP_OPEN_TRUNCATE_EXISTING',
    473             // the rest of the flags are not supported
    474             0x00000008 => 'NET_SFTP_OPEN_APPEND_DATA', // "the offset field of SS_FXP_WRITE requests is ignored"
    475             0x00000010 => 'NET_SFTP_OPEN_APPEND_DATA_ATOMIC',
    476             0x00000020 => 'NET_SFTP_OPEN_TEXT_MODE',
    477             0x00000040 => 'NET_SFTP_OPEN_BLOCK_READ',
    478             0x00000080 => 'NET_SFTP_OPEN_BLOCK_WRITE',
    479             0x00000100 => 'NET_SFTP_OPEN_BLOCK_DELETE',
    480             0x00000200 => 'NET_SFTP_OPEN_BLOCK_ADVISORY',
    481             0x00000400 => 'NET_SFTP_OPEN_NOFOLLOW',
    482             0x00000800 => 'NET_SFTP_OPEN_DELETE_ON_CLOSE',
    483             0x00001000 => 'NET_SFTP_OPEN_ACCESS_AUDIT_ALARM_INFO',
    484             0x00002000 => 'NET_SFTP_OPEN_ACCESS_BACKUP',
    485             0x00004000 => 'NET_SFTP_OPEN_BACKUP_STREAM',
    486             0x00008000 => 'NET_SFTP_OPEN_OVERRIDE_OWNER',
    487         ];
    488         // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2
    489         // see \phpseclib3\Net\SFTP::_parseLongname() for an explanation
    490         $this->file_types = [
    491             1 => 'NET_SFTP_TYPE_REGULAR',
    492             2 => 'NET_SFTP_TYPE_DIRECTORY',
    493             3 => 'NET_SFTP_TYPE_SYMLINK',
    494             4 => 'NET_SFTP_TYPE_SPECIAL',
    495             5 => 'NET_SFTP_TYPE_UNKNOWN',
    496             // the following types were first defined for use in SFTPv5+
    497             // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2
    498             6 => 'NET_SFTP_TYPE_SOCKET',
    499             7 => 'NET_SFTP_TYPE_CHAR_DEVICE',
    500             8 => 'NET_SFTP_TYPE_BLOCK_DEVICE',
    501             9 => 'NET_SFTP_TYPE_FIFO'
    502         ];
    503         $this->define_array(
    504             $this->packet_types,
    505             $this->status_codes,
    506             $this->attributes,
    507             $this->open_flags,
    508             $this->open_flags5,
    509             $this->file_types
    510         );
     365        if (empty(self::$packet_types)) {
     366            self::$packet_types = [
     367                1  => 'NET_SFTP_INIT',
     368                2  => 'NET_SFTP_VERSION',
     369                3  => 'NET_SFTP_OPEN',
     370                4  => 'NET_SFTP_CLOSE',
     371                5  => 'NET_SFTP_READ',
     372                6  => 'NET_SFTP_WRITE',
     373                7  => 'NET_SFTP_LSTAT',
     374                9  => 'NET_SFTP_SETSTAT',
     375                10 => 'NET_SFTP_FSETSTAT',
     376                11 => 'NET_SFTP_OPENDIR',
     377                12 => 'NET_SFTP_READDIR',
     378                13 => 'NET_SFTP_REMOVE',
     379                14 => 'NET_SFTP_MKDIR',
     380                15 => 'NET_SFTP_RMDIR',
     381                16 => 'NET_SFTP_REALPATH',
     382                17 => 'NET_SFTP_STAT',
     383                18 => 'NET_SFTP_RENAME',
     384                19 => 'NET_SFTP_READLINK',
     385                20 => 'NET_SFTP_SYMLINK',
     386                21 => 'NET_SFTP_LINK',
     387
     388                101 => 'NET_SFTP_STATUS',
     389                102 => 'NET_SFTP_HANDLE',
     390                103 => 'NET_SFTP_DATA',
     391                104 => 'NET_SFTP_NAME',
     392                105 => 'NET_SFTP_ATTRS',
     393
     394                200 => 'NET_SFTP_EXTENDED'
     395            ];
     396            self::$status_codes = [
     397                0 => 'NET_SFTP_STATUS_OK',
     398                1 => 'NET_SFTP_STATUS_EOF',
     399                2 => 'NET_SFTP_STATUS_NO_SUCH_FILE',
     400                3 => 'NET_SFTP_STATUS_PERMISSION_DENIED',
     401                4 => 'NET_SFTP_STATUS_FAILURE',
     402                5 => 'NET_SFTP_STATUS_BAD_MESSAGE',
     403                6 => 'NET_SFTP_STATUS_NO_CONNECTION',
     404                7 => 'NET_SFTP_STATUS_CONNECTION_LOST',
     405                8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED',
     406                9 => 'NET_SFTP_STATUS_INVALID_HANDLE',
     407                10 => 'NET_SFTP_STATUS_NO_SUCH_PATH',
     408                11 => 'NET_SFTP_STATUS_FILE_ALREADY_EXISTS',
     409                12 => 'NET_SFTP_STATUS_WRITE_PROTECT',
     410                13 => 'NET_SFTP_STATUS_NO_MEDIA',
     411                14 => 'NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM',
     412                15 => 'NET_SFTP_STATUS_QUOTA_EXCEEDED',
     413                16 => 'NET_SFTP_STATUS_UNKNOWN_PRINCIPAL',
     414                17 => 'NET_SFTP_STATUS_LOCK_CONFLICT',
     415                18 => 'NET_SFTP_STATUS_DIR_NOT_EMPTY',
     416                19 => 'NET_SFTP_STATUS_NOT_A_DIRECTORY',
     417                20 => 'NET_SFTP_STATUS_INVALID_FILENAME',
     418                21 => 'NET_SFTP_STATUS_LINK_LOOP',
     419                22 => 'NET_SFTP_STATUS_CANNOT_DELETE',
     420                23 => 'NET_SFTP_STATUS_INVALID_PARAMETER',
     421                24 => 'NET_SFTP_STATUS_FILE_IS_A_DIRECTORY',
     422                25 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT',
     423                26 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED',
     424                27 => 'NET_SFTP_STATUS_DELETE_PENDING',
     425                28 => 'NET_SFTP_STATUS_FILE_CORRUPT',
     426                29 => 'NET_SFTP_STATUS_OWNER_INVALID',
     427                30 => 'NET_SFTP_STATUS_GROUP_INVALID',
     428                31 => 'NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK'
     429            ];
     430            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1
     431            // the order, in this case, matters quite a lot - see \phpseclib3\Net\SFTP::_parseAttributes() to understand why
     432            self::$attributes = [
     433                0x00000001 => 'NET_SFTP_ATTR_SIZE',
     434                0x00000002 => 'NET_SFTP_ATTR_UIDGID',          // defined in SFTPv3, removed in SFTPv4+
     435                0x00000080 => 'NET_SFTP_ATTR_OWNERGROUP',      // defined in SFTPv4+
     436                0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',
     437                0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',
     438                0x00000010 => 'NET_SFTP_ATTR_CREATETIME',      // SFTPv4+
     439                0x00000020 => 'NET_SFTP_ATTR_MODIFYTIME',
     440                0x00000040 => 'NET_SFTP_ATTR_ACL',
     441                0x00000100 => 'NET_SFTP_ATTR_SUBSECOND_TIMES',
     442                0x00000200 => 'NET_SFTP_ATTR_BITS',            // SFTPv5+
     443                0x00000400 => 'NET_SFTP_ATTR_ALLOCATION_SIZE', // SFTPv6+
     444                0x00000800 => 'NET_SFTP_ATTR_TEXT_HINT',
     445                0x00001000 => 'NET_SFTP_ATTR_MIME_TYPE',
     446                0x00002000 => 'NET_SFTP_ATTR_LINK_COUNT',
     447                0x00004000 => 'NET_SFTP_ATTR_UNTRANSLATED_NAME',
     448                0x00008000 => 'NET_SFTP_ATTR_CTIME',
     449                // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers
     450                // yields inconsistent behavior depending on how php is compiled.  so we left shift -1 (which, in
     451                // two's compliment, consists of all 1 bits) by 31.  on 64-bit systems this'll yield 0xFFFFFFFF80000000.
     452                // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.
     453                (PHP_INT_SIZE == 4 ? (-1 << 31) : 0x80000000) => 'NET_SFTP_ATTR_EXTENDED'
     454            ];
     455            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3
     456            // the flag definitions change somewhat in SFTPv5+.  if SFTPv5+ support is added to this library, maybe name
     457            // the array for that $this->open5_flags and similarly alter the constant names.
     458            self::$open_flags = [
     459                0x00000001 => 'NET_SFTP_OPEN_READ',
     460                0x00000002 => 'NET_SFTP_OPEN_WRITE',
     461                0x00000004 => 'NET_SFTP_OPEN_APPEND',
     462                0x00000008 => 'NET_SFTP_OPEN_CREATE',
     463                0x00000010 => 'NET_SFTP_OPEN_TRUNCATE',
     464                0x00000020 => 'NET_SFTP_OPEN_EXCL',
     465                0x00000040 => 'NET_SFTP_OPEN_TEXT' // defined in SFTPv4
     466            ];
     467            // SFTPv5+ changed the flags up:
     468            // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-8.1.1.3
     469            self::$open_flags5 = [
     470                // when SSH_FXF_ACCESS_DISPOSITION is a 3 bit field that controls how the file is opened
     471                0x00000000 => 'NET_SFTP_OPEN_CREATE_NEW',
     472                0x00000001 => 'NET_SFTP_OPEN_CREATE_TRUNCATE',
     473                0x00000002 => 'NET_SFTP_OPEN_OPEN_EXISTING',
     474                0x00000003 => 'NET_SFTP_OPEN_OPEN_OR_CREATE',
     475                0x00000004 => 'NET_SFTP_OPEN_TRUNCATE_EXISTING',
     476                // the rest of the flags are not supported
     477                0x00000008 => 'NET_SFTP_OPEN_APPEND_DATA', // "the offset field of SS_FXP_WRITE requests is ignored"
     478                0x00000010 => 'NET_SFTP_OPEN_APPEND_DATA_ATOMIC',
     479                0x00000020 => 'NET_SFTP_OPEN_TEXT_MODE',
     480                0x00000040 => 'NET_SFTP_OPEN_BLOCK_READ',
     481                0x00000080 => 'NET_SFTP_OPEN_BLOCK_WRITE',
     482                0x00000100 => 'NET_SFTP_OPEN_BLOCK_DELETE',
     483                0x00000200 => 'NET_SFTP_OPEN_BLOCK_ADVISORY',
     484                0x00000400 => 'NET_SFTP_OPEN_NOFOLLOW',
     485                0x00000800 => 'NET_SFTP_OPEN_DELETE_ON_CLOSE',
     486                0x00001000 => 'NET_SFTP_OPEN_ACCESS_AUDIT_ALARM_INFO',
     487                0x00002000 => 'NET_SFTP_OPEN_ACCESS_BACKUP',
     488                0x00004000 => 'NET_SFTP_OPEN_BACKUP_STREAM',
     489                0x00008000 => 'NET_SFTP_OPEN_OVERRIDE_OWNER',
     490            ];
     491            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2
     492            // see \phpseclib3\Net\SFTP::_parseLongname() for an explanation
     493            self::$file_types = [
     494                1 => 'NET_SFTP_TYPE_REGULAR',
     495                2 => 'NET_SFTP_TYPE_DIRECTORY',
     496                3 => 'NET_SFTP_TYPE_SYMLINK',
     497                4 => 'NET_SFTP_TYPE_SPECIAL',
     498                5 => 'NET_SFTP_TYPE_UNKNOWN',
     499                // the following types were first defined for use in SFTPv5+
     500                // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2
     501                6 => 'NET_SFTP_TYPE_SOCKET',
     502                7 => 'NET_SFTP_TYPE_CHAR_DEVICE',
     503                8 => 'NET_SFTP_TYPE_BLOCK_DEVICE',
     504                9 => 'NET_SFTP_TYPE_FIFO'
     505            ];
     506            self::define_array(
     507                self::$packet_types,
     508                self::$status_codes,
     509                self::$attributes,
     510                self::$open_flags,
     511                self::$open_flags5,
     512                self::$file_types
     513            );
     514        }
    511515
    512516        if (!defined('NET_SFTP_QUEUE_SIZE')) {
     
    544548    private function partial_init_sftp_connection()
    545549    {
    546         $this->window_size_server_to_client[self::CHANNEL] = $this->window_size;
    547 
    548         $packet = Strings::packSSH2(
    549             'CsN3',
    550             NET_SSH2_MSG_CHANNEL_OPEN,
    551             'session',
    552             self::CHANNEL,
    553             $this->window_size,
    554             0x4000
    555         );
    556 
    557         $this->send_binary_packet($packet);
    558 
    559         $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN;
    560 
    561         $response = $this->get_channel_packet(self::CHANNEL, true);
     550        $response = $this->openChannel(self::CHANNEL, true);
    562551        if ($response === true && $this->isTimeout()) {
    563552            return false;
     
    816805        }
    817806
    818         $error = $this->status_codes[$status];
     807        $error = self::$status_codes[$status];
    819808
    820809        if ($this->version > 2) {
     
    21392128        if ($start >= 0) {
    21402129            $offset = $start;
    2141         } elseif ($mode & self::RESUME) {
     2130        } elseif ($mode & (self::RESUME | self::RESUME_START)) {
    21422131            // if NET_SFTP_OPEN_APPEND worked as it should _size() wouldn't need to be called
    21432132            $size = $this->stat($remote_file)['size'];
     
    22112200                fseek($fp, $local_start);
    22122201                $size -= $local_start;
     2202            } elseif ($mode & self::RESUME) {
     2203                fseek($fp, $offset);
     2204                $size -= $offset;
    22132205            }
    22142206        } elseif ($dataCallback) {
     
    28422834
    28432835    /**
     2836     * Recursively go through rawlist() output to get the total filesize
     2837     *
     2838     * @return int
     2839     */
     2840    private static function recursiveFilesize(array $files)
     2841    {
     2842        $size = 0;
     2843        foreach ($files as $name => $file) {
     2844            if ($name == '.' || $name == '..') {
     2845                continue;
     2846            }
     2847            $size += is_array($file) ?
     2848                self::recursiveFilesize($file) :
     2849                $file->size;
     2850        }
     2851        return $size;
     2852    }
     2853
     2854    /**
    28442855     * Gets file size
    28452856     *
    28462857     * @param string $path
     2858     * @param bool $recursive
    28472859     * @return mixed
    28482860     */
    2849     public function filesize($path)
    2850     {
    2851         return $this->get_stat_cache_prop($path, 'size');
     2861    public function filesize($path, $recursive = false)
     2862    {
     2863        return !$recursive || $this->filetype($path) != 'dir' ?
     2864            $this->get_stat_cache_prop($path, 'size') :
     2865            self::recursiveFilesize($this->rawlist($path, true));
    28522866    }
    28532867
     
    30423056        }
    30433057
    3044         foreach ($this->attributes as $key => $value) {
     3058        foreach (self::$attributes as $key => $value) {
    30453059            switch ($flags & $key) {
    30463060                case NET_SFTP_ATTR_UIDGID:
     
    32733287
    32743288        if (defined('NET_SFTP_LOGGING')) {
    3275             $packet_type = '-> ' . $this->packet_types[$type] .
     3289            $packet_type = '-> ' . self::$packet_types[$type] .
    32763290                           ' (' . round($stop - $start, 4) . 's)';
    32773291            $this->append_log($packet_type, $data);
     
    33773391
    33783392        if (defined('NET_SFTP_LOGGING')) {
    3379             $packet_type = '<- ' . $this->packet_types[$this->packet_type] .
     3393            $packet_type = '<- ' . self::$packet_types[$this->packet_type] .
    33803394                           ' (' . round($stop - $start, 4) . 's)';
    33813395            $this->append_log($packet_type, $packet);
     
    34213435     * Returns a string if NET_SFTP_LOGGING == self::LOG_COMPLEX, an array if NET_SFTP_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
    34223436     *
    3423      * @return array|string
     3437     * @return array|string|false
    34243438     */
    34253439    public function getSFTPLog()
  • login-me-now/trunk/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php

    r2911753 r2967574  
    554554     * @access private
    555555     */
    556     private $message_numbers = [];
     556    private static $message_numbers = [];
    557557
    558558    /**
     
    563563     * @access private
    564564     */
    565     private $disconnect_reasons = [];
     565    private static $disconnect_reasons = [];
    566566
    567567    /**
     
    572572     * @access private
    573573     */
    574     private $channel_open_failure_reasons = [];
     574    private static $channel_open_failure_reasons = [];
    575575
    576576    /**
     
    582582     * @access private
    583583     */
    584     private $terminal_modes = [];
     584    private static $terminal_modes = [];
    585585
    586586    /**
     
    592592     * @access private
    593593     */
    594     private $channel_extended_data_type_codes = [];
     594    private static $channel_extended_data_type_codes = [];
    595595
    596596    /**
     
    648648
    649649    /**
     650     * The identifier of the interactive channel which was opened most recently
     651     *
     652     * @see self::getInteractiveChannelId()
     653     * @var int
     654     */
     655    private $channel_id_last_interactive = 0;
     656
     657    /**
    650658     * Packet Size
    651659     *
     
    837845     */
    838846    private $request_pty = false;
    839 
    840     /**
    841      * Flag set while exec() is running when using enablePTY()
    842      *
    843      * @var bool
    844      */
    845     private $in_request_pty_exec = false;
    846 
    847     /**
    848      * Flag set after startSubsystem() is called
    849      *
    850      * @var bool
    851      */
    852     private $in_subsystem;
    853847
    854848    /**
     
    10951089
    10961090    /**
     1091     * How many channels are currently opened
     1092     *
     1093     * @var int
     1094     */
     1095    private $channelCount = 0;
     1096
     1097    /**
     1098     * Does the server support multiple channels? If not then error out
     1099     * when multiple channels are attempted to be opened
     1100     *
     1101     * @var bool
     1102     */
     1103    private $errorOnMultipleChannels;
     1104
     1105    /**
    10971106     * Default Constructor.
    10981107     *
     
    11061115    public function __construct($host, $port = 22, $timeout = 10)
    11071116    {
    1108         $this->message_numbers = [
    1109             1 => 'NET_SSH2_MSG_DISCONNECT',
    1110             2 => 'NET_SSH2_MSG_IGNORE',
    1111             3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
    1112             4 => 'NET_SSH2_MSG_DEBUG',
    1113             5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
    1114             6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
    1115             20 => 'NET_SSH2_MSG_KEXINIT',
    1116             21 => 'NET_SSH2_MSG_NEWKEYS',
    1117             30 => 'NET_SSH2_MSG_KEXDH_INIT',
    1118             31 => 'NET_SSH2_MSG_KEXDH_REPLY',
    1119             50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
    1120             51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
    1121             52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
    1122             53 => 'NET_SSH2_MSG_USERAUTH_BANNER',
    1123 
    1124             80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
    1125             81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
    1126             82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
    1127             90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
    1128             91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
    1129             92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
    1130             93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
    1131             94 => 'NET_SSH2_MSG_CHANNEL_DATA',
    1132             95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
    1133             96 => 'NET_SSH2_MSG_CHANNEL_EOF',
    1134             97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
    1135             98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
    1136             99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
    1137             100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
    1138         ];
    1139         $this->disconnect_reasons = [
    1140             1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
    1141             2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
    1142             3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
    1143             4 => 'NET_SSH2_DISCONNECT_RESERVED',
    1144             5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
    1145             6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
    1146             7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
    1147             8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
    1148             9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
    1149             10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
    1150             11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
    1151             12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
    1152             13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
    1153             14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
    1154             15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
    1155         ];
    1156         $this->channel_open_failure_reasons = [
    1157             1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
    1158         ];
    1159         $this->terminal_modes = [
    1160             0 => 'NET_SSH2_TTY_OP_END'
    1161         ];
    1162         $this->channel_extended_data_type_codes = [
    1163             1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
    1164         ];
    1165 
    1166         $this->define_array(
    1167             $this->message_numbers,
    1168             $this->disconnect_reasons,
    1169             $this->channel_open_failure_reasons,
    1170             $this->terminal_modes,
    1171             $this->channel_extended_data_type_codes,
    1172             [60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'],
    1173             [60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'],
    1174             [60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
    1175                   61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'],
    1176             // RFC 4419 - diffie-hellman-group-exchange-sha{1,256}
    1177             [30 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD',
    1178                   31 => 'NET_SSH2_MSG_KEXDH_GEX_GROUP',
    1179                   32 => 'NET_SSH2_MSG_KEXDH_GEX_INIT',
    1180                   33 => 'NET_SSH2_MSG_KEXDH_GEX_REPLY',
    1181                   34 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'],
    1182             // RFC 5656 - Elliptic Curves (for [email protected])
    1183             [30 => 'NET_SSH2_MSG_KEX_ECDH_INIT',
    1184                   31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY']
    1185         );
     1117        if (empty(self::$message_numbers)) {
     1118            self::$message_numbers = [
     1119                1 => 'NET_SSH2_MSG_DISCONNECT',
     1120                2 => 'NET_SSH2_MSG_IGNORE',
     1121                3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
     1122                4 => 'NET_SSH2_MSG_DEBUG',
     1123                5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
     1124                6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
     1125                20 => 'NET_SSH2_MSG_KEXINIT',
     1126                21 => 'NET_SSH2_MSG_NEWKEYS',
     1127                30 => 'NET_SSH2_MSG_KEXDH_INIT',
     1128                31 => 'NET_SSH2_MSG_KEXDH_REPLY',
     1129                50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
     1130                51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
     1131                52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
     1132                53 => 'NET_SSH2_MSG_USERAUTH_BANNER',
     1133
     1134                80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
     1135                81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
     1136                82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
     1137                90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
     1138                91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
     1139                92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
     1140                93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
     1141                94 => 'NET_SSH2_MSG_CHANNEL_DATA',
     1142                95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
     1143                96 => 'NET_SSH2_MSG_CHANNEL_EOF',
     1144                97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
     1145                98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
     1146                99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
     1147                100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
     1148            ];
     1149            self::$disconnect_reasons = [
     1150                1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
     1151                2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
     1152                3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
     1153                4 => 'NET_SSH2_DISCONNECT_RESERVED',
     1154                5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
     1155                6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
     1156                7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
     1157                8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
     1158                9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
     1159                10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
     1160                11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
     1161                12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
     1162                13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
     1163                14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
     1164                15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
     1165            ];
     1166            self::$channel_open_failure_reasons = [
     1167                1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
     1168            ];
     1169            self::$terminal_modes = [
     1170                0 => 'NET_SSH2_TTY_OP_END'
     1171            ];
     1172            self::$channel_extended_data_type_codes = [
     1173                1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
     1174            ];
     1175
     1176            self::define_array(
     1177                self::$message_numbers,
     1178                self::$disconnect_reasons,
     1179                self::$channel_open_failure_reasons,
     1180                self::$terminal_modes,
     1181                self::$channel_extended_data_type_codes,
     1182                [60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'],
     1183                [60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'],
     1184                [60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
     1185                      61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'],
     1186                // RFC 4419 - diffie-hellman-group-exchange-sha{1,256}
     1187                [30 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD',
     1188                      31 => 'NET_SSH2_MSG_KEXDH_GEX_GROUP',
     1189                      32 => 'NET_SSH2_MSG_KEXDH_GEX_INIT',
     1190                      33 => 'NET_SSH2_MSG_KEXDH_GEX_REPLY',
     1191                      34 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'],
     1192                // RFC 5656 - Elliptic Curves (for [email protected])
     1193                [30 => 'NET_SSH2_MSG_KEX_ECDH_INIT',
     1194                      31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY']
     1195            );
     1196        }
    11861197
    11871198        /**
     
    12681279    {
    12691280        $this->send_kex_first = false;
     1281    }
     1282
     1283    /**
     1284     * stream_select wrapper
     1285     *
     1286     * Quoting https://stackoverflow.com/a/14262151/569976,
     1287     * "The general approach to `EINTR` is to simply handle the error and retry the operation again"
     1288     *
     1289     * This wrapper does that loop
     1290     */
     1291    private static function stream_select(&$read, &$write, &$except, $seconds, $microseconds = null)
     1292    {
     1293        $remaining = $seconds + $microseconds / 1000000;
     1294        $start = microtime(true);
     1295        while (true) {
     1296            $result = @stream_select($read, $write, $except, $seconds, $microseconds);
     1297            if ($result !== false) {
     1298                return $result;
     1299            }
     1300            $elapsed = microtime(true) - $start;
     1301            $seconds = (int) ($remaining - floor($elapsed));
     1302            $microseconds = (int) (1000000 * ($remaining - $seconds));
     1303            if ($elapsed >= $remaining) {
     1304                return false;
     1305            }
     1306        }
    12701307    }
    12711308
     
    13341371                    $sec = (int) floor($this->curTimeout);
    13351372                    $usec = (int) (1000000 * ($this->curTimeout - $sec));
    1336                     if (@stream_select($read, $write, $except, $sec, $usec) === false) {
     1373                    if (static::stream_select($read, $write, $except, $sec, $usec) === false) {
    13371374                        throw new \RuntimeException('Connection timed out whilst receiving server identification string');
    13381375                    }
     
    13881425            throw new UnableToConnectException("Cannot connect to SSH $matches[3] servers");
    13891426        }
     1427
     1428        // Ubuntu's OpenSSH from 5.8 to 6.9 didn't work with multiple channels. see
     1429        // https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1334916 for more info.
     1430        // https://lists.ubuntu.com/archives/oneiric-changes/2011-July/005772.html discusses
     1431        // when consolekit was incorporated.
     1432        // https://marc.info/?l=openssh-unix-dev&m=163409903417589&w=2 discusses some of the
     1433        // issues with how Ubuntu incorporated consolekit
     1434        $pattern = '#^SSH-2\.0-OpenSSH_([\d.]+)[^ ]* Ubuntu-.*$#';
     1435        $match = preg_match($pattern, $this->server_identifier, $matches);
     1436        $match = $match && version_compare('5.8', $matches[1], '<=');
     1437        $match = $match && version_compare('6.9', $matches[1], '>=');
     1438        $this->errorOnMultipleChannels = $match;
    13901439
    13911440        if (!$this->send_id_string_first) {
     
    21222171     *
    21232172     * @param string $username
    2124      * @param string|AsymmetricKey|array[]|Agent|null ...$args
     2173     * @param string|PrivateKey|array[]|Agent|null ...$args
    21252174     * @return bool
    21262175     * @see self::_login()
     
    21472196     *
    21482197     * @param string $username
    2149      * @param string ...$args
     2198     * @param string|PrivateKey|array[]|Agent|null ...$args
    21502199     * @return bool
    21512200     * @see self::_login_helper()
     
    27302779        }
    27312780
    2732         if ($this->in_request_pty_exec) {
    2733             throw new \RuntimeException('If you want to run multiple exec()\'s you will need to disable (and re-enable if appropriate) a PTY for each one.');
    2734         }
    2735 
    2736         // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
    2737         // be adjusted".  0x7FFFFFFF is, at 2GB, the max size.  technically, it should probably be decremented, but,
    2738         // honestly, if you're transferring more than 2GB, you probably shouldn't be using phpseclib, anyway.
    2739         // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
    2740         $this->window_size_server_to_client[self::CHANNEL_EXEC] = $this->window_size;
    2741         // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
    2742         // uses 0x4000, that's what will be used here, as well.
    2743         $packet_size = 0x4000;
    2744 
    2745         $packet = Strings::packSSH2(
    2746             'CsN3',
    2747             NET_SSH2_MSG_CHANNEL_OPEN,
    2748             'session',
    2749             self::CHANNEL_EXEC,
    2750             $this->window_size_server_to_client[self::CHANNEL_EXEC],
    2751             $packet_size
    2752         );
    2753         $this->send_binary_packet($packet);
    2754 
    2755         $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN;
    2756 
    2757         $this->get_channel_packet(self::CHANNEL_EXEC);
     2781        //if ($this->isPTYOpen()) {
     2782        //    throw new \RuntimeException('If you want to run multiple exec()\'s you will need to disable (and re-enable if appropriate) a PTY for each one.');
     2783        //}
     2784
     2785        $this->openChannel(self::CHANNEL_EXEC);
    27582786
    27592787        if ($this->request_pty === true) {
     
    27802808                throw new \RuntimeException('Unable to request pseudo-terminal');
    27812809            }
    2782 
    2783             $this->in_request_pty_exec = true;
    27842810        }
    27852811
     
    28112837        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;
    28122838
    2813         if ($this->in_request_pty_exec) {
     2839        if ($this->request_pty === true) {
     2840            $this->channel_id_last_interactive = self::CHANNEL_EXEC;
    28142841            return true;
    28152842        }
     
    28372864
    28382865    /**
    2839      * Creates an interactive shell
    2840      *
    2841      * @see self::read()
    2842      * @see self::write()
     2866     * How many channels are currently open?
     2867     *
     2868     * @return int
     2869     */
     2870    public function getOpenChannelCount()
     2871    {
     2872        return $this->channelCount;
     2873    }
     2874
     2875    /**
     2876     * Opens a channel
     2877     *
     2878     * @param string $channel
     2879     * @param bool $skip_extended
    28432880     * @return bool
    2844      * @throws \UnexpectedValueException on receipt of unexpected packets
    2845      * @throws \RuntimeException on other errors
    2846      */
    2847     private function initShell()
    2848     {
    2849         if ($this->in_request_pty_exec === true) {
    2850             return true;
    2851         }
    2852 
    2853         $this->window_size_server_to_client[self::CHANNEL_SHELL] = $this->window_size;
     2881     */
     2882    protected function openChannel($channel, $skip_extended = false)
     2883    {
     2884        if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) {
     2885            throw new \RuntimeException('Please close the channel (' . $channel . ') before trying to open it again');
     2886        }
     2887
     2888        $this->channelCount++;
     2889
     2890        if ($this->channelCount > 1 && $this->errorOnMultipleChannels) {
     2891            throw new \RuntimeException("Ubuntu's OpenSSH from 5.8 to 6.9 doesn't work with multiple channels");
     2892        }
     2893
     2894        // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
     2895        // be adjusted".  0x7FFFFFFF is, at 2GB, the max size.  technically, it should probably be decremented, but,
     2896        // honestly, if you're transferring more than 2GB, you probably shouldn't be using phpseclib, anyway.
     2897        // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
     2898        $this->window_size_server_to_client[$channel] = $this->window_size;
     2899        // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
     2900        // uses 0x4000, that's what will be used here, as well.
    28542901        $packet_size = 0x4000;
    28552902
     
    28582905            NET_SSH2_MSG_CHANNEL_OPEN,
    28592906            'session',
    2860             self::CHANNEL_SHELL,
    2861             $this->window_size_server_to_client[self::CHANNEL_SHELL],
     2907            $channel,
     2908            $this->window_size_server_to_client[$channel],
    28622909            $packet_size
    28632910        );
     
    28652912        $this->send_binary_packet($packet);
    28662913
    2867         $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_OPEN;
    2868 
    2869         $this->get_channel_packet(self::CHANNEL_SHELL);
     2914        $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_OPEN;
     2915
     2916        return $this->get_channel_packet($channel, $skip_extended);
     2917    }
     2918
     2919    /**
     2920     * Creates an interactive shell
     2921     *
     2922     * Returns bool(true) if the shell was opened.
     2923     * Returns bool(false) if the shell was already open.
     2924     *
     2925     * @see self::isShellOpen()
     2926     * @see self::read()
     2927     * @see self::write()
     2928     * @return bool
     2929     * @throws InsufficientSetupException if not authenticated
     2930     * @throws \UnexpectedValueException on receipt of unexpected packets
     2931     * @throws \RuntimeException on other errors
     2932     */
     2933    public function openShell()
     2934    {
     2935        if (!$this->isAuthenticated()) {
     2936            throw new InsufficientSetupException('Operation disallowed prior to login()');
     2937        }
     2938
     2939        $this->openChannel(self::CHANNEL_SHELL);
    28702940
    28712941        $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
     
    29082978        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA;
    29092979
     2980        $this->channel_id_last_interactive = self::CHANNEL_SHELL;
     2981
    29102982        $this->bitmap |= self::MASK_SHELL;
    29112983
     
    29142986
    29152987    /**
    2916      * Return the channel to be used with read() / write()
    2917      *
     2988     * Return the channel to be used with read(), write(), and reset(), if none were specified
     2989     * @deprecated for lack of transparency in intended channel target, to be potentially replaced
     2990     *             with method which guarantees open-ness of all yielded channels and throws
     2991     *             error for multiple open channels
    29182992     * @see self::read()
    29192993     * @see self::write()
     
    29232997    {
    29242998        switch (true) {
    2925             case $this->in_subsystem:
     2999            case $this->is_channel_status_data(self::CHANNEL_SUBSYSTEM):
    29263000                return self::CHANNEL_SUBSYSTEM;
    2927             case $this->in_request_pty_exec:
     3001            case $this->is_channel_status_data(self::CHANNEL_EXEC):
    29283002                return self::CHANNEL_EXEC;
    29293003            default:
    29303004                return self::CHANNEL_SHELL;
    29313005        }
     3006    }
     3007
     3008    /**
     3009     * Indicates the DATA status on the given channel
     3010     *
     3011     * @param int $channel The channel number to evaluate
     3012     * @return bool
     3013     */
     3014    private function is_channel_status_data($channel)
     3015    {
     3016        return isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA;
    29323017    }
    29333018
     
    29883073     * if $mode == self::READ_REGEX, a regular expression.
    29893074     *
     3075     * If not specifying a channel, an open interactive channel will be selected, or, if there are
     3076     * no open channels, an interactive shell will be created. If there are multiple open
     3077     * interactive channels, a legacy behavior will apply in which channel selection prioritizes
     3078     * an active subsystem, the exec pty, and, lastly, the shell. If using multiple interactive
     3079     * channels, callers are discouraged from relying on this legacy behavior and should specify
     3080     * the intended channel.
     3081     *
    29903082     * @see self::write()
    29913083     * @param string $expect
    2992      * @param int $mode
     3084     * @param int $mode One of the self::READ_* constants
     3085     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
    29933086     * @return string|bool|null
    29943087     * @throws \RuntimeException on connection error
    2995      */
    2996     public function read($expect = '', $mode = self::READ_SIMPLE)
    2997     {
     3088     * @throws InsufficientSetupException on unexpected channel status, possibly due to closure
     3089     */
     3090    public function read($expect = '', $mode = self::READ_SIMPLE, $channel = null)
     3091    {
     3092        if (!$this->isAuthenticated()) {
     3093            throw new InsufficientSetupException('Operation disallowed prior to login()');
     3094        }
     3095
    29983096        $this->curTimeout = $this->timeout;
    29993097        $this->is_timeout = false;
    30003098
    3001         if (!$this->isAuthenticated()) {
    3002             throw new InsufficientSetupException('Operation disallowed prior to login()');
    3003         }
    3004 
    3005         if (!($this->bitmap & self::MASK_SHELL) && !$this->initShell()) {
    3006             throw new \RuntimeException('Unable to initiate an interactive shell session');
    3007         }
    3008 
    3009         $channel = $this->get_interactive_channel();
     3099        if ($channel === null) {
     3100            $channel = $this->get_interactive_channel();
     3101        }
     3102
     3103        if (!$this->is_channel_status_data($channel) && empty($this->channel_buffers[$channel])) {
     3104            if ($channel != self::CHANNEL_SHELL) {
     3105                throw new InsufficientSetupException('Data is not available on channel');
     3106            } elseif (!$this->openShell()) {
     3107                throw new \RuntimeException('Unable to initiate an interactive shell session');
     3108            }
     3109        }
    30103110
    30113111        if ($mode == self::READ_NEXT) {
     
    30253125            $response = $this->get_channel_packet($channel);
    30263126            if ($response === true) {
    3027                 $this->in_request_pty_exec = false;
    30283127                return Strings::shift($this->interactiveBuffer, strlen($this->interactiveBuffer));
    30293128            }
     
    30353134    /**
    30363135     * Inputs a command into an interactive shell.
     3136     *
     3137     * If not specifying a channel, an open interactive channel will be selected, or, if there are
     3138     * no open channels, an interactive shell will be created. If there are multiple open
     3139     * interactive channels, a legacy behavior will apply in which channel selection prioritizes
     3140     * an active subsystem, the exec pty, and, lastly, the shell. If using multiple interactive
     3141     * channels, callers are discouraged from relying on this legacy behavior and should specify
     3142     * the intended channel.
    30373143     *
    30383144     * @see SSH2::read()
    30393145     * @param string $cmd
     3146     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
    30403147     * @return void
    30413148     * @throws \RuntimeException on connection error
    3042      */
    3043     public function write($cmd)
     3149     * @throws InsufficientSetupException on unexpected channel status, possibly due to closure
     3150     */
     3151    public function write($cmd, $channel = null)
    30443152    {
    30453153        if (!$this->isAuthenticated()) {
     
    30473155        }
    30483156
    3049         if (!($this->bitmap & self::MASK_SHELL) && !$this->initShell()) {
    3050             throw new \RuntimeException('Unable to initiate an interactive shell session');
    3051         }
    3052 
    3053         $this->send_channel_packet($this->get_interactive_channel(), $cmd);
     3157        if ($channel === null) {
     3158            $channel = $this->get_interactive_channel();
     3159        }
     3160
     3161        if (!$this->is_channel_status_data($channel)) {
     3162            if ($channel != self::CHANNEL_SHELL) {
     3163                throw new InsufficientSetupException('Data is not available on channel');
     3164            } elseif (!$this->openShell()) {
     3165                throw new \RuntimeException('Unable to initiate an interactive shell session');
     3166            }
     3167        }
     3168
     3169        $this->send_channel_packet($channel, $cmd);
    30543170    }
    30553171
     
    30693185    public function startSubsystem($subsystem)
    30703186    {
    3071         $this->window_size_server_to_client[self::CHANNEL_SUBSYSTEM] = $this->window_size;
    3072 
    3073         $packet = Strings::packSSH2(
    3074             'CsN3',
    3075             NET_SSH2_MSG_CHANNEL_OPEN,
    3076             'session',
    3077             self::CHANNEL_SUBSYSTEM,
    3078             $this->window_size,
    3079             0x4000
    3080         );
    3081 
    3082         $this->send_binary_packet($packet);
    3083 
    3084         $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_OPEN;
    3085 
    3086         $this->get_channel_packet(self::CHANNEL_SUBSYSTEM);
     3187        $this->openChannel(self::CHANNEL_SUBSYSTEM);
    30873188
    30883189        $packet = Strings::packSSH2(
     
    31043205        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_DATA;
    31053206
    3106         $this->bitmap |= self::MASK_SHELL;
    3107         $this->in_subsystem = true;
     3207        $this->channel_id_last_interactive = self::CHANNEL_SUBSYSTEM;
    31083208
    31093209        return true;
     
    31183218    public function stopSubsystem()
    31193219    {
    3120         $this->in_subsystem = false;
    3121         $this->close_channel(self::CHANNEL_SUBSYSTEM);
     3220        if ($this->isInteractiveChannelOpen(self::CHANNEL_SUBSYSTEM)) {
     3221            $this->close_channel(self::CHANNEL_SUBSYSTEM);
     3222        }
    31223223        return true;
    31233224    }
     
    31283229     * If read() timed out you might want to just close the channel and have it auto-restart on the next read() call
    31293230     *
    3130      */
    3131     public function reset()
    3132     {
    3133         $this->close_channel($this->get_interactive_channel());
     3231     * If not specifying a channel, an open interactive channel will be selected. If there are
     3232     * multiple open interactive channels, a legacy behavior will apply in which channel selection
     3233     * prioritizes an active subsystem, the exec pty, and, lastly, the shell. If using multiple
     3234     * interactive channels, callers are discouraged from relying on this legacy behavior and
     3235     * should specify the intended channel.
     3236     *
     3237     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
     3238     * @return void
     3239     */
     3240    public function reset($channel = null)
     3241    {
     3242        if ($channel === null) {
     3243            $channel = $this->get_interactive_channel();
     3244        }
     3245        if ($this->isInteractiveChannelOpen($channel)) {
     3246            $this->close_channel($channel);
     3247        }
    31343248    }
    31353249
     
    31773291    public function isConnected()
    31783292    {
    3179         return (bool) ($this->bitmap & self::MASK_CONNECTED);
     3293        return ($this->bitmap & self::MASK_CONNECTED) && is_resource($this->fsock) && !feof($this->fsock);
    31803294    }
    31813295
     
    31883302    {
    31893303        return (bool) ($this->bitmap & self::MASK_LOGIN);
     3304    }
     3305
     3306    /**
     3307     * Is the interactive shell active?
     3308     *
     3309     * @return bool
     3310     */
     3311    public function isShellOpen()
     3312    {
     3313        return $this->isInteractiveChannelOpen(self::CHANNEL_SHELL);
     3314    }
     3315
     3316    /**
     3317     * Is the exec pty active?
     3318     *
     3319     * @return bool
     3320     */
     3321    public function isPTYOpen()
     3322    {
     3323        return $this->isInteractiveChannelOpen(self::CHANNEL_EXEC);
     3324    }
     3325
     3326    /**
     3327     * Is the given interactive channel active?
     3328     *
     3329     * @param int $channel Channel id returned by self::getInteractiveChannelId()
     3330     * @return bool
     3331     */
     3332    public function isInteractiveChannelOpen($channel)
     3333    {
     3334        return $this->isAuthenticated() && $this->is_channel_status_data($channel);
     3335    }
     3336
     3337    /**
     3338     * Returns a channel identifier, presently of the last interactive channel opened, regardless of current status.
     3339     * Returns 0 if no interactive channel has been opened.
     3340     *
     3341     * @see self::isInteractiveChannelOpen()
     3342     * @return int
     3343     */
     3344    public function getInteractiveChannelId()
     3345    {
     3346        return $this->channel_id_last_interactive;
    31903347    }
    31913348
     
    32063363        }
    32073364
    3208         $this->window_size_server_to_client[self::CHANNEL_KEEP_ALIVE] = $this->window_size;
    3209         $packet_size = 0x4000;
    3210         $packet = Strings::packSSH2(
    3211             'CsN3',
    3212             NET_SSH2_MSG_CHANNEL_OPEN,
    3213             'session',
    3214             self::CHANNEL_KEEP_ALIVE,
    3215             $this->window_size_server_to_client[self::CHANNEL_KEEP_ALIVE],
    3216             $packet_size
    3217         );
    3218 
    32193365        try {
    3220             $this->send_binary_packet($packet);
    3221 
    3222             $this->channel_status[self::CHANNEL_KEEP_ALIVE] = NET_SSH2_MSG_CHANNEL_OPEN;
    3223 
    3224             $response = $this->get_channel_packet(self::CHANNEL_KEEP_ALIVE);
     3366            $this->openChannel(self::CHANNEL_KEEP_ALIVE);
    32253367        } catch (\RuntimeException $e) {
    32263368            return $this->reconnect();
     
    32843426            if (!$this->curTimeout) {
    32853427                if ($this->keepAlive <= 0) {
    3286                     @stream_select($read, $write, $except, null);
     3428                    static::stream_select($read, $write, $except, null);
    32873429                } else {
    3288                     if (!@stream_select($read, $write, $except, $this->keepAlive)) {
     3430                    if (!static::stream_select($read, $write, $except, $this->keepAlive)) {
    32893431                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0));
    32903432                        return $this->get_binary_packet(true);
     
    33003442
    33013443                if ($this->keepAlive > 0 && $this->keepAlive < $this->curTimeout) {
    3302                     if (!@stream_select($read, $write, $except, $this->keepAlive)) {
     3444                    if (!static::stream_select($read, $write, $except, $this->keepAlive)) {
    33033445                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0));
    33043446                        $elapsed = microtime(true) - $start;
     
    33143456
    33153457                // this can return a "stream_select(): unable to select [4]: Interrupted system call" error
    3316                 if (!@stream_select($read, $write, $except, $sec, $usec)) {
     3458                if (!static::stream_select($read, $write, $except, $sec, $usec)) {
    33173459                    $this->is_timeout = true;
    33183460                    return true;
     
    35053647        if (defined('NET_SSH2_LOGGING')) {
    35063648            $current = microtime(true);
    3507             $message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
     3649            $message_number = isset(self::$message_numbers[ord($payload[0])]) ? self::$message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
    35083650            $message_number = '<- ' . $message_number .
    35093651                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
     
    35873729                Strings::shift($payload, 1);
    35883730                list($reason_code, $message) = Strings::unpackSSH2('Ns', $payload);
    3589                 $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n$message";
     3731                $this->errors[] = 'SSH_MSG_DISCONNECT: ' . static::$disconnect_reasons[$reason_code] . "\r\n$message";
    35903732                $this->bitmap = 0;
    35913733                return false;
     
    37743916    public function disablePTY()
    37753917    {
    3776         if ($this->in_request_pty_exec) {
     3918        if ($this->isPTYOpen()) {
    37773919            $this->close_channel(self::CHANNEL_EXEC);
    3778             $this->in_request_pty_exec = false;
    37793920        }
    37803921        $this->request_pty = false;
     
    38023943     * - if the channel status is CHANNEL_OPEN and the response was CHANNEL_OPEN_CONFIRMATION
    38033944     * - if the channel status is CHANNEL_REQUEST and the response was CHANNEL_SUCCESS
     3945     * - if the channel status is CHANNEL_CLOSE and the response was CHANNEL_CLOSE
    38043946     *
    38053947     * bool(false) is returned if:
     
    39694111                        }
    39704112                    case NET_SSH2_MSG_CHANNEL_CLOSE:
    3971                         return $type == NET_SSH2_MSG_CHANNEL_CLOSE ? true : $this->get_channel_packet($client_channel, $skip_extended);
     4113                        if ($client_channel == $channel && $type == NET_SSH2_MSG_CHANNEL_CLOSE) {
     4114                            return true;
     4115                        }
     4116                        return $this->get_channel_packet($client_channel, $skip_extended);
    39724117                }
    39734118            }
     
    40044149                    $this->curTimeout = 5;
    40054150
    4006                     if ($this->bitmap & self::MASK_SHELL) {
    4007                         $this->bitmap &= ~self::MASK_SHELL;
    4008                     }
     4151                    $this->close_channel_bitmap($channel);
     4152
    40094153                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) {
    40104154                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
     
    40124156
    40134157                    $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
     4158                    $this->channelCount--;
     4159
    40144160                    if ($client_channel == $channel) {
    40154161                        return true;
     
    41584304        if (defined('NET_SSH2_LOGGING')) {
    41594305            $current = microtime(true);
    4160             $message_number = isset($this->message_numbers[ord($logged[0])]) ? $this->message_numbers[ord($logged[0])] : 'UNKNOWN (' . ord($logged[0]) . ')';
     4306            $message_number = isset(self::$message_numbers[ord($logged[0])]) ? self::$message_numbers[ord($logged[0])] : 'UNKNOWN (' . ord($logged[0]) . ')';
    41614307            $message_number = '-> ' . $message_number .
    41624308                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
     
    41674313        if (strlen($packet) != $sent) {
    41684314            $this->bitmap = 0;
    4169             throw new \RuntimeException("Only $sent of " . strlen($packet) . " bytes were sent");
     4315            $message = $sent === false ?
     4316                'Unable to write ' . strlen($packet) . ' bytes' :
     4317                "Only $sent of " . strlen($packet) . " bytes were sent";
     4318            throw new \RuntimeException($message);
    41704319        }
    41714320    }
     
    43434492
    43444493        $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
     4494        $this->channelCount--;
    43454495
    43464496        $this->curTimeout = 5;
    43474497
    43484498        while (!is_bool($this->get_channel_packet($client_channel))) {
    4349         }
    4350 
    4351         if ($this->is_timeout) {
    4352             $this->disconnect();
    43534499        }
    43544500
     
    43574503        }
    43584504
    4359         if ($this->bitmap & self::MASK_SHELL) {
    4360             $this->bitmap &= ~self::MASK_SHELL;
     4505        $this->close_channel_bitmap($client_channel);
     4506    }
     4507
     4508    /**
     4509     * Maintains execution state bitmap in response to channel closure
     4510     *
     4511     * @param int $client_channel The channel number to maintain closure status of
     4512     * @return void
     4513     */
     4514    private function close_channel_bitmap($client_channel)
     4515    {
     4516        switch ($client_channel) {
     4517            case self::CHANNEL_SHELL:
     4518                // Shell status has been maintained in the bitmap for backwards
     4519                //  compatibility sake, but can be removed going forward
     4520                if ($this->bitmap & self::MASK_SHELL) {
     4521                    $this->bitmap &= ~self::MASK_SHELL;
     4522                }
     4523                break;
    43614524        }
    43624525    }
     
    43964559     * @access protected
    43974560     */
    4398     protected function define_array(...$args)
     4561    protected static function define_array(...$args)
    43994562    {
    44004563        foreach ($args as $arg) {
     
    47994962            ]
    48004963        ];
     4964    }
     4965
     4966    /**
     4967     * Force multiple channels (even if phpseclib has decided to disable them)
     4968     */
     4969    public function forceMultipleChannels()
     4970    {
     4971        $this->errorOnMultipleChannels = false;
    48014972    }
    48024973
Note: See TracChangeset for help on using the changeset viewer.