wordjelly-auth 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +35 -0
  5. data/app/assets/images/auth/activity.jpg +0 -0
  6. data/app/assets/images/auth/facebook.svg +1 -0
  7. data/app/assets/images/auth/google_oauth2.svg +1 -0
  8. data/app/assets/images/auth/js_pic3.jpg +0 -0
  9. data/app/assets/images/auth/profile.jpg +0 -0
  10. data/app/assets/javascripts/auth/admin_create_users.js +2 -0
  11. data/app/assets/javascripts/auth/application.js +20 -0
  12. data/app/assets/javascripts/auth/auth_dependencies.js +12 -0
  13. data/app/assets/javascripts/auth/auth_modals_and_navbar.js +218 -0
  14. data/app/assets/javascripts/auth/clients.js +2 -0
  15. data/app/assets/javascripts/auth/search.js +2 -0
  16. data/app/assets/javascripts/auth/shopping/discounts.js +2 -0
  17. data/app/assets/javascripts/auth/users/profiles.js +188 -0
  18. data/app/assets/stylesheets/auth/admin_create_users.css +4 -0
  19. data/app/assets/stylesheets/auth/application.scss +14 -0
  20. data/app/assets/stylesheets/auth/auth_default_css.scss +13 -0
  21. data/app/assets/stylesheets/auth/common-styles.scss +579 -0
  22. data/app/assets/stylesheets/auth/overrides.scss +26 -0
  23. data/app/assets/stylesheets/auth/search.css +4 -0
  24. data/app/assets/stylesheets/auth/shopping/discounts.css +4 -0
  25. data/app/assets/stylesheets/auth/users/profiles.scss +40 -0
  26. data/app/assets/stylesheets/scaffold.css +56 -0
  27. data/app/controllers/auth/admin_create_users_controller.rb +89 -0
  28. data/app/controllers/auth/application_controller.rb +97 -0
  29. data/app/controllers/auth/clients_controller.rb +105 -0
  30. data/app/controllers/auth/concerns/activity_controller_concern.rb +32 -0
  31. data/app/controllers/auth/concerns/devise_concern.rb +193 -0
  32. data/app/controllers/auth/concerns/omni_concern.rb +310 -0
  33. data/app/controllers/auth/concerns/otp_concern.rb +251 -0
  34. data/app/controllers/auth/concerns/shopping/cart_controller_concern.rb +105 -0
  35. data/app/controllers/auth/concerns/shopping/cart_item_controller_concern.rb +150 -0
  36. data/app/controllers/auth/concerns/shopping/discount_controller_concern.rb +97 -0
  37. data/app/controllers/auth/concerns/shopping/pay_u_money_controller_concern.rb +38 -0
  38. data/app/controllers/auth/concerns/shopping/payment_controller_concern.rb +101 -0
  39. data/app/controllers/auth/concerns/shopping/product_controller_concern.rb +68 -0
  40. data/app/controllers/auth/concerns/token_concern.rb +187 -0
  41. data/app/controllers/auth/confirmations_controller.rb +3 -0
  42. data/app/controllers/auth/mailgun_controller.rb +8 -0
  43. data/app/controllers/auth/omniauth_callbacks_controller.rb +6 -0
  44. data/app/controllers/auth/passwords_controller.rb +4 -0
  45. data/app/controllers/auth/profiles_controller.rb +156 -0
  46. data/app/controllers/auth/registrations_controller.rb +99 -0
  47. data/app/controllers/auth/search_controller.rb +61 -0
  48. data/app/controllers/auth/sessions_controller.rb +20 -0
  49. data/app/controllers/auth/shopping/cart_items_controller.rb +14 -0
  50. data/app/controllers/auth/shopping/carts_controller.rb +13 -0
  51. data/app/controllers/auth/shopping/discounts_controller.rb +19 -0
  52. data/app/controllers/auth/shopping/payments_controller.rb +13 -0
  53. data/app/controllers/auth/shopping/products_controller.rb +17 -0
  54. data/app/controllers/auth/shopping/shopping_controller.rb +86 -0
  55. data/app/controllers/auth/unlocks_controller.rb +3 -0
  56. data/app/controllers/auth/webhooks_controller.rb +3 -0
  57. data/app/helpers/auth/admin_create_users_helper.rb +2 -0
  58. data/app/helpers/auth/application_helper.rb +136 -0
  59. data/app/helpers/auth/clients_helper.rb +4 -0
  60. data/app/helpers/auth/resource_helper.rb +10 -0
  61. data/app/helpers/auth/search_helper.rb +2 -0
  62. data/app/helpers/auth/shopping/cart_items/cart_items_helper.rb +29 -0
  63. data/app/helpers/auth/shopping/carts/carts_helper.rb +25 -0
  64. data/app/helpers/auth/shopping/discounts/discounts_helper.rb +39 -0
  65. data/app/helpers/auth/shopping/payments/pay_u_money_helper.rb +56 -0
  66. data/app/helpers/auth/shopping/payments/payments_helper.rb +54 -0
  67. data/app/helpers/auth/shopping/products/products_helper.rb +52 -0
  68. data/app/helpers/auth/shopping/shopping_helper.rb +3 -0
  69. data/app/helpers/auth/users/profiles_helper.rb +12 -0
  70. data/app/jobs/otp_job.rb +92 -0
  71. data/app/mailers/application_mailer.rb +4 -0
  72. data/app/mailers/auth/notifier.rb +9 -0
  73. data/app/models/auth/admin_create_user.rb +3 -0
  74. data/app/models/auth/client.rb +52 -0
  75. data/app/models/auth/concerns/activity_concern.rb +112 -0
  76. data/app/models/auth/concerns/chief_model_concern.rb +73 -0
  77. data/app/models/auth/concerns/es_concern.rb +21 -0
  78. data/app/models/auth/concerns/notification_concern.rb +232 -0
  79. data/app/models/auth/concerns/notification_response_concern.rb +71 -0
  80. data/app/models/auth/concerns/owner_concern.rb +81 -0
  81. data/app/models/auth/concerns/shopping/cart_concern.rb +329 -0
  82. data/app/models/auth/concerns/shopping/cart_item_concern.rb +437 -0
  83. data/app/models/auth/concerns/shopping/discount_concern.rb +482 -0
  84. data/app/models/auth/concerns/shopping/discount_flow.txt +11 -0
  85. data/app/models/auth/concerns/shopping/pay_u_money_concern.rb +184 -0
  86. data/app/models/auth/concerns/shopping/payment_concern.rb +613 -0
  87. data/app/models/auth/concerns/shopping/product_concern.rb +102 -0
  88. data/app/models/auth/concerns/sms_otp_concern.rb +68 -0
  89. data/app/models/auth/concerns/user_concern.rb +788 -0
  90. data/app/models/auth/identity.rb +23 -0
  91. data/app/models/auth/shopping/cart.rb +3 -0
  92. data/app/models/auth/shopping/cart_item.rb +6 -0
  93. data/app/models/auth/shopping/cart_item_payment_result.rb +7 -0
  94. data/app/models/auth/shopping/discount.rb +4 -0
  95. data/app/models/auth/shopping/payment.rb +5 -0
  96. data/app/models/auth/shopping/product.rb +5 -0
  97. data/app/models/auth/user.rb +3 -0
  98. data/app/views/auth/admin_create_users/_admin_actions.html.erb +46 -0
  99. data/app/views/auth/admin_create_users/_form.html.erb +19 -0
  100. data/app/views/auth/admin_create_users/edit.html.erb +6 -0
  101. data/app/views/auth/admin_create_users/index.html.erb +25 -0
  102. data/app/views/auth/admin_create_users/new.html.erb +5 -0
  103. data/app/views/auth/admin_create_users/show.html.erb +8 -0
  104. data/app/views/auth/clients/_form.html.erb +41 -0
  105. data/app/views/auth/clients/edit.html.erb +6 -0
  106. data/app/views/auth/clients/index.html.erb +33 -0
  107. data/app/views/auth/clients/new.html.erb +5 -0
  108. data/app/views/auth/clients/show.html.erb +21 -0
  109. data/app/views/auth/confirmations/_enter_otp.html.erb +27 -0
  110. data/app/views/auth/confirmations/_get_otp_status.html.erb +25 -0
  111. data/app/views/auth/confirmations/_new_otp_input.js.erb +11 -0
  112. data/app/views/auth/confirmations/_resend_otp.js.erb +8 -0
  113. data/app/views/auth/confirmations/_resend_sms_otp.html.erb +18 -0
  114. data/app/views/auth/confirmations/_verify_otp.js.erb +64 -0
  115. data/app/views/auth/confirmations/create.js.erb +8 -0
  116. data/app/views/auth/confirmations/enter_otp.html.erb +7 -0
  117. data/app/views/auth/confirmations/get_otp_status.html.erb +3 -0
  118. data/app/views/auth/confirmations/new.html.erb +1 -0
  119. data/app/views/auth/confirmations/new.js.erb +16 -0
  120. data/app/views/auth/confirmations/otp_status_result.html.erb +20 -0
  121. data/app/views/auth/mailer/confirmation_instructions.html.erb +5 -0
  122. data/app/views/auth/mailer/password_change.html.erb +3 -0
  123. data/app/views/auth/mailer/reset_password_instructions.html.erb +8 -0
  124. data/app/views/auth/mailer/unlock_instructions.html.erb +7 -0
  125. data/app/views/auth/modals/_ajax_error_modal.html.erb +3 -0
  126. data/app/views/auth/modals/_ajax_error_modal_content.html.erb +0 -0
  127. data/app/views/auth/modals/_edit_account_content.html.erb +68 -0
  128. data/app/views/auth/modals/_edit_account_success_content.html.erb +5 -0
  129. data/app/views/auth/modals/_error_notification.html.erb +8 -0
  130. data/app/views/auth/modals/_forgot_password_content.html.erb +18 -0
  131. data/app/views/auth/modals/_forgot_password_success_content.html.erb +8 -0
  132. data/app/views/auth/modals/_login_default_content.html.erb +3 -0
  133. data/app/views/auth/modals/_login_forms.html.erb +13 -0
  134. data/app/views/auth/modals/_login_navigation_options.html.erb +12 -0
  135. data/app/views/auth/modals/_new_otp_input.html.erb +28 -0
  136. data/app/views/auth/modals/_oauth_and_submit.html.erb +21 -0
  137. data/app/views/auth/modals/_recaptcha_tags.html.erb +4 -0
  138. data/app/views/auth/modals/_resend_confirmation_content.html.erb +17 -0
  139. data/app/views/auth/modals/_resend_confirmation_success_content.html.erb +8 -0
  140. data/app/views/auth/modals/_resend_otp.html.erb +23 -0
  141. data/app/views/auth/modals/_resource_errors.js.erb +24 -0
  142. data/app/views/auth/modals/_sign_in_inputs.html.erb +10 -0
  143. data/app/views/auth/modals/_sign_in_needed_modal.html.erb +3 -0
  144. data/app/views/auth/modals/_sign_in_success_content.html.erb +5 -0
  145. data/app/views/auth/modals/_sign_up_inputs.html.erb +9 -0
  146. data/app/views/auth/modals/_sign_up_success_content.html.erb +1 -0
  147. data/app/views/auth/modals/_sign_up_success_inactive_content.html.erb +2 -0
  148. data/app/views/auth/modals/_unlock_content.html.erb +17 -0
  149. data/app/views/auth/modals/_verify_otp.html.erb +1 -0
  150. data/app/views/auth/modals/base_modal/_base.html.erb +25 -0
  151. data/app/views/auth/modals/login.js.erb +120 -0
  152. data/app/views/auth/modals/unlock_success_content.html.erb +8 -0
  153. data/app/views/auth/notifier/_email.html.erb +3 -0
  154. data/app/views/auth/notifier/notification.html.erb +2 -0
  155. data/app/views/auth/notifier/notification.text.erb +1 -0
  156. data/app/views/auth/omniauth_callbacks/failure.html.erb +4 -0
  157. data/app/views/auth/passwords/create.js.erb +12 -0
  158. data/app/views/auth/passwords/edit.html.erb +25 -0
  159. data/app/views/auth/passwords/new.html.erb +16 -0
  160. data/app/views/auth/passwords/new.js.erb +19 -0
  161. data/app/views/auth/profiles/_proxy_resource.html.erb +5 -0
  162. data/app/views/auth/profiles/set_proxy_resource.js.erb +1 -0
  163. data/app/views/auth/profiles/show.html.erb +8 -0
  164. data/app/views/auth/registrations/create.js.erb +40 -0
  165. data/app/views/auth/registrations/edit.html.erb +2 -0
  166. data/app/views/auth/registrations/edit.js.erb +5 -0
  167. data/app/views/auth/registrations/new.html.erb +33 -0
  168. data/app/views/auth/registrations/update.js.erb +47 -0
  169. data/app/views/auth/search/_search_bar.html.erb +11 -0
  170. data/app/views/auth/search/_search_result.html.erb +7 -0
  171. data/app/views/auth/search/_search_results.html.erb +4 -0
  172. data/app/views/auth/search/authenticated_user_search.js.erb +45 -0
  173. data/app/views/auth/search/authenticated_user_search.json +7 -0
  174. data/app/views/auth/sessions/create.js.erb +5 -0
  175. data/app/views/auth/sessions/new.html.erb +4 -0
  176. data/app/views/auth/sessions/new.js.erb +20 -0
  177. data/app/views/auth/shared/_devise_error_messages.html.erb +9 -0
  178. data/app/views/auth/shared/_links.html.erb +25 -0
  179. data/app/views/auth/shared/_object_errors.html.erb +12 -0
  180. data/app/views/auth/shared/_proxy_resource.html.erb +18 -0
  181. data/app/views/auth/shopping/cart_items/_form.html.erb +34 -0
  182. data/app/views/auth/shopping/cart_items/_show_cart_items_collection.html.erb +31 -0
  183. data/app/views/auth/shopping/cart_items/create_multiple.html.erb +6 -0
  184. data/app/views/auth/shopping/cart_items/create_multiple.json.erb +9 -0
  185. data/app/views/auth/shopping/cart_items/edit.html.erb +6 -0
  186. data/app/views/auth/shopping/cart_items/index.html.erb +52 -0
  187. data/app/views/auth/shopping/cart_items/new.html.erb +5 -0
  188. data/app/views/auth/shopping/cart_items/show.html.erb +13 -0
  189. data/app/views/auth/shopping/carts/_form.html.erb +35 -0
  190. data/app/views/auth/shopping/carts/_payment_links.html.erb +27 -0
  191. data/app/views/auth/shopping/carts/_remove_cart_item.html.erb +11 -0
  192. data/app/views/auth/shopping/carts/_show_cart_balance_info.html.erb +35 -0
  193. data/app/views/auth/shopping/carts/edit.html.erb +6 -0
  194. data/app/views/auth/shopping/carts/index.html.erb +43 -0
  195. data/app/views/auth/shopping/carts/new.html.erb +5 -0
  196. data/app/views/auth/shopping/carts/show.html.erb +46 -0
  197. data/app/views/auth/shopping/discounts/_form.html.erb +18 -0
  198. data/app/views/auth/shopping/discounts/_form_for_create_multiple_cart_items.html.erb +17 -0
  199. data/app/views/auth/shopping/discounts/_show_pending_discount_request.html.erb +17 -0
  200. data/app/views/auth/shopping/discounts/destroy.html.erb +2 -0
  201. data/app/views/auth/shopping/discounts/edit.html.erb +29 -0
  202. data/app/views/auth/shopping/discounts/index.html.erb +40 -0
  203. data/app/views/auth/shopping/discounts/new.html.erb +1 -0
  204. data/app/views/auth/shopping/discounts/show.html.erb +18 -0
  205. data/app/views/auth/shopping/discounts/update.html.erb +2 -0
  206. data/app/views/auth/shopping/payments/_approve_payment.html.erb +7 -0
  207. data/app/views/auth/shopping/payments/_cash_card_cheque.html.erb +24 -0
  208. data/app/views/auth/shopping/payments/_create_discount_coupon.html.erb +5 -0
  209. data/app/views/auth/shopping/payments/_form.html.erb +19 -0
  210. data/app/views/auth/shopping/payments/_gateway.html.erb +21 -0
  211. data/app/views/auth/shopping/payments/_proceed_to_gateway_or_verify_payment.html.erb +18 -0
  212. data/app/views/auth/shopping/payments/_refresh_payment.html.erb +7 -0
  213. data/app/views/auth/shopping/payments/_refund.html.erb +10 -0
  214. data/app/views/auth/shopping/payments/_show_payment_receipt.html.erb +12 -0
  215. data/app/views/auth/shopping/payments/edit.html.erb +6 -0
  216. data/app/views/auth/shopping/payments/index.html.erb +43 -0
  217. data/app/views/auth/shopping/payments/new.html.erb +13 -0
  218. data/app/views/auth/shopping/payments/show.html.erb +36 -0
  219. data/app/views/auth/shopping/products/_form.html.erb +27 -0
  220. data/app/views/auth/shopping/products/edit.html.erb +6 -0
  221. data/app/views/auth/shopping/products/index.html.erb +48 -0
  222. data/app/views/auth/shopping/products/index.json.erb +7 -0
  223. data/app/views/auth/shopping/products/new.html.erb +5 -0
  224. data/app/views/auth/shopping/products/show.html.erb +12 -0
  225. data/app/views/auth/shopping/products/show.json.erb +1 -0
  226. data/app/views/auth/unlocks/create.js.erb +12 -0
  227. data/app/views/auth/unlocks/new.html.erb +14 -0
  228. data/app/views/auth/unlocks/new.js.erb +17 -0
  229. data/app/views/auth/users/_search_result.html.erb +8 -0
  230. data/app/views/auth/users/profiles/_user_data.html.erb +4 -0
  231. data/app/views/auth/users/profiles/show.html.erb +54 -0
  232. data/app/views/layouts/auth/_modals.html.erb +2 -0
  233. data/app/views/layouts/auth/application.html.erb +17 -0
  234. data/app/views/layouts/auth/navbar/_navbar.html.erb +49 -0
  235. data/app/views/layouts/auth/navbar/_personalization.html.erb +17 -0
  236. data/app/views/layouts/auth/navbar/_progress_spinner.html.erb +11 -0
  237. data/app/views/layouts/mailer.html.erb +5 -0
  238. data/app/views/layouts/mailer.text.erb +1 -0
  239. data/config/initializers/active_model.rb +36 -0
  240. data/config/initializers/devise.rb +623 -0
  241. data/config/initializers/json.rb +10 -0
  242. data/config/initializers/omniauth.rb +447 -0
  243. data/config/initializers/redis.rb +2 -0
  244. data/config/initializers/redis.yml +14 -0
  245. data/config/locales/devise.en.yml +63 -0
  246. data/config/routes.rb +1 -0
  247. data/lib/assets/javascripts/data.js +126 -0
  248. data/lib/assets/javascripts/jquery.calendario.js +394 -0
  249. data/lib/assets/javascripts/jquery.tagcloud.js +92 -0
  250. data/lib/assets/javascripts/leanModal.js +236 -0
  251. data/lib/assets/javascripts/main.js +668 -0
  252. data/lib/assets/javascripts/modernizr.custom.63321.js +4 -0
  253. data/lib/assets/javascripts/payumoney.js +9 -0
  254. data/lib/assets/javascripts/search.js +36 -0
  255. data/lib/assets/javascripts/spinner.js +77 -0
  256. data/lib/assets/javascripts/trianglify.min.js +2 -0
  257. data/lib/assets/javascripts/you_need_to_sign_in.js.erb +478 -0
  258. data/lib/assets/stylesheets/calendar.css +111 -0
  259. data/lib/assets/stylesheets/calendar_modifications.scss +276 -0
  260. data/lib/auth.rb +32 -0
  261. data/lib/auth/custom_failure.rb +3 -0
  262. data/lib/auth/engine.rb +231 -0
  263. data/lib/auth/job_exception_handler.rb +7 -0
  264. data/lib/auth/mailgun.rb +28 -0
  265. data/lib/auth/notify.rb +8 -0
  266. data/lib/auth/omniauth/path.rb +104 -0
  267. data/lib/auth/partials.rb +12 -0
  268. data/lib/auth/rails/routes.rb +169 -0
  269. data/lib/auth/search/main.rb +97 -0
  270. data/lib/auth/sidekiq_up.rb +16 -0
  271. data/lib/auth/two_factor_otp.rb +202 -0
  272. data/lib/auth/url_shortener.rb +29 -0
  273. data/lib/auth/version.rb +3 -0
  274. data/lib/tasks/auth_tasks.rake +4 -0
  275. metadata +863 -0
