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