spd_jwt_authorizor 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b78365aef0c3f642e17e5085ed9629989484bace2855a123760dbd3c092e40db
4
+ data.tar.gz: ba44e6ce12898c2b62ff212b0e73ea9e3bb5439c488bb9ced2cb6845a60eab68
5
+ SHA512:
6
+ metadata.gz: a66c6d3b59b3d7d9f9a2247c0842c084d00ea6ea18041dde16d17e622e8076ea6b265a330e8f5a7682f71ceff3d33f11f93fa70e21d0c5112929b0840bd49053
7
+ data.tar.gz: 1c497416f0118570e132e19e41374ffd04cde6c776d502cb71f257d8f7a1369f81c2f03bb49eeb888885c3f613359a18de9cd88d803dbbea534447235ca96595
@@ -0,0 +1,3 @@
1
+ module SapaadJwtAuthorizor
2
+ class BlankSecretKey < StandardError; end
3
+ end
@@ -0,0 +1,69 @@
1
+ require 'jwt'
2
+ require 'errors/blank_secret_key'
3
+
4
+ # :nodoc:
5
+ module SpdJwtAuthorizor
6
+ class Engine
7
+ def initialize(jwt:)
8
+ @jwt = jwt
9
+ check_if_env_set!
10
+ end
11
+
12
+ def authorized?(required_permissions:, match: :all)
13
+ return false unless ok?
14
+
15
+ if match == :all
16
+ # JWT should contain all mentioned permissions
17
+ (required_permissions & payload['aud']).count ==
18
+ required_permissions.count
19
+ elsif match == :any
20
+ # JWT should contain AT LEAST ONE of the mentioned permissions
21
+ (required_permissions & payload['aud']).count.positive?
22
+ end
23
+ end
24
+
25
+ def ok?
26
+ decodable? && verified? && !expired?
27
+ end
28
+
29
+ def expired?
30
+ JWT.decode(@jwt, ENV['JWT_SECRET_KEY'], true)
31
+ false
32
+ rescue JWT::ExpiredSignature
33
+ puts 'SapaadJwtAuthorizor: JWT is Expired!'
34
+ true
35
+ end
36
+
37
+ def verified?
38
+ JWT.decode(@jwt, ENV['JWT_SECRET_KEY'], true)
39
+ true
40
+ rescue JWT::ExpiredSignature
41
+ true
42
+ rescue JWT::VerificationError
43
+ puts 'SapaadJwtAuthorizor: JWT is not Verified!'
44
+ false
45
+ end
46
+
47
+ def decodable?
48
+ JWT.decode(@jwt, ENV['JWT_SECRET_KEY'], false)
49
+ true
50
+ rescue JWT::DecodeError
51
+ puts 'SapaadJwtAuthorizor: JWT is not decodable!'
52
+ false
53
+ end
54
+
55
+ def payload
56
+ JWT.decode(@jwt, ENV['JWT_SECRET_KEY'], false).first
57
+ rescue JWT::DecodeError
58
+ puts 'SapaadJwtAuthorizor: JWT is not decodable!'
59
+ nil
60
+ end
61
+
62
+ private
63
+
64
+ def check_if_env_set!
65
+ raise BlankSecretKey, 'Cannot find the env JWT_SECRET_KEY' if
66
+ ENV['JWT_SECRET_KEY'].to_s.empty?
67
+ end
68
+ end
69
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spd_jwt_authorizor
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Alan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jwt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ description: Checks for JWT validity, expiry, and User roles
28
+ email:
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/errors/blank_secret_key.rb
34
+ - lib/spd_jwt_authorizor.rb
35
+ homepage:
36
+ licenses: []
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.3.0
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubygems_version: 3.0.0
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: Authorizes requests based on the user roles and provided roles
57
+ test_files: []