mno-enterprise-api 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -0
  3. data/Rakefile +12 -0
  4. data/app/assets/javascripts/mno_enterprise/angular/loading-page.app.js.coffee +156 -0
  5. data/app/assets/javascripts/mno_enterprise/application.js +13 -0
  6. data/app/controllers/devise/password_expired_controller.rb +55 -0
  7. data/app/controllers/mno_enterprise/auth/confirmations_controller.rb +5 -0
  8. data/app/controllers/mno_enterprise/auth/omniauth_callbacks_controller.rb +30 -0
  9. data/app/controllers/mno_enterprise/auth/passwords_controller.rb +5 -0
  10. data/app/controllers/mno_enterprise/auth/registrations_controller.rb +5 -0
  11. data/app/controllers/mno_enterprise/auth/sessions_controller.rb +7 -0
  12. data/app/controllers/mno_enterprise/auth/unlocks_controller.rb +5 -0
  13. data/app/controllers/mno_enterprise/deletion_requests_controller.rb +5 -0
  14. data/app/controllers/mno_enterprise/impersonate_controller.rb +48 -0
  15. data/app/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller.rb +16 -0
  16. data/app/controllers/mno_enterprise/jpi/v1/admin/base_resource_controller.rb +5 -0
  17. data/app/controllers/mno_enterprise/jpi/v1/admin/cloud_apps_controller.rb +46 -0
  18. data/app/controllers/mno_enterprise/jpi/v1/admin/invoices_controller.rb +47 -0
  19. data/app/controllers/mno_enterprise/jpi/v1/admin/organizations_controller.rb +27 -0
  20. data/app/controllers/mno_enterprise/jpi/v1/admin/tenant_invoices_controller.rb +14 -0
  21. data/app/controllers/mno_enterprise/jpi/v1/admin/users_controller.rb +63 -0
  22. data/app/controllers/mno_enterprise/jpi/v1/app_instances_controller.rb +24 -0
  23. data/app/controllers/mno_enterprise/jpi/v1/app_instances_sync_controller.rb +36 -0
  24. data/app/controllers/mno_enterprise/jpi/v1/base_resource_controller.rb +32 -0
  25. data/app/controllers/mno_enterprise/jpi/v1/current_users_controller.rb +5 -0
  26. data/app/controllers/mno_enterprise/jpi/v1/deletion_requests_controller.rb +5 -0
  27. data/app/controllers/mno_enterprise/jpi/v1/impac/dashboards_controller.rb +5 -0
  28. data/app/controllers/mno_enterprise/jpi/v1/impac/kpis_controller.rb +80 -0
  29. data/app/controllers/mno_enterprise/jpi/v1/impac/widgets_controller.rb +63 -0
  30. data/app/controllers/mno_enterprise/jpi/v1/industry_bundle_controller.rb +25 -0
  31. data/app/controllers/mno_enterprise/jpi/v1/marketplace_controller.rb +22 -0
  32. data/app/controllers/mno_enterprise/jpi/v1/organizations_controller.rb +5 -0
  33. data/app/controllers/mno_enterprise/jpi/v1/shopping_cart_controller.rb +93 -0
  34. data/app/controllers/mno_enterprise/jpi/v1/teams_controller.rb +88 -0
  35. data/app/controllers/mno_enterprise/org_invites_controller.rb +5 -0
  36. data/app/controllers/mno_enterprise/pages_controller.rb +5 -0
  37. data/app/controllers/mno_enterprise/provision_controller.rb +5 -0
  38. data/app/controllers/mno_enterprise/status_controller.rb +27 -0
  39. data/app/controllers/mno_enterprise/webhook/o_auth_controller.rb +5 -0
  40. data/app/mailers/mno_enterprise/system_notification_mailer.rb +5 -0
  41. data/app/models/mno_enterprise/health_check.rb +16 -0
  42. data/app/views/devise/password_expired/show.html.haml +32 -0
  43. data/app/views/mno_enterprise/auth/confirmations/default/_form.html.haml +49 -0
  44. data/app/views/mno_enterprise/auth/confirmations/default/_lounge.html.haml +34 -0
  45. data/app/views/mno_enterprise/auth/confirmations/default/_show.html.haml +10 -0
  46. data/app/views/mno_enterprise/auth/confirmations/lounge.html.haml +4 -0
  47. data/app/views/mno_enterprise/auth/confirmations/material/_form.html.haml +44 -0
  48. data/app/views/mno_enterprise/auth/confirmations/material/_lounge.html.haml +18 -0
  49. data/app/views/mno_enterprise/auth/confirmations/material/_show.html.haml +21 -0
  50. data/app/views/mno_enterprise/auth/confirmations/new.html.haml +31 -0
  51. data/app/views/mno_enterprise/auth/confirmations/show.html.haml +4 -0
  52. data/app/views/mno_enterprise/auth/mailer/confirmation_instructions.html.haml +4 -0
  53. data/app/views/mno_enterprise/auth/mailer/reset_password_instructions.html.haml +6 -0
  54. data/app/views/mno_enterprise/auth/mailer/unlock_instructions.html.haml +5 -0
  55. data/app/views/mno_enterprise/auth/passwords/edit.html.haml +53 -0
  56. data/app/views/mno_enterprise/auth/passwords/new.html.haml +34 -0
  57. data/app/views/mno_enterprise/auth/registrations/default/_form.html.haml +35 -0
  58. data/app/views/mno_enterprise/auth/registrations/default/_new.html.haml +11 -0
  59. data/app/views/mno_enterprise/auth/registrations/material/_form.html.haml +30 -0
  60. data/app/views/mno_enterprise/auth/registrations/material/_new.html.haml +10 -0
  61. data/app/views/mno_enterprise/auth/registrations/new.html.haml +4 -0
  62. data/app/views/mno_enterprise/auth/sessions/default/_form.html.haml +17 -0
  63. data/app/views/mno_enterprise/auth/sessions/default/_new.html.haml +11 -0
  64. data/app/views/mno_enterprise/auth/sessions/material/_form.html.haml +26 -0
  65. data/app/views/mno_enterprise/auth/sessions/material/_new.html.haml +11 -0
  66. data/app/views/mno_enterprise/auth/sessions/new.html.haml +4 -0
  67. data/app/views/mno_enterprise/auth/shared/_links.html.haml +24 -0
  68. data/app/views/mno_enterprise/auth/unlocks/new.html.haml +10 -0
  69. data/app/views/mno_enterprise/deletion_requests/show.html.haml +131 -0
  70. data/app/views/mno_enterprise/jpi/v1/admin/audit_events/_audit_event.json.jbuilder +5 -0
  71. data/app/views/mno_enterprise/jpi/v1/admin/audit_events/index.json.jbuilder +4 -0
  72. data/app/views/mno_enterprise/jpi/v1/admin/cloud_apps/_cloud_app.json.jbuilder +1 -0
  73. data/app/views/mno_enterprise/jpi/v1/admin/cloud_apps/index.json.jbuilder +1 -0
  74. data/app/views/mno_enterprise/jpi/v1/admin/cloud_apps/show.json.jbuilder +1 -0
  75. data/app/views/mno_enterprise/jpi/v1/admin/invoices/_invoice.json.jbuilder +2 -0
  76. data/app/views/mno_enterprise/jpi/v1/admin/invoices/index.json.jbuilder +1 -0
  77. data/app/views/mno_enterprise/jpi/v1/admin/invoices/show.json.jbuilder +2 -0
  78. data/app/views/mno_enterprise/jpi/v1/admin/organizations/_credit_card.json.jbuilder +7 -0
  79. data/app/views/mno_enterprise/jpi/v1/admin/organizations/_invoices.json.jbuilder +8 -0
  80. data/app/views/mno_enterprise/jpi/v1/admin/organizations/_member.json.jbuilder +14 -0
  81. data/app/views/mno_enterprise/jpi/v1/admin/organizations/_organization.json.jbuilder +1 -0
  82. data/app/views/mno_enterprise/jpi/v1/admin/organizations/in_arrears.json.jbuilder +8 -0
  83. data/app/views/mno_enterprise/jpi/v1/admin/organizations/index.json.jbuilder +7 -0
  84. data/app/views/mno_enterprise/jpi/v1/admin/organizations/show.json.jbuilder +11 -0
  85. data/app/views/mno_enterprise/jpi/v1/admin/tenant_invoices/_tenant_invoice.json.jbuilder +5 -0
  86. data/app/views/mno_enterprise/jpi/v1/admin/tenant_invoices/index.json.jbuilder +1 -0
  87. data/app/views/mno_enterprise/jpi/v1/admin/tenant_invoices/show.json.jbuilder +1 -0
  88. data/app/views/mno_enterprise/jpi/v1/admin/users/_user.json.jbuilder +1 -0
  89. data/app/views/mno_enterprise/jpi/v1/admin/users/index.json.jbuilder +2 -0
  90. data/app/views/mno_enterprise/jpi/v1/admin/users/show.json.jbuilder +9 -0
  91. data/app/views/mno_enterprise/jpi/v1/app_instances/_resource.json.jbuilder +23 -0
  92. data/app/views/mno_enterprise/jpi/v1/app_instances/index.json.jbuilder +9 -0
  93. data/app/views/mno_enterprise/jpi/v1/app_instances/show.json.jbuilder +3 -0
  94. data/app/views/mno_enterprise/jpi/v1/billing/index.json.jbuilder +0 -0
  95. data/app/views/mno_enterprise/jpi/v1/current_users/show.json.jbuilder +37 -0
  96. data/app/views/mno_enterprise/jpi/v1/impac/dashboards/_dashboard.json.jbuilder +9 -0
  97. data/app/views/mno_enterprise/jpi/v1/impac/dashboards/index.json.jbuilder +1 -0
  98. data/app/views/mno_enterprise/jpi/v1/impac/dashboards/show.json.jbuilder +1 -0
  99. data/app/views/mno_enterprise/jpi/v1/impac/kpis/_kpi.json.jbuilder +1 -0
  100. data/app/views/mno_enterprise/jpi/v1/impac/kpis/show.json.jbuilder +1 -0
  101. data/app/views/mno_enterprise/jpi/v1/impac/widgets/_widget.json.jbuilder +6 -0
  102. data/app/views/mno_enterprise/jpi/v1/impac/widgets/show.json.jbuilder +1 -0
  103. data/app/views/mno_enterprise/jpi/v1/marketplace/_app.json.jbuilder +14 -0
  104. data/app/views/mno_enterprise/jpi/v1/marketplace/index.json.jbuilder +3 -0
  105. data/app/views/mno_enterprise/jpi/v1/marketplace/show.json.jbuilder +3 -0
  106. data/app/views/mno_enterprise/jpi/v1/organizations/_arrears.json.jbuilder +11 -0
  107. data/app/views/mno_enterprise/jpi/v1/organizations/_billing.json.jbuilder +4 -0
  108. data/app/views/mno_enterprise/jpi/v1/organizations/_credit_card.json.jbuilder +7 -0
  109. data/app/views/mno_enterprise/jpi/v1/organizations/_current_user.json.jbuilder +5 -0
  110. data/app/views/mno_enterprise/jpi/v1/organizations/_invoices.json.jbuilder +8 -0
  111. data/app/views/mno_enterprise/jpi/v1/organizations/_member.json.jbuilder +13 -0
  112. data/app/views/mno_enterprise/jpi/v1/organizations/_organization.json.jbuilder +13 -0
  113. data/app/views/mno_enterprise/jpi/v1/organizations/credit_card.json.jbuilder +1 -0
  114. data/app/views/mno_enterprise/jpi/v1/organizations/index.json.jbuilder +1 -0
  115. data/app/views/mno_enterprise/jpi/v1/organizations/members.json.jbuilder +3 -0
  116. data/app/views/mno_enterprise/jpi/v1/organizations/show.json.jbuilder +15 -0
  117. data/app/views/mno_enterprise/jpi/v1/organizations/show_reduced.json.jbuilder +3 -0
  118. data/app/views/mno_enterprise/jpi/v1/shopping_cart/organizations.json.jbuilder +5 -0
  119. data/app/views/mno_enterprise/jpi/v1/shopping_cart/show.json.jbuilder +59 -0
  120. data/app/views/mno_enterprise/jpi/v1/shopping_cart/show_item.json.jbuilder +34 -0
  121. data/app/views/mno_enterprise/jpi/v1/teams/_team.json.jbuilder +20 -0
  122. data/app/views/mno_enterprise/jpi/v1/teams/index.json.jbuilder +1 -0
  123. data/app/views/mno_enterprise/jpi/v1/teams/show.json.jbuilder +3 -0
  124. data/app/views/mno_enterprise/pages/app_access_unauthorized.html.haml +19 -0
  125. data/app/views/mno_enterprise/pages/app_logout.html.haml +18 -0
  126. data/app/views/mno_enterprise/pages/billing_details_required.html.haml +19 -0
  127. data/app/views/mno_enterprise/pages/loading.html.erb +69 -0
  128. data/app/views/mno_enterprise/provision/_provision_apps.html.haml +42 -0
  129. data/app/views/mno_enterprise/provision/_select_organization.html.haml +17 -0
  130. data/app/views/mno_enterprise/provision/new.html.haml +4 -0
  131. data/app/views/mno_enterprise/webhook/o_auth/authorize.html.haml +26 -0
  132. data/app/views/mno_enterprise/webhook/o_auth/providers/myob.html.haml +29 -0
  133. data/app/views/mno_enterprise/webhook/o_auth/providers/xero.html.haml +34 -0
  134. data/config/initializers/devise.rb +273 -0
  135. data/config/initializers/devise_extension.rb +9 -0
  136. data/config/initializers/devise_log.rb +12 -0
  137. data/config/initializers/health_check.rb +35 -0
  138. data/config/initializers/main_app_version.rb +6 -0
  139. data/config/routes.rb +152 -0
  140. data/lib/mno-enterprise-api.rb +1 -0
  141. data/lib/mno_enterprise/api.rb +14 -0
  142. data/lib/mno_enterprise/api/engine.rb +9 -0
  143. data/lib/mno_enterprise/concerns/controllers/deletion_requests_controller.rb +108 -0
  144. data/lib/mno_enterprise/concerns/controllers/jpi/v1/admin/base_resource_controller.rb +34 -0
  145. data/lib/mno_enterprise/concerns/controllers/jpi/v1/current_users_controller.rb +58 -0
  146. data/lib/mno_enterprise/concerns/controllers/jpi/v1/deletion_requests_controller.rb +69 -0
  147. data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/dashboards_controller.rb +76 -0
  148. data/lib/mno_enterprise/concerns/controllers/jpi/v1/organizations_controller.rb +180 -0
  149. data/lib/mno_enterprise/concerns/controllers/org_invites_controller.rb +44 -0
  150. data/lib/mno_enterprise/concerns/controllers/pages_controller.rb +78 -0
  151. data/lib/mno_enterprise/concerns/controllers/provision_controller.rb +71 -0
  152. data/lib/mno_enterprise/concerns/controllers/webhook/o_auth_controller.rb +107 -0
  153. data/lib/mno_enterprise/concerns/mailers/system_notification_mailer.rb +158 -0
  154. data/lib/mno_enterprise/event_logger.rb +32 -0
  155. data/spec/controllers/mno_enterprise/auth/confirmation_controller_spec.rb +68 -0
  156. data/spec/controllers/mno_enterprise/deletion_requests_controller_spec.rb +141 -0
  157. data/spec/controllers/mno_enterprise/impersonate_controller_spec.rb +48 -0
  158. data/spec/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller_spec.rb +51 -0
  159. data/spec/controllers/mno_enterprise/jpi/v1/admin/cloud_apps_controller_spec.rb +92 -0
  160. data/spec/controllers/mno_enterprise/jpi/v1/admin/invoices_controller_spec.rb +159 -0
  161. data/spec/controllers/mno_enterprise/jpi/v1/admin/organizations_controller_spec.rb +116 -0
  162. data/spec/controllers/mno_enterprise/jpi/v1/admin/tenant_invoices_controller_spec.rb +92 -0
  163. data/spec/controllers/mno_enterprise/jpi/v1/admin/users_controller_spec.rb +136 -0
  164. data/spec/controllers/mno_enterprise/jpi/v1/app_instances_controller_spec.rb +76 -0
  165. data/spec/controllers/mno_enterprise/jpi/v1/app_instances_sync_controller_spec.rb +94 -0
  166. data/spec/controllers/mno_enterprise/jpi/v1/current_users_controller_spec.rb +128 -0
  167. data/spec/controllers/mno_enterprise/jpi/v1/deletion_requests_controller_spec.rb +72 -0
  168. data/spec/controllers/mno_enterprise/jpi/v1/impac/kpis_controller_spec.rb +80 -0
  169. data/spec/controllers/mno_enterprise/jpi/v1/marketplace_controller_spec.rb +115 -0
  170. data/spec/controllers/mno_enterprise/jpi/v1/organizations_controller_spec.rb +516 -0
  171. data/spec/controllers/mno_enterprise/jpi/v1/team_controller_spec.rb +86 -0
  172. data/spec/controllers/mno_enterprise/org_invites_controller_spec.rb +29 -0
  173. data/spec/controllers/mno_enterprise/pages_controller_spec.rb +49 -0
  174. data/spec/controllers/mno_enterprise/provision_controller_spec.rb +94 -0
  175. data/spec/controllers/mno_enterprise/status_controller_spec.rb +34 -0
  176. data/spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb +104 -0
  177. data/spec/lib/mno_enterprise/event_logger_spec.rb +28 -0
  178. data/spec/mailer/mno_enterprise/system_notification_mailer_spec.rb +132 -0
  179. data/spec/rails_helper.rb +94 -0
  180. data/spec/requests/devise/authentication_spec.rb +43 -0
  181. data/spec/requests/devise/registration_spec.rb +64 -0
  182. data/spec/routing/devise/confirmation_routing_spec.rb +20 -0
  183. data/spec/routing/devise/passwords_routing_spec.rb +24 -0
  184. data/spec/routing/devise/registrations_routing_spec.rb +16 -0
  185. data/spec/routing/devise/sessions_routing_spec.rb +20 -0
  186. data/spec/routing/mno_enterprise/deletion_requests_controller_routing_spec.rb +20 -0
  187. data/spec/routing/mno_enterprise/impersonate_controller_routing.spec.rb +15 -0
  188. data/spec/routing/mno_enterprise/jpi/v1/admin/audit_events_controller_routing_spec.rb +11 -0
  189. data/spec/routing/mno_enterprise/jpi/v1/admin/cloud_apps_controller_routing_spec.rb +24 -0
  190. data/spec/routing/mno_enterprise/jpi/v1/admin/invoices_controller_routing_spec.rb +37 -0
  191. data/spec/routing/mno_enterprise/jpi/v1/admin/organizations_controller_routing_spec.rb +20 -0
  192. data/spec/routing/mno_enterprise/jpi/v1/admin/tenant_invoices_controller_routing_spec.rb +16 -0
  193. data/spec/routing/mno_enterprise/jpi/v1/admin/users_controller_routing_spec.rb +24 -0
  194. data/spec/routing/mno_enterprise/jpi/v1/app_instances_controller_routing_spec.rb +12 -0
  195. data/spec/routing/mno_enterprise/jpi/v1/app_instances_sync_controller_routing_spec.rb +15 -0
  196. data/spec/routing/mno_enterprise/jpi/v1/current_users_controller_routing_spec.rb +28 -0
  197. data/spec/routing/mno_enterprise/jpi/v1/deletion_requests_controller_routing_spec.rb +24 -0
  198. data/spec/routing/mno_enterprise/jpi/v1/impac/kpis_controller_routing_spec.rb +22 -0
  199. data/spec/routing/mno_enterprise/jpi/v1/marketplace_controller_routing_spec.rb +16 -0
  200. data/spec/routing/mno_enterprise/jpi/v1/organizations_controller_routing_spec.rb +44 -0
  201. data/spec/routing/mno_enterprise/jpi/v1/teams_controller_routing_spec.rb +36 -0
  202. data/spec/routing/mno_enterprise/org_invites_controller_routing_spec.rb +12 -0
  203. data/spec/routing/mno_enterprise/pages_controller_routing_spec.rb +29 -0
  204. data/spec/routing/mno_enterprise/provision_controller_routing_spec.rb +15 -0
  205. data/spec/routing/mno_enterprise/status_controller_routing_spec.rb +19 -0
  206. data/spec/routing/mno_enterprise/webhook/o_auth_controller_routing_spec.rb +27 -0
  207. data/spec/spec_helper.rb +88 -0
  208. metadata +402 -0
