Example #1
0
    def test_path(self):
        cookie = Cookie('color', 'blue')
        assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', path='/')
        assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', path='/one')
        assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', path='/oneX')
        with pytest.raises(Cookie.URLMismatch):
            assert cookie.http_return_ok(self.url)
Example #2
0
    def test_path(self):
        cookie = Cookie('color', 'blue')
        self.assertTrue(cookie.http_return_ok(self.url))

        cookie = Cookie('color', 'blue', path='/')
        self.assertTrue(cookie.http_return_ok(self.url))

        cookie = Cookie('color', 'blue', path='/one')
        self.assertTrue(cookie.http_return_ok(self.url))

        cookie = Cookie('color', 'blue', path='/oneX')
        with self.assertRaises(Cookie.URLMismatch):
            self.assertTrue(cookie.http_return_ok(self.url))
Example #3
0
    def test_expires(self):
        now = datetime.datetime.utcnow().replace(microsecond=0)

        # expires 1 day from now
        expires = now + datetime.timedelta(days=1)

        cookie = Cookie('color', 'blue', expires=expires)
        assert cookie.http_return_ok(self.url)

        # expired 1 day ago
        expires = now + datetime.timedelta(days=-1)
        cookie = Cookie('color', 'blue', expires=expires)
        with pytest.raises(Cookie.Expired):
            assert cookie.http_return_ok(self.url)
Example #4
0
    def test_httponly(self):
        cookie = Cookie('color', 'blue', httponly=True)
        self.assertTrue(cookie.http_return_ok('http://example.com'))
        self.assertTrue(cookie.http_return_ok('https://example.com'))

        with self.assertRaises(Cookie.URLMismatch):
            self.assertTrue(cookie.http_return_ok('ftp://example.com'))
Example #5
0
    def test_httponly(self):
        cookie = Cookie('color', 'blue', httponly=True)
        assert cookie.http_return_ok('http://example.com')
        assert cookie.http_return_ok('https://example.com')

        with pytest.raises(Cookie.URLMismatch):
            assert cookie.http_return_ok('ftp://example.com')
Example #6
0
    def generate_cookie(self, url_path, session_id, expiration=None, add_header=False):
        '''
        Return a session cookie containing the session id. The cookie
        will be contrainted to the url path, defined for use
        with HTTP only, and only returned on secure connections (SSL).

        :parameters:
          url_path
            The cookie will be returned in a request if it begins
            with this url path.
          session_id
            The session id identified by the session cookie
          add_header
            If true format cookie string with Set-Cookie: header

        :returns:
          cookie string
        '''

        if not expiration:      # Catch zero unix timestamps
            expiration = None;

        cookie = Cookie(self.session_cookie_name, session_id,
                        domain=urlparse.urlparse(api.env.xmlrpc_uri).netloc,
                        path=url_path, httponly=True, secure=True,
                        expires=expiration)
        if add_header:
            result = 'Set-Cookie: %s' % cookie
        else:
            result = str(cookie)

        return result
Example #7
0
    def test_invalid(self):
        # Invalid Max-Age
        s = 'color=blue; Max-Age=over-the-hill'
        with pytest.raises(ValueError):
            Cookie.parse(s)

        cookie = Cookie('color', 'blue')
        with pytest.raises(ValueError):
            cookie.max_age = 'over-the-hill'

        # Invalid Expires
        s = 'color=blue; Expires=Sun, 06 Xxx 1994 08:49:37 GMT'
        with pytest.raises(ValueError):
            Cookie.parse(s)

        cookie = Cookie('color', 'blue')
        with pytest.raises(ValueError):
            cookie.expires = 'Sun, 06 Xxx 1994 08:49:37 GMT'
