refactoring

This commit is contained in:
Oleg Hasjanov 2021-08-27 11:09:49 +03:00 committed by olegphenomenon
parent a87fd6a8b7
commit ece988fca1
6 changed files with 95 additions and 53 deletions

View file

@ -7,58 +7,58 @@ module Api
before_action :authenticate_user
def index
login = @current_user
registrar = @current_user.registrar
login = @current_user
registrar = @current_user.registrar
# rubocop:disable Style/AndOr
render_success(data: nil) and return unless login
# rubocop:enable Style/AndOr
# rubocop:disable Style/AndOr
render_success(data: nil) and return unless login
# rubocop:enable Style/AndOr
data = set_values_to_data(login: login, registrar: registrar)
data = set_values_to_data(login: login, registrar: registrar)
render_success(data: data)
end
render_success(data: data)
end
private
private
def authenticate_user
username, password = Base64.urlsafe_decode64(basic_token).split(':')
@current_user ||= ApiUser.find_by(username: username, plain_text_password: password)
def authenticate_user
username, password = Base64.urlsafe_decode64(basic_token).split(':')
@current_user ||= ApiUser.find_by(username: username, plain_text_password: password)
return if @current_user
return if @current_user
raise(ArgumentError)
rescue NoMethodError, ArgumentError
@response = { code: 2202, message: 'Invalid authorization information' }
render(json: @response, status: :unauthorized)
end
raise(ArgumentError)
rescue NoMethodError, ArgumentError
@response = { code: 2202, message: 'Invalid authorization information' }
render(json: @response, status: :unauthorized)
end
def basic_token
pattern = /^Basic /
header = request.headers['Authorization']
header = header.gsub(pattern, '') if header&.match(pattern)
header.strip
end
def basic_token
pattern = /^Basic /
header = request.headers['Authorization']
header = header.gsub(pattern, '') if header&.match(pattern)
header.strip
end
def set_values_to_data(login:, registrar:)
data = login.as_json(only: %i[id
username
name
uuid
roles
accreditation_date
accreditation_expire_date])
data[:registrar_name] = registrar.name
data[:registrar_reg_no] = registrar.reg_no
data
end
def render_success(code: nil, message: nil, data: nil)
@response = { code: code || 1000, message: message || 'Command completed successfully',
data: data || {} }
def set_values_to_data(login:, registrar:)
data = login.as_json(only: %i[id
username
name
uuid
roles
accreditation_date
accreditation_expire_date])
data[:registrar_name] = registrar.name
data[:registrar_reg_no] = registrar.reg_no
data
end
render(json: @response, status: :ok)
end
def render_success(code: nil, message: nil, data: nil)
@response = { code: code || 1000, message: message || 'Command completed successfully',
data: data || {} }
render(json: @response, status: :ok)
end
end
end
end

View file

@ -17,7 +17,7 @@ module Api
private
def check_ip_whitelist
def check_ip_whitelist
allowed_ips = ENV['accr_center_api_auth_allowed_ips'].to_s.split(',').map(&:strip)
return if allowed_ips.include?(request.ip) || Rails.env.development?

View file

@ -1,4 +1,4 @@
require 'serializers/repp/domain'
require 'serializers/repp/contact'
module Api
module V1
@ -9,7 +9,8 @@ module Api
if @contact
render json: { contact: Serializers::Repp::Contact.new(@contact,
show_address: false).to_json }, status: :found
show_address: false).to_json },
status: :found
else
render json: { errors: 'Contact not found' }, status: :not_found
end

View file

@ -9,7 +9,8 @@ module Api
if @domain
render json: { domain: Serializers::Repp::Domain.new(@domain,
sponsored: true).to_json }, status: :found
sponsored: true).to_json },
status: :found
else
render json: { errors: 'Domain not found' }, status: :not_found
end

View file

@ -0,0 +1,33 @@
require 'test_helper'
class AuthTest < ApplicationIntegrationTest
def setup
super
@user = users(:api_bestnames)
@header = { 'Authorization' => "Basic #{generate_base64}" }
end
def test_should_return_successful
get 'https://registry.test/api/v1/accreditation_center/auth', headers: @header
json = JSON.parse(response.body, symbolize_names: true)
assert_equal json[:code], 1000
assert_equal json[:message], 'Command completed successfully'
end
def test_should_return_failed
get 'https://registry.test/api/v1/accreditation_center/auth', headers: { 'Authorization' => "Basic LAHSDHDSAFSF#@" }
json = JSON.parse(response.body, symbolize_names: true)
assert_equal json[:code], 2202
assert_equal json[:message], 'Invalid authorization information'
end
private
def generate_base64
Base64.encode64("#{@user.username}:#{@user.plain_text_password}")
end
end

View file

@ -4,13 +4,20 @@ class ContactsTest < ApplicationIntegrationTest
def setup
super
@contact = contacts(:john)
@contact = contacts(:john)
end
def test_return_code_error_if_valid_domain_name
get "/api/v1/accreditation_center/contacts/?id=Alyosha"
json = JSON.parse(response.body, symbolize_names: true)
def test_return_code_error_if_valid_domain_name
get '/api/v1/accreditation_center/contacts/?id=Alyosha'
json = JSON.parse(response.body, symbolize_names: true)
assert_equal json[:errors], "Contact not found"
end
end
assert_equal json[:errors], 'Contact not found'
end
def test_return_code_error_if_sdfsdf
get "/api/v1/accreditation_center/contacts/?id=#{@contact.code}"
json = JSON.parse(response.body, symbolize_names: true)
assert_equal json[:contact][:name], 'John'
end
end