Skip to content
This repository has been archived by the owner on Mar 27, 2023. It is now read-only.

Commit

Permalink
fix bug where user agent headers caused encoding error
Browse files Browse the repository at this point in the history
  • Loading branch information
NealJMD committed Apr 26, 2016
1 parent 72135b3 commit 677f004
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 41 deletions.
15 changes: 7 additions & 8 deletions app/controllers/application_controller.rb
Expand Up @@ -49,15 +49,14 @@ def write_member_cookie(member_id)

def mobile_value
device = MobileDetect.new({
HTTP_USER_AGENT: request.user_agent,
HTTP_ACCEPT: request.accept,
HTTP_ACCEPT_LANGUAGE: request.accept_language,
HTTP_ACCEPT_ENCODING: request.accept_encoding
}, request.user_agent)
HTTP_USER_AGENT: request.user_agent.try(:force_encoding, 'utf-8'),
HTTP_ACCEPT: request.accept.try(:force_encoding, 'utf-8'),
HTTP_ACCEPT_LANGUAGE: request.accept_language.try(:force_encoding, 'utf-8'),
HTTP_ACCEPT_ENCODING: request.accept_encoding.try(:force_encoding, 'utf-8')
}, request.user_agent.try(:force_encoding, 'utf-8'))

device_hash = {}

device_hash = {
mobile: nil
}
if device.mobile?
device_hash[:mobile] = 'mobile'
elsif device.tablet?
Expand Down
2 changes: 1 addition & 1 deletion spec/lib/payment_processor/currency_spec.rb
Expand Up @@ -6,7 +6,7 @@
VCR.use_cassette('money_google_bank') do
expect(
PaymentProcessor::Currency.convert(100, 'eur').format
).to match( /€0\.\d\d/ )
).to match( /€0[.,]\d\d/ )
end
end

Expand Down
65 changes: 33 additions & 32 deletions spec/requests/api/actions_spec.rb
Expand Up @@ -119,52 +119,48 @@

describe 'mobile detection' do
let(:referer) { 'www.google.com' }
let(:mobile_headers) do
let(:en_accept) do
{
'HTTP_USER_AGENT' => 'Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.16 (KHTML, like Gecko) Version/8.0 Mobile/13A171a Safari/600.1.4',
'HTTP_ACCEPT' => '*/*',
'HTTP_ACCEPT_LANGUAGE' => 'en',
'HTTP_ACCEPT_ENCODING' => '*'
'HTTP_ACCEPT' => '*/*',
'HTTP_ACCEPT_LANGUAGE' => 'en',
'HTTP_ACCEPT_ENCODING' => '*'
}
end
let(:mobile_headers) do
en_accept.merge('HTTP_USER_AGENT' => 'Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.16 (KHTMLé, like Gecko) Version/8.0 Mobile/13A171a Safari/600.1.4')
end
let(:tablet_headers) do
{
'HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)',
'HTTP_ACCEPT' => '*/*',
'HTTP_ACCEPT_LANGUAGE' => 'en',
'HTTP_ACCEPT_ENCODING' => '*'
}
en_accept.merge('HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)')
end
let(:desktop_headers) do
{
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136',
'HTTP_ACCEPT' => '*/*',
'HTTP_ACCEPT_LANGUAGE' => 'en',
'HTTP_ACCEPT_ENCODING' => '*'
}
en_accept.merge('HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136')
end
let(:ascii_headers) do
en_accept.merge('HTTP_USER_AGENT' => "#{desktop_headers['HTTP_USER_AGENT']}é".force_encoding(Encoding::ASCII_8BIT))
end

let(:message_body) do
{
type: 'action',
params: {
page: "#{page.slug}-petition",
email: "hello@example.com",
page_id: page.id.to_s,
form_id: form.id.to_s,
source: 'fb',
akid: '1234.5678.tKK7gX',
referring_akid: '1234.5678.tKK7gX',
mobile: 'desktop',
referer: referer,
user_en: 1,
}
type: 'action',
params: {
page: "#{page.slug}-petition",
email: "hello@example.com",
page_id: page.id.to_s,
form_id: form.id.to_s,
source: 'fb',
akid: '1234.5678.tKK7gX',
referring_akid: '1234.5678.tKK7gX',
mobile: 'desktop',
referer: referer,
user_en: 1,
}
}
end

let(:expected_params) do
{
queue_url: 'http://example.com',
message_body: message_body.to_json
queue_url: 'http://example.com',
message_body: message_body.to_json
}
end

Expand All @@ -191,6 +187,11 @@
post "/api/pages/#{page.id}/actions", params, {referer: referer}.merge(desktop_headers)
expect(sqs_client).to have_received(:send_message).with(expected_params)
end

it 'can handle ASCII-8BIT headers without error' do
post "/api/pages/#{page.id}/actions", params, {referer: referer}.merge(ascii_headers)
expect(sqs_client).to have_received(:send_message).with(expected_params)
end
end

describe 'edge case country names' do
Expand Down

0 comments on commit 677f004

Please sign in to comment.