Example #8
0
    def test_normalization(self):
        cookie = Cookie('color', 'blue', expires=self.expires)
        cookie.timestamp = self.now_timestamp

        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)

        url = 'http://example.COM/foo'
        cookie.normalize(url)
        self.assertEqual(cookie.domain, 'example.com')
        self.assertEqual(cookie.path, '/')
        self.assertEqual(cookie.expires, self.expires)

        cookie = Cookie('color', 'blue', max_age=self.max_age)
        cookie.timestamp = self.now_timestamp

        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)

        url = 'http://example.com/foo/'
        cookie.normalize(url)
        self.assertEqual(cookie.domain, 'example.com')
        self.assertEqual(cookie.path, '/foo')
        self.assertEqual(cookie.expires, self.age_expiration)

        cookie = Cookie('color', 'blue')
        url = 'http://example.com/foo'
        cookie.normalize(url)
        self.assertEqual(cookie.domain, 'example.com')
        self.assertEqual(cookie.path, '/')

        cookie = Cookie('color', 'blue')
        url = 'http://example.com/foo/bar'
        cookie.normalize(url)
        self.assertEqual(cookie.domain, 'example.com')
        self.assertEqual(cookie.path, '/foo')

        cookie = Cookie('color', 'blue')
        url = 'http://example.com/foo/bar/'
        cookie.normalize(url)
        self.assertEqual(cookie.domain, 'example.com')
        self.assertEqual(cookie.path, '/foo/bar')
Example #9
0
    def test_normalization(self):
        cookie = Cookie('color', 'blue', expires=self.expires)
        cookie.timestamp = self.now_timestamp

        assert cookie.domain is None
        assert cookie.path is None

        url = 'http://example.COM/foo'
        cookie.normalize(url)
        assert cookie.domain == 'example.com'
        assert cookie.path == '/'
        assert cookie.expires == self.expires

        cookie = Cookie('color', 'blue', max_age=self.max_age)
        cookie.timestamp = self.now_timestamp

        assert cookie.domain is None
        assert cookie.path is None

        url = 'http://example.com/foo/'
        cookie.normalize(url)
        assert cookie.domain == 'example.com'
        assert cookie.path == '/foo'
        assert cookie.expires == self.age_expiration

        cookie = Cookie('color', 'blue')
        url = 'http://example.com/foo'
        cookie.normalize(url)
        assert cookie.domain == 'example.com'
        assert cookie.path == '/'

        cookie = Cookie('color', 'blue')
        url = 'http://example.com/foo/bar'
        cookie.normalize(url)
        assert cookie.domain == 'example.com'
        assert cookie.path == '/foo'

        cookie = Cookie('color', 'blue')
        url = 'http://example.com/foo/bar/'
        cookie.normalize(url)
        assert cookie.domain == 'example.com'
        assert cookie.path == '/foo/bar'
Example #10
0
    def test_attributes(self):
        cookie = Cookie('color', 'blue')
        self.assertEqual(cookie.key, 'color')
        self.assertEqual(cookie.value, 'blue')
        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, None)
        self.assertEqual(cookie.secure, None)
        self.assertEqual(cookie.httponly, None)

        cookie.domain = 'example.com'
        self.assertEqual(cookie.domain, 'example.com')
        cookie.domain = None
        self.assertEqual(cookie.domain, None)

        cookie.path = '/toplevel'
        self.assertEqual(cookie.path, '/toplevel')
        cookie.path = None
        self.assertEqual(cookie.path, None)

        cookie.max_age = 400
        self.assertEqual(cookie.max_age, 400)
        cookie.max_age = None
        self.assertEqual(cookie.max_age, None)

        cookie.expires = 'Sun, 06 Nov 1994 08:49:37 GMT'
        self.assertEqual(cookie.expires,
                         datetime.datetime(1994, 11, 6, 8, 49, 37))
        cookie.expires = None
        self.assertEqual(cookie.expires, None)

        cookie.secure = True
        self.assertEqual(cookie.secure, True)
        self.assertEqual(str(cookie), "color=blue; Secure")
        cookie.secure = False
        self.assertEqual(cookie.secure, False)
        self.assertEqual(str(cookie), "color=blue")
        cookie.secure = None
        self.assertEqual(cookie.secure, None)
        self.assertEqual(str(cookie), "color=blue")

        cookie.httponly = True
        self.assertEqual(cookie.httponly, True)
        self.assertEqual(str(cookie), "color=blue; HttpOnly")
        cookie.httponly = False
        self.assertEqual(cookie.httponly, False)
        self.assertEqual(str(cookie), "color=blue")
        cookie.httponly = None
        self.assertEqual(cookie.httponly, None)
        self.assertEqual(str(cookie), "color=blue")
