cnfs-cognito 0.0.1.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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: []