| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | namespace zacksleo\yii2\oauth2\common\models; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | use yii; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | use zacksleo\yii2\oauth2\common\behaviors\OauthClientsDeleteBehavior; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | use Ramsey\Uuid\Uuid; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | use filsh\yii2\oauth2server\models\OauthClients as Clients; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | use zacksleo\yii2\oauth2\common\queries\OauthClientsQuery; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  |  * This is the model class for table "{{%oauth_clients}}". | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  |  * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |  * @inheritdoc | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |  * @property string $client_name | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |  * @property string $client_icon | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |  * @property boolean $one_token_per_user | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |  */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  | class OauthClients extends Clients | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  | { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |      * @inheritdoc | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 25 |  |  |      */ | 
            
                                                                        
                            
            
                                    
            
            
                | 26 | 3 |  |     public static function tableName() | 
            
                                                                        
                            
            
                                    
            
            
                | 27 |  |  |     { | 
            
                                                                        
                            
            
                                    
            
            
                | 28 | 3 |  |         return '{{%oauth_clients}}'; | 
            
                                                                        
                            
            
                                    
            
            
                | 29 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |      * @inheritdoc | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 | 1 |  |     public function rules() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |         return [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 | 1 |  |             ['client_name', 'required'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  |             ['redirect_uri', 'default', 'value' => ''], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  |             [['grant_types'], 'required'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  |             [['user_id'], 'integer'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |             [['redirect_uri'], 'string', 'max' => 1000], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |             [['scope'], 'string', 'max' => 2000], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |             ['user_id', 'default', 'value' => 1], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  |             ['client_id', 'string', 'max' => 36], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |             ['client_secret', 'string', 'max' => 36], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |             ['client_icon', 'safe'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |             ['one_token_per_user', 'boolean'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |             [['client_name', 'user_id'], 'unique', 'targetAttribute' => ['client_name', 'user_id']], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |         ]; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 | 1 |  |     public function beforeValidate() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 | 1 |  |         $model = Yii::$app->request->post('OauthClients'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 | 1 |  |         if (isset($model['grant_types'])) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  |             $this->grant_types = implode(' ', $model['grant_types']); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 | 1 |  |         return parent::beforeValidate(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  |      * @inheritdoc | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 | 1 |  |     public function attributeLabels() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 |  |  |         return [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 | 1 |  |             'client_id' => '应用ID', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 |  |  |             'client_name' => '应用名称', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 |  |  |             'client_secret' => '应用密钥', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 |  |  |             'redirect_uri' => '回跳URL', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 |  |  |             'grant_types' => '授权类型', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 72 |  |  |             'scope' => '权限范围', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 73 |  |  |             'user_id' => '用户', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 74 |  |  |             'client_icon' => '图标', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 75 |  |  |             'one_token_per_user' => '单设备登录', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 76 |  |  |         ]; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 77 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 78 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 79 | 1 |  |     public function fields() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 80 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 81 | 1 |  |         $fields = parent::fields(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 |  |  |         unset( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 | 1 |  |             $fields['redirect_uri'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 | 1 |  |             $fields['grant_types'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 | 1 |  |             $fields['scope'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 | 1 |  |             $fields['user_id'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 | 1 |  |             $fields['client_id'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 | 1 |  |             $fields['client_secret'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 |  |  |         ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 | 1 |  |         return $fields; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 | 1 |  |     public function extraFields() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 94 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 95 |  |  |         return [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 96 | 1 |  |             'client_id', 'client_secret', 'userCount' | 
            
                                                                                                            
                            
            
                                    
            
            
                | 97 |  |  |         ]; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 | 4 |  |     public function behaviors() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 |  |  |         return [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 | 4 |  |             OauthClientsDeleteBehavior::className(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 |  |  |         ]; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 106 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 107 | 1 |  |     public function beforeSave($insert) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 108 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 109 | 1 |  |         if ($this->isNewRecord) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 110 |  |  |             try { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 111 | 1 |  |                 $uuid = Uuid::uuid5(Uuid::NAMESPACE_DNS, $this->client_name . $this->user_id); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 112 | 1 |  |                 $this->client_id = $uuid->toString(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 113 |  |  |             } catch (UnsatisfiedDependencyException $e) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 114 |  |  |                 $this->addError('app_name', $e->getMessage()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 115 |  |  |                 return false; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 116 |  |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 117 | 1 |  |             $this->client_secret = Yii::$app->security->generateRandomString(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 118 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 119 | 1 |  |         return parent::beforeSave($insert); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 120 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 121 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 122 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 123 |  |  |      * @inheritdoc | 
            
                                                                                                            
                            
            
                                    
            
            
                | 124 |  |  |      * @return OauthClientsQuery the active query used by this AR class. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 125 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 126 | 3 |  |     public static function find() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 127 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 128 | 3 |  |         return new OauthClientsQuery(get_called_class()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 129 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 130 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 131 | 1 |  |     public function getUserCount() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 132 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 133 | 1 |  |         return $this->hasMany(OauthClientsSignupUser::className(), ['client_id' => 'client_id'])->count(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 134 |  |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 135 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 136 |  |  |  |