-
Notifications
You must be signed in to change notification settings - Fork 60
/
users_controller.rb
144 lines (131 loc) · 4.09 KB
/
users_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
class UsersController < ApplicationController
before_filter :login_required, :except => [:new, :create, :activate]
before_filter :account_owner_required, :only => [:index, :add_user, :unsuspend, :destroy]
before_filter :find_user, :only => [:current, :show, :edit, :update, :unsuspend, :destroy]
ssl_required :new, :create
def index
@users = current_account.users.all
end
def current
respond_to do |format|
format.html {
flash.keep
redirect_to :action => "index"
}
format.xml { render :xml => @user }
end
end
def new
@user = User.new
@subscription = Subscription.new
@subscription.plan_name = params[:plan_name] || 'basic'
@subscription_address = SubscriptionAddress.new
@subscription_address.country = "United States"
end
def add_user
if request.post?
@user = User.new(params[:user])
@user.account = current_user.account
@user.password_confirmation = @user.password
if @user.save
UserMailer.deliver_account_information(@user)
flash[:notice] = "Successfully created user"
redirect_to :action => "index"
else
flash.now[:error] = "Errors creating user"
end
else
@user = User.new
@user.password = ActiveSupport::SecureRandom.hex(5)
end
end
def show
respond_to do |format|
format.html { render :action => :edit }
format.xml { render :xml => @user }
end
end
def create
logout_keeping_session!
@user = User.new(params[:user])
@subscription = Subscription.new(params[:subscription])
@subscription.state = 'trial'
@subscription.plan_name ||= 'basic'
@subscription.card = params[:card]
@account = Account.new
# We have to check if the records are valid before saving
# since (even in a transaction) the callbacks are called
[@user, @subscription].each {|ins|
raise ActiveRecord::RecordInvalid.new(ins) unless ins.valid?
}
User.transaction do
@user.save!
@account.owner = @user
@account.save!
@user.update_attribute(:account, @account)
@subscription.account = @account
@subscription.save!
end
@account.activate!
UserMailer.deliver_signup_notification(@user)
flash[:notice] = "Thanks for signing up! We're sending you an email " \
"with your activation code"
redirect_to '/login'
rescue ActiveRecord::RecordInvalid
flash.now[:error] = "There were some errors setting up that account"
render :action => 'new'
end
def activate
logout_keeping_session!
user = User.find_by_activation_code(params[:id]) unless params[:id].blank?
case
when (!params[:id].blank?) && user && !user.active?
user.activate!
flash[:notice] = "Signup complete! Please sign in to continue"
redirect_to '/login'
when params[:id].blank?
flash[:error] = "The activation code was missing. " \
"Please follow the URL from your email"
redirect_to '/login'
else
flash[:error] = "We couldn't find a user with that activation code " \
"-- check your email? Or maybe you've already activated " \
"-- try signing in"
redirect_to '/login'
end
end
def edit
end
def update
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated"
redirect_to :action => :show, :id => @user.id
else
flash.now[:error] = "There were some errors"
render :action => :edit
end
end
def unsuspend
@user.unsuspend!
flash[:notice] = "Successfully unsuspend user"
redirect_to :action => "index"
end
def destroy
if current_user == @user
flash[:error] = "You can't deactivate yourself"
redirect_to :action => :index
else
@user.suspend!
flash[:notice] = "Successfully deactivated user"
redirect_to :action => :index
end
end
private
def find_user
if account_owner? && params[:id]
@user = current_user.account.users.find(params[:id])
else
@user = current_user
end
end
end