Example #11
0
    def test_attributes(self):
        cookie = Cookie('color', 'blue')
        assert cookie.key == 'color'
        assert cookie.value == 'blue'
        assert cookie.domain is None
        assert cookie.path is None
        assert cookie.max_age is None
        assert cookie.expires is None
        assert cookie.secure is None
        assert cookie.httponly is None

        cookie.domain = 'example.com'
        assert cookie.domain == 'example.com'
        cookie.domain = None
        assert cookie.domain is None

        cookie.path = '/toplevel'
        assert cookie.path == '/toplevel'
        cookie.path = None
        assert cookie.path is None

        cookie.max_age = 400
        assert cookie.max_age == 400
        cookie.max_age = None
        assert cookie.max_age is None

        cookie.expires = 'Sun, 06 Nov 1994 08:49:37 GMT'
        assert cookie.expires == datetime.datetime(
            1994, 11, 6, 8, 49, 37, tzinfo=datetime.timezone.utc)
        cookie.expires = None
        assert cookie.expires is None

        cookie.secure = True
        assert cookie.secure is True
        assert str(cookie) == "color=blue; Secure"
        cookie.secure = False
        assert cookie.secure is False
        assert str(cookie) == "color=blue"
        cookie.secure = None
        assert cookie.secure is None
        assert str(cookie) == "color=blue"

        cookie.httponly = True
        assert cookie.httponly is True
        assert str(cookie) == "color=blue; HttpOnly"
        cookie.httponly = False
        assert cookie.httponly is False
        assert str(cookie) == "color=blue"
        cookie.httponly = None
        assert cookie.httponly is None
        assert str(cookie) == "color=blue"
Example #12
0
    def test_domain(self):
        cookie = Cookie('color', 'blue', domain='www.foo.bar.com')
        assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', domain='.foo.bar.com')
        assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', domain='.bar.com')
        assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', domain='bar.com')
        with pytest.raises(Cookie.URLMismatch):
            assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', domain='bogus.com')
        with pytest.raises(Cookie.URLMismatch):
            assert cookie.http_return_ok(self.url)

        cookie = Cookie('color', 'blue', domain='www.foo.bar.com')
        with pytest.raises(Cookie.URLMismatch):
            assert cookie.http_return_ok('http://192.168.1.1/one/two')
Example #13
0
    def test_secure(self):
        cookie = Cookie('color', 'blue', secure=True)
        assert cookie.http_return_ok('https://Xexample.com')

        with pytest.raises(Cookie.URLMismatch):
            assert cookie.http_return_ok('http://Xexample.com')
