38 lines
		
	
	
		
			804 B
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			804 B
		
	
	
	
		
			PHP
		
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace BookStack\Auth\Access\Mfa; | ||
|  | 
 | ||
|  | use Illuminate\Contracts\Validation\Rule; | ||
|  | 
 | ||
|  | class TotpValidationRule implements Rule | ||
|  | { | ||
|  |     protected $secret; | ||
|  |     protected $totpService; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Create a new rule instance. | ||
|  |      * Takes the TOTP secret that must be system provided, not user provided. | ||
|  |      */ | ||
|  |     public function __construct(string $secret) | ||
|  |     { | ||
|  |         $this->secret = $secret; | ||
|  |         $this->totpService = app()->make(TotpService::class); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Determine if the validation rule passes. | ||
|  |      */ | ||
|  |     public function passes($attribute, $value) | ||
|  |     { | ||
|  |         return $this->totpService->verifyCode($value, $this->secret); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Get the validation error message. | ||
|  |      */ | ||
|  |     public function message() | ||
|  |     { | ||
|  |         return trans('validation.totp'); | ||
|  |     } | ||
|  | } |