summaryrefslogtreecommitdiff
path: root/users
diff options
context:
space:
mode:
Diffstat (limited to 'users')
m---------users/app/assets/javascripts/srp0
-rw-r--r--users/app/assets/javascripts/users.js.coffee23
-rw-r--r--users/app/controllers/application_controller.rb14
-rw-r--r--users/app/controllers/sessions_controller.rb7
-rw-r--r--users/app/views/sessions/new.html.haml15
-rw-r--r--users/app/views/users/new.html.haml19
-rw-r--r--users/config/locales/en.yml6
-rw-r--r--users/config/routes.rb6
-rw-r--r--users/leap_web_users.gemspec2
-rw-r--r--users/test/functional/sessions_controller_test.rb20
10 files changed, 63 insertions, 49 deletions
diff --git a/users/app/assets/javascripts/srp b/users/app/assets/javascripts/srp
-Subproject d6a78049f3356d9d645143362eca74434410bf6
+Subproject 5a0ceeb1ca0055719a9b8977a79936216395576
diff --git a/users/app/assets/javascripts/users.js.coffee b/users/app/assets/javascripts/users.js.coffee
index 160a7f0..1c00663 100644
--- a/users/app/assets/javascripts/users.js.coffee
+++ b/users/app/assets/javascripts/users.js.coffee
@@ -25,17 +25,20 @@ validate_password = (event) ->
return true
-insert_verifier = (event) ->
- # TODO: verify password confimation
- srp = new SRP
- salt = srp.session.getSalt()
- $('#srp_salt').val(salt)
- $('#srp_password_verifier').val(srp.session.getV().toString(16))
- # clear the password so we do not submit it
- $('#srp_password').val('cleared out - use verifier instead')
- $('#srp_password_confirmation').val('using srp - store verifier')
+signup = (event) ->
+ srp = new SRP(jqueryRest())
+ srp.register()
+ false
+
+login = (event) ->
+ srp = new SRP(jqueryRest())
+ srp.identify ->
+ window.location = '/'
+ false
+
$(document).ready ->
$('#new_user').submit validate_password
- $('#new_user').submit insert_verifier
+ $('#new_user').submit signup
+ $('#new_session').submit login
diff --git a/users/app/controllers/application_controller.rb b/users/app/controllers/application_controller.rb
new file mode 100644
index 0000000..64e1a55
--- /dev/null
+++ b/users/app/controllers/application_controller.rb
@@ -0,0 +1,14 @@
+class ApplicationController < ActionController::Base
+ protect_from_forgery
+
+ private
+
+ def current_user
+ @current_user ||= User.find(session[:user_id]) if session[:user_id]
+ end
+ helper_method :current_user
+
+ def authorize
+ redirect_to login_url, alert: "Not authorized" if current_user.nil?
+ end
+end
diff --git a/users/app/controllers/sessions_controller.rb b/users/app/controllers/sessions_controller.rb
index 284c0e2..4a1107d 100644
--- a/users/app/controllers/sessions_controller.rb
+++ b/users/app/controllers/sessions_controller.rb
@@ -8,19 +8,15 @@ class SessionsController < ApplicationController
def create
@user = User.find_by_param(params[:login])
session[:handshake] = @user.initialize_auth(params['A'].hex)
- User.current = @user #?
render :json => session[:handshake]
rescue RECORD_NOT_FOUND
render :json => {:errors => {:login => ["unknown user"]}}
end
def update
- # TODO: validate the id belongs to the session
- @user = User.find_by_param(params[:id])
@srp_session = session.delete(:handshake)
- @srp_session.authenticate!(params[:client_auth].hex)
+ @user = @srp_session.authenticate!(params[:client_auth].hex)
session[:user_id] = @user.id
- User.current = @user #?
render :json => @srp_session
rescue WRONG_PASSWORD
session[:handshake] = nil
@@ -29,7 +25,6 @@ class SessionsController < ApplicationController
def destroy
session[:user_id] = nil
- User.current = nil #?
redirect_to root_path
end
end
diff --git a/users/app/views/sessions/new.html.haml b/users/app/views/sessions/new.html.haml
index 39ee7bf..c91d3f2 100644
--- a/users/app/views/sessions/new.html.haml
+++ b/users/app/views/sessions/new.html.haml
@@ -1,7 +1,8 @@
-%h2=t :login
-= simple_form_for :session, :url => sessions_path, :html => { :id => :new_session } do |f|
- %legend=t :login_message
- = f.input :login, :input_html => { :id => :srp_username }
- = f.input :password, :required => true, :input_html => { :id => :srp_password }
- = f.button :submit, :value => t(:login), :class => 'btn-primary'
- = link_to t(:cancel), root_url, :class => :btn
+.span8.offset2
+ %h2=t :login
+ = simple_form_for :session, :url => sessions_path, :html => { :id => :new_session, :class => 'form-horizontal' } do |f|
+ %legend=t :login_message
+ = f.input :login, :input_html => { :id => :srp_username }
+ = f.input :password, :required => true, :input_html => { :id => :srp_password }
+ = f.button :submit, :value => t(:login), :class => 'btn-primary'
+ = link_to t(:cancel), root_url, :class => :btn
diff --git a/users/app/views/users/new.html.haml b/users/app/views/users/new.html.haml
index f6ece3a..835e99a 100644
--- a/users/app/views/users/new.html.haml
+++ b/users/app/views/users/new.html.haml
@@ -1,10 +1,9 @@
-%h2=t :signup
-= simple_form_for @user do |f|
- %legend=t :signup_message
- = f.input :login, :input_html => { :id => :srp_username }
- = f.input :password, :required => true, :input_html => { :id => :srp_password }
- = f.input :password_confirmation, :required => true, :input_html => { :id => :srp_password_confirmation }
- = f.input :password_verifier, :as => :hidden, :input_html => { :id => :srp_password_verifier }
- = f.input :password_salt, :as => :hidden, :input_html => { :id => :srp_salt }
- = f.button :submit, :value => t(:signup), :class => 'btn-primary'
- = link_to t(:cancel), root_url, :class => :btn
+.span8.offset2
+ %h2=t :signup
+ = simple_form_for @user, :html => {:class => 'form-horizontal'} do |f|
+ %legend=t :signup_message
+ = f.input :login, :input_html => { :id => :srp_username }
+ = f.input :password, :required => true, :input_html => { :id => :srp_password }
+ = f.input :password_confirmation, :required => true, :input_html => { :id => :srp_password_confirmation }
+ = f.button :submit, :value => t(:signup), :class => 'btn-primary'
+ = link_to t(:cancel), root_url, :class => :btn
diff --git a/users/config/locales/en.yml b/users/config/locales/en.yml
new file mode 100644
index 0000000..172b85f
--- /dev/null
+++ b/users/config/locales/en.yml
@@ -0,0 +1,6 @@
+en:
+ signup: "Sign up"
+ signup_message: "Please create an account."
+ cancel: "Cancel"
+ login: "Login"
+ login_message: "Please login with your account."
diff --git a/users/config/routes.rb b/users/config/routes.rb
index cfc0407..522c40c 100644
--- a/users/config/routes.rb
+++ b/users/config/routes.rb
@@ -1,10 +1,10 @@
Rails.application.routes.draw do
- get "log_in" => "sessions#new", :as => "log_in"
- get "log_out" => "sessions#destroy", :as => "log_out"
+ get "login" => "sessions#new", :as => "login"
+ get "logout" => "sessions#destroy", :as => "logout"
resources :sessions, :only => [:new, :create, :update, :destroy]
- get "sign_up" => "users#new", :as => "sign_up"
+ get "signup" => "users#new", :as => "signup"
resources :users, :only => [:new, :create]
end
diff --git a/users/leap_web_users.gemspec b/users/leap_web_users.gemspec
index f64a76a..6d35f63 100644
--- a/users/leap_web_users.gemspec
+++ b/users/leap_web_users.gemspec
@@ -17,5 +17,5 @@ Gem::Specification.new do |s|
s.add_dependency "leap_web_core", LeapWeb::VERSION
- s.add_dependency "ruby-srp", "~> 0.1.1"
+ s.add_dependency "ruby-srp", "~> 0.1.3"
end
diff --git a/users/test/functional/sessions_controller_test.rb b/users/test/functional/sessions_controller_test.rb
index b6e56a7..47d7052 100644
--- a/users/test/functional/sessions_controller_test.rb
+++ b/users/test/functional/sessions_controller_test.rb
@@ -3,6 +3,7 @@ require 'test_helper'
class SessionsControllerTest < ActionController::TestCase
def setup
+ @user = stub :login => "me", :id => 123
@client_hex = 'a123'
@client_rnd = @client_hex.hex
@server_hex = 'b123'
@@ -19,14 +20,13 @@ class SessionsControllerTest < ActionController::TestCase
end
test "should perform handshake" do
- user = stub :login => "me", :id => 123
- user.expects(:initialize_auth).
+ @user.expects(:initialize_auth).
with(@client_rnd).
returns(@server_handshake)
@server_handshake.expects(:to_json).
returns({'B' => @server_hex, 'salt' => @salt}.to_json)
- User.expects(:find_by_param).with(user.login).returns(user)
- post :create, :login => user.login, 'A' => @client_hex
+ User.expects(:find_by_param).with(@user.login).returns(@user)
+ post :create, :login => @user.login, 'A' => @client_hex
assert_equal @server_handshake, session[:handshake]
assert_response :success
assert_json_response :B => @server_hex, :salt => @salt
@@ -42,27 +42,23 @@ class SessionsControllerTest < ActionController::TestCase
test "should authorize" do
session[:handshake] = @server_handshake
- user = stub :login => "me", :id => 123
@server_handshake.expects(:authenticate!).
with(@client_rnd).
- returns(@server_auth)
+ returns(@user)
@server_handshake.expects(:to_json).
returns({:M2 => @server_auth}.to_json)
- User.expects(:find_by_param).with(user.login).returns(user)
- post :update, :id => user.login, :client_auth => @client_hex
+ post :update, :id => @user.login, :client_auth => @client_hex
assert_nil session[:handshake]
assert_json_response :M2 => @server_auth
- assert_equal user.id, session[:user_id]
+ assert_equal @user.id, session[:user_id]
end
test "should report wrong password" do
session[:handshake] = @server_handshake
- user = stub :login => "me", :id => 123
@server_handshake.expects(:authenticate!).
with(@client_rnd).
raises(WRONG_PASSWORD)
- User.expects(:find_by_param).with(user.login).returns(user)
- post :update, :id => user.login, :client_auth => @client_hex
+ post :update, :id => @user.login, :client_auth => @client_hex
assert_nil session[:handshake]
assert_nil session[:user_id]
assert_json_response :errors => {"password" => ["wrong password"]}