mno_enterprise-nimbus 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/APACHE-LICENSE-2.0 +201 -0
- data/README.md +28 -0
- data/Rakefile +27 -0
- data/app/assets/config/mno_enterprise_nimbus_manifest.js +1 -0
- data/app/assets/stylesheets/mno_enterprise/nimbus/application.css +15 -0
- data/app/controllers/mno_enterprise/nimbus/application_controller.rb +7 -0
- data/app/controllers/mno_enterprise/nimbus/v4/app_instances_controller.rb +36 -0
- data/app/controllers/mno_enterprise/nimbus/v4/apps_controller.rb +22 -0
- data/app/controllers/mno_enterprise/nimbus/v4/base_controller.rb +281 -0
- data/app/controllers/mno_enterprise/nimbus/v4/events_controller.rb +52 -0
- data/app/controllers/mno_enterprise/nimbus/v4/organizations_controller.rb +37 -0
- data/app/controllers/mno_enterprise/nimbus/v4/resource_instances_controller.rb +134 -0
- data/app/controllers/mno_enterprise/nimbus/v4/services_controller.rb +20 -0
- data/app/controllers/mno_enterprise/nimbus/v4/statistics_controller.rb +40 -0
- data/app/controllers/mno_enterprise/nimbus/v4/users_controller.rb +83 -0
- data/app/helpers/mno_enterprise/nimbus/application_helper.rb +6 -0
- data/app/jobs/mno_enterprise/nimbus/application_job.rb +6 -0
- data/app/mailers/mno_enterprise/nimbus/application_mailer.rb +8 -0
- data/app/models/mno_enterprise/nimbus/application_record.rb +7 -0
- data/app/views/layouts/mno_enterprise/nimbus/application.html.erb +14 -0
- data/app/views/mno_enterprise/nimbus/v4/services/schema.json +970 -0
- data/app/views/mno_enterprise/nimbus/v4/services/schema_dev.json +970 -0
- data/app/views/mno_enterprise/nimbus/v4/services/schema_uat.json +970 -0
- data/config/routes.rb +17 -0
- data/lib/mno_enterprise/nimbus/engine.rb +7 -0
- data/lib/mno_enterprise/nimbus/version.rb +5 -0
- data/lib/mno_enterprise/nimbus.rb +14 -0
- data/lib/tasks/mno_enterprise/nimbus_tasks.rake +4 -0
- metadata +184 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
module MnoEnterprise
|
2
|
+
class Nimbus::V4::OrganizationsController < Nimbus::V4::BaseController
|
3
|
+
|
4
|
+
#===========================================================
|
5
|
+
# Private
|
6
|
+
#===========================================================
|
7
|
+
private
|
8
|
+
def resource_klass
|
9
|
+
MnoEnterprise::Organization
|
10
|
+
end
|
11
|
+
|
12
|
+
# Retrieve all groups
|
13
|
+
def get_resources
|
14
|
+
MnoEnterprise::Organization.all
|
15
|
+
end
|
16
|
+
|
17
|
+
# Retrieve a group via id
|
18
|
+
def get_resource(uid)
|
19
|
+
MnoEnterprise::Organization.find_by({uid: uid})
|
20
|
+
end
|
21
|
+
|
22
|
+
# Define the list of parameters for creating a resource
|
23
|
+
def params_create_whitelist
|
24
|
+
[:name]
|
25
|
+
end
|
26
|
+
|
27
|
+
def after_create_resource(resource)
|
28
|
+
resource.free_trial_end_at = 15.years.from_now
|
29
|
+
resource.save
|
30
|
+
end
|
31
|
+
|
32
|
+
# Hash representation of the resource
|
33
|
+
def hash_for(resource)
|
34
|
+
hash_for_organization resource
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
module MnoEnterprise
|
2
|
+
class Nimbus::V4::ResourceInstancesController < Nimbus::V4::BaseController
|
3
|
+
|
4
|
+
# POST /api/nimbus/v4/resource_instances
|
5
|
+
# Create new resource and return representation
|
6
|
+
def create
|
7
|
+
|
8
|
+
unless attributes = params[:data]
|
9
|
+
render_error VALIDATION_ERROR, 'Body does not contain the field: data'
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
|
13
|
+
unless attributes['organization']
|
14
|
+
render_error VALIDATION_ERROR, 'Data does not contains the fields: organization'
|
15
|
+
return false
|
16
|
+
end
|
17
|
+
users = attributes['users']
|
18
|
+
unless users && users.any?
|
19
|
+
render_error VALIDATION_ERROR, 'Resource should contain at least one user'
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
|
23
|
+
users_validation_errors = []
|
24
|
+
users.each do |hash|
|
25
|
+
email = hash[:email]
|
26
|
+
user = MnoEnterprise::User.find_by(email: email)
|
27
|
+
users_validation_errors << "User [#{user.uid}] already exist with email: #{email}" if user
|
28
|
+
end
|
29
|
+
if users_validation_errors.any?
|
30
|
+
render_errors VALIDATION_ERROR, users_validation_errors
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
# Create organization
|
34
|
+
organization = provision_organization(attributes['organization'])
|
35
|
+
if organization.errors.any?
|
36
|
+
render_errors VALIDATION_ERROR, organization.errors
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
|
40
|
+
# Create users - handle single object and array
|
41
|
+
attributes['users'].each_with_index do |hash, index|
|
42
|
+
hash = hash.merge('organization' => organization)
|
43
|
+
# Create the first user as a Super Admin
|
44
|
+
hash['role'] = 'Super Admin' if index == 0
|
45
|
+
provision_user(hash)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Create app_instances - handle single object and array
|
49
|
+
[attributes['app_instances']].flatten.compact.each do |hash|
|
50
|
+
organization.app_instances.create hash
|
51
|
+
end
|
52
|
+
|
53
|
+
after_create_resource(organization)
|
54
|
+
|
55
|
+
render_response(organization.reload, 201)
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def resource_klass
|
61
|
+
Organization
|
62
|
+
end
|
63
|
+
|
64
|
+
# Retrieve all organizations
|
65
|
+
def get_resources
|
66
|
+
MnoEnterprise::Organization.all
|
67
|
+
end
|
68
|
+
|
69
|
+
# Retrieve an organization via uid
|
70
|
+
def get_resource(id)
|
71
|
+
MnoEnterprise::Organization.find_by({uid: id})
|
72
|
+
end
|
73
|
+
|
74
|
+
# Creation attributes for users
|
75
|
+
def user_params_create_whitelist
|
76
|
+
[:name, :surname, :email, :role, :organization]
|
77
|
+
end
|
78
|
+
|
79
|
+
# Creation attributes for organizations
|
80
|
+
def organization_params_create_whitelist
|
81
|
+
[:name]
|
82
|
+
end
|
83
|
+
|
84
|
+
def provision_organization(attributes)
|
85
|
+
attrs = attributes.select { |k, v| organization_params_create_whitelist.include?(k.to_sym) }
|
86
|
+
|
87
|
+
res = MnoEnterprise::Organization.new(attrs)
|
88
|
+
res.free_trial_end_at = 15.years.from_now
|
89
|
+
|
90
|
+
res.save
|
91
|
+
res
|
92
|
+
end
|
93
|
+
|
94
|
+
def provision_user(attributes)
|
95
|
+
attrs = attributes.select { |k, v| user_params_create_whitelist.include?(k.to_sym) }
|
96
|
+
|
97
|
+
res = MnoEnterprise::User.new(attrs.reject { |k, v| [:role, :organization].include?(k.to_sym) })
|
98
|
+
res.password = Devise.friendly_token.first(15)
|
99
|
+
res.save
|
100
|
+
|
101
|
+
# Update free trial after creation
|
102
|
+
res.free_trial_end_at = 15.years.from_now
|
103
|
+
res.save
|
104
|
+
|
105
|
+
# Add user to organization
|
106
|
+
if attrs['organization']
|
107
|
+
args = [res, attrs['role']].compact
|
108
|
+
attrs['organization'].add_user(*args)
|
109
|
+
end
|
110
|
+
res
|
111
|
+
end
|
112
|
+
|
113
|
+
def after_create_resource(resource)
|
114
|
+
resource.free_trial_end_at = 15.years.from_now
|
115
|
+
resource.save
|
116
|
+
end
|
117
|
+
|
118
|
+
# Hash representation of the resource
|
119
|
+
def hash_for(resource)
|
120
|
+
resp = {id: resource.uid}
|
121
|
+
# Add organization
|
122
|
+
resp[:organization] = hash_for_organization resource
|
123
|
+
# Add app_instances
|
124
|
+
resp[:app_instances] = resource.app_instances.map do |r|
|
125
|
+
hash_for_app_instance r
|
126
|
+
end
|
127
|
+
# Add users
|
128
|
+
resp[:users] = resource.users.map do |r|
|
129
|
+
hash_for_user r
|
130
|
+
end
|
131
|
+
resp
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MnoEnterprise
|
2
|
+
class Nimbus::V4::ServicesController < Nimbus::V4::BaseController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
# GET nimbus/v4/service/schema
|
6
|
+
# Return the API
|
7
|
+
def schema
|
8
|
+
render 'schema_dev', formats: [:json] if Rails.env.test? || Rails.env.development?
|
9
|
+
render 'schema_uat', formats: [:json] if Rails.env.uat?
|
10
|
+
render 'schema', formats: [:json] if Rails.env.production?
|
11
|
+
end
|
12
|
+
|
13
|
+
# GET nimbus/v4/service/status
|
14
|
+
# Return service status
|
15
|
+
def status
|
16
|
+
@start_time = Time.now
|
17
|
+
render json: {data: {available: true, response_time: ((Time.now - @start_time)*1000).round}}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module MnoEnterprise
|
2
|
+
class Nimbus::V4::StatisticsController < Nimbus::V4::BaseController
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def resource_klass
|
7
|
+
Object
|
8
|
+
end
|
9
|
+
|
10
|
+
# Retrieve all resources
|
11
|
+
def get_resources
|
12
|
+
[get_resource(1)]
|
13
|
+
end
|
14
|
+
|
15
|
+
# Retrieve a resource via uid
|
16
|
+
def get_resource(id)
|
17
|
+
{
|
18
|
+
id: 'current-billing',
|
19
|
+
title: "Current Billing",
|
20
|
+
type: "value",
|
21
|
+
value: 299.90
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
# Provision a new resource for this Organization
|
26
|
+
def build_resource(attributes)
|
27
|
+
false
|
28
|
+
end
|
29
|
+
|
30
|
+
# Terminate
|
31
|
+
def destroy_resource(resource)
|
32
|
+
return false
|
33
|
+
end
|
34
|
+
|
35
|
+
# Hash representation of the resource
|
36
|
+
def hash_for(resource)
|
37
|
+
resource
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module MnoEnterprise
|
2
|
+
class Nimbus::V4::UsersController < Nimbus::V4::BaseController
|
3
|
+
|
4
|
+
# POST /nimbus/v4/organization/:organization_id/users
|
5
|
+
# Create new resource and return representation
|
6
|
+
# --
|
7
|
+
# Override parent
|
8
|
+
# Attempt to fetch user via email before creation
|
9
|
+
def create
|
10
|
+
unless params[:data]
|
11
|
+
render_error VALIDATION_ERROR, 'Body does not contain the field: data'
|
12
|
+
return false
|
13
|
+
end
|
14
|
+
attributes = params[:data].select { |k, v| params_create_whitelist.include?(k.to_sym) }
|
15
|
+
email = attributes[:email]
|
16
|
+
user = MnoEnterprise::User.find_by(email: email)
|
17
|
+
if user
|
18
|
+
render_error VALIDATION_ERROR, "User [#{user.uid}] already exist with email: #{email}"
|
19
|
+
return
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
@resource ||= build_resource(attributes)
|
24
|
+
|
25
|
+
# Save resource or set error code and status
|
26
|
+
unless @resource.save
|
27
|
+
render_error VALIDATION_ERROR, @resource.errors
|
28
|
+
return
|
29
|
+
end
|
30
|
+
|
31
|
+
after_create_resource(@resource, attributes)
|
32
|
+
|
33
|
+
render_response(@resource)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def resource_klass
|
38
|
+
MnoEnterprise::User
|
39
|
+
end
|
40
|
+
|
41
|
+
# Define which attributes can be edited during creation
|
42
|
+
def params_create_whitelist
|
43
|
+
[:name, :surname, :email, :role]
|
44
|
+
end
|
45
|
+
|
46
|
+
# Retrieve all user
|
47
|
+
def get_resources
|
48
|
+
parent.users
|
49
|
+
end
|
50
|
+
|
51
|
+
# Retrieve a user via uid
|
52
|
+
def get_resource(uid)
|
53
|
+
MnoEnterprise::User.find_by(uid: uid)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Build a resource for creation
|
57
|
+
def build_resource(attributes)
|
58
|
+
attrs = attributes.select { |k, v| params_create_whitelist.include?(k.to_sym) }
|
59
|
+
res = MnoEnterprise::User.new attrs
|
60
|
+
res.password = Devise.friendly_token.first(15)
|
61
|
+
res
|
62
|
+
end
|
63
|
+
|
64
|
+
# Update a resource
|
65
|
+
def update_resource(resource, attributes)
|
66
|
+
super(resource, attributes.reject { |k, v| k.to_sym == :role })
|
67
|
+
end
|
68
|
+
|
69
|
+
# Add user to the parent once created
|
70
|
+
def after_create_resource(resource, opts = {})
|
71
|
+
resource.free_trial_end_at = 15.years.from_now
|
72
|
+
# Add user to organization
|
73
|
+
parent.add_user resource
|
74
|
+
resource.save
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# Resource JSON view
|
79
|
+
def hash_for(resource)
|
80
|
+
hash_for_user resource
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Mno enterprise nimbus</title>
|
5
|
+
<%= stylesheet_link_tag "mno_enterprise/nimbus/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "mno_enterprise/nimbus/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|