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,69 @@
1
+ module MnoEnterprise::Concerns::Controllers::Jpi::V1::DeletionRequestsController
2
+ extend ActiveSupport::Concern
3
+
4
+ #==================================================================
5
+ # Included methods
6
+ #==================================================================
7
+ # 'included do' causes the included code to be evaluated in the
8
+ # context where it is included rather than being executed in the module's context
9
+ included do
10
+ respond_to :json
11
+ end
12
+
13
+ #==================================================================
14
+ # Class methods
15
+ #==================================================================
16
+ module ClassMethods
17
+ # def some_class_method
18
+ # 'some text'
19
+ # end
20
+ end
21
+
22
+ #==================================================================
23
+ # Instance methods
24
+ #==================================================================
25
+ # POST /deletion_request.json
26
+ def create
27
+ @deletion_request = MnoEnterprise::DeletionRequest.new(user_id: current_user.id)
28
+
29
+ if @deletion_request.save
30
+ # TODO: deliver_later => need to use user#id and deletion_request#id
31
+ MnoEnterprise::SystemNotificationMailer.deletion_request_instructions(current_user, @deletion_request).deliver_now
32
+ render json: @deletion_request, status: :created
33
+ else
34
+ render json: @deletion_request.errors, status: :unprocessable_entity
35
+ end
36
+ end
37
+
38
+ # PUT /deletion_request/1/resend.json
39
+ def resend
40
+ @deletion_request = current_user.deletion_request
41
+
42
+ # Check that the user has a deletion_request in progress
43
+ # and that the token provided (params[:id]) matches the
44
+ # deletion_request token
45
+ if @deletion_request.present? && @deletion_request.token == params[:id]
46
+ MnoEnterprise::SystemNotificationMailer.deletion_request_instructions(current_user, @deletion_request).deliver_now
47
+ render json: @deletion_request
48
+ else
49
+ head :bad_request
50
+ end
51
+ end
52
+
53
+ # DELETE /deletion_request/1.json
54
+ def destroy
55
+ @deletion_request = current_user.deletion_request
56
+
57
+ # Check that the user has a deletion_request in progress
58
+ # and that the token provided (params[:id]) matches the
59
+ # deletion_request token
60
+ if @deletion_request.present? && @deletion_request.token == params[:id]
61
+ # Work around
62
+ MnoEnterprise::DeletionRequest.find(@deletion_request.id).destroy
63
+
64
+ head :no_content
65
+ else
66
+ head :bad_request
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,76 @@
1
+ module MnoEnterprise::Concerns::Controllers::Jpi::V1::Impac::DashboardsController
2
+ extend ActiveSupport::Concern
3
+
4
+ #==================================================================
5
+ # Included methods
6
+ #==================================================================
7
+ # 'included do' causes the included code to be evaluated in the
8
+ # context where it is included rather than being executed in the module's context
9
+ included do
10
+ respond_to :json
11
+ end
12
+
13
+ #==================================================================
14
+ # Instance methods
15
+ #==================================================================
16
+ # GET /mnoe/jpi/v1/impac/dashboards
17
+ def index
18
+ dashboards
19
+ end
20
+
21
+ # GET /mnoe/jpi/v1/impac/dashboards/1
22
+ def show
23
+ dashboard
24
+ render json: { errors: "Dashboard id #{params[:id]} doesn't exist" }, status: :not_found unless @dashboard
25
+ end
26
+
27
+ # POST /mnoe/jpi/v1/impac/dashboards
28
+ # -> POST /api/mnoe/v1/users/282/dashboards
29
+ def create
30
+ if @dashboard = dashboards.create(dashboard_create_params)
31
+ # authorize! :create, @dashboard
32
+ MnoEnterprise::EventLogger.info('dashboard_create', current_user.id, 'Dashboard Creation', nil, @dashboard)
33
+ render 'show'
34
+ else
35
+ render json: @dashboard.errors, status: :bad_request
36
+ end
37
+ end
38
+
39
+ # PUT /mnoe/jpi/v1/impac/dashboards/1
40
+ def update
41
+ if dashboard.update(dashboard_update_params)
42
+ # dashboard.assign_attributes(attrs)
43
+ # authorize! :update, dashboard
44
+ render 'show'
45
+ else
46
+ render json: @dashboard.errors, status: :bad_request
47
+ end
48
+ end
49
+
50
+ # DELETE /mnoe/jpi/v1/impac/dashboards/1
51
+ def destroy
52
+ # authorize! :destroy, @dashboard
53
+ if dashboard.destroy
54
+ MnoEnterprise::EventLogger.info('dashboard_delete', current_user.id, 'Dashboard Deletion', nil, dashboard)
55
+ head status: :ok
56
+ else
57
+ render json: 'Unable to destroy dashboard', status: :bad_request
58
+ end
59
+ end
60
+
61
+ protected
62
+
63
+ def dashboard
64
+ @dashboard ||= current_user.dashboards.to_a.find { |d| d.id.to_s == params[:id].to_s }
65
+ end
66
+
67
+ def dashboards
68
+ @dashboards ||= current_user.dashboards
69
+ end
70
+
71
+ def dashboard_params
72
+ params.require(:dashboard).permit(:name, :currency, {widgets_order: []}, {organization_ids: []})
73
+ end
74
+ alias :dashboard_update_params :dashboard_params
75
+ alias :dashboard_create_params :dashboard_params
76
+ end
@@ -0,0 +1,180 @@
1
+ module MnoEnterprise::Concerns::Controllers::Jpi::V1::OrganizationsController
2
+ extend ActiveSupport::Concern
3
+
4
+ #==================================================================
5
+ # Included methods
6
+ #==================================================================
7
+ # 'included do' causes the included code to be evaluated in the
8
+ # context where it is included rather than being executed in the module's context
9
+ included do
10
+ respond_to :json
11
+ end
12
+
13
+ #==================================================================
14
+ # Instance methods
15
+ #==================================================================
16
+ # GET /mnoe/jpi/v1/organizations
17
+ def index
18
+ @organizations ||= current_user.organizations
19
+ end
20
+
21
+ # GET /mnoe/jpi/v1/organizations/1
22
+ def show
23
+ organization # load organization
24
+ end
25
+
26
+ # PUT /mnoe/jpi/v1/organizations/:id
27
+ def update
28
+ # Update and Authorize
29
+ organization.assign_attributes(organization_update_params)
30
+ authorize! :update, organization
31
+
32
+ # Save
33
+ if organization.save
34
+ render 'show_reduced'
35
+ else
36
+ render json: organization.errors, status: :bad_request
37
+ end
38
+ end
39
+
40
+ # DELETE /mnoe/jpi/v1/organizations/1
41
+ def destroy
42
+ if organization
43
+ authorize! :destroy, organization
44
+ organization.destroy
45
+ end
46
+
47
+ head :no_content
48
+ end
49
+
50
+ # POST /mnoe/jpi/v1/organizations
51
+ def create
52
+ # Create new organization
53
+ @organization = MnoEnterprise::Organization.create(organization_update_params)
54
+
55
+ # Add the current user as Super Admin
56
+ @organization.add_user(current_user,'Super Admin')
57
+
58
+ # Bust cache
59
+ current_user.refresh_user_cache
60
+
61
+ render 'show'
62
+ end
63
+
64
+ # PUT /mnoe/jpi/v1/organizations/:id/charge
65
+ # def charge
66
+ # authorize! :manage_billing, organization
67
+ # payment = organization.charge
68
+ # s = ''
69
+ # if payment
70
+ # if payment.success?
71
+ # s = 'success'
72
+ # else
73
+ # s = 'fail'
74
+ # end
75
+ # else
76
+ # s = 'error'
77
+ # end
78
+ #
79
+ # render json: { status: s, data: payment }
80
+ # end
81
+
82
+ # PUT /mnoe/jpi/v1/organizations/:id/update_billing
83
+ def update_billing
84
+ whitelist = ['title','first_name','last_name','number','month','year','country','verification_value','billing_address','billing_city','billing_postcode', 'billing_country']
85
+ attributes = params[:credit_card].select { |k,v| whitelist.include?(k.to_s) }
86
+ authorize! :manage_billing, organization
87
+
88
+ # Upsert
89
+ if @credit_card = organization.credit_card
90
+ @credit_card.assign_attributes(attributes.merge(organization_id: @credit_card.organization_id))
91
+ @credit_card.save
92
+ end
93
+
94
+ if @credit_card.errors.empty?
95
+ render 'credit_card'
96
+ else
97
+ render json: @credit_card.errors, status: :bad_request
98
+ end
99
+ end
100
+
101
+ # TODO: specs
102
+ # PUT /mnoe/jpi/v1/organizations/:id/invite_members
103
+ def invite_members
104
+ # Filter
105
+ whitelist = ['email','role','team_id']
106
+ attributes = []
107
+ params[:invites].each do |invite|
108
+ attributes << invite.select { |k,v| whitelist.include?(k.to_s) }
109
+ end
110
+
111
+ # Authorize and create
112
+ authorize! :invite_member, organization
113
+ attributes.each do |invite|
114
+ @org_invite = organization.org_invites.create(
115
+ user_email: invite['email'],
116
+ user_role: invite['role'],
117
+ team_id: invite['team_id'],
118
+ referrer_id: current_user.id
119
+ )
120
+
121
+ MnoEnterprise::SystemNotificationMailer.organization_invite(@org_invite).deliver_now
122
+ end
123
+
124
+ # Reload users
125
+ organization.users.reload
126
+
127
+ render 'members'
128
+ end
129
+
130
+ # TODO: specs
131
+ # PUT /mnoe/jpi/v1/organizations/:id/update_member
132
+ def update_member
133
+ attributes = params[:member]
134
+ @member = organization.users.where(email: attributes[:email]).first
135
+ @member ||= organization.org_invites.active.where(user_email: attributes[:email]).first
136
+
137
+ # Authorize and update
138
+ authorize! :invite_member, organization
139
+ if @member.is_a?(MnoEnterprise::User)
140
+ organization.users.update(id: @member.id, role: attributes[:role])
141
+ elsif @member.is_a?(MnoEnterprise::OrgInvite)
142
+ @member.user_role = attributes[:role]
143
+ @member.save
144
+ end
145
+
146
+ render 'members'
147
+ end
148
+
149
+ # TODO: specs
150
+ # PUT /mnoe/jpi/v1/organizations/:id/remove_member
151
+ def remove_member
152
+ attributes = params[:member]
153
+ @member = organization.users.where(email: attributes[:email]).first
154
+ @member ||= organization.org_invites.active.where(user_email: attributes[:email]).first
155
+
156
+ # Authorize and update
157
+ authorize! :invite_member, organization
158
+ if @member.is_a?(MnoEnterprise::User)
159
+ organization.remove_user(@member)
160
+ elsif @member.is_a?(MnoEnterprise::OrgInvite)
161
+ @member.cancel!
162
+ end
163
+
164
+ render 'members'
165
+ end
166
+
167
+ protected
168
+ def organization
169
+ @organization ||= current_user.organizations.to_a.find{ |o| o.id.to_s == params[:id].to_s }
170
+ end
171
+
172
+ def organization_permitted_update_params
173
+ [:name, :soa_enabled, :industry, :size]
174
+ end
175
+
176
+ def organization_update_params
177
+ params.fetch(:organization, {}).permit(*organization_permitted_update_params)
178
+ end
179
+
180
+ end
@@ -0,0 +1,44 @@
1
+ module MnoEnterprise::Concerns::Controllers::OrgInvitesController
2
+ extend ActiveSupport::Concern
3
+
4
+ #==================================================================
5
+ # Included methods
6
+ #==================================================================
7
+ # 'included do' causes the included code to be evaluated in the
8
+ # context where it is included rather than being executed in the module's context
9
+ included do
10
+ before_filter :authenticate_user!
11
+ end
12
+
13
+ #==================================================================
14
+ # Class methods
15
+ #==================================================================
16
+ module ClassMethods
17
+ # def some_class_method
18
+ # 'some text'
19
+ # end
20
+ end
21
+
22
+ #==================================================================
23
+ # Instance methods
24
+ #==================================================================
25
+ # GET /org_invites/1?token=HJuiofjpa45A73255a74F534FDfds
26
+ # TODO: improve integration with new frontends
27
+ def show
28
+ @current_user = current_user
29
+ @org_invite = MnoEnterprise::OrgInvite.active.where(id: params[:id], token: params[:token]).first
30
+ redirect_path = mnoe_home_path
31
+
32
+ if @org_invite && !@org_invite.expired? && @org_invite.accept!(current_user)
33
+ redirect_path += "#/?dhbRefId=#{ @org_invite.organization.id}"
34
+ message = { notice: "You are now part of #{@org_invite.organization.name}" }
35
+ yield(:success, @org_invite) if block_given?
36
+ elsif @org_invite && @org_invite.expired?
37
+ message = { alert: "It looks like this invite has expired. Please ask your company administrator to resend the invite." }
38
+ else
39
+ message = { alert: "Unfortunately, this invite does not seem to be valid." }
40
+ end
41
+
42
+ redirect_to redirect_path, message
43
+ end
44
+ end
@@ -0,0 +1,78 @@
1
+ module MnoEnterprise::Concerns::Controllers::PagesController
2
+ extend ActiveSupport::Concern
3
+
4
+ #==================================================================
5
+ # Included methods
6
+ #==================================================================
7
+ # 'included do' causes the included code to be evaluated in the
8
+ # context where it is included rather than being executed in the module's context
9
+ included do
10
+ before_filter :authenticate_user!, only: [:launch]
11
+ before_filter :redirect_to_lounge_if_unconfirmed, only: [:launch]
12
+ end
13
+
14
+ #==================================================================
15
+ # Instance methods
16
+ #==================================================================
17
+ # GET /launch/:id
18
+ # Redirect to Mno Enterprise app launcher
19
+ # Launching an app (from dashboard) should redirect to this action
20
+ # The true goal of this action is to hide maestrano in the link behind
21
+ # any dashboard app picture
22
+ #
23
+ # TODO: Access + existence checks could be added in the future. This is not
24
+ # mandatory as Mno Enterprise will do it anyway
25
+ def launch
26
+ app = MnoEnterprise::AppInstance.find_by(uid: params[:id])
27
+ MnoEnterprise::EventLogger.info('app_launch', current_user.id, "App launched", app.name, app)
28
+ redirect_to MnoEnterprise.router.launch_url(params[:id], wtk: MnoEnterprise.jwt(user_id: current_user.uid))
29
+ end
30
+
31
+ # GET /loading/:id
32
+ # Loading lounge - wait for an app to be online
33
+ def loading
34
+ @app_instance = MnoEnterprise::AppInstance.where(uid: params[:id]).reload.first
35
+
36
+ respond_to do |format|
37
+ format.html { @app_instance_hash = app_instance_hash(@app_instance) }
38
+ format.json { render json: app_instance_hash(@app_instance) }
39
+ end
40
+ end
41
+
42
+ # GET /app_access_unauthorized
43
+ def app_access_unauthorized
44
+ @meta[:title] = "Unauthorized"
45
+ @meta[:description] = "Application access not granted"
46
+ end
47
+
48
+ def billing_details_required
49
+ @meta[:title] = "Billing Details Required"
50
+ @meta[:description] = "Billing details have not been provided"
51
+ end
52
+
53
+ # GET /app_logout
54
+ def app_logout
55
+ @meta[:title] = "Logged out"
56
+ @meta[:description] = "Logged out from application"
57
+ end
58
+
59
+ private
60
+ def app_instance_hash(app_instance)
61
+ return {} unless app_instance
62
+ {
63
+ id: app_instance.id,
64
+ uid: app_instance.uid,
65
+ name: app_instance.name,
66
+ status: app_instance.status,
67
+ durations: app_instance.durations,
68
+ started_at: app_instance.started_at,
69
+ stopped_at: app_instance.stopped_at,
70
+ created_at: app_instance.created_at,
71
+ server_time: Time.now.utc,
72
+ is_online: app_instance.online?,
73
+ errors: app_instance.errors ? app_instance.errors.full_messages : [],
74
+ logo: app_instance.app.logo
75
+ }
76
+ end
77
+
78
+ end