Skip to content

Instantly share code, notes, and snippets.

@Chenx221
Created March 17, 2024 09:22
Show Gist options
  • Save Chenx221/75dbb2d2ff6771f700500bdf5351ab2a to your computer and use it in GitHub Desktop.
Save Chenx221/75dbb2d2ff6771f700500bdf5351ab2a to your computer and use it in GitHub Desktop.
Yii2, Webauthn Framework (Part 4)
<?php
namespace app\models;
use JsonException;
use Webauthn\PublicKeyCredentialSource;
use Yii;
use yii\db\ActiveQuery;
use yii\db\ActiveRecord;
/**
*
* @property int $id record id
* @property int $user_id user id
* @property string $name device name
* @property string $public_key_credential_id PKCID
* @property string $data PKC_DATA
*
* @property User $user
*/
class PublicKeyCredentialSourceRepository extends ActiveRecord
{
public static function tableName(): string
{
return 'public_key_credential_source_repository';
}
public function rules(): array
{
return [
[['user_id', 'name', 'public_key_credential_id', 'data'], 'required'],
[['user_id'], 'integer'],
[['data'], 'string'],
[['name'], 'string', 'max' => 64],
[['public_key_credential_id'], 'string', 'max' => 255],
[['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::class, 'targetAttribute' => ['user_id' => 'id']],
];
}
public function attributeLabels(): array
{
return [
'id' => 'ID',
'user_id' => 'User ID',
'name' => 'Name',
'public_key_credential_id' => 'Public Key Credential ID',
'data' => 'Data',
];
}
public function getUser(): ActiveQuery
{
return $this->hasOne(User::class, ['id' => 'user_id']);
}
public function findAllForUserEntity(User $user): array
{
return self::findAll(['user_id' => $user->id]);
}
public function findOneByCredentialId(string $PKC_ID): ?PublicKeyCredentialSourceRepository
{
return self::findOne(['public_key_credential_id' => $PKC_ID]);
}
public function saveCredential(PublicKeyCredentialSource $PKCS, string $name, bool $isNewRecord = true): bool
{
$jsonSerialize = $PKCS->jsonSerialize();
$this->public_key_credential_id = $jsonSerialize['publicKeyCredentialId'];
$publicKeyCredentialSourceJson = json_encode($jsonSerialize, JSON_THROW_ON_ERROR);
$this->data = $publicKeyCredentialSourceJson;
if($isNewRecord){
$this->name = $name;
}
$this->user_id = Yii::$app->user->id;
return $this->save();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment