@@ -12,39 +12,40 @@ public function __construct()
12
12
{
13
13
$ this ->salt = rand (0 , 100000 );
14
14
15
- $ date = new \DateTime (" now " , new \DateTimeZone ('UTC ' ));
15
+ $ date = new \DateTime (' now ' , new \DateTimeZone ('UTC ' ));
16
16
$ this ->ts = $ date ->getTimestamp () + 24 * 3600 ;
17
17
18
- $ this ->privileges = array () ;
18
+ $ this ->privileges = [] ;
19
19
}
20
20
21
21
public function packContent ()
22
22
{
23
- $ buffer = unpack (" C* " , pack (" V " , $ this ->salt ));
24
- $ buffer = array_merge ($ buffer , unpack (" C* " , pack (" V " , $ this ->ts )));
25
- $ buffer = array_merge ($ buffer , unpack (" C* " , pack (" v " , sizeof ($ this ->privileges ))));
23
+ $ buffer = unpack (' C* ' , pack (' V ' , $ this ->salt ));
24
+ $ buffer = array_merge ($ buffer , unpack (' C* ' , pack (' V ' , $ this ->ts )));
25
+ $ buffer = array_merge ($ buffer , unpack (' C* ' , pack (' v ' , sizeof ($ this ->privileges ))));
26
26
foreach ($ this ->privileges as $ key => $ value ) {
27
- $ buffer = array_merge ($ buffer , unpack (" C* " , pack (" v " , $ key )));
28
- $ buffer = array_merge ($ buffer , unpack (" C* " , pack (" V " , $ value )));
27
+ $ buffer = array_merge ($ buffer , unpack (' C* ' , pack (' v ' , $ key )));
28
+ $ buffer = array_merge ($ buffer , unpack (' C* ' , pack (' V ' , $ value )));
29
29
}
30
+
30
31
return $ buffer ;
31
32
}
32
33
33
34
public function unpackContent ($ msg )
34
35
{
35
36
$ pos = 0 ;
36
- $ salt = unpack (" V " , substr ($ msg , $ pos , 4 ))[1 ];
37
+ $ salt = unpack (' V ' , substr ($ msg , $ pos , 4 ))[1 ];
37
38
$ pos += 4 ;
38
- $ ts = unpack (" V " , substr ($ msg , $ pos , 4 ))[1 ];
39
+ $ ts = unpack (' V ' , substr ($ msg , $ pos , 4 ))[1 ];
39
40
$ pos += 4 ;
40
- $ size = unpack (" v " , substr ($ msg , $ pos , 2 ))[1 ];
41
+ $ size = unpack (' v ' , substr ($ msg , $ pos , 2 ))[1 ];
41
42
$ pos += 2 ;
42
43
43
- $ privileges = array () ;
44
+ $ privileges = [] ;
44
45
for ($ i = 0 ; $ i < $ size ; $ i ++) {
45
- $ key = unpack (" v " , substr ($ msg , $ pos , 2 ));
46
+ $ key = unpack (' v ' , substr ($ msg , $ pos , 2 ));
46
47
$ pos += 2 ;
47
- $ value = unpack (" V " , substr ($ msg , $ pos , 4 ));
48
+ $ value = unpack (' V ' , substr ($ msg , $ pos , 4 ));
48
49
$ pos += 4 ;
49
50
$ privileges [$ key [1 ]] = $ value [1 ];
50
51
}
@@ -56,56 +57,60 @@ public function unpackContent($msg)
56
57
57
58
class AccessToken
58
59
{
59
- const Privileges = array (
60
- "kJoinChannel " => 1 ,
61
- "kPublishAudioStream " => 2 ,
62
- "kPublishVideoStream " => 3 ,
63
- "kPublishDataStream " => 4 ,
64
- "kPublishAudioCdn " => 5 ,
65
- "kPublishVideoCdn " => 6 ,
66
- "kRequestPublishAudioStream " => 7 ,
67
- "kRequestPublishVideoStream " => 8 ,
68
- "kRequestPublishDataStream " => 9 ,
69
- "kInvitePublishAudioStream " => 10 ,
70
- "kInvitePublishVideoStream " => 11 ,
71
- "kInvitePublishDataStream " => 12 ,
72
- "kAdministrateChannel " => 101 ,
73
- "kRtmLogin " => 1000 ,
74
- );
75
-
76
- public $ appID , $ appCertificate , $ channelName , $ uid ;
60
+ const Privileges = [
61
+ 'kJoinChannel ' => 1 ,
62
+ 'kPublishAudioStream ' => 2 ,
63
+ 'kPublishVideoStream ' => 3 ,
64
+ 'kPublishDataStream ' => 4 ,
65
+ 'kPublishAudioCdn ' => 5 ,
66
+ 'kPublishVideoCdn ' => 6 ,
67
+ 'kRequestPublishAudioStream ' => 7 ,
68
+ 'kRequestPublishVideoStream ' => 8 ,
69
+ 'kRequestPublishDataStream ' => 9 ,
70
+ 'kInvitePublishAudioStream ' => 10 ,
71
+ 'kInvitePublishVideoStream ' => 11 ,
72
+ 'kInvitePublishDataStream ' => 12 ,
73
+ 'kAdministrateChannel ' => 101 ,
74
+ 'kRtmLogin ' => 1000 ,
75
+ ];
76
+
77
+ public $ appID ;
78
+ public $ appCertificate ;
79
+ public $ channelName ;
80
+ public $ uid ;
77
81
public $ message ;
78
82
79
- function __construct ()
83
+ public function __construct ()
80
84
{
81
85
$ this ->message = new Message ();
82
86
}
83
87
84
- function setUid ($ uid )
88
+ public function setUid ($ uid )
85
89
{
86
90
if ($ uid === 0 ) {
87
- $ this ->uid = "" ;
91
+ $ this ->uid = '' ;
88
92
} else {
89
- $ this ->uid = $ uid . '' ;
93
+ $ this ->uid = $ uid. '' ;
90
94
}
91
95
}
92
96
93
- function is_nonempty_string ($ name , $ str )
97
+ public function is_nonempty_string ($ name , $ str )
94
98
{
95
- if (is_string ($ str ) && $ str !== "" ) {
99
+ if (is_string ($ str ) && $ str !== '' ) {
96
100
return true ;
97
101
}
98
- echo $ name . " check failed, should be a non-empty string " ;
102
+ echo $ name .' check failed, should be a non-empty string ' ;
103
+
99
104
return false ;
100
105
}
101
106
102
- static function init ($ appID , $ appCertificate , $ channelName , $ uid )
107
+ public static function init ($ appID , $ appCertificate , $ channelName , $ uid )
103
108
{
104
109
$ accessToken = new AccessToken ();
105
110
106
- if (!$ accessToken ->is_nonempty_string (" appID " , $ appID ) ||
107
- !$ accessToken ->is_nonempty_string (" appCertificate " , $ appCertificate ) ||
108
- !$ accessToken ->is_nonempty_string (" channelName " , $ channelName )) {
111
+ if (! $ accessToken ->is_nonempty_string (' appID ' , $ appID ) ||
112
+ ! $ accessToken ->is_nonempty_string (' appCertificate ' , $ appCertificate ) ||
113
+ ! $ accessToken ->is_nonempty_string (' channelName ' , $ channelName )) {
109
114
return null ;
110
115
}
111
116
@@ -115,53 +120,57 @@ static function init($appID, $appCertificate, $channelName, $uid)
115
120
116
121
$ accessToken ->setUid ($ uid );
117
122
$ accessToken ->message = new Message ();
123
+
118
124
return $ accessToken ;
119
125
}
120
126
121
- static function initWithToken ($ token , $ appCertificate , $ channel , $ uid )
127
+ public static function initWithToken ($ token , $ appCertificate , $ channel , $ uid )
122
128
{
123
129
$ accessToken = new AccessToken ();
124
- if (!$ accessToken ->extract ($ token , $ appCertificate , $ channel , $ uid )) {
130
+ if (! $ accessToken ->extract ($ token , $ appCertificate , $ channel , $ uid )) {
125
131
return null ;
126
132
}
133
+
127
134
return $ accessToken ;
128
135
}
129
136
130
- function addPrivilege ($ key , $ expireTimestamp )
137
+ public function addPrivilege ($ key , $ expireTimestamp )
131
138
{
132
139
$ this ->message ->privileges [$ key ] = $ expireTimestamp ;
140
+
133
141
return $ this ;
134
142
}
135
143
136
- function extract ($ token , $ appCertificate , $ channelName , $ uid )
144
+ public function extract ($ token , $ appCertificate , $ channelName , $ uid )
137
145
{
138
146
$ ver_len = 3 ;
139
147
$ appid_len = 32 ;
140
148
$ version = substr ($ token , 0 , $ ver_len );
141
- if ($ version !== "006 " ) {
142
- echo 'invalid version ' . $ version ;
149
+ if ($ version !== '006 ' ) {
150
+ echo 'invalid version ' .$ version ;
151
+
143
152
return false ;
144
153
}
145
154
146
- if (!$ this ->is_nonempty_string (" token " , $ token ) ||
147
- !$ this ->is_nonempty_string (" appCertificate " , $ appCertificate ) ||
148
- !$ this ->is_nonempty_string (" channelName " , $ channelName )) {
155
+ if (! $ this ->is_nonempty_string (' token ' , $ token ) ||
156
+ ! $ this ->is_nonempty_string (' appCertificate ' , $ appCertificate ) ||
157
+ ! $ this ->is_nonempty_string (' channelName ' , $ channelName )) {
149
158
return false ;
150
159
}
151
160
152
161
$ appid = substr ($ token , $ ver_len , $ appid_len );
153
162
$ content = (base64_decode (substr ($ token , $ ver_len + $ appid_len , strlen ($ token ) - ($ ver_len + $ appid_len ))));
154
163
155
164
$ pos = 0 ;
156
- $ len = unpack (" v " , $ content . substr ($ pos , 2 ))[1 ];
165
+ $ len = unpack (' v ' , $ content. substr ($ pos , 2 ))[1 ];
157
166
$ pos += 2 ;
158
167
$ sig = substr ($ content , $ pos , $ len );
159
168
$ pos += $ len ;
160
- $ crc_channel = unpack (" V " , substr ($ content , $ pos , 4 ))[1 ];
169
+ $ crc_channel = unpack (' V ' , substr ($ content , $ pos , 4 ))[1 ];
161
170
$ pos += 4 ;
162
- $ crc_uid = unpack (" V " , substr ($ content , $ pos , 4 ))[1 ];
171
+ $ crc_uid = unpack (' V ' , substr ($ content , $ pos , 4 ))[1 ];
163
172
$ pos += 4 ;
164
- $ msgLen = unpack (" v " , substr ($ content , $ pos , 2 ))[1 ];
173
+ $ msgLen = unpack (' v ' , substr ($ content , $ pos , 2 ))[1 ];
165
174
$ pos += 2 ;
166
175
$ msg = substr ($ content , $ pos , $ msgLen );
167
176
@@ -174,27 +183,29 @@ function extract($token, $appCertificate, $channelName, $uid)
174
183
$ this ->appCertificate = $ appCertificate ;
175
184
$ this ->channelName = $ channelName ;
176
185
$ this ->setUid ($ uid );
186
+
177
187
return true ;
178
188
}
179
189
180
- function build ()
190
+ public function build ()
181
191
{
182
192
$ msg = $ this ->message ->packContent ();
183
- $ val = array_merge (unpack (" C* " , $ this ->appID ), unpack (" C* " , $ this ->channelName ), unpack (" C* " , $ this ->uid ), $ msg );
193
+ $ val = array_merge (unpack (' C* ' , $ this ->appID ), unpack (' C* ' , $ this ->channelName ), unpack (' C* ' , $ this ->uid ), $ msg );
184
194
185
- $ sig = hash_hmac ('sha256 ' , implode (array_map (" chr " , $ val )), $ this ->appCertificate , true );
195
+ $ sig = hash_hmac ('sha256 ' , implode (array_map (' chr ' , $ val )), $ this ->appCertificate , true );
186
196
187
197
$ crc_channel_name = crc32 ($ this ->channelName ) & 0xffffffff ;
188
198
$ crc_uid = crc32 ($ this ->uid ) & 0xffffffff ;
189
199
190
- $ content = array_merge (unpack ("C* " , packString ($ sig )), unpack ("C* " , pack ("V " , $ crc_channel_name )), unpack ("C* " , pack ("V " , $ crc_uid )), unpack ("C* " , pack ("v " , count ($ msg ))), $ msg );
191
- $ version = "006 " ;
192
- $ ret = $ version . $ this ->appID . base64_encode (implode (array_map ("chr " , $ content )));
200
+ $ content = array_merge (unpack ('C* ' , packString ($ sig )), unpack ('C* ' , pack ('V ' , $ crc_channel_name )), unpack ('C* ' , pack ('V ' , $ crc_uid )), unpack ('C* ' , pack ('v ' , count ($ msg ))), $ msg );
201
+ $ version = '006 ' ;
202
+ $ ret = $ version .$ this ->appID .base64_encode (implode (array_map ('chr ' , $ content )));
203
+
193
204
return $ ret ;
194
205
}
195
206
}
196
207
197
208
function packString ($ value )
198
209
{
199
- return pack (" v " , strlen ($ value )) . $ value ;
210
+ return pack (' v ' , strlen ($ value )). $ value ;
200
211
}
0 commit comments