]> git.openstreetmap.org Git - rails.git/blob - app/controllers/user_controller.rb
more geocoder stuff
[rails.git] / app / controllers / user_controller.rb
1 class UserController < ApplicationController
2   layout 'site'
3
4   before_filter :authorize, :only => [:preferences, :api_details, :api_gpx_files]
5   before_filter :authorize_web, :only => [:edit, :account, :go_public, :view, :diary]
6   before_filter :require_user, :only => [:edit, :account, :go_public]
7  
8   def save
9     @user = User.new(params[:user])
10     @user.set_defaults
11
12     if @user.save
13       flash[:notice] = 'User was successfully created. Check your email for a confirmation note, and you\'ll be mapping in no time :-)'
14       Notifier::deliver_signup_confirm(@user)
15       redirect_to :action => 'login'
16     else
17       render :action => 'new'
18     end
19   end
20
21   def edit
22     if params[:user] and params[:user][:display_name] and params[:user][:description]
23       @user.display_name = params[:user][:display_name]
24       @user.description = params[:user][:description]
25       if @user.save
26         flash[:notice] = "User edited OK."
27         redirect_to :controller => 'user', :action => 'account'
28       end
29     end
30   end
31
32   def go_public
33     @user.data_public = true
34     @user.save
35     flash[:notice] = 'All your edits are now public'
36     redirect_to :controller => 'user', :action => 'account'
37   end
38
39   def lost_password
40     if params['user']['email']
41       user = User.find_by_email(params['user']['email'])
42       if user
43         user.token = User.make_token
44         user.save
45         Notifier::deliver_lost_password(user)
46         flash[:notice] = "Sorry you lost it :-( but an email is on it's way so you can reset it soon."
47       else
48         flash[:notice] = "Couldn't find that email address, sorry."
49       end
50     end
51   end
52
53   def reset_password
54     if params['token']
55       user = User.find_by_token(params['token'])
56       if user
57         pass = User.make_token(8)
58         user.pass_crypt = pass
59         user.save
60         Notifier::deliver_reset_password(user, pass)
61         flash[:notice] = "You're password has been changed and is on the way to your mailbox :-)"
62       else
63         flash[:notice] = "Didn't find that token, check the URL maybe?"
64       end
65     end
66     redirect_to :action => 'login'
67   end
68
69   def new
70   end
71
72   def login
73     if params[:user]
74       email = params[:user][:email]
75       pass = params[:user][:password]
76       u = User.authenticate(email, pass)
77       if u
78         u.token = User.make_token
79         u.timeout = 1.day.from_now
80         u.save
81         session[:token] = u.token
82         redirect_to :controller => 'site', :action => 'index'
83         return
84       else
85         flash[:notice] = "Couldn't log in with those details"
86       end
87     end
88   end
89
90   def logout
91     if session[:token]
92       u = User.find_by_token(session[:token])
93       if u
94         u.token = User.make_token
95         u.timeout = Time.now
96         u.save
97       end
98     end
99     session[:token] = nil
100     redirect_to :controller => 'site', :action => 'index'
101   end
102
103   def confirm
104     @user = User.find_by_token(params[:confirm_string])
105     if @user && @user.active == 0
106       @user.active = true
107       @user.save
108       flash[:notice] = 'Confirmed your account, thanks for signing up!'
109
110       #FIXME: login the person magically
111
112       redirect_to :action => 'login'
113     else
114       flash[:notice] = 'Something went wrong confirming that user'
115     end
116   end
117
118   def preferences
119     if request.get?
120       render_text @user.preferences
121     elsif request.post? or request.put?
122       @user.preferences = request.raw_post
123       @user.save!
124       render :nothing => true
125     else
126       render :status => 400, :nothing => true
127     end
128   end
129
130   def api_details
131     render :text => @user.to_xml.to_s
132   end
133
134   def api_gpx_files
135     doc = OSM::API.new.get_xml_doc
136     @user.traces.each do |trace|
137       doc.root << trace.to_xml_node() if trace.public? or trace.user == @user
138     end
139     render :text => doc.to_s
140   end
141
142   def view
143     @this_user = User.find_by_display_name(params[:display_name])
144   end
145
146   def diary
147     @this_user = User.find_by_display_name(params[:display_name])
148   end
149
150
151 end
152