jwt_auth_token 1.0.8 → 1.1.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: c13940c7493f39a8d12861a6b8ddfcd4752230b2
4
- data.tar.gz: 141c14773be6dc083a94c62ceb815b5cba85a79e
3
+ metadata.gz: cfd6d908383535f8d273ec9c48d4f4acabbd5ee9
4
+ data.tar.gz: d3701dcc04aa86975dd6bac3753611244f38718e
5
5
  SHA512:
6
- metadata.gz: a22a5f4c18539f9285fd3be534c9a0a243c8ea66c2c239d3b9f97a4b1cc8a423d83aaf0e2df9ec8686645a794c05cbe2f3a6e26d36a8a8c6dda8552c4abc1645
7
- data.tar.gz: 7e458a448fc5f81711240607a43ffebb2f70b199117f60987555cfe465d316747bdf01249b40b1bc3dceaa47d2a35adaf930de9cd38c8f0b93b2bf4cb0508de1
6
+ metadata.gz: 819632ce7bdc0257fff56c7146f1f25da565749ab0a5df8fe939bc2f39a726d805a98eacad5dad27edbe9073035d0d944894499948eba8f656080a77ccd83da6
7
+ data.tar.gz: ee5d58d015f47d4b1640238450e3614cab2825b9daf7104e6e1fc7d568b06b08b7b0c87449d003b3d7cf0bc62188f0f4f5eef607fe1e8fbd370f77ac177ecb29
@@ -0,0 +1,60 @@
1
+ module CommonHelper
2
+ def current_micro_service_name
3
+ @_current_micro_service_name ||= Rails.configuration.database_configuration[Rails.env]['mongodb_logger']['application_name']
4
+ end
5
+
6
+ def required_organization
7
+ @organization ||= Organization.find_by(namespace: params[:namespace], language: params[:language])
8
+ render_error("Organization or Language not found", 404) if @organization.nil?
9
+ end
10
+
11
+ def render_error(msg, status)
12
+ render json: {:error => msg, :status => status}, :status => status
13
+ end
14
+
15
+ def redis_set(batch_set)
16
+ batch_set.each {|key, value| d}
17
+ end
18
+
19
+ def redis_get(key)
20
+ (JSON.parse($redis.get(key)) || {}) rescue {}
21
+ end
22
+
23
+ def redis_data(key, value)
24
+ {key: key, value: value}
25
+ end
26
+
27
+ def redis_process
28
+ redis_set(_batch_events)
29
+ end
30
+
31
+ def add_custom_params_to_logger
32
+ Rails.logger.add_metadata(custom_meta_data_log) if Rails.logger.respond_to?(:add_metadata)
33
+ end
34
+
35
+ def user_agent_meta_log
36
+ ua = DeviceDetector.new(request.user_agent)
37
+ device_info = [:name, :full_version, :user_agent, :os_name, :os_full_version, :device_name, :device_brand, :device_type, :known?, :bot?, :bot_name]
38
+ info_data = {url: request.url, referer: request.referer}
39
+ ua.methods.select {|c| info_data[c] = ua.__send__(c) if device_info.include?(c) }
40
+ info_data
41
+ end
42
+
43
+ def custom_params_meta_log
44
+ {c_source: params[:C_source], c_id: params[:C_id]}
45
+ end
46
+
47
+ def common_params_meta_log
48
+ {referer_service: params[:referer_service]}
49
+ end
50
+
51
+ def custom_meta_data_log
52
+ user_meta_log.merge!(user_agent_meta_log).merge!(custom_params_meta_log).merge!(common_params_meta_log)
53
+ end
54
+
55
+ def user_meta_log
56
+ return {} unless current_user
57
+ user_meta_data = {}
58
+ user_meta_data[:user_id] = current_user.id
59
+ end
60
+ end
@@ -1,95 +1,40 @@
1
- module JwtAuthToken
2
- end
3
1
  require 'jwt'
4
2
  require 'rest-client'
5
- def jwt_hmac_secret
6
- @_jwt_hmac_secret ||= Rails.application.secrets[:secret_key_base]
7
- end
8
-
9
- def jwt_algorithm
10
- @_jwt_algorithm ||= 'HS512'
11
- end
12
-
13
- def header_name
14
- @_header_name ||= "embibe-token"
15
- end
3
+ require 'csv'
16
4
 
17
- def jwt_set_header(data)
18
- encoded_token = JWT.encode(data,jwt_hmac_secret,jwt_algorithm)
19
- response.set_header(header_name, encoded_token)
20
- end
5
+ module JwtAuthToken
21
6
 
22
- def authenticate_user?
23
- if is_valid_token?
24
- return true
25
- else
26
- render json: {"error" => "User Authentication Failed", :status => 401}, :status => 401 and return
7
+ def jwt_hmac_secret
8
+ @_jwt_hmac_secret ||= Rails.application.secrets[:secret_key_base]
27
9
  end
