flimper_poncho 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile.lock +3 -18
- data/README.md +14 -2
- data/flimper_poncho.gemspec +1 -1
- data/lib/flimper_poncho/jwts/issuers/for_api_clients.rb +20 -0
- data/lib/flimper_poncho/jwts/issuers/for_users.rb +20 -0
- data/lib/flimper_poncho/jwts/issuers/template.rb +30 -0
- data/lib/flimper_poncho/permissions/checkers/for_api_clients.rb +20 -0
- data/lib/flimper_poncho/permissions/checkers/for_users.rb +20 -0
- data/lib/flimper_poncho/permissions/checkers/template.rb +31 -0
- data/lib/flimper_poncho/version.rb +1 -1
- data/lib/flimper_poncho.rb +4 -1
- metadata +15 -11
- data/lib/flimper_poncho/entities/user_session.rb +0 -26
- data/lib/flimper_poncho/user_session/create.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fc01415394547ff040e49b1a262b2fc437dfb5176fc941e066b2a0a2328a050
|
4
|
+
data.tar.gz: 8fb8ee3817ad0e76afb7b0b374da4ccfb37fe8cbbaba867d9d019e711ac2bd0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88f9c8adae9140491fea28c79cd41d52e7ef48d361ca2e916b0469548c451898f3f2e78ae3fdea54715d6eedc5d1b464b5a37bd4f7cb155af47f0f3cbbd458ed
|
7
|
+
data.tar.gz: 2757b8e1044c7ab2f752e101cd58f8cad1fff4167d9fe6d7afcc2f3b80e5f9311f4a65a667b81b708c641997b671c0203aa710491652c18d077063cfbf80ace1
|
data/Gemfile.lock
CHANGED
@@ -1,39 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
flimper_poncho (0.1.
|
5
|
-
active_interaction (~> 3.7)
|
4
|
+
flimper_poncho (0.1.1)
|
6
5
|
faraday (~> 0.15.4)
|
7
6
|
jwt (~> 2.1)
|
8
7
|
|
9
8
|
GEM
|
10
9
|
remote: https://rubygems.org/
|
11
10
|
specs:
|
12
|
-
active_interaction (3.7.1)
|
13
|
-
activemodel (>= 4, < 7)
|
14
|
-
activemodel (5.2.3)
|
15
|
-
activesupport (= 5.2.3)
|
16
|
-
activesupport (5.2.3)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
11
|
addressable (2.6.0)
|
22
12
|
public_suffix (>= 2.0.2, < 4.0)
|
23
13
|
ast (2.4.0)
|
24
14
|
byebug (11.0.1)
|
25
|
-
concurrent-ruby (1.1.5)
|
26
15
|
crack (0.4.3)
|
27
16
|
safe_yaml (~> 1.0.0)
|
28
17
|
diff-lcs (1.3)
|
29
18
|
faraday (0.15.4)
|
30
19
|
multipart-post (>= 1.2, < 3)
|
31
20
|
hashdiff (0.3.8)
|
32
|
-
i18n (1.6.0)
|
33
|
-
concurrent-ruby (~> 1.0)
|
34
21
|
jaro_winkler (1.5.2)
|
35
22
|
jwt (2.1.0)
|
36
|
-
minitest (5.11.3)
|
37
23
|
multipart-post (2.0.0)
|
38
24
|
parallel (1.17.0)
|
39
25
|
parser (2.6.2.0)
|
@@ -65,10 +51,8 @@ GEM
|
|
65
51
|
unicode-display_width (>= 1.4.0, < 1.6)
|
66
52
|
ruby-progressbar (1.10.0)
|
67
53
|
safe_yaml (1.0.5)
|
68
|
-
thread_safe (0.3.6)
|
69
|
-
tzinfo (1.2.5)
|
70
|
-
thread_safe (~> 0.1)
|
71
54
|
unicode-display_width (1.5.0)
|
55
|
+
vcr (4.0.0)
|
72
56
|
webmock (3.5.1)
|
73
57
|
addressable (>= 2.3.6)
|
74
58
|
crack (>= 0.3.2)
|
@@ -84,6 +68,7 @@ DEPENDENCIES
|
|
84
68
|
rake (~> 12.3)
|
85
69
|
rspec (~> 3.8)
|
86
70
|
rubocop (~> 0.66.0)
|
71
|
+
vcr (~> 4.0)
|
87
72
|
webmock (~> 3.5.1)
|
88
73
|
|
89
74
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -28,9 +28,21 @@ Or install it yourself as:
|
|
28
28
|
|
29
29
|
## Usage
|
30
30
|
|
31
|
-
-
|
31
|
+
- Issue an ApiClient jwt:
|
32
32
|
|
33
|
-
`
|
33
|
+
`Jwts::Issuers::ForApiClients.new(name: 'FLIMPER-BACK', authorization_token: 'FLIMPER-BACK-AUTHORIZATION-TOKEN').issue!`
|
34
|
+
|
35
|
+
- Issue a User jwt:
|
36
|
+
|
37
|
+
`Jwts::Issuers::ForUsers.new(email: 'test@test.com', password: 'password').issue!`
|
38
|
+
|
39
|
+
- Check ApiClient permission:
|
40
|
+
|
41
|
+
`Permissions::Checkers::ForApiClients.new(jwt_token: 'valid_jwt', name: 'FLIMPER-BACK', resource_code: 'TWITTER_API_BACKEND', level: 'READ').can_perform_action?`
|
42
|
+
|
43
|
+
- Check User permission:
|
44
|
+
|
45
|
+
`Permissions::Checkers::ForUsers.new(jwt_token: 'valid_jwt', email: 'email-1@gmail.com', resource_code: 'application-1', level: 'READ').can_perform_action?`
|
34
46
|
|
35
47
|
## Development
|
36
48
|
|
data/flimper_poncho.gemspec
CHANGED
@@ -25,9 +25,9 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'rake', '~> 12.3'
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
27
27
|
spec.add_development_dependency 'rubocop', '~> 0.66.0'
|
28
|
+
spec.add_development_dependency 'vcr', '~> 4.0'
|
28
29
|
spec.add_development_dependency 'webmock', '~> 3.5.1'
|
29
30
|
|
30
|
-
spec.add_dependency 'active_interaction', '~> 3.7'
|
31
31
|
spec.add_dependency 'faraday', '~> 0.15.4'
|
32
32
|
spec.add_dependency 'jwt', '~> 2.1'
|
33
33
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'flimper_poncho/jwts/issuers/template'
|
2
|
+
|
3
|
+
module Jwts
|
4
|
+
module Issuers
|
5
|
+
class ForApiClients < Jwts::Issuers::Template
|
6
|
+
def initialize(name:, authorization_token:)
|
7
|
+
@name = name
|
8
|
+
@authorization_token = authorization_token
|
9
|
+
end
|
10
|
+
|
11
|
+
def poncho_api_endpoint
|
12
|
+
"#{ENV.fetch('PONCHO_API_URL')}/api_clients/jwt_tokens.json"
|
13
|
+
end
|
14
|
+
|
15
|
+
def security_data
|
16
|
+
{ name: @name, authorization_token: @authorization_token }.to_json
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'flimper_poncho/jwts/issuers/template'
|
2
|
+
|
3
|
+
module Jwts
|
4
|
+
module Issuers
|
5
|
+
class ForUsers < Jwts::Issuers::Template
|
6
|
+
def initialize(email:, password:)
|
7
|
+
@email = email
|
8
|
+
@password = password
|
9
|
+
end
|
10
|
+
|
11
|
+
def poncho_api_endpoint
|
12
|
+
"#{ENV.fetch('PONCHO_API_URL')}/users/jwt_tokens.json"
|
13
|
+
end
|
14
|
+
|
15
|
+
def security_data
|
16
|
+
{ email: @email, password: @password }.to_json
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Jwts
|
5
|
+
module Issuers
|
6
|
+
class Template
|
7
|
+
def issue!
|
8
|
+
poncho_response = Faraday.new.post do |request|
|
9
|
+
request.url(poncho_api_endpoint)
|
10
|
+
request.headers['Content-Type'] = 'application/json'
|
11
|
+
request.body = security_data
|
12
|
+
end
|
13
|
+
|
14
|
+
return unless poncho_response.success?
|
15
|
+
|
16
|
+
JSON.parse(poncho_response.body).dig('jwt_token')
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def poncho_api_endpoint
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
|
25
|
+
def security_data
|
26
|
+
raise NotImplementedError
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'flimper_poncho/permissions/checkers/template'
|
2
|
+
|
3
|
+
module Permissions
|
4
|
+
module Checkers
|
5
|
+
class ForApiClients < Permissions::Checkers::Template
|
6
|
+
attr_reader :jwt_token
|
7
|
+
|
8
|
+
def initialize(jwt_token:, resource_code:, level:, name:)
|
9
|
+
@jwt_token = jwt_token
|
10
|
+
@resource_code = resource_code
|
11
|
+
@level = level
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def permission_query
|
16
|
+
{ 'name' => @name, 'resource_code' => @resource_code, 'level' => @level }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'flimper_poncho/permissions/checkers/template'
|
2
|
+
|
3
|
+
module Permissions
|
4
|
+
module Checkers
|
5
|
+
class ForUsers < Permissions::Checkers::Template
|
6
|
+
attr_reader :jwt_token
|
7
|
+
|
8
|
+
def initialize(jwt_token:, resource_code:, level:, email:)
|
9
|
+
@jwt_token = jwt_token
|
10
|
+
@resource_code = resource_code
|
11
|
+
@level = level
|
12
|
+
@email = email
|
13
|
+
end
|
14
|
+
|
15
|
+
def permission_query
|
16
|
+
{ 'email' => @email, 'resource_code' => @resource_code, 'level' => @level }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'jwt'
|
2
|
+
|
3
|
+
module Permissions
|
4
|
+
module Checkers
|
5
|
+
class Template
|
6
|
+
def can_perform_action?
|
7
|
+
permissions.include?(permission_query) || permissions.include?(permission_query.merge('level' => 'ADMIN'))
|
8
|
+
rescue JWT::DecodeError
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def permissions
|
15
|
+
decoded_jwt.dig('permissions') || []
|
16
|
+
end
|
17
|
+
|
18
|
+
def decoded_jwt
|
19
|
+
JWT.decode(jwt_token, ENV.fetch('PONCHO_API_SIGNATURE_KEY'), true, algorithm: 'HS256')[0]
|
20
|
+
end
|
21
|
+
|
22
|
+
def permission_query
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
|
26
|
+
def jwt_token
|
27
|
+
raise NotImplementedError
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/flimper_poncho.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
require 'flimper_poncho/version'
|
2
|
-
require 'flimper_poncho/
|
2
|
+
require 'flimper_poncho/jwts/issuers/for_api_clients'
|
3
|
+
require 'flimper_poncho/jwts/issuers/for_users'
|
4
|
+
require 'flimper_poncho/permissions/checkers/for_api_clients'
|
5
|
+
require 'flimper_poncho/permissions/checkers/for_users'
|
3
6
|
|
4
7
|
module FlimperPoncho
|
5
8
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flimper_poncho
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Gonzaga
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,33 +81,33 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.66.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: vcr
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '4.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '4.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: webmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
104
|
-
type: :
|
103
|
+
version: 3.5.1
|
104
|
+
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 3.5.1
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: faraday
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,8 +157,12 @@ files:
|
|
157
157
|
- bin/setup
|
158
158
|
- flimper_poncho.gemspec
|
159
159
|
- lib/flimper_poncho.rb
|
160
|
-
- lib/flimper_poncho/
|
161
|
-
- lib/flimper_poncho/
|
160
|
+
- lib/flimper_poncho/jwts/issuers/for_api_clients.rb
|
161
|
+
- lib/flimper_poncho/jwts/issuers/for_users.rb
|
162
|
+
- lib/flimper_poncho/jwts/issuers/template.rb
|
163
|
+
- lib/flimper_poncho/permissions/checkers/for_api_clients.rb
|
164
|
+
- lib/flimper_poncho/permissions/checkers/for_users.rb
|
165
|
+
- lib/flimper_poncho/permissions/checkers/template.rb
|
162
166
|
- lib/flimper_poncho/version.rb
|
163
167
|
homepage: https://github.com/flimperapp/poncho_gem
|
164
168
|
licenses:
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'jwt'
|
2
|
-
|
3
|
-
module FlimperPoncho
|
4
|
-
module Entities
|
5
|
-
class UserSession
|
6
|
-
attr_reader :email, :authorization_token, :permissions
|
7
|
-
|
8
|
-
def initialize(jwt:)
|
9
|
-
@jwt = jwt
|
10
|
-
@authorization_token = jwt_decode.dig('authorization_token')
|
11
|
-
@email = jwt_decode.dig('email')
|
12
|
-
|
13
|
-
@permissions = jwt_decode.dig('permissions').map do |permission|
|
14
|
-
{ email: permission.dig('email'), resource_code: permission.dig('resource_code'),
|
15
|
-
level: permission.dig('level') }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def jwt_decode
|
22
|
-
@jwt_decode ||= JWT.decode(@jwt, ENV.fetch('PONCHO_API_SIGNATURE_KEY'), true, algorithm: 'HS256')[0]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'active_interaction'
|
2
|
-
require 'faraday'
|
3
|
-
require 'json'
|
4
|
-
require 'flimper_poncho/entities/user_session'
|
5
|
-
|
6
|
-
module FlimperPoncho
|
7
|
-
module UserSession
|
8
|
-
class Create < ActiveInteraction::Base
|
9
|
-
string :email
|
10
|
-
string :password
|
11
|
-
|
12
|
-
validates :email, :password, presence: true
|
13
|
-
|
14
|
-
def execute
|
15
|
-
poncho_response = faraday_connection.post do |request|
|
16
|
-
request.url(poncho_api_url)
|
17
|
-
request.headers['Content-Type'] = 'application/json'
|
18
|
-
request.body = { email: email, password: password }.to_json
|
19
|
-
end
|
20
|
-
|
21
|
-
return unless poncho_response.success?
|
22
|
-
|
23
|
-
FlimperPoncho::Entities::UserSession.new(jwt: JSON.parse(poncho_response.body).dig('jwt_token'))
|
24
|
-
rescue KeyError => error
|
25
|
-
errors.add(:poncho_api_url, error.message)
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def poncho_api_url
|
31
|
-
@poncho_api_url ||= "#{ENV.fetch('PONCHO_API_URL')}/user_sessions"
|
32
|
-
end
|
33
|
-
|
34
|
-
def faraday_connection
|
35
|
-
@faraday_connection ||= Faraday.new
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|