token.rb 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class Token < ActiveRecord::Base
  3. before_create :generate_token
  4. belongs_to :user
  5. =begin
  6. create new token
  7. token = Token.create(action: 'PasswordReset', user_id: user.id)
  8. returns
  9. the token
  10. create new persistent token
  11. token = Token.create(
  12. action: 'CalendarSubscriptions',
  13. persistent: true,
  14. user_id: user.id,
  15. )
  16. in case if you use it via an controller, e. g. you can verify via "curl -H "Authorization: Token token=33562a00d7eda2a7c2fb639b91c6bcb8422067b6" http://...
  17. returns
  18. the token
  19. =end
  20. =begin
  21. check token
  22. user = Token.check(action: 'PasswordReset', name: 'TheTokenItSelf')
  23. returns
  24. user for who this token was created
  25. =end
  26. def self.check(data)
  27. # fetch token
  28. token = Token.find_by(action: data[:action], name: data[:name])
  29. return if !token
  30. # check if token is still valid
  31. if !token.persistent &&
  32. token.created_at < 1.day.ago
  33. # delete token
  34. token.delete
  35. token.save
  36. return
  37. end
  38. # return token user
  39. token.user
  40. end
  41. =begin
  42. cleanup old token
  43. Token.cleanup
  44. =end
  45. def self.cleanup
  46. Token.where('persistent IS ? AND created_at < ?', nil, Time.zone.now - 30.days).delete_all
  47. true
  48. end
  49. private
  50. def generate_token
  51. loop do
  52. self.name = SecureRandom.hex(30)
  53. break if !Token.exists?(name: name)
  54. end
  55. end
  56. end