Example #14
0
    def test_expires(self):
        # 1 cookie with name/value and no Max-Age and no Expires
        s = 'color=blue;'
        cookies = Cookie.parse(s)
        self.assertEqual(len(cookies), 1)
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        self.assertEqual(cookie.key, 'color')
        self.assertEqual(cookie.value, 'blue')
        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, None)
        self.assertEqual(cookie.secure, None)
        self.assertEqual(cookie.httponly, None)
        self.assertEqual(str(cookie), "color=blue")
        self.assertEqual(cookie.get_expiration(), None)
        # Normalize
        self.assertEqual(cookie.normalize_expiration(), None)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, None)
        self.assertEqual(str(cookie), "color=blue")

        # 1 cookie with name/value and Max-Age
        s = 'color=blue; max-age=%d' % (self.max_age)
        cookies = Cookie.parse(s)
        self.assertEqual(len(cookies), 1)
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        self.assertEqual(cookie.key, 'color')
        self.assertEqual(cookie.value, 'blue')
        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)
        self.assertEqual(cookie.max_age, self.max_age)
        self.assertEqual(cookie.expires, None)
        self.assertEqual(cookie.secure, None)
        self.assertEqual(cookie.httponly, None)
        self.assertEqual(str(cookie), "color=blue; Max-Age=%d" % (self.max_age))
        self.assertEqual(cookie.get_expiration(), self.age_expiration)
        # Normalize
        self.assertEqual(cookie.normalize_expiration(), self.age_expiration)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, self.age_expiration)
        self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.age_string))


        # 1 cookie with name/value and Expires
        s = 'color=blue; Expires=%s' % (self.expires_string)
        cookies = Cookie.parse(s)
        self.assertEqual(len(cookies), 1)
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        self.assertEqual(cookie.key, 'color')
        self.assertEqual(cookie.value, 'blue')
        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, self.expires)
        self.assertEqual(cookie.secure, None)
        self.assertEqual(cookie.httponly, None)
        self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.expires_string))
        self.assertEqual(cookie.get_expiration(), self.expires)
        # Normalize
        self.assertEqual(cookie.normalize_expiration(), self.expires)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, self.expires)
        self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.expires_string))

        # 1 cookie with name/value witht both Max-Age and Expires, Max-Age takes precedence
        s = 'color=blue; Expires=%s; max-age=%d' % (self.expires_string, self.max_age)
        cookies = Cookie.parse(s)
        self.assertEqual(len(cookies), 1)
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        self.assertEqual(cookie.key, 'color')
        self.assertEqual(cookie.value, 'blue')
        self.assertEqual(cookie.domain, None)
        self.assertEqual(cookie.path, None)
        self.assertEqual(cookie.max_age, self.max_age)
        self.assertEqual(cookie.expires, self.expires)
        self.assertEqual(cookie.secure, None)
        self.assertEqual(cookie.httponly, None)
        self.assertEqual(str(cookie), "color=blue; Max-Age=%d; Expires=%s" % (self.max_age, self.expires_string))
        self.assertEqual(cookie.get_expiration(), self.age_expiration)
        # Normalize
        self.assertEqual(cookie.normalize_expiration(), self.age_expiration)
        self.assertEqual(cookie.max_age, None)
        self.assertEqual(cookie.expires, self.age_expiration)
        self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.age_string))

        # Verify different types can be assigned to the timestamp and
        # expires attribute.

        cookie = Cookie('color', 'blue')
        cookie.timestamp = self.now
        self.assertEqual(cookie.timestamp, self.now)
        cookie.timestamp = self.now_timestamp
        self.assertEqual(cookie.timestamp, self.now)
        cookie.timestamp = self.now_string
        self.assertEqual(cookie.timestamp, self.now)

        self.assertEqual(cookie.expires, None)

        cookie.expires = self.expires
        self.assertEqual(cookie.expires, self.expires)
        cookie.expires = self.expires_timestamp
        self.assertEqual(cookie.expires, self.expires)
        cookie.expires = self.expires_string
        self.assertEqual(cookie.expires, self.expires)
Example #15
0
    def test_secure(self):
        cookie = Cookie('color', 'blue', secure=True)
        self.assertTrue(cookie.http_return_ok('https://Xexample.com'))

        with self.assertRaises(Cookie.URLMismatch):
            self.assertTrue(cookie.http_return_ok('http://Xexample.com'))
