TEST(CookieDecoderTest, testDecodingCommaSeparatedClientSideCookies) { String source = "$Version=\"1\"; session_id=\"1234\", " + "$Version=\"1\"; session_id=\"1111\"; $Domain=\".cracker.edu\""; Set<Cookie> cookies = CookieDecoder.decode(source); Iterator<Cookie> it = cookies.iterator(); Cookie c; assertTrue(it.hasNext()); c = it.next(); assertEquals(1, c.getVersion()); assertEquals("session_id", c.getName()); assertEquals("1234", c.getValue()); assertNull(c.getPath()); assertNull(c.getComment()); assertNull(c.getCommentUrl()); assertNull(c.getDomain()); assertTrue(c.getPorts().isEmpty()); assertEquals(Long.MIN_VALUE, c.getMaxAge()); assertTrue(it.hasNext()); c = it.next(); assertEquals(1, c.getVersion()); assertEquals("session_id", c.getName()); assertEquals("1111", c.getValue()); assertEquals(".cracker.edu", c.getDomain()); assertNull(c.getPath()); assertNull(c.getComment()); assertNull(c.getCommentUrl()); assertTrue(c.getPorts().isEmpty()); assertEquals(Long.MIN_VALUE, c.getMaxAge()); assertFalse(it.hasNext()); }
TEST(CookieDecoderTest, testDecodingClientSideCookies) { String source = "$Version=\"1\"; " + "Part_Number=\"Riding_Rocket_0023\"; $Path=\"/acme/ammo\"; " + "Part_Number=\"Rocket_Launcher_0001\"; $Path=\"/acme\""; Set<Cookie> cookies = CookieDecoder.decode(source); Iterator<Cookie> it = cookies.iterator(); Cookie c; c = it.next(); assertEquals(1, c.getVersion()); assertEquals("Part_Number", c.getName()); assertEquals("Rocket_Launcher_0001", c.getValue()); assertEquals("/acme", c.getPath()); assertNull(c.getComment()); assertNull(c.getCommentUrl()); assertNull(c.getDomain()); assertTrue(c.getPorts().isEmpty()); assertEquals(Long.MIN_VALUE, c.getMaxAge()); c = it.next(); assertEquals(1, c.getVersion()); assertEquals("Part_Number", c.getName()); assertEquals("Riding_Rocket_0023", c.getValue()); assertEquals("/acme/ammo", c.getPath()); assertNull(c.getComment()); assertNull(c.getCommentUrl()); assertNull(c.getDomain()); assertTrue(c.getPorts().isEmpty()); assertEquals(Long.MIN_VALUE, c.getMaxAge()); assertFalse(it.hasNext()); }
TEST(CookieDecoderTest, testDecodingValuesWithCommasAndEquals) { String src = "A=v=1&lg=en-US,it-IT,it&intl=it&np=1;T=z=E"; Set<Cookie> cookies = CookieDecoder.decode(src); Iterator<Cookie> i = cookies.iterator(); Cookie c = i.next(); assertEquals("A", c.getName()); assertEquals("v=1&lg=en-US,it-IT,it&intl=it&np=1", c.getValue()); c = i.next(); assertEquals("T", c.getName()); assertEquals("z=E", c.getValue()); }
TEST(CookieDecoderTest, testDecodingWeirdNames2) { String src = "HTTPOnly="; Set<Cookie> cookies = CookieDecoder.decode(src); Cookie c = cookies.iterator().next(); assertEquals("HTTPOnly", c.getName()); assertEquals("", c.getValue()); }
TEST(CookieDecoderTest, testDecodingMultipleCookies) { String c1 = "myCookie=myValue;max-age=50;path=/apathsomewhere;domain=.adomainsomewhere;secure;comment=this is a comment;version=2;commentURL=\"http://aurl.com\";port='80,8080';discard;"; String c2 = "myCookie2=myValue2;max-age=0;path=/anotherpathsomewhere;domain=.anotherdomainsomewhere;comment=this is another comment;version=2;commentURL=http://anotherurl.com;"; String c3 = "myCookie3=myValue3;max-age=0;version=2;"; Set<Cookie> cookies = CookieDecoder.decode(c1 + c2 + c3); assertEquals(3, cookies.size()); Iterator<Cookie> it = cookies.iterator(); Cookie cookie = it.next(); assertNotNull(cookie); assertEquals("myValue", cookie.getValue()); assertEquals("this is a comment", cookie.getComment()); assertEquals("http://aurl.com", cookie.getCommentUrl()); assertEquals(".adomainsomewhere", cookie.getDomain()); assertTrue(cookie.isDiscard()); assertEquals(50, cookie.getMaxAge()); assertEquals("/apathsomewhere", cookie.getPath()); assertEquals(2, cookie.getPorts().size()); assertTrue(cookie.getPorts().contains(80)); assertTrue(cookie.getPorts().contains(8080)); assertTrue(cookie.isSecure()); assertEquals(2, cookie.getVersion()); cookie = it.next(); assertNotNull(cookie); assertEquals("myValue2", cookie.getValue()); assertEquals("this is another comment", cookie.getComment()); assertEquals("http://anotherurl.com", cookie.getCommentUrl()); assertEquals(".anotherdomainsomewhere", cookie.getDomain()); assertFalse(cookie.isDiscard()); assertEquals(0, cookie.getMaxAge()); assertEquals("/anotherpathsomewhere", cookie.getPath()); assertTrue(cookie.getPorts().isEmpty()); assertFalse(cookie.isSecure()); assertEquals(2, cookie.getVersion()); cookie = it.next(); assertNotNull(cookie); assertEquals("myValue3", cookie.getValue()); assertNull(cookie.getComment()); assertNull(cookie.getCommentUrl()); assertNull(cookie.getDomain()); assertFalse(cookie.isDiscard()); assertEquals(0, cookie.getMaxAge()); assertNull(cookie.getPath()); assertTrue(cookie.getPorts().isEmpty()); assertFalse(cookie.isSecure()); assertEquals(2, cookie.getVersion()); }
TEST(CookieDecoderTest, testDecodingWeirdNames1) { String src = "path=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=.www.google.com"; Set<Cookie> cookies = CookieDecoder.decode(src); Cookie c = cookies.iterator().next(); assertEquals("path", c.getName()); assertEquals("", c.getValue()); assertEquals("/", c.getPath()); }
TEST(CookieDecoderTest, testDecodingQuotedCookie) { String source = "a=\"\"," + "b=\"1\"," + "c=\"\\\"1\\\"2\\\"\"," + "d=\"1\\\"2\\\"3\"," + "e=\"\\\"\\\"\"," + "f=\"1\\\"\\\"2\"," + "g=\"\\\\\"," + "h=\"';,\\x\""; Set<Cookie> cookies = CookieDecoder.decode(source); Iterator<Cookie> it = cookies.iterator(); Cookie c; c = it.next(); assertEquals("a", c.getName()); assertEquals("", c.getValue()); c = it.next(); assertEquals("b", c.getName()); assertEquals("1", c.getValue()); c = it.next(); assertEquals("c", c.getName()); assertEquals("\"1\"2\"", c.getValue()); c = it.next(); assertEquals("d", c.getName()); assertEquals("1\"2\"3", c.getValue()); c = it.next(); assertEquals("e", c.getName()); assertEquals("\"\"", c.getValue()); c = it.next(); assertEquals("f", c.getName()); assertEquals("1\"\"2", c.getValue()); c = it.next(); assertEquals("g", c.getName()); assertEquals("\\", c.getValue()); c = it.next(); assertEquals("h", c.getName()); assertEquals("';,\\x", c.getValue()); assertFalse(it.hasNext()); }
TEST(CookieDecoderTest, testDecodingGoogleAnalyticsCookie) { String source = "ARPT=LWUKQPSWRTUN04CKKJI; " + "kw-2E343B92-B097-442c-BFA5-BE371E0325A2=unfinished furniture; " + "__utma=48461872.1094088325.1258140131.1258140131.1258140131.1; " + "__utmb=48461872.13.10.1258140131; __utmc=48461872; " + "__utmz=48461872.1258140131.1.1.utmcsr=overstock.com|utmccn=(referral)|utmcmd=referral|utmcct=/Home-Garden/Furniture/Clearance,/clearance,/32/dept.html"; Set<Cookie> cookies = CookieDecoder.decode(source); Iterator<Cookie> it = cookies.iterator(); Cookie c; c = it.next(); assertEquals("__utma", c.getName()); assertEquals("48461872.1094088325.1258140131.1258140131.1258140131.1", c.getValue()); c = it.next(); assertEquals("__utmb", c.getName()); assertEquals("48461872.13.10.1258140131", c.getValue()); c = it.next(); assertEquals("__utmc", c.getName()); assertEquals("48461872", c.getValue()); c = it.next(); assertEquals("__utmz", c.getName()); assertEquals("48461872.1258140131.1.1.utmcsr=overstock.com|utmccn=(referral)|utmcmd=referral|utmcct=/Home-Garden/Furniture/Clearance,/clearance,/32/dept.html", c.getValue()); c = it.next(); assertEquals("ARPT", c.getName()); assertEquals("LWUKQPSWRTUN04CKKJI", c.getValue()); c = it.next(); assertEquals("kw-2E343B92-B097-442c-BFA5-BE371E0325A2", c.getName()); assertEquals("unfinished furniture", c.getValue()); assertFalse(it.hasNext()); }
TEST(CookieDecoderTest,testDecodingSingleCookieV1) { String cookieString = "myCookie=myValue;max-age=50;path=/apathsomewhere;domain=.adomainsomewhere;secure;comment=this is a comment;version=1;"; Set<Cookie> cookies = CookieDecoder.decode(cookieString); assertEquals(1, cookies.size()); Cookie cookie = cookies.iterator().next(); assertEquals("myValue", cookie.getValue()); assertNotNull(cookie); assertEquals("this is a comment", cookie.getComment()); assertNull(cookie.getCommentUrl()); assertEquals(".adomainsomewhere", cookie.getDomain()); assertFalse(cookie.isDiscard()); assertEquals(50, cookie.getMaxAge()); assertEquals("/apathsomewhere", cookie.getPath()); assertTrue(cookie.getPorts().isEmpty()); assertTrue(cookie.isSecure()); assertEquals(1, cookie.getVersion()); }
TEST(CookieDecoderTest,testDecodingSingleCookieV2) { String cookieString = "myCookie=myValue;max-age=50;path=/apathsomewhere;domain=.adomainsomewhere;secure;comment=this is a comment;version=2;commentURL=http://aurl.com;port=\"80,8080\";discard;"; Set<Cookie> cookies = CookieDecoder.decode(cookieString); assertEquals(1, cookies.size()); Cookie cookie = cookies.iterator().next(); assertNotNull(cookie); assertEquals("myValue", cookie.getValue()); assertEquals("this is a comment", cookie.getComment()); assertEquals("http://aurl.com", cookie.getCommentUrl()); assertEquals(".adomainsomewhere", cookie.getDomain()); assertTrue(cookie.isDiscard()); assertEquals(50, cookie.getMaxAge()); assertEquals("/apathsomewhere", cookie.getPath()); assertEquals(2, cookie.getPorts().size()); assertTrue(cookie.getPorts().contains(80)); assertTrue(cookie.getPorts().contains(8080)); assertTrue(cookie.isSecure()); assertEquals(2, cookie.getVersion()); }
string CookieList::escapeCookies() const { string cookie_parameter(""); bool first = true; auto it = cookie_list_.cbegin(); while(it != cookie_list_.cend()) { if(first == true) { first = false; } else { cookie_parameter += ";"; } Cookie cookie = (*it); cookie_parameter += (cookie.getName() + "=" + cookie.getValue()); ++it; } return cookie_parameter; }
void ScopeManager::preCall(HttpRequest& request, const std::string& app) { // check session-cookie std::string currentSessionCookieName = app.empty() ? std::string("tntnet") : "tntnet." + app; std::string currentSecureSessionCookieName = app.empty() ? std::string("stntnet") : "stntnet." + app; Cookie c = request.getCookie(currentSessionCookieName); if (c.getValue().empty()) { /* cxxtools::MutexLock lock(sessionScopesMutex); log_debug(sessionScopes.size() << " sessions available"); for (sessionscopes_type::iterator it = sessionScopes.begin(); it != sessionScopes.end(); ++it) log_debug("available session " << it->first << " value " << it->second); */ log_debug("session cookie " << currentSessionCookieName << " not found - keep session"); } else { log_debug("session cookie " << currentSessionCookieName << " found: " << c.getValue()); cxxtools::MutexLock lock(sessionScopesMutex); Sessionscope* sessionScope; sessionscopes_type::iterator it = sessionScopes.find(c.getValue()); if (it == sessionScopes.end()) { log_debug("session not found - create new"); sessionScope = new Sessionscope(); sessionScope->addRef(); sessionScopes.insert(sessionscopes_type::value_type(c.getValue(), sessionScope)); } else { log_debug("session found"); sessionScope = it->second; sessionScope->touch(); } request.setSessionScope(sessionScope); } if (request.isSsl()) { c = request.getCookie(currentSecureSessionCookieName); if (c.getValue().empty()) { log_debug("secure session cookie " << currentSessionCookieName << " not found - keep session"); } else if (request.isSsl()) { log_debug("secure session cookie " << currentSessionCookieName << " found: " << c.getValue()); cxxtools::MutexLock lock(sessionScopesMutex); Sessionscope* sessionScope; sessionscopes_type::iterator it = sessionScopes.find(c.getValue()); if (it == sessionScopes.end()) { log_debug("session not found - create new"); sessionScope = new Sessionscope(); sessionScope->addRef(); sessionScopes.insert(sessionscopes_type::value_type(c.getValue(), sessionScope)); } else { log_debug("session found"); sessionScope = it->second; sessionScope->touch(); } request.setSecureSessionScope(sessionScope); } } else { log_debug("secure session cookie " << currentSessionCookieName << " not checked in non ssl request"); } // set application-scope request.setApplicationScope(getApplicationScope(app)); }
TEST(CookieDecoderTest, testDecodingValueWithComma) { String source = "UserCookie=timeZoneName=(GMT+04:00) Moscow, St. Petersburg, Volgograd&promocode=®ion=BE;" + " expires=Sat, 01-Dec-2012 10:53:31 GMT; path=/"; Set<Cookie> cookies = CookieDecoder.decode(source); Cookie c = cookies.iterator().next(); assertEquals("timeZoneName=(GMT+04:00) Moscow, St. Petersburg, Volgograd&promocode=®ion=BE", c.getValue()); }