From 647f5c1647b2696fe7b503f7bc68635ad5a017d3 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Fri, 9 May 2014 12:09:30 +0300 Subject: [PATCH] Encoding cookies with base64 to work around some device quirks --- lib/soap.coffee | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/soap.coffee b/lib/soap.coffee index cecf1f6..11c623c 100644 --- a/lib/soap.coffee +++ b/lib/soap.coffee @@ -42,17 +42,22 @@ NAMESPACES = { # Separation by comma is important as some devices don't comform to standard -COOKIE_REGEX = /\s*(.+?)\s*=\s*"?(.*?)"?\s*(,|;|$)/g +COOKIE_REGEX = /\s*([a-zA-Z0-9\-_]+?)\s*=\s*"?([a-zA-Z0-9\-_]*?)"?\s*(,|;|$)/g + +cookieEncode = (value) -> + new Buffer(value).toString('base64').replace(/\/|\+|\=/g, (c) -> if c is '/' then '_' else if c is '+' then '-' else '') + +cookieDecode = (encodedValue) -> + new Buffer(encodedValue, 'base64').toString() cookiesToObj = (cookieLine) -> cookies = {} while match = COOKIE_REGEX.exec(cookieLine) - cookies[match[1]] = match[2] + cookies[cookieDecode(match[1])] = cookieDecode(match[2]) return cookies - cookiesToStr = (obj) -> - "#{cn}=#{cv}" for cn, cv of obj + "#{cookieEncode(cn)}=#{cookieEncode(cv)}" for cn, cv of obj event = (xml) ->