moesif_rack 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -13
- data/lib/moesif_rack/moesif_middleware.rb +38 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0cc9c9466e539ecf7d672312b98ed2f228a6b850f7c7e315559f80e31ee937a7
|
4
|
+
data.tar.gz: ba2f944d8f3f19cb451c64113412780cd8141359f6473992b603fe9eddf43bac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecac64d6a6f05a347ccb9927630e3a48eda1ad75ec65d32dc23742483f311fa55b8a5d6720bfda6e7bff49146852410c80b4d6a4cae8b17917f16a4458630523
|
7
|
+
data.tar.gz: 630eb05009f358ee214a61e386f0e933222ebeced3ea38e158d70e3f1629351ef52ff885736f2dfb4e49dd41f8c6271ca8ca2731b17cfc363d46c52ab423b375
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ gem install moesif_rack
|
|
22
22
|
and if you have a `Gemfile` in your project, please add this line to
|
23
23
|
|
24
24
|
```
|
25
|
-
gem 'moesif_rack', '~> 1.4.
|
25
|
+
gem 'moesif_rack', '~> 1.4.1'
|
26
26
|
|
27
27
|
```
|
28
28
|
|
@@ -334,7 +334,7 @@ This method is a convenient helper that calls the Moesif API lib.
|
|
334
334
|
For details, visit the [Ruby API Reference](https://www.moesif.com/docs/api?ruby#update-a-user).
|
335
335
|
|
336
336
|
```ruby
|
337
|
-
metadata
|
337
|
+
metadata = {
|
338
338
|
:email => 'john@acmeinc.com',
|
339
339
|
:first_name => 'John',
|
340
340
|
:last_name => 'Doe',
|
@@ -348,7 +348,7 @@ metadata => {
|
|
348
348
|
|
349
349
|
# Campaign object is optional, but useful if you want to track ROI of acquisition channels
|
350
350
|
# See https://www.moesif.com/docs/api#users for campaign schema
|
351
|
-
campaign = CampaignModel.new()
|
351
|
+
campaign = MoesifApi::CampaignModel.new()
|
352
352
|
campaign.utm_source = "google"
|
353
353
|
campaign.utm_medium = "cpc"
|
354
354
|
campaign.utm_campaign = "adwords"
|
@@ -357,7 +357,7 @@ campaign.utm_content = "landing"
|
|
357
357
|
|
358
358
|
# Only user_id is required.
|
359
359
|
# metadata can be any custom object
|
360
|
-
user = UserModel.new()
|
360
|
+
user = MoesifApi::UserModel.new()
|
361
361
|
user.user_id = "12345"
|
362
362
|
user.company_id = "67890" # If set, associate user with a company object
|
363
363
|
user.campaign = campaign
|
@@ -375,7 +375,7 @@ For details, visit the [Ruby API Reference](https://www.moesif.com/docs/api?ruby
|
|
375
375
|
```ruby
|
376
376
|
users = []
|
377
377
|
|
378
|
-
metadata
|
378
|
+
metadata = {
|
379
379
|
:email => 'john@acmeinc.com',
|
380
380
|
:first_name => 'John',
|
381
381
|
:last_name => 'Doe',
|
@@ -389,7 +389,7 @@ metadata => {
|
|
389
389
|
|
390
390
|
# Campaign object is optional, but useful if you want to track ROI of acquisition channels
|
391
391
|
# See https://www.moesif.com/docs/api#users for campaign schema
|
392
|
-
campaign = CampaignModel.new()
|
392
|
+
campaign = MoesifApi::CampaignModel.new()
|
393
393
|
campaign.utm_source = "google"
|
394
394
|
campaign.utm_medium = "cpc"
|
395
395
|
campaign.utm_campaign = "adwords"
|
@@ -398,7 +398,7 @@ campaign.utm_content = "landing"
|
|
398
398
|
|
399
399
|
# Only user_id is required.
|
400
400
|
# metadata can be any custom object
|
401
|
-
user = UserModel.new()
|
401
|
+
user = MoesifApi::UserModel.new()
|
402
402
|
user.user_id = "12345"
|
403
403
|
user.company_id = "67890" # If set, associate user with a company object
|
404
404
|
user.campaign = campaign
|
@@ -419,7 +419,7 @@ This method is a convenient helper that calls the Moesif API lib.
|
|
419
419
|
For details, visit the [Ruby API Reference](https://www.moesif.com/docs/api?ruby#update-a-company).
|
420
420
|
|
421
421
|
```ruby
|
422
|
-
metadata
|
422
|
+
metadata = {
|
423
423
|
:org_name => 'Acme, Inc',
|
424
424
|
:plan_name => 'Free',
|
425
425
|
:deal_stage => 'Lead',
|
@@ -432,7 +432,7 @@ metadata => {
|
|
432
432
|
|
433
433
|
# Campaign object is optional, but useful if you want to track ROI of acquisition channels
|
434
434
|
# See https://www.moesif.com/docs/api#update-a-company for campaign schema
|
435
|
-
campaign = CampaignModel.new()
|
435
|
+
campaign = MoesifApi::CampaignModel.new()
|
436
436
|
campaign.utm_source = "google"
|
437
437
|
campaign.utm_medium = "cpc"
|
438
438
|
campaign.utm_campaign = "adwords"
|
@@ -441,7 +441,7 @@ campaign.utm_content = "landing"
|
|
441
441
|
|
442
442
|
# Only company_id is required.
|
443
443
|
# metadata can be any custom object
|
444
|
-
company = CompanyModel.new()
|
444
|
+
company = MoesifApi::CompanyModel.new()
|
445
445
|
company.company_id = "67890"
|
446
446
|
company.company_domain = "acmeinc.com" # If domain is set, Moesif will enrich your profiles with publicly available info
|
447
447
|
company.campaign = campaign
|
@@ -459,7 +459,7 @@ For details, visit the [Ruby API Reference](https://www.moesif.com/docs/api?ruby
|
|
459
459
|
```ruby
|
460
460
|
companies = []
|
461
461
|
|
462
|
-
metadata
|
462
|
+
metadata = {
|
463
463
|
:org_name => 'Acme, Inc',
|
464
464
|
:plan_name => 'Free',
|
465
465
|
:deal_stage => 'Lead',
|
@@ -472,7 +472,7 @@ metadata => {
|
|
472
472
|
|
473
473
|
# Campaign object is optional, but useful if you want to track ROI of acquisition channels
|
474
474
|
# See https://www.moesif.com/docs/api#update-a-company for campaign schema
|
475
|
-
campaign = CampaignModel.new()
|
475
|
+
campaign = MoesifApi::CampaignModel.new()
|
476
476
|
campaign.utm_source = "google"
|
477
477
|
campaign.utm_medium = "cpc"
|
478
478
|
campaign.utm_campaign = "adwords"
|
@@ -481,7 +481,7 @@ campaign.utm_content = "landing"
|
|
481
481
|
|
482
482
|
# Only company_id is required.
|
483
483
|
# metadata can be any custom object
|
484
|
-
company = CompanyModel.new()
|
484
|
+
company = MoesifApi::CompanyModel.new()
|
485
485
|
company.company_id = "67890"
|
486
486
|
company.company_domain = "acmeinc.com" # If domain is set, Moesif will enrich your profiles with publicly available info
|
487
487
|
company.campaign = campaign
|
@@ -6,6 +6,8 @@ require_relative './client_ip.rb'
|
|
6
6
|
require_relative './app_config.rb'
|
7
7
|
require_relative './update_user.rb'
|
8
8
|
require_relative './update_company.rb'
|
9
|
+
require 'zlib'
|
10
|
+
require 'stringio'
|
9
11
|
|
10
12
|
module MoesifRack
|
11
13
|
|
@@ -71,6 +73,39 @@ module MoesifRack
|
|
71
73
|
CompanyHelper.new.update_companies_batch(@api_controller, @debug, company_profiles)
|
72
74
|
end
|
73
75
|
|
76
|
+
def start_with_json(body)
|
77
|
+
body.start_with?('{') || body.start_with?('[')
|
78
|
+
end
|
79
|
+
|
80
|
+
def decompress_body(body)
|
81
|
+
Zlib::GzipReader.new(StringIO.new(body)).read
|
82
|
+
end
|
83
|
+
|
84
|
+
def transform_headers(headers)
|
85
|
+
Hash[headers.map { |k, v| [k.downcase, v]}]
|
86
|
+
end
|
87
|
+
|
88
|
+
def base64_encode_body(body)
|
89
|
+
return Base64.encode64(body), 'base64'
|
90
|
+
end
|
91
|
+
|
92
|
+
def parse_body(body, headers)
|
93
|
+
begin
|
94
|
+
if start_with_json(body)
|
95
|
+
parsed_body = JSON.parse(body)
|
96
|
+
transfer_encoding = 'json'
|
97
|
+
elsif headers.key?('content-encoding') && ((headers['content-encoding'].downcase).include? "gzip")
|
98
|
+
uncompressed_string = decompress_body(body)
|
99
|
+
parsed_body, transfer_encoding = base64_encode_body(uncompressed_string)
|
100
|
+
else
|
101
|
+
parsed_body, transfer_encoding = base64_encode_body(body)
|
102
|
+
end
|
103
|
+
rescue
|
104
|
+
parsed_body, transfer_encoding = base64_encode_body(body)
|
105
|
+
end
|
106
|
+
return parsed_body, transfer_encoding
|
107
|
+
end
|
108
|
+
|
74
109
|
def call env
|
75
110
|
start_time = Time.now.utc.iso8601
|
76
111
|
|
@@ -86,7 +121,7 @@ module MoesifRack
|
|
86
121
|
complex_copy = env.dup
|
87
122
|
|
88
123
|
req_headers = {}
|
89
|
-
complex_copy.select {|k,v| k.start_with?
|
124
|
+
complex_copy.select {|k,v| k.start_with?('HTTP_', 'CONTENT_') }.each do |key, val|
|
90
125
|
new_key = key.sub(/^HTTP_/, '')
|
91
126
|
new_key = new_key.sub('_', '-')
|
92
127
|
req_headers[new_key] = val
|
@@ -99,12 +134,7 @@ module MoesifRack
|
|
99
134
|
|
100
135
|
if @log_body
|
101
136
|
if req_body_string && req_body_string.length != 0
|
102
|
-
|
103
|
-
req_body = JSON.parse(req_body_string)
|
104
|
-
rescue
|
105
|
-
req_body = Base64.encode64(req_body_string)
|
106
|
-
req_body_transfer_encoding = 'base64'
|
107
|
-
end
|
137
|
+
req_body, req_body_transfer_encoding = parse_body(req_body_string, transform_headers(req_headers))
|
108
138
|
end
|
109
139
|
end
|
110
140
|
|
@@ -116,12 +146,7 @@ module MoesifRack
|
|
116
146
|
|
117
147
|
if @log_body
|
118
148
|
if rsp_body_string && rsp_body_string.length != 0
|
119
|
-
|
120
|
-
rsp_body = JSON.parse(rsp_body_string)
|
121
|
-
rescue
|
122
|
-
rsp_body = Base64.encode64(rsp_body_string)
|
123
|
-
rsp_body_transfer_encoding = 'base64'
|
124
|
-
end
|
149
|
+
rsp_body, rsp_body_transfer_encoding = parse_body(rsp_body_string, transform_headers(rsp_headers))
|
125
150
|
end
|
126
151
|
end
|
127
152
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moesif_rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Moesif, Inc
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-05-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-unit
|