@@ -0,0 +1,52 @@
1
+ module Auth::Shopping::Products::ProductsHelper
2
+
3
+
4
+ ## @param[Auth::Shopping::Product] product
5
+ ## @return[Auth::Shopping::CartItem] citem
6
+ def create_cart_item_from_product(product)
7
+ citem = Auth.configuration.cart_item_class.constantize.new
8
+ product.attributes.keys.each do |p_att|
9
+ if citem.respond_to? p_att.to_sym
10
+ unless (p_att == "_id" || p_att == "_type" || p_att == "resource_id" || p_att == "resource_class")
11
+ citem.send("#{p_att}=",product.send("#{p_att}"))
12
+ end
13
+ end
14
+ end
15
+ citem.product_id = product.id.to_s
16
+
17
+ citem
18
+ end
19
+
20
+
21
+ ##########################################################
22
+ ##
23
+ ##
24
+ ## PATH HELPERS.
25
+ ##
26
+ ##
27
+ ##########################################################
28
+
29
+
30
+ ## get /new
31
+ def new_product_path
32
+ main_app.send(Auth::OmniAuth::Path.new_path(Auth.configuration.product_class))
33
+ end
34
+
35
+ ## (PUT/PATCH/GET) - individual product
36
+ def product_path(product)
37
+
38
+ main_app.send(Auth::OmniAuth::Path.show_or_update_or_delete_path(Auth.configuration.product_class),product)
39
+ end
40
+
41
+
42
+ ##/products (GET - all products /CREATE - individual product)
43
+ def products_path
44
+ main_app.send(Auth::OmniAuth::Path.create_or_index_path(Auth.configuration.product_class))
45
+ end
46
+
47
+ ##/shopping/products/:id/edit
48
+ def edit_product_path(product)
49
+ main_app.send(Auth::OmniAuth::Path.edit_path(Auth.configuration.product_class),product)
50
+ end
51
+
52
+ end
@@ -0,0 +1,3 @@
1
+ module Auth::Shopping::ShoppingHelper
2
+
3
+ end
@@ -0,0 +1,12 @@
1
+ module Auth::Users::ProfilesHelper
2
+
3
+ ##@used_in: views/users/profiles/_user_data.html.erb
4
+ ##@resource[Object]: a Devise resource
5
+ ##@returns[Hash]: a hash with key: resource, value -> jsonified representation of whatever data you want to store for that resource
6
+ def user_data(resource)
7
+ {resource: {:id => resource.id.to_s}}
8
+ end
9
+
10
+
11
+
12
+ end
@@ -0,0 +1,92 @@
1
+ require "/home/bhargav/Github/auth/lib/auth/two_factor_otp"
2
+ class OtpJob < ActiveJob::Base
3
+ include Auth::TwoFactorOtp
4
+ include Auth::Mailgun
5
+ include Auth::JobExceptionHandler
6
+
7
+ queue_as :default
8
+ #self.queue_adapter = Auth.configuration.queue_adapter.to_sym
9
+
10
+ ##we currently log all exceptions to redis.
11
+ rescue_from(StandardError) do |exception|
12
+ puts exception.message
13
+ puts exception.backtrace.join("\n")
14
+ end
15
+
16
+ ## expected array of arguments is:
17
+ ## 0 => resource class as string
18
+ ## 1 => resource as json serialized, by calling JSON.generate()
19
+ ## 2 => job_type : either "send_sms_otp" or "verify_sms_otp"
20
+ ## 3 => hash of additional arguments if any
21
+ def perform(args)
22
+
23
+ resource_class = args[0]
24
+ resource_id = args[1]
25
+ job_type = args[2]
26
+ params = (args.size == 4) ? JSON.parse(args[3]).deep_symbolize_keys : nil
27
+
28
+
29
+ ############### WEBHOOK JOBS ##########################
30
+
31
+ if job_type == "sms_webhook"
32
+
33
+ sms_webhook(params)
34
+
35
+ elsif job_type == "email_webhook"
36
+
37
+ email_webhook(params)
38
+
39
+ end
40
+
41
+ ############### JOBS THAT NEED A RESOURCE #############
42
+
43
+ if resource_class && Auth.configuration.auth_resources[resource_class]
44
+
45
+ resource_class = resource_class.constantize
46
+
47
+
48
+ resource = resource_class.find(resource_id)
49
+
50
+
51
+ Auth::TwoFactorOtp.resource = resource
52
+
53
+
54
+ if job_type == "send_sms_otp"
55
+
56
+
57
+ auth_gen
58
+
59
+
60
+ elsif job_type == "verify_sms_otp"
61
+
62
+
63
+ verify(params[:otp])
64
+
65
+
66
+ elsif job_type == "send_transactional_sms"
67
+
68
+
69
+ notification = params[:notification_class].capitalize.constantize.find(params[:notification_id])
70
+ notification.send_sms(resource) do
71
+ send_transactional_sms(notification.format_for_sms(resource))
72
+ end
73
+
74
+
75
+ elsif job_type == "send_email"
76
+
77
+ notification = params[:notification_class].capitalize.constantize.find(params[:notification_id])
78
+ email = Auth.configuration.mailer_class.constantize.notification(resource,self)
79
+ email = add_webhook_identifier_to_email(email)
80
+
81
+ notification.send_email(resource) do
82
+ JSON.generate(email.message.mailgun_variables)
83
+ end
84
+
85
+ email.deliver_now
86
+
87
+ end
88
+
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,4 @@
1
+ class ApplicationMailer < ::ApplicationMailer
2
+ default from: "from@example.com"
3
+ layout 'mailer'
4
+ end
@@ -0,0 +1,9 @@
1
+ class Auth::Notifier < ::ApplicationMailer
2
+ default from: "from@example.com"
3
+ ## make sure that anything going into this argument implements includes globalid, otherwise serialization and deserialization does not work.
4
+ def notification(resource,notification)
5
+ @resource = resource
6
+ @notification = Auth.configuration.notification_class.constantize.new
7
+ mail to: "bhargav.r.raut@gmail.com", subject: "#{Time.now}Now with new otp job architecture. #{Auth.configuration.brand_name}"
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ class Auth::AdminCreateUser
2
+ include Mongoid::Document
3
+ end
@@ -0,0 +1,52 @@
1
+ module Auth
2
+ class Client
3
+ include Mongoid::Document
4
+ include MongoidVersionedAtomic::VAtomic
5
+ validates :redirect_urls, :url => true, if: :there_are_redirect_urls
6
+ validates :resource_id, presence: true
7
+
8
+ def to_param
9
+ resource_id
10
+ end
11
+
12
+ def self.find(input)
13
+ Client.where(:resource_id => input).first
14
+ end
15
+
16
+ field :api_key, type: String
17
+ field :path, type: String
18
+ field :redirect_urls, type: Array, default: []
19
+ field :resource_id, type: BSON::ObjectId, default: BSON::ObjectId.new
20
+ field :app_ids, type: Array, default: []
21
+ field :current_app_id, type: String
22
+ attr_accessor :add_app_id
23
+ attr_accessor :add_redirect_url
24
+
25
+
26
+ def contains_redirect_url?(url)
27
+ return self.redirect_urls.include? url
28
+ end
29
+
30
+ def self.find_valid_api_key(api_key)
31
+ c = self.find(:api_key => api_key)
32
+ return c
33
+ end
34
+
35
+ ##USED IN DEVISE.RB -> SET_CLIENT
36
+ ##USED IN OMNIAUTH.RB -> CHECK_STATE
37
+ def self.find_valid_api_key_and_app_id(api_key,app_id)
38
+ c = self.where(:api_key => api_key, :app_ids => app_id).first
39
+ if c
40
+ c.current_app_id = app_id
41
+ end
42
+ return c
43
+ end
44
+
45
+ def there_are_redirect_urls
46
+ return self.redirect_urls && self.redirect_urls.size > 0
47
+ end
48
+
49
+
50
+
51
+ end
52
+ end
@@ -0,0 +1,112 @@
1
+ module Auth::Concerns::ActivityConcern
2
+
3
+ extend ActiveSupport::Concern
4
+ include Auth::Concerns::ChiefModelConcern
5
+ included do
6
+
7
+ field :user_id, type: BSON::ObjectId
8
+ field :image_url, type: String
9
+
10
+ end
11
+
12
+ module ClassMethods
13
+
14
+ ##the default "from" is the beginning of the current month, and the default "to" is the current time.
15
+ ##@used_in : last_n_months, get_in_range
16
+ ##@param[Hash] query: the "from","to" provided in the query if at all, otherwise nil, assumed that query has two keys : "from", "to", under a key called "range"
17
+ ##@param[Integer] default_from : the default_from for the particular function that is firing this query, it is an epoch
18
+ ##@param[Integer] default_to : the default_to for the particular function that is firing this query, it is an epoch
19
+ ##@return[Hash] : default values for "from", "to"
20
+ def activities_from_to(query,default_from,default_to)
21
+ defaults = {"range" => {"from" => default_from, "to" => default_to}}
22
+ query = defaults.deep_merge(query)
23
+ ##default from and to assigned here.
24
+ from = query["range"]["from"].to_i
25
+ to = query["range"]["to"].to_i
26
+ if from >= to
27
+ query["range"]["from"] = default_from
28
+ query["range"]["to"] = default_to
29
+ end
30
+ return query
31
+ end
32
+
33
+
34
+ ##defaults for only.
35
+ ##if it is empty or nil, then it becomes all attributes
36
+ ##otherwise it becomes the intersect of all attributes and the ones specified in the only
37
+ ##created_at had to be added here, because otherwise it throws an error saying missing_attribute in the only. I think this has something to do with the fact that it is used in the query, so it will be included in the result.
38
+ ##@used_in: get_in_range
39
+ ##@param[query] : the provided query, expected to be of the structure:
40
+ ##{"only" => [array],,,other key value pairs}
41
+ ##@return[Hash] query : returns the query with the default values for the fields to be returned
42
+ def activities_fields(query)
43
+ defaults = {"only" => Object.const_get(name).fields.keys}
44
+ query = defaults.deep_merge(query)
45
+ only = ((Object.const_get(name).fields.keys & query["only"]) + ["created_at"])
46
+ query["only"] = only
47
+ return query
48
+ end
49
+
50
+ ##@param[Hash] query_params: {"range" : {"from" : unix_epoch_as_string, "to" => unix_epoch_as_string}, "user_id": string, "only": [array_of_attributes_required]}
51
+ ##"range" => optional,if nil or empty, "from" and "to" will be automatically assigned to beginning_of_current_month and current_time respectively
52
+ ##"user_id" => required, will return empty hash if absent.
53
+ ##@return[Hash] agg_hash: the aggregation hash
54
+ def last_n_months(query_params)
55
+ return {} unless query_params[:user_id]
56
+ query_params = Object.const_get(name).activities_from_to(query_params, Time.now.to_i = 12.months, Time.now.to_i)
57
+
58
+ agg_hash = Object.const_get(name).collection.aggregate([
59
+ {
60
+ "$match" => Object.const_get(name).where(:created_at.gte => query_params["range"]["from"], :created_at.lte => query_params["range"]["to"], :user_id => query_params[:user_id]).selector
61
+ },
62
+ {
63
+ "$project" => {
64
+ month: {
65
+ "$month" => "$created_at"
66
+ }
67
+ }
68
+ },
69
+ {
70
+ "$group" => {
71
+ "_id" => {
72
+ month: "$month"
73
+ },
74
+ count: {
75
+ "$sum" => 1
76
+ }
77
+ }
78
+ }]
79
+ )
80
+
81
+ return agg_hash
82
+
83
+ end
84
+
85
+ ##@param[Hash] query_params: {"range" : {"from" : unix_epoch_as_string, "to" => unix_epoch_as_string}, "user_id": string, "only": [array_of_attributes_required]}
86
+ ##"range" => optional,if nil or empty, "from" and "to" will be automatically assigned to beginning_of_current_month and current_time respectively
87
+ ##"user_id" => required, will return empty hash if absent.
88
+ ##"only" => optional, will default to all attributes of the activity model.
89
+ ##@return[Hash]: timestamp => activity_object hashified.
90
+ def get_in_range(query_params)
91
+
92
+ ## return empty hash if there is no user_id
93
+ return {} unless query_params[:user_id]
94
+ query_params = Object.const_get(name).activities_from_to(query_params, Time.now.beginning_of_month.to_i, Time.now.to_i)
95
+ query_params = Object.const_get(name).activities_fields(query_params)
96
+
97
+ ##make the mongoid range call here.
98
+ activities = Object.const_get(name).where(:created_at.gte => query_params["range"]["from"], :created_at.lte => query_params["range"]["to"], :user_id => query_params["user_id"]).only(query_params["only"])
99
+
100
+ activities_hash = Hash[activities.entries.map{|c| c.created_at.to_i}.zip(activities.entries.map{|c| c.as_json})]
101
+
102
+ puts JSON.pretty_generate(activities_hash)
103
+
104
+ return activities_hash
105
+
106
+ end
107
+
108
+ end
109
+
110
+
111
+
112
+ end
@@ -0,0 +1,73 @@
1
+ module Auth::Concerns::ChiefModelConcern
2
+
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+
7
+
8
+
9
+
10
+ include Mongoid::Document
11
+ include Mongoid::Timestamps
12
+
13
+ ## expected to be a hash with names of callbacks and boolean values.
14
+ ## eg: {:before_save => true, :after_save => false..}
15
+ ## used in conjunction with the provided skip_callback?(callback_name) method to determine whether to execute the callbacks or not.
16
+ ## so basically before saving the document, set this attr_accessor on it, and it will allow you to control if callbacks are executed or not.
17
+ ## currently used in the after_save callback where we dont want the refund being set to accepted, and thereafter to update all other refunds as failed to cascade.
18
+ attr_accessor :skip_callbacks
19
+
20
+
21
+ field :public, type:String, default: "no"
22
+
23
+
24
+ def field_names_to_skip_while_making_form
25
+ ["_id","_type.,","resource_id","resource_class","created_at","updated_at","public"]
26
+ end
27
+
28
+ def publicly_visible_field_names
29
+ []
30
+ end
31
+
32
+
33
+ ## returns a list of attributes of tis model other than those mentioned in #FIELD_NAMES_TO_SKIP_WHILE_MAKING_FORM in this concern.
34
+ ## this is only used in the web api.
35
+ ## @return[Array] array_of_strings : field name.
36
+ def attributes_to_show
37
+ self.class.attribute_names.keep_if{|c| !self.field_names_to_skip_while_making_form.include? c.to_s}
38
+ end
39
+
40
+ ## @return[Array]
41
+ def public_attributes_to_show
42
+ self.publicly_visible_field_names
43
+ end
44
+
45
+ end
46
+
47
+ ## @param callback_name[String] : the name of the callback which you want to know if is to be skipped
48
+ ## return[Boolean] : true or false.
49
+ ## checks whether the attr_accessor skip_callbacks is set, and if yes, then whether the name of this callback exists in it.
50
+ ## if both above are no, then returns false
51
+ ## if the name exists, then return whatever is stored for the name i.e true or false.
52
+ ## @used_in the after_save and before_save callback blocks, as the first line, basically only executes the block if this method returns false.
53
+ def skip_callback?(callback_name)
54
+ return false if (self.skip_callbacks.blank? || self.skip_callbacks[callback_name.to_sym].nil?)
55
+ return self.skip_callbacks[callback_name.to_sym] == true
56
+ end
57
+
58
+ ## will iterate the superclasses of this class
59
+ ## until it finds a class that begins with Auth::
60
+ ## or it hits Object
61
+ ## and then it returns that superclass whatever it is.
62
+ def walk_superclasses
63
+ my_super_class = self.class.superclass
64
+ while my_super_class != Object
65
+ break if my_super_class.to_s =~ /^Auth::/
66
+ my_super_class = my_super_class.superclass
67
+ end
68
+ return my_super_class
69
+ end
70
+
71
+
72
+
73
+ end
@@ -0,0 +1,21 @@
1
+ module Auth::Concerns::EsConcern
2
+
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+
7
+ def self.create_es_index(definition)
8
+ definition ||= {}
9
+ if Auth.configuration.use_es == true
10
+ include Mongoid::Elasticsearch
11
+ elasticsearch! (
12
+ definition
13
+ )
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+
20
+
21
+ end