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 +4 -4
- data/lib/common_helper.rb +60 -0
- data/lib/jwt_auth_token.rb +25 -80
- data/lib/router_helper.rb +88 -0
- data/lib/user_helper.rb +15 -0
- metadata +32 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfd6d908383535f8d273ec9c48d4f4acabbd5ee9
|
4
|
+
data.tar.gz: d3701dcc04aa86975dd6bac3753611244f38718e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/jwt_auth_token.rb
CHANGED
@@ -1,95 +1,40 @@
|
|
1
|
-
module JwtAuthToken
|
2
|
-
end
|
3
1
|
require 'jwt'
|
4
2
|
require 'rest-client'
|
5
|
-
|
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
|
-
|
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
|
23
|
-
|
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
|
39
|
-
|
40
|
-
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
60
|
-
|
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
|
71
|
-
|
72
|
-
|
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
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
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
|
-
|
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
|
data/lib/user_helper.rb
ADDED
@@ -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
|
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
|