Example #16
0
    def test_expires(self):
        # 1 cookie with name/value and no Max-Age and no Expires
        s = 'color=blue;'
        cookies = Cookie.parse(s)
        assert len(cookies) == 1
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        assert cookie.key == 'color'
        assert cookie.value == 'blue'
        assert cookie.domain is None
        assert cookie.path is None
        assert cookie.max_age is None
        assert cookie.expires is None
        assert cookie.secure is None
        assert cookie.httponly is None
        assert str(cookie) == "color=blue"
        assert cookie.get_expiration() is None
        # Normalize
        assert cookie.normalize_expiration() is None
        assert cookie.max_age is None
        assert cookie.expires is None
        assert str(cookie) == "color=blue"

        # 1 cookie with name/value and Max-Age
        s = 'color=blue; max-age=%d' % (self.max_age)
        cookies = Cookie.parse(s)
        assert len(cookies) == 1
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        assert cookie.key == 'color'
        assert cookie.value == 'blue'
        assert cookie.domain is None
        assert cookie.path is None
        assert cookie.max_age == self.max_age
        assert cookie.expires is None
        assert cookie.secure is None
        assert cookie.httponly is None
        assert str(cookie) == "color=blue; Max-Age=%d" % (self.max_age)
        assert cookie.get_expiration() == self.age_expiration
        # Normalize
        assert cookie.normalize_expiration() == self.age_expiration
        assert cookie.max_age is None
        assert cookie.expires == self.age_expiration
        assert str(cookie) == "color=blue; Expires=%s" % (self.age_string)

        # 1 cookie with name/value and Expires
        s = 'color=blue; Expires=%s' % (self.expires_string)
        cookies = Cookie.parse(s)
        assert len(cookies) == 1
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        assert cookie.key == 'color'
        assert cookie.value == 'blue'
        assert cookie.domain is None
        assert cookie.path is None
        assert cookie.max_age is None
        assert cookie.expires == self.expires
        assert cookie.secure is None
        assert cookie.httponly is None
        assert str(cookie) == "color=blue; Expires=%s" % (self.expires_string)
        assert cookie.get_expiration() == self.expires
        # Normalize
        assert cookie.normalize_expiration() == self.expires
        assert cookie.max_age is None
        assert cookie.expires == self.expires
        assert str(cookie) == "color=blue; Expires=%s" % (self.expires_string)

        # 1 cookie with name/value witht both Max-Age and Expires, Max-Age takes precedence
        s = 'color=blue; Expires=%s; max-age=%d' % (self.expires_string,
                                                    self.max_age)
        cookies = Cookie.parse(s)
        assert len(cookies) == 1
        cookie = cookies[0]
        # Force timestamp to known value
        cookie.timestamp = self.now
        assert cookie.key == 'color'
        assert cookie.value == 'blue'
        assert cookie.domain is None
        assert cookie.path is None
        assert cookie.max_age == self.max_age
        assert cookie.expires == self.expires
        assert cookie.secure is None
        assert cookie.httponly is None
        expected = "color=blue; Max-Age={}; Expires={}".format(
            self.max_age, self.expires_string)
        assert str(cookie) == expected
        assert cookie.get_expiration() == self.age_expiration
        # Normalize
        assert cookie.normalize_expiration() == self.age_expiration
        assert cookie.max_age is None
        assert cookie.expires == self.age_expiration
        assert str(cookie) == "color=blue; Expires=%s" % (self.age_string)

        # Verify different types can be assigned to the timestamp and
        # expires attribute.

        cookie = Cookie('color', 'blue')
        cookie.timestamp = self.now
        assert cookie.timestamp == self.now
        cookie.timestamp = self.now_timestamp
        assert cookie.timestamp == self.now
        cookie.timestamp = self.now_string
        assert cookie.timestamp == self.now

        assert cookie.expires is None

        cookie.expires = self.expires
        assert cookie.expires == self.expires
        cookie.expires = self.expires_timestamp
        assert cookie.expires == self.expires
        cookie.expires = self.expires_string
        assert cookie.expires == self.expires
Example #17
0
 def test_no_attributes(self):
     cookie = Cookie('color', 'blue')
     assert cookie.http_return_ok(self.url)