authorization.rb 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class Authorization < ApplicationModel
  3. belongs_to :user
  4. after_create :delete_user_cache
  5. after_update :delete_user_cache
  6. after_destroy :delete_user_cache
  7. validates :user_id, presence: true
  8. validates :uid, presence: true, uniqueness: { scope: :provider }
  9. validates :provider, presence: true
  10. def self.find_from_hash(hash)
  11. auth = Authorization.find_by( provider: hash['provider'], uid: hash['uid'] )
  12. if auth
  13. # update auth tokens
  14. auth.update_attributes(
  15. token: hash['credentials']['token'],
  16. secret: hash['credentials']['secret']
  17. )
  18. # update username of auth entry if empty
  19. if !auth.username && hash['info']['nickname']
  20. auth.update_attributes(
  21. username: hash['info']['nickname'],
  22. )
  23. end
  24. # update image if needed
  25. if hash['info']['image']
  26. user = User.find( auth.user_id )
  27. # save/update avatar
  28. avatar = Avatar.add(
  29. object: 'User',
  30. o_id: user.id,
  31. url: hash['info']['image'],
  32. source: hash['provider'],
  33. deletable: true,
  34. updated_by_id: user.id,
  35. created_by_id: user.id,
  36. )
  37. # update user link
  38. if avatar
  39. user.update_column( :image, avatar.store_hash )
  40. end
  41. end
  42. end
  43. auth
  44. end
  45. def self.create_from_hash(hash, user = nil)
  46. if user
  47. # save/update avatar
  48. avatar = Avatar.add(
  49. object: 'User',
  50. o_id: user.id,
  51. url: hash['info']['image'],
  52. source: hash['provider'],
  53. deletable: true,
  54. updated_by_id: user.id,
  55. created_by_id: user.id,
  56. )
  57. # update user link
  58. if avatar
  59. user.update_column( :image, avatar.store_hash )
  60. end
  61. # fillup empty attributes
  62. # TODO
  63. else
  64. user = User.create_from_hash!(hash)
  65. end
  66. Authorization.create(
  67. user: user,
  68. uid: hash['uid'],
  69. username: hash['info']['nickname'] || hash['info']['username'] || hash['info']['name'] || hash['info']['email'] || hash['username'],
  70. provider: hash['provider'],
  71. token: hash['credentials']['token'],
  72. secret: hash['credentials']['secret']
  73. )
  74. end
  75. private
  76. def delete_user_cache
  77. user.touch
  78. end
  79. end