Fixes ACCOUNTS-2. Catch decryption exception for OAuth2 flow

This commit is contained in:
ErickSkrauch 2020-08-23 00:23:36 +03:00
parent 503880615a
commit 2a4f29801d
3 changed files with 21 additions and 6 deletions

View File

@ -3,6 +3,9 @@ declare(strict_types=1);
namespace api\components\OAuth2;
use LogicException;
use RangeException;
use SodiumException;
use Yii;
/**
@ -20,7 +23,11 @@ trait CryptTrait {
}
protected function decrypt($encryptedData): string {
return Yii::$app->tokens->decryptValue($encryptedData);
try {
return Yii::$app->tokens->decryptValue($encryptedData);
} catch (SodiumException | RangeException $e) {
throw new LogicException($e->getMessage(), 0, $e);
}
}
}

View File

@ -107,6 +107,13 @@ class Component extends BaseComponent {
return $cipher;
}
/**
* @param string $encryptedValue
*
* @return string
* @throws \SodiumException
* @throws \RangeException
*/
public function decryptValue(string $encryptedValue): string {
$decoded = Base64UrlSafe::decode($encryptedValue);
Assert::true(mb_strlen($decoded, '8bit') >= (SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + SODIUM_CRYPTO_SECRETBOX_MACBYTES));

View File

@ -6,12 +6,9 @@ namespace api\components\Tokens;
use Lcobucci\JWT\Token;
use Yii;
class TokenReader {
final class TokenReader {
/**
* @var Token
*/
private $token;
private Token $token;
public function __construct(Token $token) {
$this->token = $token;
@ -55,6 +52,10 @@ class TokenReader {
return null;
}
/**
* It really might throw an exception but we have not seen any case of such exception yet
* @noinspection PhpUnhandledExceptionInspection
*/
return Yii::$app->tokens->decryptValue($encodedClientToken);
}