Handlers for mid login

This commit is contained in:
Martin Lensment 2015-03-23 14:07:33 +02:00
parent 0ecbd87004
commit 418bd2046c
16 changed files with 173 additions and 7 deletions

View file

@ -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'

View file

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

BIN
app/assets/images/mid.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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')

View file

@ -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'

View 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()
)

View file

@ -0,0 +1 @@
Digidoc::Client.logger = Logger.new('log/webservices.log')

View file

@ -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'

View file

@ -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