sessions_controller.rb 3.9 KB

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