diff options
author | Nicolas Braud-Santoni <nicoo@ffgraz.net> | 2016-08-07 16:39:42 +0200 |
---|---|---|
committer | Nicolas Braud-Santoni <nicoo@ffgraz.net> | 2016-08-07 16:39:42 +0200 |
commit | b6ca062670b342344df08b53fb216db619ef42bc (patch) | |
tree | 7680ac6b407239f6b7272c937e42f688b8de542c /app/controllers/person_controller.rb |
Import legacy manman source
Copied from www.ffgraz.net
Diffstat (limited to 'app/controllers/person_controller.rb')
-rw-r--r-- | app/controllers/person_controller.rb | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/app/controllers/person_controller.rb b/app/controllers/person_controller.rb new file mode 100644 index 0000000..43cecb9 --- /dev/null +++ b/app/controllers/person_controller.rb @@ -0,0 +1,177 @@ + + +class PersonController < ApplicationController +# model :location, :person + +# before_filter :validate_person, :only => [:edit, :update, :do_change_pass] + + @person = '' + + def login + if session[:person] + reset_session + end + end + + def sign_on + person = Person.authenticate( params[:person][:email], + params[:person][:password]) + + if person + session[:person] = person + if session[:url] + redirect_to session[:url] + else + redirect_to :controller => "person", :action => "show", :id => session[:person].id + end + session[:url] = nil + else + flash[:notice] = "Login fehlgeschlagen." + redirect_to :action => "login" + end + end + + def logout + reset_session + redirect_to :action => "login" + end + def login + end + + def index + redirect_to :action => "list" + end + + # list all persons + def list + @persons = Person.find(:all, :order => :email ) + end + + # show information about a person + def show + begin + @person = Person.find(params[:id]) + + @locations = Location.find(:all, + :conditions => ["person_id = ?", params[:id]] ) + + rescue ActiveRecord::RecordNotFound + render_text "Error, Person not found" + end + end + + # edit a specific person identified by param person id + def edit + @person = Person.find(params[:id]) + if session[:person] != @person and session[:person].email != 'nine@wirdorange.org' + flash[:notice] = 'Sie haben nicht die Berechtigung hierfür.' + redirect_to :back + end + end + + # update the information about a person identified by person id + def update + @person = Person.find(params[:id]) + if session[:person] != @person and session[:person].email != 'nine@wirdorange.org' + flash[:notice] = 'Sie haben nicht die Berechtigung hierfür.' + redirect_to :back + else + if @person.update_attributes(params[:person]) + flash[:notice] = 'Person wurde erfolgreich upgedatet.' + redirect_to :action => 'show', :id => @person + else + flash[:notice] = 'Person wurde NICHT verändert.' + redirect_to :action => 'edit', :id => @person + end + end + end + + def register + end + + # create new person record + def create + if params[:password] == params[:password2] + values = params[:person] + values[:password] = params[:password] + @person = Person.new(values) + @person.password = params[:person][:password] + if @person.save + flash[:notice] = 'Person erfolgreich registriert' + redirect_to :action => 'show', :id => @person + else + params[:person][:password2] = ""; + params[:person][:password] = ""; + render :action => 'register', :person => params[:person] + end + else + flash[:notice] = 'Bitte überprüfen Sie ihre Eingabe' + render :action => 'register', :person => params[:person] + end + end + + # revoke password form + def revoke_pass + reset_session + end + + # generate new password and mail to the poor guy + def do_revoke + password = newpass( 8 ) + @person = Person.find( :first, + :conditions => [ "email = ?", params[:person][:email] ] ) + if @person == nil + flash[:notice] = 'Die angegebene Email Adresse ist nicht registriert.' + redirect_to :action => 'revoke_pass' + elsif @person.update_attribute( 'password', password ) + mail = PasswordMailer.deliver_password( @person, password ) + flash[:notice] = 'Ihr neues Passwort wird Ihnen via email zugesendet.' + redirect_to :action => 'login' + else + render :action => 'revoke_pass' + end + end + + def change_pass + @person = Person.find(params[:id]) + if session[:person] != @person + flash[:notice] = 'Sie haben nicht die Berechtigung hierfür.' + redirect_to :back + end + end + + def do_change_pass + person = Person.find( :first, :conditions => + [ "email = BINARY ? AND password = BINARY ?", + session[:person][:email], + Digest::MD5.hexdigest(params[:oldpassword]) ] ) + if person and params[:password] == params[:password2] + person.update_attribute( 'password', params[:password] ) + flash[:notice] = 'Ihr Passwort wurde geaendert.' + redirect_to :action => 'show', :id => session[:person][:id] + else + flash[:notice] = 'Ihr altes Passwort wurde falsch eingegeben.' + redirect_to :back + end + end + + +protected + # validate rights of person + def validate_person + if session[:person] != @person + flash[:notice] = 'Sie sind leider nicht berechtigt!' + redirect_to :back + end + end + +private + # generate alphanumeric password + def newpass( len ) + chars = ("a".."z").to_a + ("A".."Z").to_a + ("1".."9").to_a + newpass = "" + 1.upto(len) { |i| newpass << chars[rand(chars.size-1)] } + return newpass + end + +end |