Esempio n. 1
0
 def set_cookie(
     self,
     name: str,
     value: str,
     expires: int = -1,
     domain: str = "",
     secure: str = "false",
     httponly: bool = False,
     path: str = None,
 ):
     """Sets a cookie."""
     morsel = Morsel()
     name, value = str(name), str(value)
     morsel.set(name, value, quote_plus(value))
     if isinstance(expires, int) and expires < 0:
         expires = -1000000000
     morsel["expires"] = expires
     morsel["path"] = path or "/"
     if domain:
         morsel["domain"] = domain
     if secure:
         morsel["secure"] = secure
     if httponly:
         morsel["httponly"] = httponly
     self.headers._list.append(("set-cookie".encode("latin-1"),
                                morsel.OutputString().encode("latin-1")))
Esempio n. 2
0
def setcookie(
    name,
    value,
    expires="",
    domain=None,
    secure=False,
    httponly=False,
    path=None,
    samesite=None,
):
    """Sets a cookie."""
    morsel = Morsel()
    name, value = safestr(name), safestr(value)
    morsel.set(name, value, quote(value))
    if isinstance(expires, int) and expires < 0:
        expires = -1000000000
    morsel["expires"] = expires
    morsel["path"] = path or ctx.homepath + "/"
    if domain:
        morsel["domain"] = domain
    if secure:
        morsel["secure"] = secure
    if httponly:
        morsel["httponly"] = True
    value = morsel.OutputString()
    if samesite and samesite.lower() in ("strict", "lax", "none"):
        value += "; SameSite=%s" % samesite
    header("Set-Cookie", value)
Esempio n. 3
0
 def dumps(self):
     morsel = Morsel()
     morsel.set(self.name, self.value, self.value)
     morsel['expires'] = '' if self.expires is None else self.expires
     morsel['path'] = self.path
     if self.domain: morsel['domain'] = self.domain
     if self.secure: morsel['secure'] = self.secure
     ret = morsel.OutputString()
     if self.httponly: ret += '; httponly'
     return ret
Esempio n. 4
0
def setcookie(name, value, expires="", domain=None, secure=False, httponly=False, path=None):
    """Sets a cookie."""
    morsel = Morsel()
    name, value = safestr(name), safestr(value)
    morsel.set(name, value, quote(value))
    if isinstance(expires, int) and expires < 0:
        expires = -1_000_000_000
    morsel["expires"] = expires
    morsel["path"] = path or ctx.homepath + "/"
    if domain:
        morsel["domain"] = domain
    if secure:
        morsel["secure"] = secure
    value = morsel.OutputString()
    if httponly:
        value += "; httponly"
    header("Set-Cookie", value)
Esempio n. 5
0
def setcookie(name, value, expires = '', domain = None, secure = False, httponly = False, path = None):
    """Sets a cookie."""
    morsel = Morsel()
    name, value = safestr(name), safestr(value)
    morsel.set(name, value, quote(value))
    if isinstance(expires, int) and expires < 0:
        expires = -1000000000
    morsel['expires'] = expires
    morsel['path'] = path or ctx.homepath + '/'
    if domain:
        morsel['domain'] = domain
    if secure:
        morsel['secure'] = secure
    value = morsel.OutputString()
    if httponly:
        value += '; httponly'
    header('Set-Cookie', value)
Esempio n. 6
0
def make_cookie(name,
                value,
                expires='',
                path='',
                domain=None,
                secure=False,
                httponly=False):
    """Make a cookie string"""
    morsel = Morsel()
    morsel.set(name, value, quote(value))
    if isinstance(expires, int) and expires < 0:
        expires = -1000000000
    morsel['expires'] = expires
    morsel['path'] = path
    if domain: morsel['domain'] = domain
    if secure: morsel['secure'] = secure
    value = morsel.OutputString()
    if httponly: value += '; httponly'
    return value
