API 0.4: User rename, view trace links, tag filter summary / see all link, traces...
[rails.git] / app / controllers / user_controller.rb
1 class UserController < ApplicationController
2   layout 'site'
3
4   before_filter :authorize, :only => :preferences
5   before_filter :authorize_web, :only => :rename
6
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 rename
22     new_name = params['display_name']
23     if @user
24       @user.display_name = new_name
25       if @user.save
26         flash[:notice] = "User display name updated OK."
27       else
28         flash[:notice] = "Rename failed: #{ @user.errors.full_messages.join('; ') }."
29       end
30     else
31       flash[:notice] = 'not logged in'
32     end
33     redirect_to :back
34   end
35
36   def lost_password
37     if params['user']['email']
38       user = User.find_by_email(params['user']['email'])
39       if user
40         user.token = User.make_token
41         user.save
42         Notifier::deliver_lost_password(user)
43         flash[:notice] = "Sorry you lost it :-( but an email is on it's way so you can reset it soon."
44       else
45         flash[:notice] = "Couldn't find that email address, sorry."
46       end
47     end
48   end
49
50   def reset_password
51     if params['token']
52       user = User.find_by_token(params['token'])
53       if user
54         pass = User.make_token(8)
55         user.pass_crypt = pass
56         user.save
57         Notifier::deliver_reset_password(user, pass)
58         flash[:notice] = "You're password has been changed and is on the way to your mailbox :-)"
59       else
60         flash[:notice] = "Didn't find that token, check the URL maybe?"
61       end
62     end
63     redirect_to :action => 'login'
64   end
65
66   def new
67   end
68
69   def login
70     if params[:user]
71       email = params[:user][:email]
72       pass = params[:user][:password]
73       u = User.authenticate(email, pass)
74       if u
75         u.token = User.make_token
76         u.timeout = 1.day.from_now
77         u.save
78         session[:token] = u.token
79         redirect_to :controller => 'site', :action => 'index'
80         return
81       else
82         flash[:notice] = "Couldn't log in with those details"
83       end
84     end
85   end
86
87   def logout
88     if session[:token]
89       u = User.find_by_token(session[:token])
90       if u
91         u.token = User.make_token
92         u.timeout = Time.now
93         u.save
94       end
95     end
96     session[:token] = nil
97     redirect_to :controller => 'site', :action => 'index'
98   end
99
100   def confirm
101     @user = User.find_by_token(params[:confirm_string])
102     if @user && @user.active == 0
103       @user.active = true
104       @user.save
105       flash[:notice] = 'Confirmed your account, thanks for signing up!'
106
107       #FIXME: login the person magically
108
109       redirect_to :action => 'login'
110     else
111       flash[:notice] = 'Something went wrong confirming that user'
112     end
113   end
114
115   def preferences
116     if request.get?
117       render_text @user.preferences
118     elsif request.post? or request.put?
119       @user.preferences = request.raw_post
120       @user.save!
121       render :nothing => true
122     else
123       render :status => 400, :nothing => true
124     end
125   end
126 end
127