Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/magento/module-jwt-framework-adapter/Model/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/magento/module-jwt-framework-adapter/Model/JwtManager.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

declare(strict_types=1);

namespace Magento\JwtFrameworkAdapter\Model;

use Magento\Framework\Jwt\EncryptionSettingsInterface;
use Magento\Framework\Jwt\Exception\EncryptionException;
use Magento\Framework\Jwt\Exception\JwtException;
use Magento\Framework\Jwt\Exception\MalformedTokenException;
use Magento\Framework\Jwt\HeaderInterface;
use Magento\Framework\Jwt\Jwe\JweEncryptionSettingsInterface;
use Magento\Framework\Jwt\Jwe\JweInterface;
use Magento\Framework\Jwt\Jwk;
use Magento\Framework\Jwt\Jws\JwsInterface;
use Magento\Framework\Jwt\Jws\JwsSignatureSettingsInterface;
use Magento\Framework\Jwt\JwtInterface;
use Magento\Framework\Jwt\JwtManagerInterface;
use Magento\Framework\Jwt\Unsecured\NoEncryption;
use Magento\Framework\Jwt\Unsecured\UnsecuredJwtInterface;

/**
 * Adapter for jwt-framework.
 */
class JwtManager implements JwtManagerInterface
{
    private const JWT_TYPE_JWS = 1;

    private const JWT_TYPE_JWE = 2;

    private const JWT_TYPE_UNSECURED = 3;

    private const JWS_ALGORITHMS = [
        Jwk::ALGORITHM_HS256,
        Jwk::ALGORITHM_HS384,
        Jwk::ALGORITHM_HS512,
        Jwk::ALGORITHM_RS256,
        Jwk::ALGORITHM_RS384,
        Jwk::ALGORITHM_RS512,
        Jwk::ALGORITHM_ES256,
        Jwk::ALGORITHM_ES384,
        Jwk::ALGORITHM_ES512,
        Jwk::ALGORITHM_PS256,
        Jwk::ALGORITHM_PS384,
        Jwk::ALGORITHM_PS512
    ];

    private const JWE_ALGORITHMS = [
        Jwk::ALGORITHM_RSA_OAEP,
        Jwk::ALGORITHM_RSA_OAEP_256,
        Jwk::ALGORITHM_A128KW,
        Jwk::ALGORITHM_A192KW,
        Jwk::ALGORITHM_A256KW,
        Jwk::ALGORITHM_DIR,
        Jwk::ALGORITHM_ECDH_ES,
        Jwk::ALGORITHM_ECDH_ES_A128KW,
        Jwk::ALGORITHM_ECDH_ES_A192KW,
        Jwk::ALGORITHM_ECDH_ES_A256KW,
        Jwk::ALGORITHM_A128GCMKW,
        Jwk::ALGORITHM_A192GCMKW,
        Jwk::ALGORITHM_A256GCMKW,
        Jwk::ALGORITHM_PBES2_HS256_A128KW,
        Jwk::ALGORITHM_PBES2_HS384_A192KW,
        Jwk::ALGORITHM_PBES2_HS512_A256KW,
    ];

    /**
     * @var JwsManager
     */
    private $jwsManager;

    /**
     * @var JweManager
     */
    private $jweManager;

    /**
     * @var UnsecuredJwtManager
     */
    private $unsecuredManager;

    /**
     * @param JwsManager $jwsManager
     * @param JweManager $jweManager
     */
    public function __construct(JwsManager $jwsManager, JweManager $jweManager, UnsecuredJwtManager $unsecuredManager)
    {
        $this->jwsManager = $jwsManager;
        $this->jweManager = $jweManager;
        $this->unsecuredManager = $unsecuredManager;
    }

    /**
     * @inheritDoc
     */
    public function create(JwtInterface $jwt, EncryptionSettingsInterface $encryption): string
    {
        if (!$jwt instanceof UnsecuredJwtInterface && !$jwt instanceof JwsInterface && !$jwt instanceof JweInterface) {
            throw new MalformedTokenException('Can only build JWS, JWE or Unsecured tokens.');
        }
        try {
            if ($jwt instanceof JwsInterface) {
                return $this->jwsManager->build($jwt, $encryption);
            }
            if ($jwt instanceof JweInterface) {
                return $this->jweManager->build($jwt, $encryption);
            }
            if ($jwt instanceof UnsecuredJwtInterface) {
                if (!$encryption instanceof NoEncryption) {
                    throw new EncryptionException('Unsecured JWTs can only work with no encryption settings');
                }

                return $this->unsecuredManager->build($jwt);
            }
        } catch (\Throwable $exception) {
            if (!$exception instanceof JwtException) {
                $exception = new JwtException('Failed to generate a JWT', 0, $exception);
            }
            throw $exception;
        }
    }

    /**
     * @inheritDoc
     */
    public function read(string $token, array $acceptableEncryption): JwtInterface
    {
        /** @var JwtInterface|null $read */
        $read = null;
        /** @var \Throwable|null $lastException */
        $lastException = null;
        foreach ($acceptableEncryption as $encryptionSettings) {
            try {
                switch ($this->detectJwtType($encryptionSettings)) {
                    case self::JWT_TYPE_JWS:
                        $read = $this->jwsManager->read($token, $encryptionSettings);
                        break;
                    case self::JWT_TYPE_JWE:
                        $read = $this->jweManager->read($token, $encryptionSettings);
                        break;
                    case self::JWT_TYPE_UNSECURED:
                        $read = $this->unsecuredManager->read($token);
                        break;
                }
            } catch (\Throwable $exception) {
                if (!$exception instanceof JwtException) {
                    $exception = new JwtException('Failed to read JWT', 0, $exception);
                }
                $lastException = $exception;
            }
        }

        if (!$read) {
            throw $lastException;
        }
        return $read;
    }

    /**
     * @inheritDoc
     */
    public function readHeaders(string $token): array
    {
        try {
            return $this->jwsManager->readHeaders($token);
        } catch (JwtException $exception) {
            return $this->jweManager->readHeaders($token);
        }
    }

    private function detectJwtType(EncryptionSettingsInterface $encryptionSettings): int
    {
        if ($encryptionSettings instanceof JwsSignatureSettingsInterface) {
            return self::JWT_TYPE_JWS;
        }
        if ($encryptionSettings instanceof JweEncryptionSettingsInterface) {
            return self::JWT_TYPE_JWE;
        }
        if ($encryptionSettings instanceof NoEncryption) {
            return self::JWT_TYPE_UNSECURED;
        }

        if ($encryptionSettings->getAlgorithmName() === Jwk::ALGORITHM_NONE) {
            return self::JWT_TYPE_UNSECURED;
        }
        if (in_array($encryptionSettings->getAlgorithmName(), self::JWS_ALGORITHMS, true)) {
            return self::JWT_TYPE_JWS;
        }
        if (in_array($encryptionSettings->getAlgorithmName(), self::JWE_ALGORITHMS, true)) {
            return self::JWT_TYPE_JWE;
        }

        throw new \RuntimeException('Failed to determine JWT type');
    }
}

Spamworldpro Mini