1
+ <?php
2
+
3
+ namespace filsh \yii2 \oauth2server \grants ;
4
+
5
+ use \OAuth2 \Storage \ClientCredentialsInterface ;
6
+ use \OAuth2 \Storage \UserCredentialsInterface ;
7
+
8
+ class UserAuthCredentials extends \OAuth2 \ClientAssertionType \HttpBasic implements \OAuth2 \GrantType \GrantTypeInterface
9
+ {
10
+ protected $ userStorage ;
11
+
12
+ public function __construct (UserCredentialsInterface $ userStorage , ClientCredentialsInterface $ storage , array $ config = array ())
13
+ {
14
+ $ this ->userStorage = $ userStorage ;
15
+ parent ::__construct ($ storage , $ config );
16
+ }
17
+
18
+ public function getQuerystringIdentifier ()
19
+ {
20
+ return 'user_authkey_credentials ' ;
21
+ }
22
+
23
+ public function createAccessToken (\OAuth2 \ResponseType \AccessTokenInterface $ accessToken , $ client_id , $ user_id , $ scope )
24
+ {
25
+ return $ accessToken ->createAccessToken ($ client_id , $ user_id , $ scope );
26
+ }
27
+
28
+ public function getUserId ()
29
+ {
30
+ return $ this ->userInfo ['user_id ' ];
31
+ }
32
+
33
+ public function getScope ()
34
+ {
35
+ return isset ($ this ->userInfo ['scope ' ]) ? $ this ->userInfo ['scope ' ] : null ;
36
+ }
37
+
38
+ public function validateRequest (\OAuth2 \RequestInterface $ request , \OAuth2 \ResponseInterface $ response )
39
+ {
40
+ if (!$ request ->request ('authkey ' ) || !$ request ->request ('username ' )) {
41
+ $ response ->setError (400 , 'invalid_request ' , 'Missing parameters: "authkey" and "username" required ' );
42
+ return null ;
43
+ }
44
+
45
+ if (!$ this ->userStorage ->findIdentityByAccessToken ($ request ->request ('authkey ' ))) {
46
+ $ response ->setError (401 , 'invalid_grant ' , 'Invalid user authkey ' );
47
+ return null ;
48
+ }
49
+
50
+ $ userInfo = $ this ->userStorage ->getUserDetails ($ request ->request ('username ' ));
51
+
52
+ if (empty ($ userInfo )) {
53
+ $ response ->setError (400 , 'invalid_grant ' , 'Unable to retrieve user information ' );
54
+ return null ;
55
+ }
56
+
57
+ if (!isset ($ userInfo ['user_id ' ])) {
58
+ throw new \LogicException ('you must set the user_id on the array returned by getUserDetails ' );
59
+ }
60
+
61
+ $ this ->userInfo = $ userInfo ;
62
+
63
+ return parent ::validateRequest ($ request , $ response );
64
+ }
65
+ }
0 commit comments