Guest User

Untitled

a guest
Oct 31st, 2017
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. user.rb
  2.  
  3. class User < ActiveRecord::Base
  4.  
  5. attr_reader :is_admin
  6.  
  7. validates :name, :presence => true, :uniqueness => true
  8.  
  9. validates :password, :confirmation => true
  10. attr_accessor :password_confirmation
  11. attr_reader :password
  12.  
  13. validate :password_must_be_present
  14.  
  15. def User.authenticate(name, password)
  16. if user = find_by_name(name)
  17. if user.hashed_password == encrypt_password(password, user.salt)
  18. user
  19. end
  20. end
  21. end
  22.  
  23. def User.encrypt_password(password, salt)
  24. Digest::SHA2.hexdigest(password + "wibble" + salt)
  25. end
  26.  
  27. # 'password' is a virtual attribute
  28. def password=(password)
  29. @password = password
  30.  
  31. if password.present?
  32. generate_salt
  33. self.hashed_password = self.class.encrypt_password(password, salt)
  34. end
  35. end
  36.  
  37. after_destroy :ensure_an_admin_remains
  38.  
  39. def ensure_an_admin_remains
  40. if User.count.zero?
  41. raise "Can't delete last user"
  42. end
  43. end
  44.  
  45. private
  46.  
  47. def password_must_be_present
  48. errors.add(:password, "Missing password") unless hashed_password.present?
  49. end
  50.  
  51. def generate_salt
  52. self.salt = self.object_id.to_s + rand.to_s
  53. end
  54. end
  55.  
  56. ###session controller###
  57. class SessionsController < ApplicationController
  58. skip_before_filter :authorize
  59.  
  60. def index
  61. @user = (params[:name])
  62. end
  63. def new
  64. end
  65.  
  66. def create
  67.  
  68. if user = User.authenticate(params[:name], params[:password])
  69. session[:user_id] = user.id
  70.  
  71. redirect_to admin_url
  72.  
  73.  
  74. elsif user = User.authenticate(params[:name], params[:password])
  75. session[:user_id] = user.id
  76. redirect_to accounting_url
  77. else
  78. redirect_to login_url, :alert => "Invalid user/password combination"
  79. end
  80. end
  81.  
  82. def destroy
  83. session[:user_id] = nil
  84. redirect_to store_url, :notice => "Logged out"
  85. end
  86.  
  87. end
  88.  
  89. ###user controller###
  90. class UsersController < ApplicationController
  91. # GET /users
  92. # GET /users.xml
  93. def index
  94. @users = User.order(:name)
  95.  
  96. respond_to do |format|
  97. format.html # index.html.erb
  98. format.xml { render :xml => @users }
  99. end
  100. end
  101.  
  102. # GET /users/1
  103. # GET /users/1.xml
  104. def show
  105. @user = User.find(params[:id])
  106.  
  107. respond_to do |format|
  108. format.html # show.html.erb
  109. format.xml { render :xml => @user }
  110. end
  111. end
  112.  
  113. # GET /users/new
  114. # GET /users/new.xml
  115. def new
  116. @user = User.new
  117.  
  118. respond_to do |format|
  119. format.html # new.html.erb
  120. format.xml { render :xml => @user }
  121. end
  122. end
  123.  
  124. # GET /users/1/edit
  125. def edit
  126. @user = User.find(params[:id])
  127. end
  128.  
  129. # POST /users
  130. # POST /users.xml
  131. def create
  132. @user = User.new(params[:user])
  133.  
  134. respond_to do |format|
  135. if @user.save
  136. format.html { redirect_to(users_url,
  137. :notice => "User #{@user.name} was successfully created.") }
  138. format.xml { render :xml => @user,
  139. :status => :created, :location => @user }
  140. else
  141. format.html { render :action => "new" }
  142. format.xml { render :xml => @user.errors,
  143. :status => :unprocessable_entity }
  144. end
  145. end
  146. end
  147.  
  148. # PUT /users/1
  149. # PUT /users/1.xml
  150. def update
  151. @user = User.find(params[:id])
  152.  
  153. respond_to do |format|
  154. if @user.update_attributes(params[:user])
  155. format.html { redirect_to(users_url,
  156. :notice => "User #{@user.name} was successfully updated.") }
  157. format.xml { head :ok }
  158. else
  159. format.html { render :action => "edit" }
  160. format.xml { render :xml => @user.errors,
  161. :status => :unprocessable_entity }
  162. end
  163. end
  164. end
  165.  
  166. # DELETE /users/1
  167. # DELETE /users/1.xml
  168. def destroy
  169. @user = User.find(params[:id])
  170. begin
  171. @user.destroy
  172. flash[:notice] = "User #{@user.name} deleted"
  173. rescue Exception => e
  174. flash[:notice] = e.message
  175. end
  176.  
  177. respond_to do |format|
  178. format.html { redirect_to(users_url) }
  179. format.xml { head :ok }
  180. end
  181. end
  182. end
Add Comment
Please, Sign In to add comment