61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace kernel\modules\secure\services;
 | |
| 
 | |
| use kernel\App;
 | |
| use kernel\FormModel;
 | |
| use kernel\helpers\Debug;
 | |
| use kernel\modules\secure\models\SecretCode;
 | |
| use kernel\modules\user\models\User;
 | |
| use kernel\modules\user\service\UserService;
 | |
| use kernel\services\TokenService;
 | |
| 
 | |
| class SecureService
 | |
| {
 | |
| 
 | |
|     public static function createSecretCode(User $user): SecretCode
 | |
|     {
 | |
|         $secretCode = new SecretCode();
 | |
|         $secretCode->user_id = $user->id;
 | |
|         $secretCode->code = mt_rand(100000, 999999);
 | |
|         $secretCode->code_expires_at = date("Y-m-d H:i:s", strtotime("+5 minutes"));;
 | |
|         $secretCode->save();
 | |
| 
 | |
|         return $secretCode;
 | |
|     }
 | |
| 
 | |
|     public static function updateSecretCode(User $user): SecretCode
 | |
|     {
 | |
|         $secretCode = SecretCode::where('user_id', $user->id)->first();
 | |
|         if(!$secretCode){
 | |
|             return self::createSecretCode($user);
 | |
|         }
 | |
|         $secretCode->code = mt_rand(100000, 999999);
 | |
|         $secretCode->code_expires_at = date("Y-m-d H:i:s", strtotime("+5 minutes"));;
 | |
|         $secretCode->save();
 | |
| 
 | |
|         return $secretCode;
 | |
|     }
 | |
| 
 | |
|     public static function getCodeByUserId(int $user_id)
 | |
|     {
 | |
|         return SecretCode::where('user_id', $user_id)->one()->code;
 | |
|     }
 | |
| 
 | |
|     public static function getByField(string $field, mixed $value)
 | |
|     {
 | |
|         return SecretCode::where($field, $value)->first();
 | |
|     }
 | |
| 
 | |
|     public static function generateAccessToken(): string
 | |
|     {
 | |
|         return match (App::$secure['token_type']) {
 | |
|             "JWT" => TokenService::JWT($_ENV['SECRET_KEY'], 'HS256'),
 | |
|             "md5" => TokenService::md5(),
 | |
|             "crypt" => TokenService::crypt(),
 | |
|             "hash" => TokenService::hash('sha256'),
 | |
|             default => TokenService::random_bytes(20),
 | |
|         };
 | |
|     }
 | |
| 
 | |
| } |