@@ -0,0 +1,47 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Admin::InvoicesController < Jpi::V1::Admin::BaseResourceController
3
+
4
+ # GET /mnoe/jpi/v1/admin/invoices
5
+ def index
6
+ @invoices = MnoEnterprise::Invoice.all
7
+ end
8
+
9
+ # GET /mnoe/jpi/v1/admin/invoices/1
10
+ def show
11
+ @invoice = MnoEnterprise::Invoice.find(params[:id])
12
+ end
13
+
14
+ # GET /mnoe/jpi/v1/admin/invoices/current_billing_amount
15
+ def current_billing_amount
16
+ data = Rails.cache.fetch('tenant_admin/current_billing_amount', expires_in: ADMIN_CACHE_DURATION) do
17
+ billing = MnoEnterprise::Organization.all.map(&:current_billing).sum(Money.new(0))
18
+ {current_billing_amount: {amount: billing.amount, currency: billing.currency_as_string}}
19
+ end
20
+ render json: data
21
+ end
22
+
23
+ # GET /mnoe/jpi/v1/admin/invoices/last_invoicing_amount
24
+ def last_invoicing_amount
25
+ tenant_billing = MnoEnterprise::Tenant.get('tenant').last_customers_invoicing_amount
26
+ render json: {last_invoicing_amount: {amount: tenant_billing.amount, currency: tenant_billing.currency_as_string}}
27
+ end
28
+
29
+ # GET /mnoe/jpi/v1/admin/invoices/outstanding_amount
30
+ def outstanding_amount
31
+ tenant_billing = MnoEnterprise::Tenant.get('tenant').last_customers_outstanding_amount
32
+ render json: {outstanding_amount: {amount: tenant_billing.amount, currency: tenant_billing.currency_as_string}}
33
+ end
34
+
35
+ # GET /mnoe/jpi/v1/admin/invoices/last_portfolio_amount
36
+ def last_portfolio_amount
37
+ tenant_billing = MnoEnterprise::Tenant.get('tenant').last_portfolio_amount
38
+ render json: {last_portfolio_amount: {amount: tenant_billing.amount, currency: tenant_billing.currency_as_string}}
39
+ end
40
+
41
+ # GET /mnoe/jpi/v1/admin/invoices/last_commission_amount
42
+ def last_commission_amount
43
+ tenant_billing = MnoEnterprise::Tenant.get('tenant').last_commission_amount
44
+ render json: {last_commission_amount: {amount: tenant_billing.amount, currency: tenant_billing.currency_as_string}}
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Admin::OrganizationsController < Jpi::V1::Admin::BaseResourceController
3
+
4
+ # GET /mnoe/jpi/v1/admin/organizations
5
+ def index
6
+ @organizations = MnoEnterprise::Organization
7
+ @organizations = @organizations.limit(params[:limit]) if params[:limit]
8
+ @organizations = @organizations.skip(params[:offset]) if params[:offset]
9
+ @organizations = @organizations.order_by(params[:order_by]) if params[:order_by]
10
+ @organizations = @organizations.where(params[:where]) if params[:where]
11
+ @organizations = @organizations.all
12
+
13
+ response.headers['X-Total-Count'] = @organizations.metadata[:pagination][:count]
14
+ end
15
+
16
+ # GET /mnoe/jpi/v1/admin/organizations/1
17
+ def show
18
+ @organization = MnoEnterprise::Organization.find(params[:id])
19
+ @organization_active_apps = @organization.app_instances.select { |app| app.status == "running" }
20
+ end
21
+
22
+ # GET /mnoe/jpi/v1/admin/organizations/in_arrears
23
+ def in_arrears
24
+ @arrears = MnoEnterprise::ArrearsSituation.all
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Admin::TenantInvoicesController < Jpi::V1::Admin::BaseResourceController
3
+
4
+ # GET /mnoe/jpi/v1/admin/tenant_invoices
5
+ def index
6
+ @tenant_invoices = MnoEnterprise::TenantInvoice.all
7
+ end
8
+
9
+ # GET /mnoe/jpi/v1/admin/tenant_invoices/1
10
+ def show
11
+ @tenant_invoice = MnoEnterprise::TenantInvoice.find(params[:id])
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,63 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Admin::UsersController < Jpi::V1::Admin::BaseResourceController
3
+
4
+ # GET /mnoe/jpi/v1/admin/users
5
+ def index
6
+ @users = MnoEnterprise::User
7
+ @users = @users.limit(params[:limit]) if params[:limit]
8
+ @users = @users.skip(params[:offset]) if params[:offset]
9
+ @users = @users.order_by(params[:order_by]) if params[:order_by]
10
+ @users = @users.where(params[:where]) if params[:where]
11
+ @users = @users.all
12
+
13
+ response.headers['X-Total-Count'] = @users.metadata[:pagination][:count]
14
+ end
15
+
16
+ # GET /mnoe/jpi/v1/admin/users/1
17
+ def show
18
+ @user = MnoEnterprise::User.find(params[:id])
19
+ @user_organizations = @user.organizations
20
+ end
21
+
22
+ # POST /mnoe/jpi/v1/admin/users
23
+ def create
24
+ @user = MnoEnterprise::User.build(user_create_params)
25
+ @user.admin_role = params[:user][:admin_role].presence
26
+
27
+ if @user.save
28
+ render :show
29
+ else
30
+ render json: @user.errors, status: :bad_request
31
+ end
32
+ end
33
+
34
+ # PATCH /mnoe/jpi/v1/admin/users/:id
35
+ def update
36
+ @user = MnoEnterprise::User.find(params[:id])
37
+ @user.update(user_params)
38
+
39
+ render :show
40
+ end
41
+
42
+ # DELETE /mnoe/jpi/v1/admin/users/1
43
+ def destroy
44
+ user = MnoEnterprise::User.find(params[:id])
45
+ user.destroy
46
+
47
+ head :no_content
48
+ end
49
+
50
+ private
51
+
52
+ def user_params
53
+ params.require(:user).permit(:admin_role)
54
+ end
55
+
56
+ def user_create_params
57
+ params.require(:user).permit(:name, :surname, :email, :phone).merge(
58
+ password: 'Password1',
59
+ confirmed_at: Time.zone.now
60
+ )
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,24 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::AppInstancesController < Jpi::V1::BaseResourceController
3
+
4
+ # GET /mnoe/jpi/v1/organization/1/apps.json?timestamp=151452452345
5
+ def index
6
+ @app_instances = parent_organization.app_instances.select do |i|
7
+ i.active? && i.updated_at > Time.at(timestamp) && can?(:access,i)
8
+ end
9
+ end
10
+
11
+ # DELETE /mnoe/jpi/v1/app_instances/1
12
+ def destroy
13
+ app_instance = MnoEnterprise::AppInstance.find(params[:id])
14
+
15
+ if app_instance
16
+ authorize! :manage_app_instances, app_instance.owner
17
+ MnoEnterprise::EventLogger.info('app_destroy', current_user.id, "App destroyed", app_instance.name,app_instance)
18
+ app_instance.terminate
19
+ end
20
+
21
+ head :accepted
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,36 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::AppInstancesSyncController < Jpi::V1::BaseResourceController
3
+
4
+ # GET /mnoe/jpi/v1/organization/org-fbba/app_instances_sync
5
+ def index
6
+ authorize! :check_apps_sync, @parent_organization
7
+ # find method is overriden in the mnoe interface to call organization.check_sync_apps_progress
8
+ connectors = @parent_organization.app_instances_sync.find('anything').connectors
9
+ render json: results(connectors)
10
+ end
11
+
12
+ # POST /mnoe/jpi/v1/organizations/org-fbba/app_instances_sync
13
+ def create
14
+ authorize! :sync_apps, @parent_organization
15
+
16
+ # Some weird behaviour with Her and has_one. If app_instances_sync.find is called somewhere before the create,
17
+ # Her won't detect the organization_id as dirty and won't submit it.
18
+ sync = @parent_organization.app_instances_sync.build(mode: params[:mode])
19
+ sync.organization_id_will_change!
20
+ sync.save
21
+
22
+ connectors = sync.connectors
23
+
24
+ render json: results(connectors)
25
+ end
26
+
27
+ private
28
+ def results(connectors)
29
+ {
30
+ connectors: connectors,
31
+ is_syncing: connectors.any?{|c| c[:status]=="RUNNING" }
32
+ }
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,32 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::BaseResourceController < ApplicationController
3
+ before_filter :check_authorization
4
+
5
+ protected
6
+
7
+ def timestamp
8
+ @timestamp ||= (params[:timestamp] || 0).to_i
9
+ end
10
+
11
+ def parent_organization
12
+ @parent_organization ||= current_user.organizations.to_a.find do |o|
13
+ key = (params[:organization_id].to_i == 0) ? o.uid : o.id.to_s
14
+ key == params[:organization_id].to_s
15
+ end
16
+ end
17
+
18
+ # Check current user is logged in
19
+ # Check organization is valid if specified
20
+ def check_authorization
21
+ unless current_user
22
+ render nothing: true, status: :unauthorized
23
+ return false
24
+ end
25
+ if params[:organization_id] && !parent_organization
26
+ render nothing: true, status: :forbidden
27
+ return false
28
+ end
29
+ true
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::CurrentUsersController < ApplicationController
3
+ include MnoEnterprise::Concerns::Controllers::Jpi::V1::CurrentUsersController
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::DeletionRequestsController < Jpi::V1::BaseResourceController
3
+ include MnoEnterprise::Concerns::Controllers::Jpi::V1::DeletionRequestsController
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Impac::DashboardsController < Jpi::V1::BaseResourceController
3
+ include MnoEnterprise::Concerns::Controllers::Jpi::V1::Impac::DashboardsController
4
+ end
5
+ end
@@ -0,0 +1,80 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Impac::KpisController < Jpi::V1::BaseResourceController
3
+ respond_to :json
4
+
5
+ # POST /jpi/v1/impac/dashboards/:dashboard_id/kpis
6
+ def create
7
+ whitelist = %w(name endpoint source element_watched targets metadata extra_params)
8
+ attrs = (params[:kpi] || {}).select { |k,v| whitelist.include?(k.to_s) }
9
+
10
+ if dashboard
11
+ authorize! :manage_impac, dashboard
12
+
13
+ # TODO: Her will perform a request there which could be avoided
14
+ @kpi = dashboard.kpis.create(attrs)
15
+ if @kpi
16
+ render 'show'
17
+ else
18
+ render json: @kpi.errors, status: :bad_request
19
+ end
20
+ else
21
+ render json: { errors: "Dashboard id #{params[:dashboard_id]} doesn't exist" }, status: :not_found
22
+ end
23
+ end
24
+
25
+ # PUT /jpi/v1/impac/kpis/:id
26
+ def update
27
+ whitelist = %w(name element_watched targets extra_params)
28
+ attrs = (params[:kpi] || {}).select { |k,v| whitelist.include?(k.to_s) }.symbolize_keys
29
+
30
+ # Find kpi and assign
31
+ # Will call GET kpi route on Maestrano
32
+ @kpi = Impac::Kpi.find(params[:id])
33
+ authorize! :manage_impac, @kpi.dashboard
34
+ if @kpi
35
+ # metadata will be merged instead of replaced
36
+ p = HashWithIndifferentAccess.new(params[:kpi])
37
+ if p[:metadata] && p[:metadata].is_a?(Hash)
38
+ attrs[:metadata] = @kpi.settings.merge(p[:metadata])
39
+ end
40
+
41
+ if @kpi.update(attrs)
42
+ render 'show'
43
+ else
44
+ render json: @kpi.errors, status: :bad_request
45
+ end
46
+ else
47
+ render json: { errors: "Kpi id #{params[:id]} doesn't exist" }, status: :not_found
48
+ end
49
+ end
50
+
51
+ # DELETE /jpi/v1/impac/kpis/:id
52
+ def destroy
53
+ # Will call GET kpi route on Maestrano
54
+ @kpi = MnoEnterprise::Impac::Kpi.find(params[:id])
55
+
56
+ if @kpi
57
+ authorize! :manage_impac, @kpi.dashboard
58
+ if @kpi.destroy
59
+ head status: :ok
60
+ else
61
+ render json: { errors: 'Unable to delete this widget' }, status: :bad_request
62
+ end
63
+ else
64
+ render json: {errors: "Kpi id #{params[:id]} doesn't exist" }, status: :not_found
65
+ end
66
+ end
67
+
68
+
69
+ #=================================================
70
+ # Private methods
71
+ #=================================================
72
+ private
73
+
74
+ def dashboard
75
+ return false unless params[:dashboard_id]
76
+ @dashboard ||= MnoEnterprise::Impac::Dashboard.find(params[:dashboard_id])
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,63 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Impac::WidgetsController < Jpi::V1::BaseResourceController
3
+ respond_to :json
4
+
5
+ # POST /mnoe/jpi/v1/impac/dashboards/:id/widgets
6
+ # -> POST /api/mnoe/v1/dashboards/:id/widgets
7
+ def create
8
+ if widgets
9
+ if @widget = widgets.create(format_attrs(['widget_category','metadata']))
10
+ MnoEnterprise::EventLogger.info('widget_create', current_user.id, 'Widget Creation', nil, @widget)
11
+ @nocontent = true # no data fetch from Connec!
12
+ render 'show'
13
+ else
14
+ render json: @widget.errors, status: :bad_request
15
+ end
16
+ else
17
+ render json: { errors: "Dashboard id #{params[:id]} doesn't exist" }, status: :not_found
18
+ end
19
+ end
20
+
21
+ # PUT /mnoe/jpi/v1/impac/widgets/:id
22
+ def update
23
+ if widget.update(format_attrs(['name','metadata']))
24
+ @nocontent = !params['metadata']
25
+ render 'show'
26
+ else
27
+ render json: @widget.errors, status: :bad_request
28
+ end
29
+ end
30
+
31
+ # DELETE /mnoe/jpi/v1/impac/dashboards/1
32
+ def destroy
33
+ if widget.destroy
34
+ MnoEnterprise::EventLogger.info('widget_delete', current_user.id, 'Widget Deletion', nil, widget)
35
+ head status: :ok
36
+ else
37
+ render json: 'Unable to destroy widget', status: :bad_request
38
+ end
39
+ end
40
+
41
+
42
+ #=================================================
43
+ # Private methods
44
+ #=================================================
45
+ private
46
+
47
+ def widget
48
+ @widget ||= MnoEnterprise::Impac::Widget.find(params[:id])
49
+ end
50
+
51
+ def widgets
52
+ @widgets ||= MnoEnterprise::Impac::Dashboard.find(params[:dashboard_id]).widgets
53
+ end
54
+
55
+ def format_attrs(whitelist)
56
+ attrs = (params[:widget] || {}).select { |k,v| whitelist.include?(k.to_s) }
57
+ attrs['settings'] = widget ? widget.settings || {} : {}
58
+ attrs['settings'].merge!(attrs['metadata']) if attrs['metadata']
59
+ attrs.except!('metadata')
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,25 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::IndustryBundleController < ApplicationController
3
+
4
+ # GET /mnoe/jpi/v1/industry_bundles/app_descriptions/pr.json
5
+ # def app_descriptions
6
+ # @bundle = IndustryBundle.find_by_name(params[:bundle_name])
7
+ # if @bundle
8
+ # app_descriptions_array = @bundle.apps.map do |app|
9
+ # [app.name, { 'pictures' => app.pictures.map { |picture| {'thumb' => picture.thumb.to_s, 'url' => picture.url.to_s } } }.merge(
10
+ # @bundle.app_descriptions[app.name]) ]
11
+ # end
12
+ # @app_descriptions = Hash[*(app_descriptions_array.flatten)]
13
+ # @bundle_description = { appNames: @bundle.apps.map { |app| app.name }, appDescriptions: @app_descriptions }
14
+ # respond_to do |format|
15
+ # format.json { render json: @bundle_description, status: :ok }
16
+ # end
17
+ # else
18
+ # respond_to do |format|
19
+ # format.json { render json: "That bundle does not exist", status: :bad_request }
20
+ # end
21
+ # end
22
+ # end
23
+
24
+ end
25
+ end