diff options
author | jessib <jessib@riseup.net> | 2012-11-12 10:48:40 -0800 |
---|---|---|
committer | jessib <jessib@riseup.net> | 2012-11-12 10:48:40 -0800 |
commit | 347c1d73c855cfad8c37e8a0bd98a60831151812 (patch) | |
tree | 104c89712d9a1f7d7eefd49187a2f6bbc70a33ce /users/lib/warden/strategies | |
parent | 67cb22d50193a58e4697549d9ce8a22e790a7a0d (diff) | |
parent | fe8b49232d31681667badaaeff7aa4d0a40445ea (diff) |
Merge branch 'develop' into help_develop
Conflicts:
help/test/functional/tickets_controller_test.rb
users/test/functional/application_controller_test.rb
users/test/support/auth_test_helper.rb
Diffstat (limited to 'users/lib/warden/strategies')
-rw-r--r-- | users/lib/warden/strategies/secure_remote_password.rb | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/users/lib/warden/strategies/secure_remote_password.rb b/users/lib/warden/strategies/secure_remote_password.rb new file mode 100644 index 0000000..8266e2d --- /dev/null +++ b/users/lib/warden/strategies/secure_remote_password.rb @@ -0,0 +1,57 @@ +module Warden + module Strategies + class SecureRemotePassword < Warden::Strategies::Base + + def valid? + handshake? || authentication? + end + + def authenticate! + if authentication? + validate! + else # handshake + initialize! + end + end + + protected + + def handshake? + params['A'] && params['login'] + end + + def authentication? + params['client_auth'] && session[:handshake] + end + + def validate! + user = session[:handshake].authenticate(params['client_auth'].hex) + user ? success!(user) : fail!(:password => "Could not log in") + end + + def initialize! + user = User.find_by_param(id) + session[:handshake] = user.initialize_auth(params['A'].hex) + custom! json_response(session[:handshake]) + rescue RECORD_NOT_FOUND + fail! :login => "User not found!" + end + + def json_response(object) + [ 200, + {"Content-Type" => "application/json; charset=utf-8"}, + [object.to_json] + ] + end + + def id + params["id"] || params["login"] + end + end + end + Warden::Strategies.add :secure_remote_password, + Warden::Strategies::SecureRemotePassword + +end + + |