using json instead of xml responses
[ruby_srp.git] / example / http-srp.rb
1 require 'sinatra'
2 require 'pp'
3 require 'json'
4
5 require 'models/user'
6 require 'models/log'
7 require '../lib/srp'
8
9 get '/' do
10   @user = User.current
11   erb :index
12 end
13
14 get '/signup' do
15   erb :signup
16 end
17
18 # TODO: Client should generate the salt!
19 # Getting things to work the srp-js way first.
20 post '/register/salt/' do
21   Log.clear
22   @user = User.new(params.delete('I'))
23   content_type :json
24   { :salt => @user.salt.to_s(16) }.to_json
25 end
26
27 post '/register/user/' do
28   User.current.verifier = params.delete('v').hex
29   content_type :json
30   { :ok => true }.to_json
31 end
32
33 get '/login' do
34   @user = User.current
35   erb :login
36 end
37
38 post '/handshake/' do
39   @user = User.current
40   Log.log(:handshake, params)
41   @handshake = @user.initialize_auth(params)
42   Log.log(:init_auth, @handshake)
43   content_type :json
44   @handshake.to_json
45 end
46
47 post '/authenticate/' do
48   @user = User.current
49   Log.log(:authenticate, params)
50   @auth = @user.authenticate(params)
51   Log.log(:confirm_authentication, @auth)
52   content_type :json
53   @auth.to_json
54 end
55
56 get '/verify' do
57   erb :verify
58 end
59
60 helpers do
61   def button_link(action, options = {})
62     action = action.to_s
63     label = action.capitalize
64     klass = "btn btn-large"
65     if options.delete(:primary)
66       klass += " btn-primary"
67       label += " now..."
68     end
69     %Q(<a href="#{action}" class="#{klass}" id="#{action}-view-btn">#{label}</a>)
70   end
71 end