Advertisement
Guest User

Untitled

a guest
Apr 14th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. class DeviceService
  2.  
  3. include Singleton
  4.  
  5. # Public: Returns an Sso::DeviceRegistrationToken created for the particular user.
  6. #
  7. def generate_device_registration_token(user_id)
  8. Sso::DeviceRegistrationToken.create!(message: { user_id: user_id }.to_json, expiration: Sso::DeviceRegistrationToken::EXPIRATION_IN_MINUTES.minutes.from_now)
  9. end
  10.  
  11. def registered_devices(user_id)
  12. OAuth::Device.where(user_id: user_id)
  13. end
  14.  
  15. def register_device(device_id, device_family, device_name, device_type, user_id, data, app_version, replication: true)
  16.  
  17. output = Hash.new
  18. output[:success] = true
  19. device = OAuth::Device.create!(
  20. :app_version => app_version,
  21. :data => data,
  22. :device_family => device_family,
  23. :device_id => device_id,
  24. :device_name => device_name,
  25. :device_type => device_type,
  26. :user_id => user_id
  27. )
  28.  
  29. debug { "Created device having #{device.to_json}" }
  30.  
  31. begin
  32. debug { "Creating couch db for user #{user_id}" }
  33.  
  34. result = Couch::CouchStoreService.create_database("#{COUCH_DB_CONFIG['replica_prefix']}#{device_id}", replication: replication)
  35. debug { "CouchDB creation result ==> #{result}" }
  36.  
  37. if result.nil? #Error creating couch database
  38. raise "Error creating couch database for user #{user_id} having device id #{device_id}"
  39. else
  40. # Adding user to couch
  41. debug { "Adding couch user to CouchDB #{COUCH_DB_CONFIG['replica_prefix']}#{device_id}" }
  42.  
  43. response = Couch::CouchStoreService.create_user(
  44. device_id: device.device_id,
  45. password: device.couch_password,
  46. consumer_token: device.key,
  47. consumer_secret: device.secret,
  48. token: device.token,
  49. token_secret: device.token_secret,
  50. database: COUCH_DB_CONFIG['replica_prefix'] + device_id
  51. )
  52. debug { "CouchDB user creation result ==> #{response}" }
  53. if response["ok"]
  54. device_hash = device.as_json
  55. device_hash["device"]["device_logging_enabled"] = Pundit.policy!(User.find(user_id), :device).device_logging_enabled?
  56. output[:result] = device_hash
  57. end
  58. end
  59. rescue StandardError => e
  60. unregister_device(device.device_id, device.device_type, user_id, replication)
  61. output[:success] = false
  62. output[:errors] = ["Error creating couch database for user #{user_id} having device id #{device_id}"]
  63. Rails.logger.error e
  64. ExceptionService.notify(e)
  65. end
  66. output
  67. end
  68.  
  69. def unregister_device(device_id, device_type, user_id, replication: true)
  70. begin
  71. OAuth::Device.where(device_id: device_id, user_id: user_id).delete_all
  72.  
  73. result = Couch::CouchStoreService.drop_database(device_id, replication)
  74. raise "Error deleting couch database #{device_id}" unless result
  75. remove_job_requests(device_id, user_id)
  76.  
  77. "Successfully unregistered device"
  78. rescue StandardError => e
  79. message = "An exception has occurred while trying to unregister device #{device_id} for user #{user_id}"
  80. Rails.logger.error(message)
  81. Rails.logger.error(e)
  82. ExceptionService.notify(e)
  83. end
  84. end
  85.  
  86. def remove_job_requests(device_id, user_id)
  87. user = User.find user_id
  88. key = "Sync_#{device_id}_"
  89. job_aliases = user.courses.map{ |c| key + c.id.to_s }
  90. JobRequest.where(:job_alias_name => job_aliases).destroy_all
  91. end
  92.  
  93. def sync_course_on_device(course_id, device_id, device_type)
  94.  
  95. job_alias_name = "Sync_#{device_id}_#{course_id}"
  96. result = JobRequest.where(:job_alias_name => job_alias_name)
  97. if result.empty?
  98. job_execution_context = Hash.new
  99. job_execution_context["course_id"] = course_id
  100. job_execution_context["device_id"] = device_id
  101. job_execution_context["device_type"] = device_type
  102.  
  103. jr = JobRequest.create!({ job_name: SecureRandom.hex(16), job_alias_name: job_alias_name, job_enabled: true, recurring: false, job_arguments: job_execution_context.to_json, job_type: JobRequest::COUCH_SYNC_TYPE, cron: JobRequest::NO_CRON })
  104. JobExecution.create!(job_request_id: jr.id, start_time: Time.now, status: JobRequest::WIP)
  105. CouchCourseSyncWorker.perform_async(jr.id.to_s)
  106. end
  107. end
  108.  
  109. private
  110.  
  111. def debug(&block)
  112. Rails.logger.tagged(self.class.name) { Rails.logger.debug(&block) }
  113. end
  114.  
  115. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement