RefreshAction::post()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 25
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 14
nc 4
nop 1
dl 0
loc 25
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
namespace yrc\actions;
4
5
use common\models\RefreshToken;
0 ignored issues
show
Bug introduced by
The type common\models\RefreshToken was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use yrc\rest\Action as RestAction;
7
use yii\helpers\ArrayHelper;
8
use yii\web\HttpException;
9
use Yii;
10
11
/**
12
 * Handles token refresh
13
 * @class RefreshAction
14
 */
15
class RefreshAction extends RestAction
16
{
17
    public $extraAttributes = [];
18
19
    public $identityAttributes = [];
20
21
    /**
22
     * Refreshes the user's token
23
     * @return bool
24
     */
25
    public function post($params)
0 ignored issues
show
Unused Code introduced by
The parameter $params is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

25
    public function post(/** @scrutinizer ignore-unused */ $params)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
26
    {
27
        $refreshToken = Yii::$app->request->post('refresh_token', false);
28
        $model = RefreshToken::find()->where([
29
            'user_id' => Yii::$app->user->id,
30
            'token' => $refreshToken
31
        ])->one();
32
33
        if ($model === null) {
34
            throw new HttpException(401, Yii::t('yrc', 'The refresh token provided is either not valid, or has expired.'));
35
        }
36
37
        // If we can delete the token, send a newly generated token out
38
        if ($model->delete()) {
39
            // Merge any extra attributes with the generated tokens
40
            $tokenClass = (Yii::$app->user->identityClass::TOKEN_CLASS);
41
            $tokens = ArrayHelper::merge($this->extraAttributes, $tokenClass::generate(Yii::$app->user->id)->getAuthResponse());
42
            // Merge the identity attributes
43
            foreach ($this->identityAttributes as $attr) {
44
                $tokens[$attr] = Yii::$app->user->getIdentity()->$attr;
0 ignored issues
show
Bug introduced by
The method getIdentity() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

44
                $tokens[$attr] = Yii::$app->user->/** @scrutinizer ignore-call */ getIdentity()->$attr;

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
45
            }
46
            return $tokens;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $tokens returns the type array which is incompatible with the documented return type boolean.
Loading history...
47
        }
48
49
        throw new HttpException(400, Yii::t('yrc', 'An unexpected error occurred. Please re-authenticate.'));
50
    }
51
}
52