X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/916a82616f1e2c750a1f01109e65ad2b603a79ce..refs/pull/3406/head:/app/Auth/Access/Mfa/MfaValue.php diff --git a/app/Auth/Access/Mfa/MfaValue.php b/app/Auth/Access/Mfa/MfaValue.php index 6e9049c3c..8f07c6657 100644 --- a/app/Auth/Access/Mfa/MfaValue.php +++ b/app/Auth/Access/Mfa/MfaValue.php @@ -7,8 +7,8 @@ use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property int $user_id + * @property int $id + * @property int $user_id * @property string $method * @property string $value * @property Carbon $created_at @@ -19,7 +19,15 @@ class MfaValue extends Model protected static $unguarded = true; const METHOD_TOTP = 'totp'; - const METHOD_CODES = 'codes'; + const METHOD_BACKUP_CODES = 'backup_codes'; + + /** + * Get all the MFA methods available. + */ + public static function allMethods(): array + { + return [self::METHOD_TOTP, self::METHOD_BACKUP_CODES]; + } /** * Upsert a new MFA value for the given user and method @@ -30,16 +38,30 @@ class MfaValue extends Model /** @var MfaValue $mfaVal */ $mfaVal = static::query()->firstOrNew([ 'user_id' => $user->id, - 'method' => $method + 'method' => $method, ]); $mfaVal->setValue($value); $mfaVal->save(); } + /** + * Easily get the decrypted MFA value for the given user and method. + */ + public static function getValueForUser(User $user, string $method): ?string + { + /** @var MfaValue $mfaVal */ + $mfaVal = static::query() + ->where('user_id', '=', $user->id) + ->where('method', '=', $method) + ->first(); + + return $mfaVal ? $mfaVal->getValue() : null; + } + /** * Decrypt the value attribute upon access. */ - public function getValue(): string + protected function getValue(): string { return decrypt($this->value); } @@ -47,7 +69,7 @@ class MfaValue extends Model /** * Encrypt the value attribute upon access. */ - public function setValue($value): void + protected function setValue($value): void { $this->value = encrypt($value); }