28
- end
29
-
30
- def current_user
31
- @_current_user ||= OpenStruct.new(@decoded_token) if is_valid_token?
32
- end
33
-
34
- def header_token
35
- @_header_token ||= request.headers[header_name] rescue nil
36
- end
37
10
 
38
- def is_valid_token?
39
- begin
40
- @decoded_token = JSON.parse(JWT.decode(header_token, jwt_hmac_secret, true, { :algorithm => jwt_algorithm })[0])
41
- return validate_keys
42
- rescue Exception => e
43
- return false
44
- end
45
- end
46
-
47
- def validate_keys
48
- !!@_validate_keys ||= (@decoded_token.keys && ["id", "email"]).any?
49
- end
11
+ def jwt_algorithm
12
+ @_jwt_algorithm ||= 'HS512'
13
+ end
50
14
 
51
- ROUTES = {}
52
- def restClientUrl(url, payload = {})
53
- @_get_routers ||= get_routers
54
- _req = OpenStruct.new(ROUTES[url])
55
- data = RestClient::Request.execute(method: _req.verb, url: _req.url, payload: payload, headers: { "#{header_name}" => header_token})
56
- {code: data.code, data: JSON.parse(data.body), headers: data.headers, cookies: data.cookies}
57
- end
15
+ def jwt_set_header(data)
16
+ encoded_token = JWT.encode(data,jwt_hmac_secret,jwt_algorithm)
17
+ response.set_header(jwt_header_name, encoded_token)
18
+ end
58
19
 
59
- def get_routers
60
- Rails.application.routes.routes.map do |route|
61
- path = route.path.spec.to_s.gsub(/\(\.:format\)/, "").gsub(/:[a-zA-Z_]+/, "1")
62
- next if path.include?("rails")
63
- port = ":#{route.defaults[:port]}" if route.defaults[:port]
64
- complete_url = "#{route.defaults[:host]}#{port}#{path}"
65
- verb = %W{ GET POST PUT PATCH DELETE }.grep(route.verb).first.downcase.to_sym rescue nil
66
- ROUTES["#{route.name}_url"] = { path: path, verb: verb, url: complete_url}
20
+ def jwt_header_name
21
+ @_jwt_header_name ||= "embibe-token"
67
22
  end
68
- end
69
23
 
70
- def services_development_urls
71
- @_services_development_urls ||= {user_host_service: {url: "http://localhost", port: 3000},
72
- mocktest_host_service: {url: "http://localhost", port: 3002},
73
- practice_host_service: {url: "http://localhost", port: 3001},
74
- payment_host_service: {url: "http://localhost", port: 3003},
75
- content_host_service: {url: "http://localhost", port: 3004},
76
- }
77
- end
24
+ def jwt_header_token
25
+ @_jwt_header_token ||= request.headers[jwt_header_name] rescue nil
26
+ end
78
27
 
79
- def services_production_urls
80
- @_services_production_urls ||= {user_host_service: {url: "http://user.embibe.com", port: nil},
81
- mocktest_host_service: {url: "http://mocktest.embibe.com", port: nil},
82
- practice_host_service: {url: "http://practice.embibe.com", port: nil},
83
- payment_host_service: {url: "http://payment.embibe.com", port: nil},
84
- content_host_service: {url: "http://content.embibe.com", port: nil},
85
- }
28
+ def is_jwt_valid_token?
29
+ begin
30
+ @decoded_token = JSON.parse(JWT.decode(jwt_header_token, jwt_hmac_secret, true, { :algorithm => jwt_algorithm })[0])
31
+ return validate_keys
32
+ rescue Exception => e
33
+ return false
34
+ end
35
+ end
86
36
 
87
37
  end
88
38
 
89
- def generate_third_party_url
90
- urls = send("services_#{Rails.env}_urls")
91
- urls.map {|key,values| values.map {|k,v| define_method("#{key}_#{k}") { v }}}
92
- end
39
+ include JwtAuthToken, UserHelper, RouterHelper, CommonHelper
93
40
  generate_third_party_url
