getTwoFactorAuthProviderOptions(); return isset($options['enabled']) && $options['enabled'] === true; } /** * Register the given user with the provider. * * @param TwoFactorAuthenticatable $user */ public function register(TwoFactorAuthenticatable $user) { $key = config('services.authy.key'); $response = json_decode((new HttpClient)->post('https://api.authy.com/protected/json/users/new?api_key='.$key, [ 'form_params' => [ 'user' => [ 'email' => $user->getEmailForTwoFactorAuth(), 'cellphone' => preg_replace('/[^0-9]/', '', $user->getAuthPhoneNumber()), 'country_code' => $user->getAuthCountryCode(), ], ], ])->getBody(), true); $user->setTwoFactorAuthProviderOptions([ 'id' => $response['user']['id'], ]); } /** * {@inheritdoc} */ public function sendTwoFactorVerificationToken(TwoFactorAuthenticatable $user) { $key = config('services.authy.key'); $options = $user->getTwoFactorAuthProviderOptions(); $response = json_decode((new HttpClient)->get( 'https://api.authy.com/protected/json/sms/'.$options['id'].'?force=true&api_key='.$key )->getBody(), true); return $response['success'] === true; } /** * Determine if the given token is valid for the given user. * * @param TwoFactorAuthenticatable $user * @param string $token * @return bool */ public function tokenIsValid(TwoFactorAuthenticatable $user, $token) { try { $key = config('services.authy.key'); $options = $user->getTwoFactorAuthProviderOptions(); $response = json_decode((new HttpClient)->get( 'https://api.authy.com/protected/json/verify/'.$token.'/'.$options['id'].'?force=true&api_key='.$key )->getBody(), true); return $response['token'] === 'is valid'; } catch (Exception $e) { return false; } } /** * Delete the given user from the provider. * * @param TwoFactorAuthenticatable $user * @return bool */ public function delete(TwoFactorAuthenticatable $user) { $key = config('services.authy.key'); $options = $user->getTwoFactorAuthProviderOptions(); (new HttpClient)->post( 'https://api.authy.com/protected/json/users/delete/'.$options['id'].'?api_key='.$key ); $user->setTwoFactorAuthProviderOptions([]); } }