]> git.openstreetmap.org Git - rails.git/blob - app/controllers/application.rb
more segment bits
[rails.git] / app / controllers / application.rb
1 # Filters added to this controller will be run for all controllers in the application.
2 # Likewise, all the methods added will be available for all controllers.
3 class ApplicationController < ActionController::Base
4
5
6
7   # HTTP AUTH stuff for the API
8   
9   def authorize(realm='Web Password', errormessage="Could't authenticate you") 
10     username, passwd = get_auth_data 
11     # check if authorized 
12     # try to get user 
13     if @user = User.authenticate(username, passwd) 
14       # user exists and password is correct ... horray! 
15       if @user.methods.include? 'lastlogin' 
16         # note last login 
17         @session['lastlogin'] = user.lastlogin 
18         @user.last.login = Time.now 
19         @user.save() 
20         @session["User.id"] = @user.id 
21       end             
22     else 
23       # the user does not exist or the password was wrong 
24       @response.headers["Status"] = "Unauthorized" 
25       @response.headers["WWW-Authenticate"] = "Basic realm=\"#{realm}\"" 
26       render_text(errormessage, 401)
27     end 
28   end 
29
30   private 
31   def get_auth_data 
32     user, pass = '', '' 
33     # extract authorisation credentials 
34     if request.env.has_key? 'X-HTTP_AUTHORIZATION' 
35       # try to get it where mod_rewrite might have put it 
36       authdata = @request.env['X-HTTP_AUTHORIZATION'].to_s.split 
37     elsif request.env.has_key? 'HTTP_AUTHORIZATION' 
38       # this is the regular location 
39       authdata = @request.env['HTTP_AUTHORIZATION'].to_s.split  
40     end 
41
42     # at the moment we only support basic authentication 
43     if authdata and authdata[0] == 'Basic' 
44       user, pass = Base64.decode64(authdata[1]).split(':')[0..1] 
45     end 
46     return [user, pass] 
47   end 
48
49 end