Advertisement
HarshBarash

Untitled

Mar 3rd, 2022
1,078
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.30 KB | None | 0 0
  1. class Api::V1::PhoneController < ApiController
  2.   before_action :verify_request_availability, only: :request_signature_code
  3.   before_action :verify_retries_count, only: :verify_signature_code
  4.  
  5.   def request_signature_code
  6.     @vc = object.verification_codes.create!
  7.  
  8.     render json: @vc.code
  9.   end
  10.  
  11.   def verify_signature_code
  12.     vcs = object.verification_codes.where(code: params[:code])
  13.     if vcs.present?
  14.       create_user
  15.       vcs.destroy_all
  16.       render json: :ok
  17.     else
  18.       object.verification_codes.last.increment!(:retries)
  19.  
  20.       render json: :wrong_code, status: 403
  21.     end
  22.   end
  23.  
  24.   private
  25.  
  26.   def create_user
  27.     @user = User.new
  28.     @user.skip_password = true
  29.   end
  30.  
  31.   def verify_request_availability
  32.     return true if object.verification_codes.blank?
  33.  
  34.     unless object.verification_codes.last.next_request_time < DateTime.now
  35.       timediff = object.verification_codes.last.next_request_time - DateTime.now
  36.  
  37.       raise KontrollerBasedException, timediff
  38.     end
  39.   end
  40.  
  41.   def verify_retries_count
  42.     return true if object.verification_codes.blank?
  43.  
  44.     raise KontrollerBasedException, 'Нужен новый код' if object.verification_codes.last.retries >= 3
  45.   end
  46.  
  47.   def object
  48.     UnauthorizedToken.find_or_create_by(token: request.ip)
  49.   end
  50. end
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement