punk 0.0.3 → 0.2.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.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/.github/workflows/ship.yml +28 -0
  4. data/.github/workflows/test.yml +45 -0
  5. data/.rdoc_options +23 -0
  6. data/.rgignore +1 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +243 -0
  9. data/Gemfile +6 -6
  10. data/Gemfile.lock +18 -30
  11. data/README.md +8 -0
  12. data/Rakefile +7 -9
  13. data/VERSION +1 -1
  14. data/app/migrations/001_lets_punk.rb +3 -0
  15. data/app/routes/hello.rb +4 -0
  16. data/bin/punk +0 -1
  17. data/env/.gitignore +3 -0
  18. data/env/spec/test.sh +3 -0
  19. data/env/test.sh +5 -0
  20. data/lib/punk/actions/.keep +0 -0
  21. data/lib/punk/actions/groups/list.rb +24 -0
  22. data/lib/punk/actions/sessions/clear.rb +21 -0
  23. data/lib/punk/actions/sessions/create.rb +64 -0
  24. data/lib/punk/actions/sessions/list.rb +18 -0
  25. data/lib/punk/actions/sessions/verify.rb +24 -0
  26. data/lib/punk/actions/tenants/list.rb +18 -0
  27. data/lib/punk/actions/users/list_group.rb +18 -0
  28. data/lib/punk/actions/users/list_tenant.rb +18 -0
  29. data/lib/punk/actions/users/show.rb +18 -0
  30. data/lib/punk/commands/http.rb +3 -3
  31. data/lib/punk/commands/list.rb +12 -6
  32. data/lib/punk/config/defaults.json +3 -0
  33. data/lib/punk/config/schema.json +3 -0
  34. data/lib/punk/core/app.rb +6 -8
  35. data/lib/punk/core/commander.rb +9 -6
  36. data/lib/punk/core/exec.rb +2 -0
  37. data/lib/punk/core/load.rb +0 -1
  38. data/lib/punk/framework/command.rb +5 -1
  39. data/lib/punk/framework/plugins/validation.rb +0 -14
  40. data/lib/punk/framework/runnable.rb +1 -1
  41. data/lib/punk/helpers/loggable.rb +1 -1
  42. data/lib/punk/migrations/001_punk.rb +103 -0
  43. data/lib/punk/models/.keep +0 -0
  44. data/lib/punk/models/group.rb +20 -0
  45. data/lib/punk/models/group_user_metadata.rb +17 -0
  46. data/lib/punk/models/identity.rb +29 -0
  47. data/lib/punk/models/session.rb +89 -0
  48. data/lib/punk/models/tenant.rb +19 -0
  49. data/lib/punk/models/tenant_user_metadata.rb +17 -0
  50. data/lib/punk/models/user.rb +31 -0
  51. data/lib/punk/routes/groups.rb +31 -0
  52. data/lib/punk/routes/plivo.rb +4 -0
  53. data/lib/punk/routes/sessions.rb +108 -0
  54. data/lib/punk/routes/swagger.rb +9 -0
  55. data/lib/punk/routes/tenants.rb +29 -0
  56. data/lib/punk/routes/users.rb +36 -0
  57. data/lib/punk/services/.keep +0 -0
  58. data/lib/punk/services/challenge_claim.rb +46 -0
  59. data/lib/punk/services/create_identities.rb +25 -0
  60. data/lib/punk/services/generate_swagger.rb +25 -0
  61. data/lib/punk/services/prove_claim.rb +29 -0
  62. data/lib/punk/services/secret.rb +9 -0
  63. data/lib/punk/templates/groups/list.jbuilder +7 -0
  64. data/lib/punk/templates/plivo.slim +16 -0
  65. data/lib/punk/templates/sessions/list.jbuilder +6 -0
  66. data/lib/punk/templates/sessions/pending.jbuilder +4 -0
  67. data/lib/punk/templates/tenants/list.jbuilder +7 -0
  68. data/lib/punk/templates/tenants/list.slim +8 -0
  69. data/lib/punk/templates/users/list.jbuilder +7 -0
  70. data/lib/punk/templates/users/list.rcsv +4 -0
  71. data/lib/punk/templates/users/show.jbuilder +5 -0
  72. data/lib/punk/views/groups/list.rb +22 -0
  73. data/lib/punk/views/plivo_store.rb +15 -0
  74. data/lib/punk/views/sessions/list.rb +22 -0
  75. data/lib/punk/views/sessions/pending.rb +28 -0
  76. data/lib/punk/views/tenants/list.rb +22 -0
  77. data/lib/punk/views/users/list.rb +22 -0
  78. data/lib/punk/views/users/show.rb +22 -0
  79. data/lib/punk/workers/.keep +0 -0
  80. data/lib/punk/workers/expire_sessions.rb +9 -0
  81. data/lib/punk/workers/geocode_session_worker.rb +48 -0
  82. data/lib/punk/workers/identify_session_worker.rb +45 -0
  83. data/lib/punk/workers/secret.rb +18 -0
  84. data/lib/punk/workers/send_email_worker.rb +51 -0
  85. data/lib/punk/workers/send_sms_worker.rb +40 -0
  86. data/punk.gemspec +149 -16
  87. data/schema.psql +345 -0
  88. data/spec/actions/groups/punk/list_groups_action_spec.rb +36 -0
  89. data/spec/actions/sessions/punk/clear_session_action_spec.rb +29 -0
  90. data/spec/actions/sessions/punk/create_session_action_spec.rb +33 -0
  91. data/spec/actions/sessions/punk/list_sessions_action_spec.rb +26 -0
  92. data/spec/actions/sessions/punk/verify_session_action_spec.rb +59 -0
  93. data/spec/actions/tenants/punk/list_tenants_action_spec.rb +25 -0
  94. data/spec/actions/users/punk/list_group_users_action_spec.rb +26 -0
  95. data/spec/actions/users/punk/list_tenant_users_action_spec.rb +26 -0
  96. data/spec/factories/group.rb +12 -0
  97. data/spec/factories/group_user_metadata.rb +10 -0
  98. data/spec/factories/identity.rb +19 -0
  99. data/spec/factories/session.rb +12 -0
  100. data/spec/factories/tenant.rb +10 -0
  101. data/spec/factories/tenant_user_metadata.rb +10 -0
  102. data/spec/factories/user.rb +12 -0
  103. data/spec/lib/commands/auth_spec.rb +11 -0
  104. data/spec/lib/commands/generate_spec.rb +7 -0
  105. data/spec/lib/commands/http_spec.rb +23 -0
  106. data/spec/lib/commands/list_spec.rb +7 -0
  107. data/spec/lib/commands/swagger_spec.rb +7 -0
  108. data/spec/lib/engine/punk_env_spec.rb +13 -0
  109. data/spec/lib/engine/punk_exec_spec.rb +9 -0
  110. data/spec/lib/engine/punk_init_spec.rb +9 -0
  111. data/spec/lib/engine/punk_store_spec.rb +10 -0
  112. data/spec/lib/punk.env +7 -0
  113. data/spec/models/punk/group_spec.rb +50 -0
  114. data/spec/models/punk/group_user_metadata_spec.rb +61 -0
  115. data/spec/models/punk/identity_spec.rb +61 -0
  116. data/spec/models/punk/session_spec.rb +156 -0
  117. data/spec/models/punk/tenant_spec.rb +51 -0
  118. data/spec/models/punk/tenant_user_metadata_spec.rb +61 -0
  119. data/spec/models/punk/user_spec.rb +115 -0
  120. data/spec/routes/groups/get_groups_spec.rb +33 -0
  121. data/spec/routes/plivo/get_plivo_spec.rb +11 -0
  122. data/spec/routes/sessions/delete_session_spec.rb +11 -0
  123. data/spec/routes/sessions/get_sessions_spec.rb +30 -0
  124. data/spec/routes/sessions/patch_session_spec.rb +11 -0
  125. data/spec/routes/sessions/post_session_spec.rb +11 -0
  126. data/spec/routes/swagger/get_swagger_spec.rb +12 -0
  127. data/spec/routes/tenants/get_tenants_spec.rb +31 -0
  128. data/spec/routes/users/get_users_spec.rb +60 -0
  129. data/spec/services/punk/challenge_claim_service_spec.rb +7 -0
  130. data/spec/services/punk/create_identities_service_spec.rb +14 -0
  131. data/spec/services/punk/generate_swagger_service_spec.rb +7 -0
  132. data/spec/services/punk/prove_claim_service_spec.rb +7 -0
  133. data/spec/services/punk/secret_service_spec.rb +7 -0
  134. data/spec/spec_helper.rb +122 -0
  135. data/spec/vcr_cassettes/PUNK_GeocodeSessionWorker/updates_the_session_data.yml +57 -0
  136. data/spec/vcr_cassettes/PUNK_IdentifySessionWorker/updates_the_session_data.yml +112 -0
  137. data/spec/views/punk/plivo_store_spec.rb +7 -0
  138. data/spec/views/sessions/punk/list_sessions_view_spec.rb +7 -0
  139. data/spec/views/sessions/punk/pending_session_view_spec.rb +7 -0
  140. data/spec/views/tenants/punk/list_tenants_view_spec.rb +7 -0
  141. data/spec/views/users/punk/list_groups_view_spec.rb +7 -0
  142. data/spec/views/users/punk/list_users_view_spec.rb +7 -0
  143. data/spec/workers/punk/expire_sessions_worker_spec.rb +31 -0
  144. data/spec/workers/punk/geocode_session_worker_spec.rb +14 -0
  145. data/spec/workers/punk/identify_session_worker_spec.rb +15 -0
  146. data/spec/workers/punk/secret_worker_spec.rb +20 -0
  147. data/spec/workers/punk/send_email_worker_spec.rb +46 -0
  148. data/spec/workers/punk/send_sms_worker_spec.rb +33 -0
  149. metadata +169 -13
  150. data/lib/punk/views/all.rb +0 -4
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class ListGroupsView < View
5
+ args :groups
6
+
7
+ def validate
8
+ validates_not_null :groups
9
+ validates_type Array, :groups
10
+ end
11
+
12
+ def process
13
+ 'groups/list'
14
+ end
15
+
16
+ protected
17
+
18
+ def _dir
19
+ File.join(__dir__, '..', '..', 'templates')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class PlivoStore < View
5
+ def process
6
+ 'plivo'
7
+ end
8
+
9
+ protected
10
+
11
+ def _dir
12
+ File.join(__dir__, '..', 'templates')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class ListSessionsView < View
5
+ args :sessions
6
+
7
+ def validate
8
+ validates_not_null :sessions
9
+ validates_type Array, :sessions
10
+ end
11
+
12
+ def process
13
+ 'sessions/list'
14
+ end
15
+
16
+ protected
17
+
18
+ def _dir
19
+ File.join(__dir__, '..', '..', 'templates')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class PendingSessionView < View
5
+ args :session, :message
6
+
7
+ def validate
8
+ validates_not_null :session
9
+ validates_not_empty :session
10
+ return if session.blank?
11
+ validates_type Session, :session
12
+ validates_state :session, :pending
13
+ validates_not_null :message
14
+ validates_not_empty :message
15
+ validates_type String, :message
16
+ end
17
+
18
+ def process
19
+ 'sessions/pending'
20
+ end
21
+
22
+ protected
23
+
24
+ def _dir
25
+ File.join(__dir__, '..', '..', 'templates')
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class ListTenantsView < View
5
+ args :tenants
6
+
7
+ def validate
8
+ validates_not_null :tenants
9
+ validates_type Array, :tenants
10
+ end
11
+
12
+ def process
13
+ 'tenants/list'
14
+ end
15
+
16
+ protected
17
+
18
+ def _dir
19
+ File.join(__dir__, '..', '..', 'templates')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class ListUsersView < View
5
+ args :users
6
+
7
+ def validate
8
+ validates_not_null :users
9
+ validates_type Array, :users
10
+ end
11
+
12
+ def process
13
+ 'users/list'
14
+ end
15
+
16
+ protected
17
+
18
+ def _dir
19
+ File.join(__dir__, '..', '..', 'templates')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class ShowUserView < View
5
+ args :user
6
+
7
+ def validate
8
+ validates_not_null :user
9
+ validates_type User, :user
10
+ end
11
+
12
+ def process
13
+ 'users/show'
14
+ end
15
+
16
+ protected
17
+
18
+ def _dir
19
+ File.join(__dir__, '..', '..', 'templates')
20
+ end
21
+ end
22
+ end
File without changes
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class ExpireSessionsWorker < Worker
5
+ def process
6
+ Session.expiring.each(&:timeout?)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class GeocodeSessionWorker < Worker
5
+ args :session_id
6
+
7
+ def validate
8
+ validates_not_null :session_id
9
+ validates_not_empty :session_id
10
+ end
11
+
12
+ def process
13
+ require 'ipstack'
14
+
15
+ session = Session[session_id]
16
+ return if session.blank?
17
+
18
+ ip_address = session.remote_addr.to_s
19
+ return if ip_address == '127.0.0.1'
20
+
21
+ return if PUNK.get.ipstack.api_key.blank?
22
+ result = Ipstack::API.standard(ip_address).deep_symbolize_keys
23
+
24
+ raise if result.blank?
25
+
26
+ timezone = result[:time_zone][:code] if result[:time_zone].present?
27
+ language = result[:location][:languages].first[:code] if result[:location].present? && result[:location][:languages].present?
28
+ currency = result[:currency][:code] if result[:currency].present?
29
+ session.update(data: session.data.merge(
30
+ tz: timezone,
31
+ lang: language,
32
+ currency: currency,
33
+ geo: {
34
+ lat: result[:latitude],
35
+ lng: result[:longitude]
36
+ },
37
+ location: {
38
+ city: result[:city],
39
+ region: result[:region_name],
40
+ country: result[:country_name],
41
+ continent: result[:continent_name]
42
+ }
43
+ ))
44
+
45
+ session.save
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class IdentifySessionWorker < Worker
5
+ args :session_id
6
+
7
+ def validate
8
+ validates_not_null :session_id
9
+ validates_not_empty :session_id
10
+ end
11
+
12
+ def process
13
+ require 'userstack'
14
+
15
+ session = Session[session_id]
16
+ return if session.blank?
17
+
18
+ return if PUNK.get.userstack.api_key.blank?
19
+ client = Userstack::Client.new(PUNK.get.userstack.api_key, use_ssl: PUNK.get.userstack.use_ssl)
20
+ result = client.parse(session.user_agent).deep_symbolize_keys
21
+
22
+ raise if result[:success] == false || result[:type].nil?
23
+
24
+ session.update(data: session.data.merge(
25
+ os: {
26
+ name: result[:os][:name],
27
+ family: result[:os][:family],
28
+ vendor: result[:os][:family_vendor]
29
+ },
30
+ browser: {
31
+ name: result[:browser][:name],
32
+ version: result[:browser][:version]
33
+ },
34
+ device: {
35
+ name: result[:device][:name],
36
+ brand: result[:device][:brand],
37
+ type: result[:device][:type],
38
+ mobile: result[:device][:is_mobile_device]
39
+ }
40
+ ))
41
+
42
+ GeocodeSessionWorker.perform_now(session_id: session.id)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class SecretWorker < Worker
5
+ args :name
6
+
7
+ def validate
8
+ validates_not_null :name
9
+ validates_not_empty :name
10
+ end
11
+
12
+ def process
13
+ secret = SecretService.run.result
14
+ sleep 5 unless PUNK.env.test?
15
+ logger.info "#{name}: #{secret}"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class SendEmailWorker < Worker
5
+ args :from, :to, :subject, :template, :variables, :tags
6
+
7
+ def validate
8
+ validates_type String, :from
9
+ validates_type String, :to
10
+ validates_email :to
11
+ validates_includes PUNK.get.mailgun.whitelist, :to if !PUNK.env.test? && !PUNK.get.mailgun.mock && PUNK.get.mailgun.whitelist.present?
12
+ validates_type String, :subject
13
+ validates_type String, :template
14
+ validates_type Hash, :variables, allow_nil: true
15
+ validates_type Array, :tags, allow_nil: true
16
+ validates_length_range 0..1, :tags, allow_nil: true
17
+ end
18
+
19
+ def process
20
+ require 'mailgun-ruby'
21
+
22
+ client =
23
+ if !PUNK.env.test? && PUNK.get.mailgun.mock
24
+ Mailgun::Client.new(PUNK.get.mailgun.api_key, 'bin.mailgun.net', PUNK.get.mailgun.postbin, ssl=false) # rubocop:disable Lint/UselessAssignment,Layout/SpaceAroundOperators
25
+ else
26
+ Mailgun::Client.new(PUNK.get.mailgun.api_key)
27
+ end
28
+
29
+ client.enable_test_mode! if PUNK.env.test?
30
+
31
+ message =
32
+ {
33
+ from: from,
34
+ to: to,
35
+ subject: subject,
36
+ template: template
37
+ }
38
+ variables.each { |variable, value| message["v:#{variable}"] = value } if variables.present?
39
+ tags.each { |tag| message["o:tag"] = tag } if tags.present?
40
+
41
+ # TODO: store return value in Message table
42
+ # TODO: update Message table with events from mailgun webhooks
43
+ client.send_message(PUNK.get.mailgun.domain, message)
44
+
45
+ return unless !PUNK.env.test? && PUNK.get.mailgun.mock
46
+
47
+ require 'launchy'
48
+ Launchy.open("http://bin.mailgun.net/#{PUNK.get.mailgun.postbin}")
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PUNK
4
+ class SendSmsWorker < Worker
5
+ args :to, :body
6
+
7
+ def validate
8
+ validates_type String, :to
9
+ validates_phone :to
10
+ validates_includes PUNK.get.plivo.whitelist, :to if !PUNK.env.test? && !PUNK.get.plivo.mock && PUNK.get.plivo.whitelist.present?
11
+ validates_type String, :body
12
+ validates_length_range 1..1600, :body
13
+ end
14
+
15
+ def process
16
+ if PUNK.env.test? || PUNK.get.plivo.mock
17
+ plivo = PUNK.cache.get(:plivo) || []
18
+ message =
19
+ {
20
+ sent: Time.now.utc.to_s,
21
+ from: PUNK.get.plivo.number,
22
+ to: to,
23
+ body: body
24
+ }
25
+ plivo.prepend(message)
26
+ PUNK.cache.set(:plivo, plivo)
27
+ unless PUNK.env.test?
28
+ require 'launchy'
29
+ Launchy.open("#{PUNK.get.app.url || 'http://localhost:3000'}/plivo.html")
30
+ end
31
+ return
32
+ end
33
+
34
+ require 'plivo'
35
+
36
+ client = Plivo::RestClient.new(PUNK.get.plivo.auth_id, PUNK.get.plivo.auth_token)
37
+ client.messages.create(PUNK.get.plivo.number, [to], body)
38
+ end
39
+ end
40
+ end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: punk 0.0.3 ruby lib
5
+ # stub: punk 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "punk".freeze
9
- s.version = "0.0.3"
9
+ s.version = "0.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Lloyd Kranzky".freeze]
14
- s.date = "2021-01-08"
14
+ s.date = "2021-01-13"
15
15
  s.description = "".freeze
16
16
  s.email = "lloyd@kranzky.com".freeze
17
17
  s.executables = ["punk".freeze]
@@ -21,14 +21,36 @@ Gem::Specification.new do |s|
21
21
  ]
22
22
  s.files = [
23
23
  ".document",
24
+ ".editorconfig",
25
+ ".github/workflows/ship.yml",
26
+ ".github/workflows/test.yml",
27
+ ".rdoc_options",
28
+ ".rgignore",
29
+ ".rspec",
30
+ ".rubocop.yml",
24
31
  "Gemfile",
25
32
  "Gemfile.lock",
26
33
  "LICENSE",
27
34
  "README.md",
28
35
  "Rakefile",
29
36
  "VERSION",
37
+ "app/migrations/001_lets_punk.rb",
38
+ "app/routes/hello.rb",
30
39
  "bin/punk",
40
+ "env/.gitignore",
41
+ "env/spec/test.sh",
42
+ "env/test.sh",
31
43
  "lib/punk.rb",
44
+ "lib/punk/actions/.keep",
45
+ "lib/punk/actions/groups/list.rb",
46
+ "lib/punk/actions/sessions/clear.rb",
47
+ "lib/punk/actions/sessions/create.rb",
48
+ "lib/punk/actions/sessions/list.rb",
49
+ "lib/punk/actions/sessions/verify.rb",
50
+ "lib/punk/actions/tenants/list.rb",
51
+ "lib/punk/actions/users/list_group.rb",
52
+ "lib/punk/actions/users/list_tenant.rb",
53
+ "lib/punk/actions/users/show.rb",
32
54
  "lib/punk/commands/auth.rb",
33
55
  "lib/punk/commands/generate.rb",
34
56
  "lib/punk/commands/http.rb",
@@ -72,9 +94,30 @@ Gem::Specification.new do |s|
72
94
  "lib/punk/helpers/renderable.rb",
73
95
  "lib/punk/helpers/swagger.rb",
74
96
  "lib/punk/helpers/validatable.rb",
97
+ "lib/punk/migrations/001_punk.rb",
98
+ "lib/punk/models/.keep",
99
+ "lib/punk/models/group.rb",
100
+ "lib/punk/models/group_user_metadata.rb",
101
+ "lib/punk/models/identity.rb",
102
+ "lib/punk/models/session.rb",
103
+ "lib/punk/models/tenant.rb",
104
+ "lib/punk/models/tenant_user_metadata.rb",
105
+ "lib/punk/models/user.rb",
75
106
  "lib/punk/plugins/all.rb",
76
107
  "lib/punk/plugins/cors.rb",
77
108
  "lib/punk/plugins/ssl.rb",
109
+ "lib/punk/routes/groups.rb",
110
+ "lib/punk/routes/plivo.rb",
111
+ "lib/punk/routes/sessions.rb",
112
+ "lib/punk/routes/swagger.rb",
113
+ "lib/punk/routes/tenants.rb",
114
+ "lib/punk/routes/users.rb",
115
+ "lib/punk/services/.keep",
116
+ "lib/punk/services/challenge_claim.rb",
117
+ "lib/punk/services/create_identities.rb",
118
+ "lib/punk/services/generate_swagger.rb",
119
+ "lib/punk/services/prove_claim.rb",
120
+ "lib/punk/services/secret.rb",
78
121
  "lib/punk/startup/cache.rb",
79
122
  "lib/punk/startup/database.rb",
80
123
  "lib/punk/startup/environment.rb",
@@ -84,19 +127,103 @@ Gem::Specification.new do |s|
84
127
  "lib/punk/templates/fail.rcsv",
85
128
  "lib/punk/templates/fail.slim",
86
129
  "lib/punk/templates/fail.xml.slim",
130
+ "lib/punk/templates/groups/list.jbuilder",
87
131
  "lib/punk/templates/info.jbuilder",
88
132
  "lib/punk/templates/info.rcsv",
89
133
  "lib/punk/templates/info.slim",
90
134
  "lib/punk/templates/info.xml.slim",
91
- "lib/punk/views/all.rb",
135
+ "lib/punk/templates/plivo.slim",
136
+ "lib/punk/templates/sessions/list.jbuilder",
137
+ "lib/punk/templates/sessions/pending.jbuilder",
138
+ "lib/punk/templates/tenants/list.jbuilder",
139
+ "lib/punk/templates/tenants/list.slim",
140
+ "lib/punk/templates/users/list.jbuilder",
141
+ "lib/punk/templates/users/list.rcsv",
142
+ "lib/punk/templates/users/show.jbuilder",
92
143
  "lib/punk/views/fail.rb",
144
+ "lib/punk/views/groups/list.rb",
93
145
  "lib/punk/views/info.rb",
94
- "punk.gemspec"
146
+ "lib/punk/views/plivo_store.rb",
147
+ "lib/punk/views/sessions/list.rb",
148
+ "lib/punk/views/sessions/pending.rb",
149
+ "lib/punk/views/tenants/list.rb",
150
+ "lib/punk/views/users/list.rb",
151
+ "lib/punk/views/users/show.rb",
152
+ "lib/punk/workers/.keep",
153
+ "lib/punk/workers/expire_sessions.rb",
154
+ "lib/punk/workers/geocode_session_worker.rb",
155
+ "lib/punk/workers/identify_session_worker.rb",
156
+ "lib/punk/workers/secret.rb",
157
+ "lib/punk/workers/send_email_worker.rb",
158
+ "lib/punk/workers/send_sms_worker.rb",
159
+ "punk.gemspec",
160
+ "schema.psql",
161
+ "spec/actions/groups/punk/list_groups_action_spec.rb",
162
+ "spec/actions/sessions/punk/clear_session_action_spec.rb",
163
+ "spec/actions/sessions/punk/create_session_action_spec.rb",
164
+ "spec/actions/sessions/punk/list_sessions_action_spec.rb",
165
+ "spec/actions/sessions/punk/verify_session_action_spec.rb",
166
+ "spec/actions/tenants/punk/list_tenants_action_spec.rb",
167
+ "spec/actions/users/punk/list_group_users_action_spec.rb",
168
+ "spec/actions/users/punk/list_tenant_users_action_spec.rb",
169
+ "spec/factories/group.rb",
170
+ "spec/factories/group_user_metadata.rb",
171
+ "spec/factories/identity.rb",
172
+ "spec/factories/session.rb",
173
+ "spec/factories/tenant.rb",
174
+ "spec/factories/tenant_user_metadata.rb",
175
+ "spec/factories/user.rb",
176
+ "spec/lib/commands/auth_spec.rb",
177
+ "spec/lib/commands/generate_spec.rb",
178
+ "spec/lib/commands/http_spec.rb",
179
+ "spec/lib/commands/list_spec.rb",
180
+ "spec/lib/commands/swagger_spec.rb",
181
+ "spec/lib/engine/punk_env_spec.rb",
182
+ "spec/lib/engine/punk_exec_spec.rb",
183
+ "spec/lib/engine/punk_init_spec.rb",
184
+ "spec/lib/engine/punk_store_spec.rb",
185
+ "spec/lib/punk.env",
186
+ "spec/models/punk/group_spec.rb",
187
+ "spec/models/punk/group_user_metadata_spec.rb",
188
+ "spec/models/punk/identity_spec.rb",
189
+ "spec/models/punk/session_spec.rb",
190
+ "spec/models/punk/tenant_spec.rb",
191
+ "spec/models/punk/tenant_user_metadata_spec.rb",
192
+ "spec/models/punk/user_spec.rb",
193
+ "spec/routes/groups/get_groups_spec.rb",
194
+ "spec/routes/plivo/get_plivo_spec.rb",
195
+ "spec/routes/sessions/delete_session_spec.rb",
196
+ "spec/routes/sessions/get_sessions_spec.rb",
197
+ "spec/routes/sessions/patch_session_spec.rb",
198
+ "spec/routes/sessions/post_session_spec.rb",
199
+ "spec/routes/swagger/get_swagger_spec.rb",
200
+ "spec/routes/tenants/get_tenants_spec.rb",
201
+ "spec/routes/users/get_users_spec.rb",
202
+ "spec/services/punk/challenge_claim_service_spec.rb",
203
+ "spec/services/punk/create_identities_service_spec.rb",
204
+ "spec/services/punk/generate_swagger_service_spec.rb",
205
+ "spec/services/punk/prove_claim_service_spec.rb",
206
+ "spec/services/punk/secret_service_spec.rb",
207
+ "spec/spec_helper.rb",
208
+ "spec/vcr_cassettes/PUNK_GeocodeSessionWorker/updates_the_session_data.yml",
209
+ "spec/vcr_cassettes/PUNK_IdentifySessionWorker/updates_the_session_data.yml",
210
+ "spec/views/punk/plivo_store_spec.rb",
211
+ "spec/views/sessions/punk/list_sessions_view_spec.rb",
212
+ "spec/views/sessions/punk/pending_session_view_spec.rb",
213
+ "spec/views/tenants/punk/list_tenants_view_spec.rb",
214
+ "spec/views/users/punk/list_groups_view_spec.rb",
215
+ "spec/views/users/punk/list_users_view_spec.rb",
216
+ "spec/workers/punk/expire_sessions_worker_spec.rb",
217
+ "spec/workers/punk/geocode_session_worker_spec.rb",
218
+ "spec/workers/punk/identify_session_worker_spec.rb",
219
+ "spec/workers/punk/secret_worker_spec.rb",
220
+ "spec/workers/punk/send_email_worker_spec.rb",
221
+ "spec/workers/punk/send_sms_worker_spec.rb"
95
222
  ]
96
223
  s.homepage = "https://github.com/kranzky/punk".freeze
97
- s.licenses = ["UNLICENSE".freeze]
224
+ s.licenses = ["Unlicense".freeze]
98
225
  s.required_ruby_version = Gem::Requirement.new(">= 2.1".freeze)
99
- s.rubygems_version = "3.0.9".freeze
226
+ s.rubygems_version = "2.7.6.2".freeze
100
227
  s.summary = "Punk! is an omakase web framework for rapid prototyping.".freeze
101
228
 
102
229
  if s.respond_to? :specification_version then
@@ -123,7 +250,7 @@ Gem::Specification.new do |s|
123
250
  s.add_runtime_dependency(%q<sequel>.freeze, ["~> 5.40"])
124
251
  s.add_runtime_dependency(%q<aasm>.freeze, ["~> 5.1"])
125
252
  s.add_runtime_dependency(%q<http-accept>.freeze, ["~> 2.1"])
126
- s.add_runtime_dependency(%q<maxmind-db>.freeze, ["~> 1.1"])
253
+ s.add_runtime_dependency(%q<ipstack>.freeze, ["~> 0.1"])
127
254
  s.add_runtime_dependency(%q<rbnacl>.freeze, ["~> 7.1"])
128
255
  s.add_runtime_dependency(%q<userstack>.freeze, ["~> 0.1"])
129
256
  s.add_runtime_dependency(%q<sidekiq>.freeze, ["~> 6.1"])
@@ -134,14 +261,16 @@ Gem::Specification.new do |s|
134
261
  s.add_runtime_dependency(%q<roda-route_list>.freeze, ["~> 2.1"])
135
262
  s.add_runtime_dependency(%q<slim>.freeze, ["~> 4.1"])
136
263
  s.add_runtime_dependency(%q<jbuilder>.freeze, ["~> 2.10"])
137
- s.add_runtime_dependency(%q<oj>.freeze, ["~> 3.10"])
264
+ s.add_runtime_dependency(%q<oj>.freeze, ["~> 3.11"])
138
265
  s.add_runtime_dependency(%q<tilt-jbuilder>.freeze, ["~> 0.7"])
139
266
  s.add_runtime_dependency(%q<rdoc>.freeze, ["~> 6.3"])
140
267
  s.add_runtime_dependency(%q<swagger_yard>.freeze, ["~> 1.0"])
141
268
  s.add_runtime_dependency(%q<activesupport>.freeze, ["~> 6.1"])
142
- s.add_runtime_dependency(%q<sentry-raven>.freeze, ["~> 3.1"])
269
+ s.add_runtime_dependency(%q<sentry-ruby>.freeze, ["~> 4.1"])
270
+ s.add_runtime_dependency(%q<sentry-sidekiq>.freeze, ["~> 4.1"])
143
271
  s.add_runtime_dependency(%q<skylight>.freeze, ["~> 4.3"])
144
272
  s.add_runtime_dependency(%q<phony>.freeze, ["~> 2.18"])
273
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.17"])
145
274
  s.add_development_dependency(%q<gemfile_updater>.freeze, ["~> 0.1"])
146
275
  s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4"])
147
276
  s.add_development_dependency(%q<amazing_print>.freeze, ["~> 1.2"])
@@ -169,7 +298,7 @@ Gem::Specification.new do |s|
169
298
  s.add_dependency(%q<sequel>.freeze, ["~> 5.40"])
170
299
  s.add_dependency(%q<aasm>.freeze, ["~> 5.1"])
171
300
  s.add_dependency(%q<http-accept>.freeze, ["~> 2.1"])
172
- s.add_dependency(%q<maxmind-db>.freeze, ["~> 1.1"])
301
+ s.add_dependency(%q<ipstack>.freeze, ["~> 0.1"])
173
302
  s.add_dependency(%q<rbnacl>.freeze, ["~> 7.1"])
174
303
  s.add_dependency(%q<userstack>.freeze, ["~> 0.1"])
175
304
  s.add_dependency(%q<sidekiq>.freeze, ["~> 6.1"])
@@ -180,14 +309,16 @@ Gem::Specification.new do |s|
180
309
  s.add_dependency(%q<roda-route_list>.freeze, ["~> 2.1"])
181
310
  s.add_dependency(%q<slim>.freeze, ["~> 4.1"])
182
311
  s.add_dependency(%q<jbuilder>.freeze, ["~> 2.10"])
183
- s.add_dependency(%q<oj>.freeze, ["~> 3.10"])
312
+ s.add_dependency(%q<oj>.freeze, ["~> 3.11"])
184
313
  s.add_dependency(%q<tilt-jbuilder>.freeze, ["~> 0.7"])
185
314
  s.add_dependency(%q<rdoc>.freeze, ["~> 6.3"])
186
315
  s.add_dependency(%q<swagger_yard>.freeze, ["~> 1.0"])
187
316
  s.add_dependency(%q<activesupport>.freeze, ["~> 6.1"])
188
- s.add_dependency(%q<sentry-raven>.freeze, ["~> 3.1"])
317
+ s.add_dependency(%q<sentry-ruby>.freeze, ["~> 4.1"])
318
+ s.add_dependency(%q<sentry-sidekiq>.freeze, ["~> 4.1"])
189
319
  s.add_dependency(%q<skylight>.freeze, ["~> 4.3"])
190
320
  s.add_dependency(%q<phony>.freeze, ["~> 2.18"])
321
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.17"])
191
322
  s.add_dependency(%q<gemfile_updater>.freeze, ["~> 0.1"])
192
323
  s.add_dependency(%q<juwelier>.freeze, ["~> 2.4"])
193
324
  s.add_dependency(%q<amazing_print>.freeze, ["~> 1.2"])
@@ -216,7 +347,7 @@ Gem::Specification.new do |s|
216
347
  s.add_dependency(%q<sequel>.freeze, ["~> 5.40"])
217
348
  s.add_dependency(%q<aasm>.freeze, ["~> 5.1"])
218
349
  s.add_dependency(%q<http-accept>.freeze, ["~> 2.1"])
219
- s.add_dependency(%q<maxmind-db>.freeze, ["~> 1.1"])
350
+ s.add_dependency(%q<ipstack>.freeze, ["~> 0.1"])
220
351
  s.add_dependency(%q<rbnacl>.freeze, ["~> 7.1"])
221
352
  s.add_dependency(%q<userstack>.freeze, ["~> 0.1"])
222
353
  s.add_dependency(%q<sidekiq>.freeze, ["~> 6.1"])
@@ -227,14 +358,16 @@ Gem::Specification.new do |s|
227
358
  s.add_dependency(%q<roda-route_list>.freeze, ["~> 2.1"])
228
359
  s.add_dependency(%q<slim>.freeze, ["~> 4.1"])
229
360
  s.add_dependency(%q<jbuilder>.freeze, ["~> 2.10"])
230
- s.add_dependency(%q<oj>.freeze, ["~> 3.10"])
361
+ s.add_dependency(%q<oj>.freeze, ["~> 3.11"])
231
362
  s.add_dependency(%q<tilt-jbuilder>.freeze, ["~> 0.7"])
232
363
  s.add_dependency(%q<rdoc>.freeze, ["~> 6.3"])
233
364
  s.add_dependency(%q<swagger_yard>.freeze, ["~> 1.0"])
234
365
  s.add_dependency(%q<activesupport>.freeze, ["~> 6.1"])
235
- s.add_dependency(%q<sentry-raven>.freeze, ["~> 3.1"])
366
+ s.add_dependency(%q<sentry-ruby>.freeze, ["~> 4.1"])
367
+ s.add_dependency(%q<sentry-sidekiq>.freeze, ["~> 4.1"])
236
368
  s.add_dependency(%q<skylight>.freeze, ["~> 4.3"])
237
369
  s.add_dependency(%q<phony>.freeze, ["~> 2.18"])
370
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.17"])
238
371
  s.add_dependency(%q<gemfile_updater>.freeze, ["~> 0.1"])
239
372
  s.add_dependency(%q<juwelier>.freeze, ["~> 2.4"])
240
373
  s.add_dependency(%q<amazing_print>.freeze, ["~> 1.2"])