activegraphql 0.3.1 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d8c3a3222f6be5ffc60f43b15adcd545fdbd9cb
4
- data.tar.gz: b6e46df0201477df4552eaaccabf2f16fa3c9081
3
+ metadata.gz: 7d7b827f9b88c797862ac466ea064c90a7f1d310
4
+ data.tar.gz: 84a3cbb3591d9b0578148c035a05497c58b2c141
5
5
  SHA512:
6
- metadata.gz: e72403cb55184b1b8008f95128ab7271234fdf571bdb0f185e23eca20f39c0188d7f9d2873347cc0a9e558257f04d73b03d240451a10f198aebfea4c888ce501
7
- data.tar.gz: 027b1190f1659bd8f563aa70290294ebc0077bad4a530be870b136ccee465e20902e98baa55f761d0bb9ba69533116c86b65911a88ebeb86523532bbd381723b
6
+ metadata.gz: 565f09a87675ddf99b4d6408e5fb0479323778f44f14873aa7d19aac493c3c15c81b9533cf2d01b61d8c821eac731d76a70d604e62ae06928cc415ee94582d85
7
+ data.tar.gz: c63f44e7d151303ef0b3794ca305e9342a84909eb493d842ab18f5c2a5981175c1b5e939966995a334e41f9825c68397244ade7a803b04636a5b6a6ad8d18682
data/README.md CHANGED
@@ -130,3 +130,39 @@ class MyModel < ActiveGraphQL::Model
130
130
  max_interval: 1 }
131
131
  end
132
132
  ```
133
+
134
+ ### Authorization
135
+ It's currently supporting simple bearer authorization using `auth` option.
136
+
137
+ It basically offers two configuration params:
138
+
139
+ - `strategy`: Currently, `bearer` strategy is the only one available.
140
+ - `class`: The existing strategy uses your own custom class to encode a token (the class must provide at least an `.encode` class method).
141
+
142
+ Your encoder class may look like that:
143
+ ```ruby
144
+ class YourEncoderClass
145
+ def self.secret
146
+ 'your-safely-secured-secret'
147
+ end
148
+
149
+ def self.encode
150
+ # You could have custom stuff here like adding expiration to the payload.
151
+ payload = { exp: (Time.current.to_i + 100) }
152
+ JWT.encode(payload, secret)
153
+ end
154
+
155
+ def self.decode(token)
156
+ JWT.decode(token, secret)
157
+ end
158
+ end
159
+ ```
160
+
161
+ Then your configuration would look like the next:
162
+ ```ruby
163
+ class MyModel < ActiveGraphQL::Model
164
+ configure auth: { strategy: :bearer, class: YourEncoderClass }
165
+ end
166
+ ```
167
+
168
+
@@ -18,12 +18,24 @@ module ActiveGraphQL
18
18
  end
19
19
 
20
20
  def request_options
21
- { query: { query: to_s } }.tap do |opts|
22
- opts.merge!(headers: { 'Accept-Language' => locale.to_s }) if locale.present?
21
+ {}.tap do |opts|
22
+ opts[:query] = request_params
23
+ opts[:headers] = request_headers if request_headers.present?
23
24
  opts.merge!(config[:http]) if config[:http].present?
24
25
  end
25
26
  end
26
27
 
28
+ def request_headers
29
+ {}.tap do |headers|
30
+ headers['Authorization'] = "Bearer #{auth_token}" if auth_header?
31
+ headers['Accept-Language'] = locale.to_s if locale.present?
32
+ end
33
+ end
34
+
35
+ def request_params
36
+ { query: to_s }
37
+ end
38
+
27
39
  def response_data
28
40
  return unless response['data']
29
41
  to_snake_case(response['data'][qaction])
@@ -73,6 +85,26 @@ module ActiveGraphQL
73
85
 
74
86
  private
75
87
 
88
+ def auth_header?
89
+ auth_strategy == :bearer
90
+ end
91
+
92
+ def auth_config
93
+ @auth_config ||= config[:auth] || {}
94
+ end
95
+
96
+ def auth_strategy
97
+ @auth_strategy ||= auth_config[:strategy]
98
+ end
99
+
100
+ # ActiveGraphQL currently supports bearer authorization with given class to encode.
101
+ # So if the "bearer" is not configured or the "class" is not present it's
102
+ # returning a nil token.
103
+ def auth_token
104
+ return if auth_config[:strategy] != :bearer || auth_config[:class].blank?
105
+ @auth_token ||= auth_config[:class].encode
106
+ end
107
+
76
108
  def to_snake_case(value)
77
109
  case value
78
110
  when Array
@@ -1,3 +1,3 @@
1
1
  module ActiveGraphQL
2
- VERSION = '0.3.1'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegraphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wakoopa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler