cnfs-cognito 0.0.1.alpha1

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.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +24 -0
  5. data/app/controllers/chown_requests_controller.rb +4 -0
  6. data/app/controllers/chown_results_controller.rb +4 -0
  7. data/app/controllers/cognito/application_controller.rb +6 -0
  8. data/app/controllers/endpoints_controller.rb +4 -0
  9. data/app/controllers/identifiers_controller.rb +4 -0
  10. data/app/controllers/login_controller.rb +45 -0
  11. data/app/controllers/metabase_cards_controller.rb +4 -0
  12. data/app/controllers/metabase_token_controller.rb +46 -0
  13. data/app/controllers/pools_controller.rb +21 -0
  14. data/app/controllers/users_controller.rb +4 -0
  15. data/app/models/chown_request.rb +13 -0
  16. data/app/models/chown_result.rb +14 -0
  17. data/app/models/cognito/application_record.rb +7 -0
  18. data/app/models/endpoint.rb +6 -0
  19. data/app/models/identifier.rb +5 -0
  20. data/app/models/metabase_card.rb +6 -0
  21. data/app/models/platform_event_consumer.rb +8 -0
  22. data/app/models/pool.rb +6 -0
  23. data/app/models/tenant.rb +5 -0
  24. data/app/models/user.rb +50 -0
  25. data/app/models/user_pool.rb +6 -0
  26. data/app/operations/chown_request_process.rb +27 -0
  27. data/app/operations/pool_create.rb +65 -0
  28. data/app/operations/segments/age.rb +65 -0
  29. data/app/operations/segments/birthday.rb +49 -0
  30. data/app/operations/segments/except_ids.rb +28 -0
  31. data/app/operations/segments/gender.rb +35 -0
  32. data/app/operations/segments_apply.rb +40 -0
  33. data/app/policies/chown_request_policy.rb +4 -0
  34. data/app/policies/chown_result_policy.rb +4 -0
  35. data/app/policies/cognito/application_policy.rb +6 -0
  36. data/app/policies/endpoint_policy.rb +4 -0
  37. data/app/policies/identifier_policy.rb +4 -0
  38. data/app/policies/metabase_card_policy.rb +4 -0
  39. data/app/policies/pool_policy.rb +4 -0
  40. data/app/policies/tenant_policy.rb +5 -0
  41. data/app/policies/user_policy.rb +20 -0
  42. data/app/resources/chown_request_resource.rb +5 -0
  43. data/app/resources/chown_result_resource.rb +8 -0
  44. data/app/resources/cognito/application_resource.rb +7 -0
  45. data/app/resources/endpoint_resource.rb +49 -0
  46. data/app/resources/identifier_resource.rb +6 -0
  47. data/app/resources/metabase_card_resource.rb +5 -0
  48. data/app/resources/pool_resource.rb +30 -0
  49. data/app/resources/user_resource.rb +27 -0
  50. data/app/services/metabase/config.rb +16 -0
  51. data/app/services/metabase/token_generator.rb +36 -0
  52. data/config/environment.rb +0 -0
  53. data/config/routes.rb +14 -0
  54. data/config/sidekiq.yml +3 -0
  55. data/config/spring.rb +3 -0
  56. data/db/migrate/20190310013542_create_endpoints.rb +13 -0
  57. data/db/migrate/20190317072927_create_pools.rb +12 -0
  58. data/db/migrate/20190317073055_create_users.rb +18 -0
  59. data/db/migrate/20190317073139_create_identifiers.rb +14 -0
  60. data/db/migrate/20190317073328_create_user_pools.rb +12 -0
  61. data/db/migrate/20191105100356_create_chown_requests.rb +9 -0
  62. data/db/migrate/20191106023315_create_chown_results.rb +12 -0
  63. data/db/migrate/20191126011832_create_metabase_cards.rb +11 -0
  64. data/db/migrate/20191129055605_add_birthday_to_user.rb +5 -0
  65. data/db/migrate/20191205023159_add_gender_to_user.rb +5 -0
  66. data/db/migrate/20191210050613_add_system_generated_flag_to_pools.rb +5 -0
  67. data/db/seeds/development/data.seeds.rb +0 -0
  68. data/db/seeds/development/tenants.seeds.rb +7 -0
  69. data/db/seeds/development/users.seeds.rb +29 -0
  70. data/lib/ros/cognito.rb +16 -0
  71. data/lib/ros/cognito/engine.rb +53 -0
  72. data/lib/ros/cognito/version.rb +7 -0
  73. data/lib/tasks/ros/cognito_tasks.rake +16 -0
  74. metadata +162 -0
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metabase
4
+ class Config
5
+ include ActiveModel::Model
6
+ include ActiveModel::Attributes
7
+
8
+ attribute :sign_algorithm, :string, default: 'HS256'
9
+ attribute :default_expiry, :integer, default: 86_400
10
+ attribute :minimum_expiry, :integer, default: 3_600
11
+ attribute :maximum_expiry, :integer, default: 2_592_000
12
+ attribute :secret, :string
13
+
14
+ validates :secret, presence: { message: 'Metabase secret is misconfigured or missing' }
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jwt'
4
+ module Metabase
5
+ class TokenGenerator
6
+ include ActiveModel::Model
7
+ delegate :minimum_expiry, :maximum_expiry, to: :config
8
+ attr_reader :exp, :payload, :config
9
+
10
+ validate :config_validation!
11
+ validates :payload, presence: true
12
+ validates :exp, numericality: {
13
+ less_than_or_equal_to: :maximum_expiry,
14
+ greater_than_or_equal_to: :minimum_expiry
15
+ }, allow_blank: true
16
+
17
+ def initialize(payload:, expiry:)
18
+ @config = Metabase::Config.new(secret: Settings.metabase.encryption_key)
19
+
20
+ @exp = expiry || config.default_expiry
21
+ @payload = payload.merge(iat: Time.now.to_i, exp: Time.now.to_i + exp)
22
+ end
23
+
24
+ def token
25
+ return unless valid?
26
+
27
+ @token ||= JWT.encode payload, config.secret, config.sign_algorithm
28
+ end
29
+
30
+ private
31
+
32
+ def config_validation!
33
+ errors.add(:config, config.errors.messages) unless config.valid?
34
+ end
35
+ end
36
+ end
File without changes
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ Ros::Cognito::Engine.routes.draw do
4
+ jsonapi_resources :metabase_cards
5
+ jsonapi_resources :chown_results
6
+ jsonapi_resources :chown_requests, only: [:create]
7
+ jsonapi_resources :identifiers
8
+ jsonapi_resources :users
9
+ jsonapi_resources :pools
10
+ jsonapi_resources :endpoints
11
+
12
+ resources :metabase_token, only: [:show]
13
+ post 'login', to: 'login#create'
14
+ end
@@ -0,0 +1,3 @@
1
+ ---
2
+ :queues:
3
+ - cognito_default
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ Spring.application_root = './spec/dummy'
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateEndpoints < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :endpoints do |t|
6
+ t.string :url, null: false, index: { unique: true }
7
+ t.references :target, polymorphic: true
8
+ t.jsonb :properties
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreatePools < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :pools do |t|
6
+ t.string :name, index: { unique: true }
7
+ t.jsonb :properties
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateUsers < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :users do |t|
6
+ t.string :primary_identifier, index: { unique: true }
7
+ t.string :title
8
+ t.string :first_name
9
+ t.string :last_name
10
+ t.string :phone_number
11
+ t.string :email_address
12
+ t.boolean :anonymous, default: false
13
+ t.jsonb :properties
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateIdentifiers < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :identifiers do |t|
6
+ t.string :name
7
+ t.string :value
8
+ t.references :user, foreign_key: true
9
+ t.jsonb :properties
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateUserPools < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :user_pools do |t|
6
+ t.references :user, foreign_key: true
7
+ t.references :pool, foreign_key: true
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class CreateChownRequests < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :chown_requests do |t|
4
+ t.bigint :to_id
5
+ t.jsonb :from_ids, null: false
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class CreateChownResults < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :chown_results do |t|
4
+ t.references :chown_request
5
+ t.string :service_name
6
+ t.bigint :from_id
7
+ t.bigint :to_id
8
+ t.string :status
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateMetabaseCards < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :metabase_cards do |t|
6
+ t.integer :card_id
7
+ t.string :identifier
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class AddBirthdayToUser < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :users, :birthday, :date
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddGenderToUser < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :users, :gender, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddSystemGeneratedFlagToPools < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :pools, :system_generated, :boolean, null: false, default: false
4
+ end
5
+ end
File without changes
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ Tenant.create(schema_name: 'public')
4
+
5
+ 1.upto(7) do |id|
6
+ Tenant.create!(schema_name: Tenant.account_id_to_schema(id.to_s * 9))
7
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ after 'development:tenants' do
4
+ Tenant.all.each do |tenant|
5
+ next if tenant.id.eql? 1
6
+
7
+ tenant.switch do
8
+ # Endpoint.create(url: "http://tenant#{tenant.id}.com/hello", target_type: 'Survey::Group', target_id: 1)
9
+ # Endpoint.create(url: 'http://i.pxln.io/59dcb', target_type: 'Survey::Campaign', target_id: 1)
10
+ # User.reset
11
+ # file_name = 'cognito_pools.csv'
12
+ # User.load_csv(file_name)
13
+ Pool.create(name: 'Developers').tap do |pool|
14
+ pool.users.create(primary_identifier: 'developer', title: 'Mr', last_name: 'Developer',
15
+ phone_number: '+15855551212')
16
+ end
17
+ Pool.create(name: 'Gold Tier').tap do |pool|
18
+ pool.users.create(primary_identifier: 'jones', title: 'Mr', last_name: 'Jones', phone_number: '+1388200363')
19
+ pool.users.create(primary_identifier: 'miller', title: 'Mrs', last_name: 'Miller', phone_number: '+1396537757')
20
+ pool.users.create(primary_identifier: 'doe', title: 'Miss', last_name: 'Doe', phone_number: '+1382800710')
21
+ end
22
+ Pool.create(name: 'Silver Tier').tap do |pool|
23
+ pool.users.create(primary_identifier: SecureRandom.uuid, title: 'Ms', last_name: 'Shelly', phone_number: '')
24
+ pool.users.create(primary_identifier: SecureRandom.uuid, title: 'Mr', last_name: 'Homes', phone_number: '')
25
+ pool.users.create(primary_identifier: SecureRandom.uuid, title: 'Mr', last_name: 'Lucas', phone_number: '')
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ros/core'
4
+ require 'ros/cognito/engine'
5
+
6
+ module Ros
7
+ module Cognito
8
+ # Your code goes here...
9
+ end
10
+
11
+ class << self
12
+ def excluded_models
13
+ %w[Tenant MetabaseCard]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Cognito
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 app.config.paths['db/migrate'].first.include? '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', after: '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
+ # if Rails.env.development? && !Rails.const_defined?('Server')
48
+ # require_relative 'console'
49
+ # end
50
+ # end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Cognito
5
+ VERSION = '0.0.1.alpha1'
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :ros do
4
+ namespace :cognito do
5
+ namespace :db do
6
+ desc 'Load engine seeds'
7
+ task :seed do
8
+ seedbank_root = Seedbank.seeds_root
9
+ Seedbank.seeds_root = File.expand_path('db/seeds', Ros::Cognito::Engine.root)
10
+ Seedbank.load_tasks
11
+ Rake::Task['db:seed'].invoke
12
+ Seedbank.seeds_root = seedbank_root
13
+ end
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cnfs-cognito
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.alpha1
5
+ platform: ruby
6
+ authors:
7
+ - Robert Roach
8
+ - Rui Baltazar
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-01-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 6.0.2.1
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 6.0.2.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: cnfs-core
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '='
33
+ - !ruby/object:Gem::Version
34
+ version: 0.0.1alpha
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '='
40
+ - !ruby/object:Gem::Version
41
+ version: 0.0.1alpha
42
+ - !ruby/object:Gem::Dependency
43
+ name: cnfs_sdk
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: 0.0.1alpha
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: 0.0.1alpha
56
+ description: ": Description of Ros::Cognito."
57
+ email:
58
+ - rjayroach@gmail.com
59
+ - rui.p.baltazar@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - MIT-LICENSE
65
+ - README.md
66
+ - Rakefile
67
+ - app/controllers/chown_requests_controller.rb
68
+ - app/controllers/chown_results_controller.rb
69
+ - app/controllers/cognito/application_controller.rb
70
+ - app/controllers/endpoints_controller.rb
71
+ - app/controllers/identifiers_controller.rb
72
+ - app/controllers/login_controller.rb
73
+ - app/controllers/metabase_cards_controller.rb
74
+ - app/controllers/metabase_token_controller.rb
75
+ - app/controllers/pools_controller.rb
76
+ - app/controllers/users_controller.rb
77
+ - app/models/chown_request.rb
78
+ - app/models/chown_result.rb
79
+ - app/models/cognito/application_record.rb
80
+ - app/models/endpoint.rb
81
+ - app/models/identifier.rb
82
+ - app/models/metabase_card.rb
83
+ - app/models/platform_event_consumer.rb
84
+ - app/models/pool.rb
85
+ - app/models/tenant.rb
86
+ - app/models/user.rb
87
+ - app/models/user_pool.rb
88
+ - app/operations/chown_request_process.rb
89
+ - app/operations/pool_create.rb
90
+ - app/operations/segments/age.rb
91
+ - app/operations/segments/birthday.rb
92
+ - app/operations/segments/except_ids.rb
93
+ - app/operations/segments/gender.rb
94
+ - app/operations/segments_apply.rb
95
+ - app/policies/chown_request_policy.rb
96
+ - app/policies/chown_result_policy.rb
97
+ - app/policies/cognito/application_policy.rb
98
+ - app/policies/endpoint_policy.rb
99
+ - app/policies/identifier_policy.rb
100
+ - app/policies/metabase_card_policy.rb
101
+ - app/policies/pool_policy.rb
102
+ - app/policies/tenant_policy.rb
103
+ - app/policies/user_policy.rb
104
+ - app/resources/chown_request_resource.rb
105
+ - app/resources/chown_result_resource.rb
106
+ - app/resources/cognito/application_resource.rb
107
+ - app/resources/endpoint_resource.rb
108
+ - app/resources/identifier_resource.rb
109
+ - app/resources/metabase_card_resource.rb
110
+ - app/resources/pool_resource.rb
111
+ - app/resources/user_resource.rb
112
+ - app/services/metabase/config.rb
113
+ - app/services/metabase/token_generator.rb
114
+ - config/environment.rb
115
+ - config/routes.rb
116
+ - config/sidekiq.yml
117
+ - config/spring.rb
118
+ - db/migrate/20190310013542_create_endpoints.rb
119
+ - db/migrate/20190317072927_create_pools.rb
120
+ - db/migrate/20190317073055_create_users.rb
121
+ - db/migrate/20190317073139_create_identifiers.rb
122
+ - db/migrate/20190317073328_create_user_pools.rb
123
+ - db/migrate/20191105100356_create_chown_requests.rb
124
+ - db/migrate/20191106023315_create_chown_results.rb
125
+ - db/migrate/20191126011832_create_metabase_cards.rb
126
+ - db/migrate/20191129055605_add_birthday_to_user.rb
127
+ - db/migrate/20191205023159_add_gender_to_user.rb
128
+ - db/migrate/20191210050613_add_system_generated_flag_to_pools.rb
129
+ - db/seeds/development/data.seeds.rb
130
+ - db/seeds/development/tenants.seeds.rb
131
+ - db/seeds/development/users.seeds.rb
132
+ - lib/ros/cognito.rb
133
+ - lib/ros/cognito/engine.rb
134
+ - lib/ros/cognito/version.rb
135
+ - lib/tasks/ros/cognito_tasks.rake
136
+ homepage: http://guides.rails-on-services.org/
137
+ licenses:
138
+ - MIT
139
+ metadata: {}
140
+ post_install_message:
141
+ rdoc_options: []
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">"
147
+ - !ruby/object:Gem::Version
148
+ version: 2.6.0
149
+ - - "<"
150
+ - !ruby/object:Gem::Version
151
+ version: '2.7'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">"
155
+ - !ruby/object:Gem::Version
156
+ version: 1.3.1
157
+ requirements: []
158
+ rubygems_version: 3.0.3
159
+ signing_key:
160
+ specification_version: 4
161
+ summary: ": Summary of Ros::Cognito."
162
+ test_files: []