Esempio n. 7
0
 def get_morsel(name,
                value,
                expires=-1,
                domain=None,
                secure=False,
                httponly=False,
                path=None):
     morsel = Morsel()
     morsel.set(name, value, quote(value))
     if expires < 0:
         expires = -1000000000
     morsel['expires'] = expires
     morsel['path'] = path
     if domain:
         morsel['domain'] = domain
     if secure:
         morsel['secure'] = secure
     value = morsel.OutputString()
     if httponly:
         value += '; httponly'
     return morsel
    def run_attr_and_method(self):
        print('[{}]:'.format(inspect.getframeinfo(inspect.currentframe())[2]))
        m = Morsel()
        m.set('foo', 'bar', 'baz')

        print(f'key: {m.key}')
        # => key: foo
        print(f'value: {m.value}')
        # => value: bar
        print(f'coded_value: {m.coded_value}')
        # => coded_value: baz

        print(m)
        # => Set-Cookie: foo=baz

        print(m.output())
        # => Set-Cookie: foo=baz

        print(m.OutputString())
        # => foo=baz

        print(m.js_output())
Esempio n. 9
0
    def force_clear_cookie(self, name, path="/", domain=None):
        """Deletes the cookie with the given name.

        Tornado's cookie handling currently (Jan 2018) stores cookies in a dict
        keyed by name, so it can only modify one cookie with a given name per
        response. The browser can store multiple cookies with the same name
        but different domains and/or paths. This method lets us clear multiple
        cookies with the same name.

        Due to limitations of the cookie protocol, you must pass the same
        path and domain to clear a cookie as were used when that cookie
        was set (but there is no way to find out on the server side
        which values were used for a given cookie).
        """
        name = escape.native_str(name)
        expires = datetime.datetime.utcnow() - datetime.timedelta(days=365)

        morsel = Morsel()
        morsel.set(name, '', '""')
        morsel['expires'] = httputil.format_timestamp(expires)
        morsel['path'] = path
        if domain:
            morsel['domain'] = domain
        self.add_header("Set-Cookie", morsel.OutputString())
Esempio n. 10
0
    def set_cookie(self, name, value, path="/", domain=None, max_age=None,
                   expires=None, secure=False, httponly=False, comment=None):
        """Set a cookie to be sent with a Set-Cookie header in the
        response

        :param name: name of the cookie (a binary string)
        :param value: value of the cookie (a binary string, or None)
        :param max_age: datetime.timedelta int representing the time (in seconds)
                        until the cookie expires
        :param path: String path to which the cookie applies
        :param domain: String domain to which the cookie applies
        :param secure: Boolean indicating whether the cookie is marked as secure
        :param httponly: Boolean indicating whether the cookie is marked as
                         HTTP Only
        :param comment: String comment
        :param expires: datetime.datetime or datetime.timedelta indicating a
                        time or interval from now when the cookie expires

        """
        # TODO(Python 3): Convert other parameters (e.g. path) to bytes, too.
        if value is None:
            value = b''
            max_age = 0
            expires = timedelta(days=-1)

        name = isomorphic_decode(name)
        value = isomorphic_decode(value)

        days = {i+1: name for i, name in enumerate(["jan", "feb", "mar",
                                                    "apr", "may", "jun",
                                                    "jul", "aug", "sep",
                                                    "oct", "nov", "dec"])}

        if isinstance(expires, timedelta):
            expires = datetime.utcnow() + expires

        if expires is not None:
            expires_str = expires.strftime("%d %%s %Y %H:%M:%S GMT")
            expires_str = expires_str % days[expires.month]
            expires = expires_str

        if max_age is not None:
            if hasattr(max_age, "total_seconds"):
                max_age = int(max_age.total_seconds())
            max_age = "%.0d" % max_age

        m = Morsel()

        def maybe_set(key, value):
            if value is not None and value is not False:
                m[key] = value

        m.set(name, value, value)
        maybe_set("path", path)
        maybe_set("domain", domain)
        maybe_set("comment", comment)
        maybe_set("expires", expires)
        maybe_set("max-age", max_age)
        maybe_set("secure", secure)
        maybe_set("httponly", httponly)

        self.headers.append("Set-Cookie", m.OutputString())