mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 04:37:30 +02:00
refactoring
This commit is contained in:
parent
a87fd6a8b7
commit
ece988fca1
6 changed files with 95 additions and 53 deletions
|
@ -7,58 +7,58 @@ module Api
|
||||||
before_action :authenticate_user
|
before_action :authenticate_user
|
||||||
|
|
||||||
def index
|
def index
|
||||||
login = @current_user
|
login = @current_user
|
||||||
registrar = @current_user.registrar
|
registrar = @current_user.registrar
|
||||||
|
|
||||||
# rubocop:disable Style/AndOr
|
# rubocop:disable Style/AndOr
|
||||||
render_success(data: nil) and return unless login
|
render_success(data: nil) and return unless login
|
||||||
# rubocop:enable Style/AndOr
|
# 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)
|
render_success(data: data)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def authenticate_user
|
def authenticate_user
|
||||||
username, password = Base64.urlsafe_decode64(basic_token).split(':')
|
username, password = Base64.urlsafe_decode64(basic_token).split(':')
|
||||||
@current_user ||= ApiUser.find_by(username: username, plain_text_password: password)
|
@current_user ||= ApiUser.find_by(username: username, plain_text_password: password)
|
||||||
|
|
||||||
return if @current_user
|
return if @current_user
|
||||||
|
|
||||||
raise(ArgumentError)
|
raise(ArgumentError)
|
||||||
rescue NoMethodError, ArgumentError
|
rescue NoMethodError, ArgumentError
|
||||||
@response = { code: 2202, message: 'Invalid authorization information' }
|
@response = { code: 2202, message: 'Invalid authorization information' }
|
||||||
render(json: @response, status: :unauthorized)
|
render(json: @response, status: :unauthorized)
|
||||||
end
|
end
|
||||||
|
|
||||||
def basic_token
|
def basic_token
|
||||||
pattern = /^Basic /
|
pattern = /^Basic /
|
||||||
header = request.headers['Authorization']
|
header = request.headers['Authorization']
|
||||||
header = header.gsub(pattern, '') if header&.match(pattern)
|
header = header.gsub(pattern, '') if header&.match(pattern)
|
||||||
header.strip
|
header.strip
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_values_to_data(login:, registrar:)
|
def set_values_to_data(login:, registrar:)
|
||||||
data = login.as_json(only: %i[id
|
data = login.as_json(only: %i[id
|
||||||
username
|
username
|
||||||
name
|
name
|
||||||
uuid
|
uuid
|
||||||
roles
|
roles
|
||||||
accreditation_date
|
accreditation_date
|
||||||
accreditation_expire_date])
|
accreditation_expire_date])
|
||||||
data[:registrar_name] = registrar.name
|
data[:registrar_name] = registrar.name
|
||||||
data[:registrar_reg_no] = registrar.reg_no
|
data[:registrar_reg_no] = registrar.reg_no
|
||||||
data
|
data
|
||||||
end
|
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)
|
def render_success(code: nil, message: nil, data: nil)
|
||||||
end
|
@response = { code: code || 1000, message: message || 'Command completed successfully',
|
||||||
|
data: data || {} }
|
||||||
|
|
||||||
|
render(json: @response, status: :ok)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ module Api
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def check_ip_whitelist
|
def check_ip_whitelist
|
||||||
allowed_ips = ENV['accr_center_api_auth_allowed_ips'].to_s.split(',').map(&:strip)
|
allowed_ips = ENV['accr_center_api_auth_allowed_ips'].to_s.split(',').map(&:strip)
|
||||||
return if allowed_ips.include?(request.ip) || Rails.env.development?
|
return if allowed_ips.include?(request.ip) || Rails.env.development?
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
require 'serializers/repp/domain'
|
require 'serializers/repp/contact'
|
||||||
|
|
||||||
module Api
|
module Api
|
||||||
module V1
|
module V1
|
||||||
|
@ -9,7 +9,8 @@ module Api
|
||||||
|
|
||||||
if @contact
|
if @contact
|
||||||
render json: { contact: Serializers::Repp::Contact.new(@contact,
|
render json: { contact: Serializers::Repp::Contact.new(@contact,
|
||||||
show_address: false).to_json }, status: :found
|
show_address: false).to_json },
|
||||||
|
status: :found
|
||||||
else
|
else
|
||||||
render json: { errors: 'Contact not found' }, status: :not_found
|
render json: { errors: 'Contact not found' }, status: :not_found
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,8 @@ module Api
|
||||||
|
|
||||||
if @domain
|
if @domain
|
||||||
render json: { domain: Serializers::Repp::Domain.new(@domain,
|
render json: { domain: Serializers::Repp::Domain.new(@domain,
|
||||||
sponsored: true).to_json }, status: :found
|
sponsored: true).to_json },
|
||||||
|
status: :found
|
||||||
else
|
else
|
||||||
render json: { errors: 'Domain not found' }, status: :not_found
|
render json: { errors: 'Domain not found' }, status: :not_found
|
||||||
end
|
end
|
||||||
|
|
33
test/integration/api/accreditation_center/auth_test.rb
Normal file
33
test/integration/api/accreditation_center/auth_test.rb
Normal 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
|
|
@ -4,13 +4,20 @@ class ContactsTest < ApplicationIntegrationTest
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
@contact = contacts(:john)
|
@contact = contacts(:john)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_return_code_error_if_valid_domain_name
|
def test_return_code_error_if_valid_domain_name
|
||||||
get "/api/v1/accreditation_center/contacts/?id=Alyosha"
|
get '/api/v1/accreditation_center/contacts/?id=Alyosha'
|
||||||
json = JSON.parse(response.body, symbolize_names: true)
|
json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
assert_equal json[:errors], "Contact not found"
|
assert_equal json[:errors], 'Contact not found'
|
||||||
end
|
end
|
||||||
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue