#
# file:: account_controller.rb
# author:: Jon A. Lambert
# version:: 0.1.0
# date:: 1/6/2006
#
# This source code copyright (C) 2006 by Jon A. Lambert
# All rights reserved.
#
# Released under the terms of the TeensyWeb Public License
# See LICENSE file for additional information.
#
class AccountController < ApplicationController
before_filter :admin_required, :only => [:delete]
before_filter :login_required, :only => [:edit, :list, :index]
layout 'layout'
def random_password
("a".."z").to_a.sort_by { rand }[0..5].to_s
end
def index
redirect_to :action => 'list'
end
def login
@title = "Please login"
if request.post?
case params['commit']
when 'Login'
params['password'] = params['password'].strip
if session['user'] = User.authenticate(params['login'], params['password'])
flash['notice'] = "Login successful"
redirect_back_or_default :controller => "wiki"
else
flash.now['notice'] = "Login unsuccessful"
@login = params['login']
end
when 'Forgot Password'
@user = User.find_by_login(params['login'])
if !@user
flash['notice'] = 'No user by that name'
end
pw = random_password
@user.password = pw
@user.save
if @user.errors.empty?
flash['notice'] = "Sent password"
Notifications.deliver_forgot_password(@user, pw) if TWCONFIG['mail_on']
session['user'] = nil
redirect_back_or_default :controller => "wiki"
else
flash['notice'] = @user.errors.full_messages.join("<br />")
end
end
end
end
def signup
@title = "Signup for account"
if request.post?
pw = random_password
@user = User.new('login' => params['login'],
'email' => params['email'],
'password' => pw,
'admin' => (User.count == 0 ? 1 : 0)
)
@user.save
if @user.errors.empty?
flash['notice'] = "Signup successful"
Notifications.deliver_signup(@user, pw) if TWCONFIG['mail_on']
redirect_back_or_default :controller => "wiki"
else
flash['notice'] = @user.errors.full_messages.join("<br />")
end
end
end
def logout
if !user?
flash['notice'] = "You aren't logged in"
else
session['user'] = nil
flash['notice'] = "Logged out"
end
redirect_back_or_default :controller => "wiki"
end
def welcome
end
def list
@title = "User listing"
@users = User.find_all
end
def edit
if request.get?
if admin? || session['user'].login == params['id']
@user = User.find_by_login(params['id'])
if !@user.errors.empty?
flash['notice'] = @user.errors.full_messages.join("<br />")
redirect_back_or_default :controller => "wiki"
end
@title = "User preferences for #{@user.login}"
else
flash['notice'] = "Can't do user preferences"
redirect_back_or_default :controller => "wiki"
end
else
@user = User.find_by_login(params['id'])
@title = "User preferences for #{@user.login}"
case params['commit']
when 'Update'
@user.email = params['email']
@user.admin = (params['admin'] && params['admin'] == '1') ? 1 : 0
@user.password = ''
@user.save_with_validation(false)
if @user.errors.empty?
flash['notice'] = "Preferences saved"
redirect_back_or_default :controller => "wiki"
else
flash['notice'] = @user.errors.full_messages.join("<br />")
end
when 'Change Password'
params['password'] = params['password'].strip
params['password_confirmation'] = params['password_confirmation'].strip
if params['password'] != params['password_confirmation']
flash['notice'] = "Password and confirmation don't match"
else
@user.password = params['password']
@user.save
if @user.errors.empty?
flash['notice'] = "Password changed"
session['user'] = nil
redirect_back_or_default :controller => "wiki"
else
flash['notice'] = @user.errors.full_messages.join("<br />")
end
end
end
end
end
def delete
if params['id']
@user = User.find_by_login(params['id'])
@user.destroy
if !@user.errors.empty?
flash['notice'] = @user.errors.full_messages.join("<br />")
end
end
redirect_to :action => 'list'
end
end