jwt_auth_token 1.0.8 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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