cnfs-iam 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +75 -0
  4. data/Rakefile +24 -0
  5. data/app/controllers/concerns/is_tenant_scoped.rb +21 -0
  6. data/app/controllers/credentials_controller.rb +23 -0
  7. data/app/controllers/groups_controller.rb +4 -0
  8. data/app/controllers/iam/application_controller.rb +6 -0
  9. data/app/controllers/iam/confirmations_controller.rb +51 -0
  10. data/app/controllers/iam/passwords_controller.rb +56 -0
  11. data/app/controllers/iam/sessions_controller.rb +21 -0
  12. data/app/controllers/policies_controller.rb +4 -0
  13. data/app/controllers/public_keys_controller.rb +4 -0
  14. data/app/controllers/roots/sessions_controller.rb +16 -0
  15. data/app/controllers/roots_controller.rb +4 -0
  16. data/app/controllers/users/confirmations_controller.rb +21 -0
  17. data/app/controllers/users/passwords_controller.rb +25 -0
  18. data/app/controllers/users/sessions_controller.rb +19 -0
  19. data/app/controllers/users_controller.rb +17 -0
  20. data/app/mailers/account_mailer.rb +74 -0
  21. data/app/models/action.rb +6 -0
  22. data/app/models/credential.rb +47 -0
  23. data/app/models/group.rb +15 -0
  24. data/app/models/group_policy_join.rb +25 -0
  25. data/app/models/iam/application_record.rb +7 -0
  26. data/app/models/policy.rb +10 -0
  27. data/app/models/policy_action.rb +6 -0
  28. data/app/models/public_key.rb +17 -0
  29. data/app/models/role.rb +11 -0
  30. data/app/models/role_policy_join.rb +6 -0
  31. data/app/models/root.rb +26 -0
  32. data/app/models/root_credential.rb +7 -0
  33. data/app/models/tenant.rb +68 -0
  34. data/app/models/user.rb +69 -0
  35. data/app/models/user_credential.rb +8 -0
  36. data/app/models/user_group.rb +25 -0
  37. data/app/models/user_policy_join.rb +21 -0
  38. data/app/models/user_role.rb +6 -0
  39. data/app/operations/blackcomb_user_create.rb +49 -0
  40. data/app/operations/user_create.rb +53 -0
  41. data/app/policies/action_policy.rb +3 -0
  42. data/app/policies/credential_policy.rb +3 -0
  43. data/app/policies/group_policy.rb +3 -0
  44. data/app/policies/iam/application_policy.rb +6 -0
  45. data/app/policies/policy_policy.rb +3 -0
  46. data/app/policies/public_key_policy.rb +4 -0
  47. data/app/policies/root_policy.rb +3 -0
  48. data/app/policies/tenant_policy.rb +5 -0
  49. data/app/policies/user_policy.rb +33 -0
  50. data/app/resources/action_resource.rb +16 -0
  51. data/app/resources/credential_resource.rb +13 -0
  52. data/app/resources/group_resource.rb +8 -0
  53. data/app/resources/iam/application_resource.rb +7 -0
  54. data/app/resources/policy_resource.rb +9 -0
  55. data/app/resources/public_key_resource.rb +6 -0
  56. data/app/resources/root_resource.rb +14 -0
  57. data/app/resources/tenant_resource.rb +21 -0
  58. data/app/resources/user_resource.rb +25 -0
  59. data/app/views/layouts/mailer.html.erb +4 -0
  60. data/app/views/user_mailer/confirmation_instructions.html.erb +5 -0
  61. data/app/views/user_mailer/email_changed.html.erb +7 -0
  62. data/app/views/user_mailer/password_change.html.erb +3 -0
  63. data/app/views/user_mailer/reset_password_instructions.html.erb +106 -0
  64. data/app/views/user_mailer/team_welcome.html.erb +107 -0
  65. data/app/views/user_mailer/unlock_instructions.html.erb +7 -0
  66. data/config/environment.rb +0 -0
  67. data/config/initializers/devise.rb +311 -0
  68. data/config/locales/devise.en.yml +65 -0
  69. data/config/routes.rb +17 -0
  70. data/config/sidekiq.yml +5 -0
  71. data/config/spring.rb +3 -0
  72. data/db/migrate/20190101000001_create_policies.rb +11 -0
  73. data/db/migrate/20190101000002_create_actions.rb +13 -0
  74. data/db/migrate/20190101000003_create_policy_actions.rb +13 -0
  75. data/db/migrate/20190215214352_create_roots.rb +43 -0
  76. data/db/migrate/20190215214353_update_tenants.rb +10 -0
  77. data/db/migrate/20190215214355_create_credentials.rb +14 -0
  78. data/db/migrate/20190215214407_create_users.rb +50 -0
  79. data/db/migrate/20190215214409_create_user_credentials.rb +12 -0
  80. data/db/migrate/20190215214410_create_user_policy_joins.rb +12 -0
  81. data/db/migrate/20190215214411_create_groups.rb +11 -0
  82. data/db/migrate/20190215214412_create_user_groups.rb +12 -0
  83. data/db/migrate/20190215214413_create_group_policy_joins.rb +12 -0
  84. data/db/migrate/20190215214415_create_roles.rb +11 -0
  85. data/db/migrate/20190215214416_create_user_roles.rb +12 -0
  86. data/db/migrate/20190215214421_create_role_policy_joins.rb +12 -0
  87. data/db/migrate/20190924091536_add_display_properties_to_tenants.rb +5 -0
  88. data/db/migrate/20191021220135_create_public_keys.rb +10 -0
  89. data/db/migrate/20191120083154_add_confirmable_email_to_user.rb +9 -0
  90. data/db/seeds/development/tenants.seeds.rb +41 -0
  91. data/db/seeds/development/users.seeds.rb +67 -0
  92. data/lib/ros/api_token_strategy.rb +24 -0
  93. data/lib/ros/iam.rb +18 -0
  94. data/lib/ros/iam/console.rb +13 -0
  95. data/lib/ros/iam/engine.rb +51 -0
  96. data/lib/ros/iam/version.rb +7 -0
  97. data/lib/tasks/ros/iam_tasks.rake +51 -0
  98. metadata +209 -0
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcrypt'
4
+ require 'devise'
5
+ # require 'devise/jwt'
6
+
7
+ require 'ros/core'
8
+ require_relative 'api_token_strategy'
9
+ require 'ros/iam/engine'
10
+
11
+ module Ros
12
+ class << self
13
+ def excluded_models; %w[Tenant Root] end
14
+ end
15
+ module Iam
16
+ # Your code goes here...
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Console
5
+ module Methods
6
+ # class << self
7
+ # def models
8
+ # %w(user group credential root tenant)
9
+ # end
10
+ # end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Iam
5
+ class Engine < ::Rails::Engine
6
+ config.generators.api_only = true
7
+ config.generators do |g|
8
+ g.test_framework :rspec, fixture: true
9
+ g.fixture_replacement :factory_bot, dir: 'spec/factories'
10
+ end
11
+
12
+ initializer 'service.set_platform_config', before: 'ros_core.load_platform_config' do |_app|
13
+ settings_path = root.join('config/settings.yml')
14
+ Settings.prepend_source!(settings_path) if File.exist? settings_path
15
+ name = self.class.module_parent.name.demodulize.underscore
16
+ Settings.prepend_source!(service: { name: name, policy_name: name.capitalize })
17
+ end
18
+
19
+ # Adds this gem's db/migrations path to the enclosing application's migraations_path array
20
+ # if the gem has been included in an application, i.e. it is not running in the dummy app
21
+ # https://github.com/rails/rails/issues/22261
22
+ initializer 'service.configure_migrations' do |app|
23
+ unless Rails.root.to_s.end_with?('spec/dummy')
24
+ config.paths['db/migrate'].expanded.each do |expanded_path|
25
+ app.config.paths['db/migrate'] << expanded_path
26
+ ActiveRecord::Migrator.migrations_paths << expanded_path
27
+ end
28
+ end
29
+ end
30
+
31
+ initializer 'service.set_factory_paths', before: 'ros_core.set_factory_paths' do
32
+ if defined?(FactoryBot) && !Rails.env.production?
33
+ FactoryBot.definition_file_paths.prepend(Pathname.new(__FILE__).join('../../../../spec/factories'))
34
+ end
35
+ end
36
+
37
+ initializer 'service.configure_event_logging' do |_app|
38
+ if Settings.dig(:event_logging, :enabled)
39
+ Settings.event_logging.config.schemas_path = root.join(Settings.event_logging.config.schemas_path)
40
+ end
41
+ end
42
+
43
+ # initializer 'service.initialize_infra_services', after: 'ros_core.initialize_infra_services' do |app|
44
+ # end
45
+
46
+ initializer 'service.configure_console_methods', before: 'ros_core.configure_console_methods' do |_app|
47
+ require_relative 'console' if Rails.env.development? && !Rails.const_defined?('Server') && File.exist?('console.rb')
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Iam
5
+ VERSION = '0.0.1.alpha'
6
+ end
7
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :ros do
4
+ namespace :iam do
5
+ namespace :db do
6
+ desc 'Invoke IAM seeds'
7
+ task :seed do
8
+ seedbank_root = Seedbank.seeds_root
9
+ Seedbank.seeds_root = File.expand_path('db/seeds', Ros::Iam::Engine.root)
10
+ Seedbank.load_tasks
11
+ Rake::Task['db:seed'].invoke
12
+ Seedbank.seeds_root = seedbank_root
13
+ end
14
+ end
15
+
16
+ namespace :apidoc do
17
+ desc 'Publish docs to Postman'
18
+ task :publish do
19
+ # Process each credentials file previously generated by db:seed
20
+ dir = "#{Ros.host_tmp_dir}/credentials/postman"
21
+ Dir["#{dir}/*.json"].each do |postman_env_file|
22
+ payload = JSON.parse(File.read(postman_env_file))
23
+ environment = @workspace.environment(payload['name'])
24
+ payload = @workspace.payload(environment, payload)
25
+ @workspace.publish(environment, payload)
26
+ end
27
+ end
28
+ end
29
+
30
+ namespace :credentials do
31
+ desc 'Display IAM credentials for the current deployment'
32
+ task :show do
33
+ puts "Credentials for #{ENV['PLATFORM__API_DOCS__SERVER__HOST']}"
34
+ path = "#{Ros.host_tmp_dir}/credentials"
35
+ puts File.read("#{path}/cli")
36
+ puts "\n\nPostman\n"
37
+ Dir["#{path}/postman/*"].each do |cred|
38
+ puts File.read(cred)
39
+ end
40
+ end
41
+
42
+ task :link do
43
+ path = "#{Ros.host_tmp_dir}/credentials"
44
+ FileUtils.mkdir_p("#{Dir.home}/.#{Settings.partition_name}")
45
+ Dir.chdir("#{Dir.home}/.#{Settings.partition_name}") do
46
+ FileUtils.ln_s("#{path}/cli", 'credentials')
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cnfs-iam
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.alpha
5
+ platform: ruby
6
+ authors:
7
+ - Robert Roach
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-01-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bcrypt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.12
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.12
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 6.0.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 6.0.2.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: devise
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.7.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.7.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: cnfs-core
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.1alpha
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.1alpha
69
+ - !ruby/object:Gem::Dependency
70
+ name: cnfs_sdk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.0.1alpha
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.0.1alpha
83
+ description: Facilities to manage Users, Groups and Roles permission to Platform Resources
84
+ email:
85
+ - rjayroach@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - app/controllers/concerns/is_tenant_scoped.rb
94
+ - app/controllers/credentials_controller.rb
95
+ - app/controllers/groups_controller.rb
96
+ - app/controllers/iam/application_controller.rb
97
+ - app/controllers/iam/confirmations_controller.rb
98
+ - app/controllers/iam/passwords_controller.rb
99
+ - app/controllers/iam/sessions_controller.rb
100
+ - app/controllers/policies_controller.rb
101
+ - app/controllers/public_keys_controller.rb
102
+ - app/controllers/roots/sessions_controller.rb
103
+ - app/controllers/roots_controller.rb
104
+ - app/controllers/users/confirmations_controller.rb
105
+ - app/controllers/users/passwords_controller.rb
106
+ - app/controllers/users/sessions_controller.rb
107
+ - app/controllers/users_controller.rb
108
+ - app/mailers/account_mailer.rb
109
+ - app/models/action.rb
110
+ - app/models/credential.rb
111
+ - app/models/group.rb
112
+ - app/models/group_policy_join.rb
113
+ - app/models/iam/application_record.rb
114
+ - app/models/policy.rb
115
+ - app/models/policy_action.rb
116
+ - app/models/public_key.rb
117
+ - app/models/role.rb
118
+ - app/models/role_policy_join.rb
119
+ - app/models/root.rb
120
+ - app/models/root_credential.rb
121
+ - app/models/tenant.rb
122
+ - app/models/user.rb
123
+ - app/models/user_credential.rb
124
+ - app/models/user_group.rb
125
+ - app/models/user_policy_join.rb
126
+ - app/models/user_role.rb
127
+ - app/operations/blackcomb_user_create.rb
128
+ - app/operations/user_create.rb
129
+ - app/policies/action_policy.rb
130
+ - app/policies/credential_policy.rb
131
+ - app/policies/group_policy.rb
132
+ - app/policies/iam/application_policy.rb
133
+ - app/policies/policy_policy.rb
134
+ - app/policies/public_key_policy.rb
135
+ - app/policies/root_policy.rb
136
+ - app/policies/tenant_policy.rb
137
+ - app/policies/user_policy.rb
138
+ - app/resources/action_resource.rb
139
+ - app/resources/credential_resource.rb
140
+ - app/resources/group_resource.rb
141
+ - app/resources/iam/application_resource.rb
142
+ - app/resources/policy_resource.rb
143
+ - app/resources/public_key_resource.rb
144
+ - app/resources/root_resource.rb
145
+ - app/resources/tenant_resource.rb
146
+ - app/resources/user_resource.rb
147
+ - app/views/layouts/mailer.html.erb
148
+ - app/views/user_mailer/confirmation_instructions.html.erb
149
+ - app/views/user_mailer/email_changed.html.erb
150
+ - app/views/user_mailer/password_change.html.erb
151
+ - app/views/user_mailer/reset_password_instructions.html.erb
152
+ - app/views/user_mailer/team_welcome.html.erb
153
+ - app/views/user_mailer/unlock_instructions.html.erb
154
+ - config/environment.rb
155
+ - config/initializers/devise.rb
156
+ - config/locales/devise.en.yml
157
+ - config/routes.rb
158
+ - config/sidekiq.yml
159
+ - config/spring.rb
160
+ - db/migrate/20190101000001_create_policies.rb
161
+ - db/migrate/20190101000002_create_actions.rb
162
+ - db/migrate/20190101000003_create_policy_actions.rb
163
+ - db/migrate/20190215214352_create_roots.rb
164
+ - db/migrate/20190215214353_update_tenants.rb
165
+ - db/migrate/20190215214355_create_credentials.rb
166
+ - db/migrate/20190215214407_create_users.rb
167
+ - db/migrate/20190215214409_create_user_credentials.rb
168
+ - db/migrate/20190215214410_create_user_policy_joins.rb
169
+ - db/migrate/20190215214411_create_groups.rb
170
+ - db/migrate/20190215214412_create_user_groups.rb
171
+ - db/migrate/20190215214413_create_group_policy_joins.rb
172
+ - db/migrate/20190215214415_create_roles.rb
173
+ - db/migrate/20190215214416_create_user_roles.rb
174
+ - db/migrate/20190215214421_create_role_policy_joins.rb
175
+ - db/migrate/20190924091536_add_display_properties_to_tenants.rb
176
+ - db/migrate/20191021220135_create_public_keys.rb
177
+ - db/migrate/20191120083154_add_confirmable_email_to_user.rb
178
+ - db/seeds/development/tenants.seeds.rb
179
+ - db/seeds/development/users.seeds.rb
180
+ - lib/ros/api_token_strategy.rb
181
+ - lib/ros/iam.rb
182
+ - lib/ros/iam/console.rb
183
+ - lib/ros/iam/engine.rb
184
+ - lib/ros/iam/version.rb
185
+ - lib/tasks/ros/iam_tasks.rake
186
+ homepage: https://github.com/rails-on-services
187
+ licenses:
188
+ - MIT
189
+ metadata: {}
190
+ post_install_message:
191
+ rdoc_options: []
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">"
202
+ - !ruby/object:Gem::Version
203
+ version: 1.3.1
204
+ requirements: []
205
+ rubygems_version: 3.0.3
206
+ signing_key:
207
+ specification_version: 4
208
+ summary: Provides Identity and Access Management for the Ros Platform
209
+ test_files: []