mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 17:59:47 +02:00
Handlers for mid login
This commit is contained in:
parent
0ecbd87004
commit
418bd2046c
16 changed files with 173 additions and 7 deletions
3
Gemfile
3
Gemfile
|
@ -63,6 +63,9 @@ gem 'countries', '~> 0.10.0'
|
||||||
# cloning activerecord objects
|
# cloning activerecord objects
|
||||||
gem 'deep_cloneable', '~> 2.1.1'
|
gem 'deep_cloneable', '~> 2.1.1'
|
||||||
|
|
||||||
|
# id + mid login
|
||||||
|
gem 'digidoc_client', '~> 0.2.1'
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
# dev tools
|
# dev tools
|
||||||
gem 'spring', '~> 1.2.0'
|
gem 'spring', '~> 1.2.0'
|
||||||
|
|
36
Gemfile.lock
36
Gemfile.lock
|
@ -60,6 +60,9 @@ GEM
|
||||||
thread_safe (~> 0.3, >= 0.3.4)
|
thread_safe (~> 0.3, >= 0.3.4)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
addressable (2.3.6)
|
addressable (2.3.6)
|
||||||
|
akami (1.2.2)
|
||||||
|
gyoku (>= 0.4.0)
|
||||||
|
nokogiri
|
||||||
arel (6.0.0)
|
arel (6.0.0)
|
||||||
ast (2.0.0)
|
ast (2.0.0)
|
||||||
astrolabe (1.3.0)
|
astrolabe (1.3.0)
|
||||||
|
@ -122,6 +125,8 @@ GEM
|
||||||
coffee-script-source (1.8.0)
|
coffee-script-source (1.8.0)
|
||||||
countries (0.10.0)
|
countries (0.10.0)
|
||||||
currencies (~> 0.4.2)
|
currencies (~> 0.4.2)
|
||||||
|
crack (0.4.2)
|
||||||
|
safe_yaml (~> 1.0.0)
|
||||||
currencies (0.4.2)
|
currencies (0.4.2)
|
||||||
daemons (1.1.9)
|
daemons (1.1.9)
|
||||||
database_cleaner (1.3.0)
|
database_cleaner (1.3.0)
|
||||||
|
@ -143,6 +148,12 @@ GEM
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
warden (~> 1.2.3)
|
warden (~> 1.2.3)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
|
digidoc_client (0.2.1)
|
||||||
|
crack (>= 0.1.8)
|
||||||
|
httpclient (>= 2.3.4)
|
||||||
|
mime-types (>= 1.16)
|
||||||
|
nokogiri (>= 1.4.0)
|
||||||
|
savon (>= 2.4.0)
|
||||||
docile (1.1.5)
|
docile (1.1.5)
|
||||||
epp (1.4.0)
|
epp (1.4.0)
|
||||||
hpricot
|
hpricot
|
||||||
|
@ -193,6 +204,8 @@ GEM
|
||||||
guard-rubocop (1.1.0)
|
guard-rubocop (1.1.0)
|
||||||
guard (~> 2.0)
|
guard (~> 2.0)
|
||||||
rubocop (~> 0.20)
|
rubocop (~> 0.20)
|
||||||
|
gyoku (1.2.3)
|
||||||
|
builder (>= 2.1.2)
|
||||||
haml (4.0.6)
|
haml (4.0.6)
|
||||||
tilt
|
tilt
|
||||||
haml-rails (0.6.0)
|
haml-rails (0.6.0)
|
||||||
|
@ -209,6 +222,9 @@ GEM
|
||||||
hike (1.2.3)
|
hike (1.2.3)
|
||||||
hitimes (1.2.2)
|
hitimes (1.2.2)
|
||||||
hpricot (0.8.6)
|
hpricot (0.8.6)
|
||||||
|
httpclient (2.6.0.1)
|
||||||
|
httpi (2.3.0)
|
||||||
|
rack
|
||||||
i18n (0.7.0)
|
i18n (0.7.0)
|
||||||
ice_nine (0.11.1)
|
ice_nine (0.11.1)
|
||||||
isikukood (0.1.2)
|
isikukood (0.1.2)
|
||||||
|
@ -236,6 +252,8 @@ GEM
|
||||||
loofah (2.0.1)
|
loofah (2.0.1)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.5.9)
|
||||||
lumberjack (1.0.9)
|
lumberjack (1.0.9)
|
||||||
|
macaddr (1.7.1)
|
||||||
|
systemu (~> 2.6.2)
|
||||||
mail (2.6.3)
|
mail (2.6.3)
|
||||||
mime-types (>= 1.16, < 3)
|
mime-types (>= 1.16, < 3)
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
|
@ -250,6 +268,7 @@ GEM
|
||||||
newrelic_rpm (3.9.9.275)
|
newrelic_rpm (3.9.9.275)
|
||||||
nokogiri (1.6.2.1)
|
nokogiri (1.6.2.1)
|
||||||
mini_portile (= 0.6.0)
|
mini_portile (= 0.6.0)
|
||||||
|
nori (2.4.0)
|
||||||
nprogress-rails (0.1.6.5)
|
nprogress-rails (0.1.6.5)
|
||||||
open4 (1.3.4)
|
open4 (1.3.4)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
|
@ -366,6 +385,7 @@ GEM
|
||||||
reek (= 1.3.8)
|
reek (= 1.3.8)
|
||||||
ruby2ruby (>= 2.1.1, < 3.0)
|
ruby2ruby (>= 2.1.1, < 3.0)
|
||||||
virtus (~> 1.0)
|
virtus (~> 1.0)
|
||||||
|
safe_yaml (1.0.4)
|
||||||
sass (3.4.10)
|
sass (3.4.10)
|
||||||
sass-rails (5.0.1)
|
sass-rails (5.0.1)
|
||||||
railties (>= 4.0.0, < 5.0)
|
railties (>= 4.0.0, < 5.0)
|
||||||
|
@ -373,6 +393,15 @@ GEM
|
||||||
sprockets (>= 2.8, < 4.0)
|
sprockets (>= 2.8, < 4.0)
|
||||||
sprockets-rails (>= 2.0, < 4.0)
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
tilt (~> 1.1)
|
tilt (~> 1.1)
|
||||||
|
savon (2.10.1)
|
||||||
|
akami (~> 1.2)
|
||||||
|
builder (>= 2.1.2)
|
||||||
|
gyoku (~> 1.2)
|
||||||
|
httpi (~> 2.3)
|
||||||
|
nokogiri (>= 1.4.0)
|
||||||
|
nori (~> 2.4)
|
||||||
|
uuid (~> 2.3.7)
|
||||||
|
wasabi (~> 3.4)
|
||||||
sdoc (0.4.1)
|
sdoc (0.4.1)
|
||||||
json (~> 1.7, >= 1.7.7)
|
json (~> 1.7, >= 1.7.7)
|
||||||
rdoc (~> 4.0)
|
rdoc (~> 4.0)
|
||||||
|
@ -404,6 +433,7 @@ GEM
|
||||||
sprockets (>= 2.8, < 4.0)
|
sprockets (>= 2.8, < 4.0)
|
||||||
sys-uname (0.9.0)
|
sys-uname (0.9.0)
|
||||||
ffi (>= 1.0.0)
|
ffi (>= 1.0.0)
|
||||||
|
systemu (2.6.5)
|
||||||
temple (0.6.10)
|
temple (0.6.10)
|
||||||
terminal-table (1.4.5)
|
terminal-table (1.4.5)
|
||||||
therubyracer (0.12.1)
|
therubyracer (0.12.1)
|
||||||
|
@ -428,6 +458,8 @@ GEM
|
||||||
rack
|
rack
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
uniform_notifier (1.6.2)
|
uniform_notifier (1.6.2)
|
||||||
|
uuid (2.3.7)
|
||||||
|
macaddr (~> 1.0)
|
||||||
uuidtools (2.1.5)
|
uuidtools (2.1.5)
|
||||||
virtus (1.0.4)
|
virtus (1.0.4)
|
||||||
axiom-types (~> 0.1)
|
axiom-types (~> 0.1)
|
||||||
|
@ -436,6 +468,9 @@ GEM
|
||||||
equalizer (~> 0.0, >= 0.0.9)
|
equalizer (~> 0.0, >= 0.0.9)
|
||||||
warden (1.2.3)
|
warden (1.2.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
|
wasabi (3.4.0)
|
||||||
|
httpi (~> 2.0)
|
||||||
|
nokogiri (>= 1.4.2)
|
||||||
websocket-driver (0.5.1)
|
websocket-driver (0.5.1)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.1)
|
websocket-extensions (0.1.1)
|
||||||
|
@ -465,6 +500,7 @@ DEPENDENCIES
|
||||||
deep_cloneable (~> 2.1.1)
|
deep_cloneable (~> 2.1.1)
|
||||||
delayed_job_active_record (~> 4.0.3)
|
delayed_job_active_record (~> 4.0.3)
|
||||||
devise (~> 3.4.1)
|
devise (~> 3.4.1)
|
||||||
|
digidoc_client (~> 0.2.1)
|
||||||
epp (~> 1.4.0)
|
epp (~> 1.4.0)
|
||||||
epp-xml (~> 0.10.4)
|
epp-xml (~> 0.10.4)
|
||||||
fabrication (~> 2.12.2)
|
fabrication (~> 2.12.2)
|
||||||
|
|
BIN
app/assets/images/id_card.gif
Normal file
BIN
app/assets/images/id_card.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 564 B |
BIN
app/assets/images/mid.gif
Normal file
BIN
app/assets/images/mid.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
|
@ -1,3 +1,15 @@
|
||||||
|
@flash_notice = (msg) ->
|
||||||
|
$('#flash').find('div').removeClass('bg-danger')
|
||||||
|
$('#flash').find('div').addClass('bg-success')
|
||||||
|
$('#flash').find('div').html(msg)
|
||||||
|
$('#flash').show()
|
||||||
|
|
||||||
|
@flash_alert = (msg) ->
|
||||||
|
$('#flash').find('div').removeClass('bg-success')
|
||||||
|
$('#flash').find('div').addClass('bg-danger')
|
||||||
|
$('#flash').find('div').html(msg)
|
||||||
|
$('#flash').show()
|
||||||
|
|
||||||
ready = ->
|
ready = ->
|
||||||
$('.selectize').selectize({
|
$('.selectize').selectize({
|
||||||
allowEmptyOption: true
|
allowEmptyOption: true
|
||||||
|
|
|
@ -27,3 +27,13 @@
|
||||||
margin: 0 auto
|
margin: 0 auto
|
||||||
input
|
input
|
||||||
margin-bottom: 10px
|
margin-bottom: 10px
|
||||||
|
|
||||||
|
.form-signin .form-control
|
||||||
|
position: relative
|
||||||
|
height: auto
|
||||||
|
-webkit-box-sizing: border-box
|
||||||
|
-moz-box-sizing: border-box
|
||||||
|
box-sizing: border-box
|
||||||
|
padding: 10px
|
||||||
|
font-size: 16px
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,6 @@ class Admin::ApiUsersController < AdminController
|
||||||
end
|
end
|
||||||
|
|
||||||
def api_user_params
|
def api_user_params
|
||||||
params.require(:api_user).permit(:username, :password, :active, :registrar_id, :registrar_typeahead)
|
params.require(:api_user).permit(:username, :password, :active, :registrar_id, :registrar_typeahead, :identity_code)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,4 +7,8 @@ class Admin::SessionsController < SessionsController
|
||||||
|
|
||||||
def login
|
def login
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_user_by_idc(idc)
|
||||||
|
AdminUser.find_by(identity_code: idc)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,4 +13,54 @@ class Registrar::SessionsController < SessionsController
|
||||||
def login
|
def login
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def login_mid
|
||||||
|
@user = User.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def mid
|
||||||
|
phone = params[:user][:phone]
|
||||||
|
client = Digidoc::Client.new
|
||||||
|
|
||||||
|
country_codes = {'+372' => 'EST'}
|
||||||
|
|
||||||
|
response = client.authenticate(
|
||||||
|
:phone => "+372#{phone}",
|
||||||
|
:message_to_display => 'Authenticating',
|
||||||
|
:service_name => 'Testing'
|
||||||
|
)
|
||||||
|
|
||||||
|
@user = find_user_by_idc(response.user_id_code)
|
||||||
|
|
||||||
|
if @user.persisted?
|
||||||
|
session[:user_id_code] = response.user_id_code
|
||||||
|
session[:mid_session_code] = client.session_code
|
||||||
|
render json: { message: t('check_your_phone_for_confirmation_code') }, status: :ok
|
||||||
|
else
|
||||||
|
flash[:alert] = t('no_such_user')
|
||||||
|
flash.keep(:alert)
|
||||||
|
render js: "window.location = '#{registrar_login_mid_path}'"
|
||||||
|
end
|
||||||
|
|
||||||
|
# client.authentication_status
|
||||||
|
end
|
||||||
|
|
||||||
|
def mid_status
|
||||||
|
client = Digidoc::Client.new
|
||||||
|
client.session_code = session[:mid_session_code]
|
||||||
|
auth_status = client.authentication_status
|
||||||
|
|
||||||
|
# binding.pry
|
||||||
|
# flash[:notice] = I18n.t('welcome')
|
||||||
|
# flash.keep(:notice)
|
||||||
|
|
||||||
|
# sign_in @user
|
||||||
|
# render js: "window.location = '#{registrar_invoices_path}'"
|
||||||
|
render json: { message: t('not_ok') }, status: :request_timeout
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_user_by_idc(idc)
|
||||||
|
return User.new unless idc
|
||||||
|
ApiUser.find_by(identity_code: idc) || User.new
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
include Versions # version/user_version.rb
|
include Versions # version/user_version.rb
|
||||||
devise :trackable, :timeoutable
|
devise :trackable, :timeoutable
|
||||||
|
|
||||||
|
attr_accessor :phone
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
.form-group
|
.form-group
|
||||||
= f.label :password
|
= f.label :password
|
||||||
= f.text_field(:password, class: 'form-control')
|
= f.text_field(:password, class: 'form-control')
|
||||||
|
.form-group
|
||||||
|
= f.label :identity_code
|
||||||
|
= f.text_field(:identity_code, class: 'form-control')
|
||||||
.form-group
|
.form-group
|
||||||
.form-group.has-feedback.js-typeahead-container
|
.form-group.has-feedback.js-typeahead-container
|
||||||
= f.label :registrar_typeahead, t('registrar')
|
= f.label :registrar_typeahead, t('registrar')
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.form-signin
|
.form-signin.text-center
|
||||||
/ TODO: Refactor this when ID card login is done
|
%h2.form-signin-heading.text-center= t('log_in')
|
||||||
= button_to 'ID card (user1)', 'sessions',
|
%hr
|
||||||
class: 'btn btn-lg btn-primary btn-block', name: 'user1'
|
= link_to '/registrar/login/mid' do
|
||||||
= button_to 'ID card (user2)', 'sessions',
|
= image_tag 'mid.gif'
|
||||||
class: 'btn btn-lg btn-primary btn-block', name: 'user2'
|
= link_to '/registrar/login/id' do
|
||||||
|
= image_tag 'id_card.gif'
|
||||||
|
|
30
app/views/registrar/sessions/login_mid.haml
Normal file
30
app/views/registrar/sessions/login_mid.haml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
.form-signin.text-center
|
||||||
|
%h2.form-signin-heading.text-center= t('log_in_with_mid')
|
||||||
|
%hr
|
||||||
|
= link_to '/registrar/login/mid' do
|
||||||
|
= image_tag 'mid.gif'
|
||||||
|
= link_to '/registrar/login/id' do
|
||||||
|
= image_tag 'id_card.gif'
|
||||||
|
= form_for @user, url: registrar_mid_path, html: {class: 'form-signin'} do |f|
|
||||||
|
= f.text_field :phone, class: 'form-control', placeholder: t('phone_no'), autocomplete: 'off'
|
||||||
|
%button.btn.btn-lg.btn-primary.btn-block.js-login{:type => 'submit'}= t('log_in')
|
||||||
|
|
||||||
|
:coffee
|
||||||
|
status_interval = null
|
||||||
|
mid_status = () ->
|
||||||
|
|
||||||
|
status_interval = setInterval((->
|
||||||
|
$.post('/registrar/login/mid_status').fail((data, bla, asd) ->
|
||||||
|
clearInterval(status_interval)
|
||||||
|
flash_alert(data.responseJSON.message)
|
||||||
|
)
|
||||||
|
), 1000)
|
||||||
|
|
||||||
|
$('.js-login').on 'click', (e) ->
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
$.post($('form').attr('action'), $('form').serialize()).done((data) ->
|
||||||
|
flash_notice(data.message)
|
||||||
|
mid_status()
|
||||||
|
)
|
||||||
|
|
1
config/initializers/digidoc_logger.rb
Normal file
1
config/initializers/digidoc_logger.rb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Digidoc::Client.logger = Logger.new('log/webservices.log')
|
|
@ -493,3 +493,8 @@ en:
|
||||||
contact_org_error: 'Parameter value policy error. Org should be blank'
|
contact_org_error: 'Parameter value policy error. Org should be blank'
|
||||||
contact_fax_error: 'Parameter value policy error. Fax should be blank'
|
contact_fax_error: 'Parameter value policy error. Fax should be blank'
|
||||||
invoices: 'Invoices'
|
invoices: 'Invoices'
|
||||||
|
no_such_user: 'No such user'
|
||||||
|
log_in: 'Log in'
|
||||||
|
phone_no: 'Phone number'
|
||||||
|
log_in_with_mid: 'Log in with mobile-id'
|
||||||
|
check_your_phone_for_confirmation_code: 'Check your phone for confirmation code'
|
||||||
|
|
|
@ -67,7 +67,11 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
devise_scope :user do
|
devise_scope :user do
|
||||||
get 'login' => 'sessions#login'
|
get 'login' => 'sessions#login'
|
||||||
|
# get 'login/mid' => 'sessions#login_mid'
|
||||||
|
# post 'login/mid' => 'sessions#mid'
|
||||||
|
|
||||||
post 'sessions' => 'sessions#create'
|
post 'sessions' => 'sessions#create'
|
||||||
|
post 'mid' => 'sessions#mid'
|
||||||
get 'logout' => '/devise/sessions#destroy'
|
get 'logout' => '/devise/sessions#destroy'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -79,7 +83,12 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
devise_scope :user do
|
devise_scope :user do
|
||||||
get 'login' => 'sessions#login'
|
get 'login' => 'sessions#login'
|
||||||
|
get 'login/mid' => 'sessions#login_mid'
|
||||||
|
post 'login/mid' => 'sessions#mid'
|
||||||
|
post 'login/mid_status' => 'sessions#mid_status'
|
||||||
|
|
||||||
post 'sessions' => 'sessions#create'
|
post 'sessions' => 'sessions#create'
|
||||||
|
post 'mid' => 'sessions#mid'
|
||||||
get 'logout' => '/devise/sessions#destroy'
|
get 'logout' => '/devise/sessions#destroy'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue