collavre_slack 0.2.6 → 0.2.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d470cccf0cf90daff6918a44ff263700803a3a51114003be481d51fc38431f9
4
- data.tar.gz: 63c5cbebe3fd89218f494a41530e190d1ba85ca419e1baccc45914a40c6995aa
3
+ metadata.gz: 2c3b4139e84c2e9f97e305dda87c4c54982b111c1e7eaa72538b586e3d36b57b
4
+ data.tar.gz: d9fd80c81173f332e5af67a07d0d51dfcff8264bc3a3d202ac4b253fa8cab182
5
5
  SHA512:
6
- metadata.gz: 982316ca1c8c573d38b8f5c95003da48503153067be902844c9462458df362b46d6c2cc9188134d20cec78426355058ded4a54d155e17e3e966eef16a7646ba5
7
- data.tar.gz: 5252ff282030eba366c99c0dbc9c11bb356c824fd65b505d37d0234b51d15fb35be6b68de435713ecd5739573963f0fa5fa689eb09a8cf08113a2132aee476c9
6
+ metadata.gz: 7762c23a74cb167f65ee346a820bd6b6267f5aad64a7093e853a73d0241b3e78e05721889e1d4ee9e1f00f890f167bf4bde7129e7d9cf563e75a213bd07df9b1
7
+ data.tar.gz: fa1e173ca870efe960aab55abb6e03c9451a4cc0860345c470dfd41922ad38195f1d2f4abd78bb5f9a5dc04ed61207e62e9675e29a6a1ddb079558095dcf6fe2
@@ -1,7 +1,27 @@
1
+ # Register Slack OAuth keys with the IntegrationSettings registry so the admin
2
+ # UI can surface them and `Collavre::IntegrationSettings::Resolver` can serve
3
+ # values via the DB > ENV > default precedence. Wrapped in `to_prepare` so
4
+ # definitions re-register on code reload in development.
5
+ Rails.application.config.to_prepare do
6
+ if defined?(Collavre::IntegrationSettings::Registry)
7
+ Collavre::IntegrationSettings::Registry.instance.register(
8
+ :slack_client_id, category: "slack", sensitive: false, requires_restart: true
9
+ )
10
+ Collavre::IntegrationSettings::Registry.instance.register(
11
+ :slack_client_secret, category: "slack", sensitive: true, requires_restart: true
12
+ )
13
+ Collavre::IntegrationSettings::Registry.instance.register(
14
+ :slack_signing_secret, category: "slack", sensitive: true, requires_restart: true
15
+ )
16
+ Collavre::IntegrationSettings::Registry.instance.register(
17
+ :slack_redirect_uri, category: "slack", sensitive: false, requires_restart: true
18
+ )
19
+ end
20
+ end
21
+
22
+ # Scopes still come from ENV (not registered as a managed integration setting
23
+ # in Phase 1). OAuth credentials are now resolved lazily by Configuration via
24
+ # the Resolver, so they are no longer assigned here.
1
25
  CollavreSlack.configure do |config|
2
- config.client_id = ENV.fetch("SLACK_CLIENT_ID", config.client_id)
3
- config.client_secret = ENV.fetch("SLACK_CLIENT_SECRET", config.client_secret)
4
- config.signing_secret = ENV.fetch("SLACK_SIGNING_SECRET", config.signing_secret)
5
- config.redirect_uri = ENV.fetch("SLACK_REDIRECT_URI", config.redirect_uri)
6
26
  config.scopes = ENV.fetch("SLACK_SCOPES", config.scopes)
7
27
  end
@@ -1,13 +1,51 @@
1
1
  module CollavreSlack
2
+ # Slack engine configuration.
3
+ #
4
+ # OAuth credential getters (`client_id`, `client_secret`, `signing_secret`,
5
+ # `redirect_uri`) resolve through `Collavre::IntegrationSettings::Resolver`,
6
+ # which honors the DB > ENV > registered default precedence. Writers are
7
+ # preserved so tests and explicit `CollavreSlack.configure` overrides keep
8
+ # working: an explicitly-assigned value short-circuits the resolver.
9
+ #
10
+ # Fallback to plain `ENV[...]` when the resolver is not usable:
11
+ # - `integration_settings` table missing (db:create, db:schema:load,
12
+ # assets:precompile, fresh installs)
13
+ # - DB connection not established
14
+ # - `Collavre::IntegrationSettings` API not present in the installed
15
+ # core `collavre` gem (e.g. `USE_COLLAVRE_GEM=true` pinned to a
16
+ # version predating this feature)
2
17
  class Configuration
3
- attr_accessor :client_id, :client_secret, :signing_secret, :redirect_uri, :scopes
18
+ RESOLVER_KEYS = {
19
+ client_id: { registry: :slack_client_id, env: "SLACK_CLIENT_ID" },
20
+ client_secret: { registry: :slack_client_secret, env: "SLACK_CLIENT_SECRET" },
21
+ signing_secret: { registry: :slack_signing_secret, env: "SLACK_SIGNING_SECRET" },
22
+ redirect_uri: { registry: :slack_redirect_uri, env: "SLACK_REDIRECT_URI" }
23
+ }.freeze
24
+
25
+ attr_writer :client_id, :client_secret, :signing_secret, :redirect_uri
26
+ attr_accessor :scopes
4
27
 
5
28
  def initialize
6
- @client_id = ENV.fetch("SLACK_CLIENT_ID", "")
7
- @client_secret = ENV.fetch("SLACK_CLIENT_SECRET", "")
8
- @signing_secret = ENV.fetch("SLACK_SIGNING_SECRET", "")
9
- @redirect_uri = ENV.fetch("SLACK_REDIRECT_URI", "")
10
29
  @scopes = ENV.fetch("SLACK_SCOPES", "chat:write,channels:read,channels:history,groups:read,im:read,mpim:read,users:read,users:read.email,reactions:read,reactions:write")
11
30
  end
31
+
32
+ RESOLVER_KEYS.each do |attr, meta|
33
+ define_method(attr) do
34
+ ivar = instance_variable_get(:"@#{attr}")
35
+ return ivar unless ivar.nil?
36
+
37
+ resolve_setting(meta[:registry], meta[:env])
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def resolve_setting(registry_key, env_var)
44
+ return ENV[env_var] unless defined?(Collavre::IntegrationSettings::Resolver)
45
+
46
+ Collavre::IntegrationSettings::Resolver.get(registry_key)
47
+ rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotEstablished
48
+ ENV[env_var]
49
+ end
12
50
  end
13
51
  end
@@ -1,3 +1,3 @@
1
1
  module CollavreSlack
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collavre_slack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Collavre