Completed
Push — master ( 186d9b...7aa9e4 )
by Richard
14s
created

TokenReader::fromString()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 3
dl 0
loc 5
ccs 4
cts 4
cp 1
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/*
3
 You may not change or alter any portion of this comment or credits
4
 of supporting developers from this source code or any supporting source code
5
 which is considered copyrighted (c) material of the original comment or credit authors.
6
7
 This program is distributed in the hope that it will be useful,
8
 but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
 */
11
12
namespace Xmf\Jwt;
13
14
use Xmf\Request;
15
use Xmf\Jwt\KeyFactory;
16
use Xmf\Key\KeyAbstract;
17
18
/**
19
 * Validate and get payload from a token string
20
 *
21
 * @category  Xmf\Jwt\TokenReader
22
 * @package   Xmf
23
 * @author    Richard Griffith <[email protected]>
24
 * @copyright 2016-2018 XOOPS Project (https://xoops.org)
25
 * @license   GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
26
 * @link      https://xoops.org
27
 */
28
class TokenReader
29
{
30
    /**
31
     * Validate and decode a JSON Web Token string
32
     *
33
     * @param KeyAbstract|string $key          the key to use to sign the token, or name of key to build
34
     * @param string             $token        the token string to validate and decode
35
     * @param array|\Traversable $assertClaims traversable set of claims, claim => value, to assert
36
     *
37
     * @return \stdClass|false payload as stdClass, or false if token was invalid
38
     *
39
     * @throws \InvalidArgumentException on unusable key name
40
     */
41 1
    public static function fromString($key, $token, $assertClaims = array())
42
    {
43 1
        $key = ($key instanceof KeyAbstract) ? $key : KeyFactory::build($key);
44 1
        $jwt = new JsonWebToken($key);
45 1
        return $jwt->decode($token, $assertClaims);
46
    }
47
48
    /**
49
     * Validate and decode a JSON Web Token string from a cookie
50
     *
51
     * @param KeyAbstract|string $key          the key to use to sign the token, or name of key to build
52
     * @param string             $cookieName   name of cookie that sources the token
53
     * @param array|\Traversable $assertClaims traversable set of claims, claim => value, to assert
54
     *
55
     * @return \stdClass|false payload as stdClass, or false if token was invalid
56
     *
57
     * @throws \InvalidArgumentException on unusable key name
58
     */
59
    public static function fromCookie($key, $cookieName, $assertClaims = array())
60
    {
61
        $token = Request::getString($cookieName, '', 'COOKIE');
62
        if (empty($token)) {
63
            return false;
64
        }
65
        return static::fromString($key, $token, $assertClaims);
66
    }
67
68
    /**
69
     * Validate and decode a JSON Web Token string from a request (i.e. POST body)
70
     *
71
     * @param KeyAbstract|string $key          the key to use to sign the token, or name of key to build
72
     * @param string             $attributeName name of cookie that sources the token
73
     * @param array|\Traversable $assertClaims  traversable set of claims, claim => value, to assert
74
     *
75
     * @return \stdClass|false payload as stdClass, or false if token was invalid
76
     *
77
     * @throws \InvalidArgumentException on unusable key name
78
     */
79
    public static function fromRequest($key, $attributeName, $assertClaims = array())
80
    {
81
        $token = Request::getString($attributeName, '');
82
        if (empty($token)) {
83
            return false;
84
        }
85
        return static::fromString($key, $token, $assertClaims);
86
    }
87
88
    /**
89
     * Validate and decode a JSON Web Token string from a header
90
     *
91
     * @param KeyAbstract|string $key          the key to use to sign the token, or name of key to build
92
     * @param array|\Traversable $assertClaims traversable set of claims, claim => value, to assert
93
     * @param string             $headerName   name of header that sources the token
94
     *
95
     * @return \stdClass|false payload as stdClass, or false if token was invalid
96
     *
97
     * @throws \InvalidArgumentException on unusable key name
98
     */
99
    public static function fromHeader($key, $assertClaims = array(), $headerName = 'Authorization')
100
    {
101
        $header = Request::getHeader($headerName, '');
102
        if (empty($header)) {
103
            return false;
104
        }
105
        $header = trim($header);
106
        $space = strpos($header, ' '); // expecting "Bearer base64-token-string"
107
        if (false !== $space) {
0 ignored issues
show
introduced by
The condition false !== $space can never be false.
Loading history...
108
            $header = substr($header, $space);
109
        }
110
        $token = trim($header);
111
        return static::fromString($key, $token, $assertClaims);
112
    }
113
}
114