sessions_controller.rb 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. class SessionsController < ApplicationController
  2. # def create
  3. # render :text => request.env['rack.auth'].inspect
  4. # end
  5. # "Create" a login, aka "log the user in"
  6. def create
  7. # authenticate user
  8. user = User.authenticate( params[:username], params[:password] )
  9. # auth failed
  10. if !user
  11. render :json => { :error => 'login failed' }, :status => :unprocessable_entity
  12. return
  13. end
  14. # remember last login date
  15. user.update_last_login()
  16. # auto population of default collections
  17. default_collection = SessionHelper::default_collections(user)
  18. # set session user_id
  19. user = User.find_fulldata(user.id)
  20. session[:user_id] = user['id']
  21. # check logon session
  22. logon_session_key = nil
  23. if params['logon_session']
  24. logon_session_key = Digest::MD5.hexdigest( rand(999999).to_s + Time.new.to_s )
  25. session = ActiveRecord::SessionStore::Session.create(
  26. :session_id => logon_session_key,
  27. :data => {
  28. :user_id => user['id']
  29. }
  30. )
  31. end
  32. # remember me - set session cookie to expire later
  33. if params[:remember_me]
  34. request.env['rack.session.options'][:expire_after] = 1.year.from_now
  35. end
  36. # return new session data
  37. render :json => {
  38. :session => user,
  39. :default_collections => default_collection,
  40. :logon_session => logon_session_key,
  41. },
  42. :status => :created
  43. end
  44. def show
  45. user_id = nil
  46. # no valid sessions
  47. if session[:user_id]
  48. user_id = session[:user_id]
  49. end
  50. # check logon session
  51. if params['logon_session']
  52. session = ActiveRecord::SessionStore::Session.where( :session_id => params['logon_session'] ).first
  53. if session
  54. user_id = session.data[:user_id]
  55. end
  56. end
  57. if !user_id
  58. render :json => {
  59. :error => 'no valid session',
  60. :config => config_frontend,
  61. }
  62. return
  63. end
  64. # Save the user ID in the session so it can be used in
  65. # subsequent requests
  66. user = User.user_data_full( user_id )
  67. # auto population of default collections
  68. default_collection = SessionHelper::default_collections( User.find(user_id) )
  69. # return current session
  70. render :json => {
  71. :session => user,
  72. :default_collections => default_collection,
  73. :config => config_frontend,
  74. }
  75. end
  76. # "Delete" a login, aka "log the user out"
  77. def destroy
  78. # Remove the user id from the session
  79. @_current_user = session[:user_id] = nil
  80. # reset session cookie (set :expire_after to '' in case remember_me is active)
  81. request.env['rack.session.options'][:expire_after] = -1.year.from_now
  82. request.env['rack.session.options'][:renew] = true
  83. render :json => { }
  84. end
  85. def create_omniauth
  86. auth = request.env['omniauth.auth']
  87. if !auth
  88. logger.info("AUTH IS NULL, SERVICE NOT LINKED TO ACCOUNT")
  89. # redirect to app
  90. redirect_to '/app'
  91. end
  92. # Create a new user or add an auth to existing user, depending on
  93. # whether there is already a user signed in.
  94. authorization = Authorization.find_from_hash(auth)
  95. if !authorization
  96. authorization = Authorization.create_from_hash(auth, current_user)
  97. end
  98. # remember last login date
  99. authorization.user.update_last_login()
  100. # Log the authorizing user in.
  101. session[:user_id] = authorization.user.id
  102. # redirect to app
  103. redirect_to '/app'
  104. end
  105. end