Completed
Push — master ( b5be07...eb7aa9 )
by zacksleo
01:54
created

OauthClients::rules()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 2
cts 2
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 14
nc 1
nop 0
crap 1
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