Merge branch 'master' of github.com:domify/registry

This commit is contained in:
Priit Tark 2015-05-20 21:00:03 +03:00
commit 17bf5c373e
9 changed files with 30 additions and 11 deletions

View file

@ -18,7 +18,7 @@ class Epp::SessionsController < EppController
@api_user = ApiUser.find_by(login_params) @api_user = ApiUser.find_by(login_params)
end end
if @api_user.try(:active) && cert_valid && ip_white? if @api_user.try(:active) && cert_valid && ip_white? && connection_limit_ok?
if parsed_frame.css('newPW').first if parsed_frame.css('newPW').first
unless @api_user.update(password: parsed_frame.css('newPW').first.text) unless @api_user.update(password: parsed_frame.css('newPW').first.text)
response.headers['X-EPP-Returncode'] = '2200' response.headers['X-EPP-Returncode'] = '2200'
@ -27,6 +27,7 @@ class Epp::SessionsController < EppController
end end
epp_session[:api_user_id] = @api_user.id epp_session[:api_user_id] = @api_user.id
epp_session.update_column(:registrar_id, @api_user.registrar_id)
render_epp_response('login_success') render_epp_response('login_success')
else else
response.headers['X-EPP-Returncode'] = '2200' response.headers['X-EPP-Returncode'] = '2200'
@ -45,12 +46,24 @@ class Epp::SessionsController < EppController
true true
end end
def connection_limit_ok?
c = EppSession.where(
'registrar_id = ? AND updated_at >= ?', @api_user.registrar_id, Time.zone.now - 5.minutes
).count
if c >= 4
@msg = t('connection_limit_reached')
return false
end
true
end
# rubocop: enable Metrics/PerceivedComplexity # rubocop: enable Metrics/PerceivedComplexity
# rubocop: enable Metrics/CyclomaticComplexity # rubocop: enable Metrics/CyclomaticComplexity
def logout def logout
@api_user = current_user # cache current_user for logging @api_user = current_user # cache current_user for logging
epp_session[:api_user_id] = nil epp_session.destroy
response.headers['X-EPP-Returncode'] = '1500' response.headers['X-EPP-Returncode'] = '1500'
render_epp_response('logout') render_epp_response('logout')
end end

View file

@ -147,7 +147,7 @@ class Registrar::SessionsController < Devise::SessionsController
def check_ip def check_ip
return if Rails.env.development? return if Rails.env.development?
return if WhiteIp.registrar_ip_white?(request.ip) return if WhiteIp.registrar_ip_white?(request.ip)
render text: t('ip_is_not_whitelisted') and return render text: t('access_denied') and return
end end
def role_base_root_url(user) def role_base_root_url(user)

View file

@ -18,7 +18,7 @@ class RegistrarController < ApplicationController
end end
return if Rails.env.development? return if Rails.env.development?
return if current_user.registrar.registrar_ip_white?(request.ip) return if current_user.registrar.registrar_ip_white?(request.ip)
flash[:alert] = t('ip_is_not_whitelisted') flash[:alert] = t('access_denied')
sign_out(current_user) sign_out(current_user)
redirect_to registrar_login_path and return redirect_to registrar_login_path and return
end end

View file

@ -1,8 +1,9 @@
class EppSession < ActiveRecord::Base class EppSession < ActiveRecord::Base
before_save :marshal_data! before_save :marshal_data!
belongs_to :registrar
# rubocop: disable Rails/ReadWriteAttribute # rubocop: disable Rails/ReadWriteAttribute
# Turned back to read_attribute, thus in Rails 4 # Turned back to read_attribute, thus in Rails 4
# there is differences between self[:data] and read_attribute. # there is differences between self[:data] and read_attribute.
def data def data
@data ||= self.class.unmarshal(read_attribute(:data)) || {} @data ||= self.class.unmarshal(read_attribute(:data)) || {}

View file

@ -797,3 +797,5 @@ en:
registrant_domain_verification_rejected_failed: 'Something went wrong' registrant_domain_verification_rejected_failed: 'Something went wrong'
ip_is_not_whitelisted: 'IP is not whitelisted' ip_is_not_whitelisted: 'IP is not whitelisted'
no_permission: 'No permission' no_permission: 'No permission'
access_denied: 'Access denied'
connection_limit_reached: 'Connection limit reached'

View file

@ -0,0 +1,5 @@
class AddRegistrarIdToEppSession < ActiveRecord::Migration
def change
add_column :epp_sessions, :registrar_id, :integer
end
end

View file

@ -317,6 +317,7 @@ ActiveRecord::Schema.define(version: 20150520163237) do
t.text "data" t.text "data"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.integer "registrar_id"
end end
add_index "epp_sessions", ["session_id"], name: "index_epp_sessions_on_session_id", unique: true, using: :btree add_index "epp_sessions", ["session_id"], name: "index_epp_sessions_on_session_id", unique: true, using: :btree

View file

@ -44,7 +44,6 @@ ApiUser.where(
admin1 = { admin1 = {
username: 'user1', username: 'user1',
password: 'testtest', password: 'testtest',
password_confirmation: 'testtest',
email: 'user1@example.ee', email: 'user1@example.ee',
identity_code: '37810013855', identity_code: '37810013855',
country_code: 'EE' country_code: 'EE'
@ -52,7 +51,6 @@ admin1 = {
admin2 = { admin2 = {
username: 'user2', username: 'user2',
password: 'testtest', password: 'testtest',
password_confirmation: 'testtest',
email: 'user2@example.ee', email: 'user2@example.ee',
identity_code: '37810010085', identity_code: '37810010085',
country_code: 'EE' country_code: 'EE'
@ -60,7 +58,6 @@ admin2 = {
admin3 = { admin3 = {
username: 'user3', username: 'user3',
password: 'testtest', password: 'testtest',
password_confirmation: 'testtest',
email: 'user3@example.ee', email: 'user3@example.ee',
identity_code: '37810010727', identity_code: '37810010727',
country_code: 'EE' country_code: 'EE'
@ -69,7 +66,7 @@ admin3 = {
[admin1, admin2, admin3].each do |at| [admin1, admin2, admin3].each do |at|
admin = AdminUser.where(at) admin = AdminUser.where(at)
next if admin.present? next if admin.present?
admin = AdminUser.new(at) admin = AdminUser.new(at.merge({ password_confirmation: 'testtest' }))
admin.roles = ['admin'] admin.roles = ['admin']
admin.save admin.save
end end

View file

@ -5,7 +5,7 @@ feature 'Sessions', type: :feature do
it 'should not see login page' do it 'should not see login page' do
WhiteIp.destroy_all WhiteIp.destroy_all
visit registrar_login_path visit registrar_login_path
page.should have_text('IP is not whitelisted') page.should have_text('Access denied')
end end
it 'should see log in' do it 'should see log in' do
@ -23,7 +23,7 @@ feature 'Sessions', type: :feature do
fill_in 'depp_user_tag', with: @api_user_invalid_ip.username fill_in 'depp_user_tag', with: @api_user_invalid_ip.username
fill_in 'depp_user_password', with: @api_user_invalid_ip.password fill_in 'depp_user_password', with: @api_user_invalid_ip.password
click_button 'Log in' click_button 'Log in'
page.should have_text('IP is not whitelisted') page.should have_text('Access denied')
end end
end end