94
-
95
-
@@ -0,0 +1,88 @@
1
+ ROUTES = {}
2
+ module RouterHelper
3
+
4
+ def restClientUrl(url, payload = {})
5
+ @_get_routers ||= get_routers
6
+ _req = OpenStruct.new(ROUTES[url])
7
+ payload = (JSON.parse(payload.to_json)).with_indifferent_access
8
+ payload[:referer_service] = current_micro_service_name
9
+ begin
10
+ data = RestClient::Request.execute(method: _req.verb, url: _req.url, payload: payload, headers: { "#{jwt_header_name}" => jwt_header_token})
11
+ data = {code: data.code, data: JSON.parse(data.body), headers: data.headers, cookies: data.cookies}
12
+ rescue RestClient::Unauthorized, RestClient::Forbidden => err
13
+ data = JSON.parse(err.response)
14
+ rescue RestClient::ResourceNotFound => err
15
+ data = {code: 404, error: "Url not found #{_req.url}" }
16
+ end
17
+ data
18
+ end
19
+
20
+ def get_routers
21
+ Rails.application.routes.routes.map do |route|
22
+ path = route.path.spec.to_s.gsub(/\(\.:format\)/, "").gsub(/:[a-zA-Z_]+/, "1")
23
+ next if path.include?("rails")
24
+ port = ":#{route.defaults[:port]}" if route.defaults[:port]
25
+ complete_url = "#{route.defaults[:host]}#{port}#{path}"
26
+ verb = %W{ GET POST PUT PATCH DELETE }.grep(route.verb).first.downcase.to_sym rescue nil
27
+ route_name = route.defaults[:controller].gsub("/", "_") rescue route.name
28
+ alias_should_be = route.defaults[:alias_should_be]
29
+ final_key = "#{alias_should_be}_#{route_name}_#{verb}_url"
30
+ ROUTES[final_key] = { path: path, verb: verb, url: complete_url}.merge(route.defaults)
31
+ end
32
+ ROUTES.delete(ROUTES.first.first)
33
+ end
34
+
35
+ def export_urls_csv
36
+ get_routers
37
+ CSV.open("tmp/route_list_#{Rails.env}.csv", 'w') do |csv|
38
+ csv << [ROUTES.first[1].keys.map(&:to_s).unshift("alias") << ["development_url", "production_url"]].flatten
39
+ ROUTES.each do |key, values|
40
+ next if key.include?("rails") || key.include?("__url")
41
+ dev_url = "#{current_service_host_service_url}:#{current_service_host_service_port}#{values.values[2]}"
42
+ prod_url = "#{prod_domain}#{values.values[2]}"
43
+ csv << values.values.map(&:to_s).unshift(key) + [dev_url] + [prod_url]
44
+ end
45
+ end
46
+ end
47
+
48
+ def prod_domain
49
+ "#{current_micro_service_name.split('_')[0]}.embibe.com"
50
+ end
51
+
52
+ def current_service_host_service_url
53
+ eval("#{current_micro_service_name.split('_')[0]}_host_service_url")
54
+ end
55
+
56
+ def current_service_host_service_port
57
+ eval("#{current_micro_service_name.split('_')[0]}_host_service_port")
58
+ end
59
+
60
+ def services_development_urls
61
+ @_services_development_urls ||= {user: {url: "http://localhost", port: 3000},
62
+ practice: {url: "http://localhost", port: 3001},
63
+ mocktest: {url: "http://localhost", port: 3002},
64
+ payment: {url: "http://localhost", port: 3003},
65
+ content: {url: "http://localhost", port: 3004},
66
+ }
67
+ end
68
+
69
+ def services_uri
70
+ @_services_uri ||= send("services_#{Rails.env}_urls")
71
+ end
72
+
73
+ def services_production_urls
74
+ @_services_production_urls ||= {user: {url: "http://user.embibe.com", port: nil},
75
+ mocktest: {url: "http://mocktest.embibe.com", port: nil},
76
+ practice: {url: "http://practice.embibe.com", port: nil},
77
+ payment: {url: "http://payment.embibe.com", port: nil},
78
+ content: {url: "http://content.embibe.com", port: nil},
79
+ }
80
+
81
+ end
82
+
83
+ def generate_third_party_url
84
+ urls = send("services_#{Rails.env}_urls")
85
+ urls.map {|key,values| values.map {|k,v| define_method("#{key}_host_service_#{k}") { v }}}
86
+ end
87
+
88
+ end
@@ -0,0 +1,15 @@
1
+ module UserHelper
2
+
3
+ def current_user
4
+ @_current_user ||= OpenStruct.new(@decoded_token) if is_jwt_valid_token?
5
+ end
6
+
7
+ def authenticate_user?
8
+ if is_jwt_valid_token?
9
+ return true
10
+ else
11
+ render json: {"error" => "User Authentication Failed", :status => 401}, :status => 401 and return
12
+ end
13
+ end
14
+
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jwt_auth_token
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Afzal Lakdawala
@@ -52,13 +52,44 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: device_detector
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: ''
56
84
  email: afzalmlakdawala@gmail.com
57
85
  executables: []
58
86
  extensions: []
59
87
  extra_rdoc_files: []
60
88
  files:
89
+ - lib/common_helper.rb
61
90
  - lib/jwt_auth_token.rb
91
+ - lib/router_helper.rb
92
+ - lib/user_helper.rb
62
93
  homepage: http://rubygems.org/gems/jwt_auth_token
63
94
  licenses:
64
95
  - MIT