/var/www/hkosl.com/littleark/webadmin/libraies/twilio/sdk/tests/AccessTokenTest.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php

require_once 'Twilio/AccessToken.php';

class 
AccessTokenTest extends PHPUnit_Framework_TestCase
{
    const 
SIGNING_KEY_SID 'SK123';

    const 
ACCOUNT_SID 'AC123';

    protected function 
validateClaims($payload)
    {
        
$this->assertEquals(self::SIGNING_KEY_SID$payload->iss);
        
$this->assertEquals(self::ACCOUNT_SID$payload->sub);

        
$this->assertNotNull($payload->exp);

        
$this->assertGreaterThanOrEqual(time(), $payload->exp);

        
$this->assertNotNull($payload->jti);
        
$this->assertStringStartsWith($payload->iss '-'$payload->jti);

        
$this->assertNotNull($payload->grants);
    }

    function 
testEmptyGrants()
    {
        
$scat = new Services_Twilio_AccessToken(self::ACCOUNT_SIDself::SIGNING_KEY_SID'secret');
        
$token $scat->toJWT();
        
$this->assertNotNull($token);
        
$payload JWT::decode($token'secret');
        
$this->validateClaims($payload);

        
$this->assertEquals('{}'json_encode($payload->grants));
    }

    function 
testNbf()
    {
        
$scat = new Services_Twilio_AccessToken(self::ACCOUNT_SIDself::SIGNING_KEY_SID'secret');

        
$now time();
        
$scat->setNbf($now);

        
$token $scat->toJWT();
        
$this->assertNotNull($token);
        
$payload JWT::decode($token'secret');
        
$this->validateClaims($payload);
        
$this->assertEquals('{}'json_encode($payload->grants));
        
$this->assertEquals($now$payload->nbf);
        
$this->assertGreaterThan($payload->nbf$payload->exp);
    }

    function 
testConversationGrant()
    {
        
$scat = new Services_Twilio_AccessToken(self::ACCOUNT_SIDself::SIGNING_KEY_SID'secret');
        
$grant = new Services_Twilio_Auth_ConversationsGrant();
        
$grant->setConfigurationProfileSid("CP123");
        
$scat->addGrant($grant);

        
$token $scat->toJWT();

        
$this->assertNotNull($token);
        
$payload JWT::decode($token'secret');
        
$this->validateClaims($payload);

        
$grants json_decode(json_encode($payload->grants), true);
        
$this->assertEquals(1count($grants));
        
$this->assertArrayHasKey("rtc"$grants);
        
$this->assertEquals("CP123"$grants['rtc']['configuration_profile_sid']);
    }

    function 
testIpMessagingGrant()
    {
        
$scat = new Services_Twilio_AccessToken(self::ACCOUNT_SIDself::SIGNING_KEY_SID'secret');
        
$grant = new Services_Twilio_Auth_IpMessagingGrant();
        
$grant->setEndpointId("EP123");
        
$grant->setServiceSid("IS123");
        
$scat->addGrant($grant);

        
$token $scat->toJWT();
        
$this->assertNotNull($token);
        
$payload JWT::decode($token'secret');
        
$this->validateClaims($payload);

        
$grants json_decode(json_encode($payload->grants), true);
        
$this->assertEquals(1count($grants));
        
$this->assertArrayHasKey("ip_messaging"$grants);
        
$this->assertEquals("EP123"$grants['ip_messaging']['endpoint_id']);
        
$this->assertEquals("IS123"$grants['ip_messaging']['service_sid']);
    }

    function 
testGrants()
    {
        
$scat = new Services_Twilio_AccessToken(self::ACCOUNT_SIDself::SIGNING_KEY_SID'secret');
        
$scat->setIdentity('test identity');
        
$scat->addGrant(new Services_Twilio_Auth_ConversationsGrant());
        
$scat->addGrant(new Services_Twilio_Auth_IpMessagingGrant());

        
$token $scat->toJWT();

        
$this->assertNotNull($token);
        
$payload JWT::decode($token'secret');
        
$this->validateClaims($payload);

        
$grants json_decode(json_encode($payload->grants), true);
        
$this->assertEquals(3count($grants));
        
$this->assertEquals('test identity'$payload->grants->identity);
        
$this->assertEquals('{}'json_encode($payload->grants->rtc));
        
$this->assertEquals('{}'json_encode($payload->grants->ip_messaging));
    }

}