pulsarvp/vps-tools

View on GitHub
src/modules/apiapp/models/Apiapp.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
    namespace vps\tools\modules\apiapp\models;

    use vps\tools\helpers\StringHelper;
    use Yii;
    use yii\db\ActiveRecord;
    use yii\web\IdentityInterface;

    /**
     * @property integer $id
     * @property string  $name
     * @property string  $token
     */
    class Apiapp extends ActiveRecord implements IdentityInterface
    {
        private $_authKey;

        /**
         * @inheritdoc
         */
        public function getAuthKey ()
        {
            return $this->_authKey;
        }

        /**
         * @inheritdoc
         */
        public function getId ()
        {
            return $this->id;
        }

        /**
         * Finds App token by its name.
         *
         * @param string $name     App name.
         *
         * @return string
         */
        public static function getTokenForName ($name)
        {
            $object = self::findOne([ 'name' => $name ]);
            if ($object == null)
            {
                $object = new App([
                    'name'  => $name,
                    'token' => StringHelper::random(16)
                ]);
                $object->save();
            }

            return $object->token;
        }

        /**
         * @inheritdoc
         */
        public function attributeLabels ()
        {
            return [
                'id'    => Yii::tr('ID'),
                'name'  => Yii::tr('Name'),
                'token' => Yii::tr('Token'),
            ];
        }

        /**
         * @inheritdoc
         */
        public function rules ()
        {
            return [
                [ [ 'name' ], 'filter', 'filter' => 'strip_tags' ],
                [ [ 'name' ], 'required' ],
                [ [ 'name', 'token' ], 'unique' ],
                [ [ 'name' ], 'string', 'max' => 45 ],
                [ [ 'token' ], 'string', 'max' => 32 ],
                [ [ 'token' ], 'match', 'pattern' => '/^[\w\d]+$/', 'message' => Yii::tr('Token should contain only latin letters, numbers.',[],'apiapp') ],
            ];
        }

        /**
         * @inheritdoc
         */
        public static function tableName ()
        {
            return 'apiapp';
        }

        /**
         * Generate random authKey
         */
        public function generateAuthKey ()
        {
            $this->_authKey = Yii::$app->security->generateRandomString();
        }

        /**
         * @inheritdoc
         */
        public static function findIdentity ($id)
        {
            return static::findOne($id);
        }

        /**
         * @inheritdoc
         */
        public static function findIdentityByAccessToken ($token, $type = null)
        {
            return static::findOne([ 'token' => $token ]);
        }

        /**
         * @inheritdoc
         */
        public function validateAuthKey ($authKey)
        {
            return $this->getAuthKey() === $authKey;
        }
    }