xref: /aosp_15_r20/external/autotest/autotest_lib/tko/unique_cookie.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Lint as: python2, python3
2*9c5db199SXin Lifrom __future__ import division
3*9c5db199SXin Lifrom __future__ import print_function
4*9c5db199SXin Liimport os, random
5*9c5db199SXin Li
6*9c5db199SXin Li
7*9c5db199SXin Lidef unique_id(cookie_key):
8*9c5db199SXin Li    """
9*9c5db199SXin Li    Find out if remote caller has cookie set on the key.
10*9c5db199SXin Li    If not, set cookie on client side: evaluate this key by a random string.
11*9c5db199SXin Li    ( unique user identifier )
12*9c5db199SXin Li    In both scenarios return value of the cookie, be it old or newly set one
13*9c5db199SXin Li    """
14*9c5db199SXin Li    uid = ''
15*9c5db199SXin Li    ## try to retrieve uid from Cookie
16*9c5db199SXin Li    if 'HTTP_COOKIE' in os.environ:
17*9c5db199SXin Li        ## parse os.environ['HTTP_COOKIE']
18*9c5db199SXin Li        cookies = os.environ['HTTP_COOKIE'].split(';')
19*9c5db199SXin Li        key = '%s=' % cookie_key
20*9c5db199SXin Li        uid_cookies = [c for c in cookies if c.strip().startswith(key)]
21*9c5db199SXin Li
22*9c5db199SXin Li        if uid_cookies:
23*9c5db199SXin Li            assert(len(uid_cookies) == 1)
24*9c5db199SXin Li            uid_cookie = uid_cookies[0]
25*9c5db199SXin Li            uid = uid_cookie.replace(key, '')
26*9c5db199SXin Li
27*9c5db199SXin Li    if not uid:
28*9c5db199SXin Li        uid = str(random.random())[2:16] # random string of 14 digits
29*9c5db199SXin Li        set_cookie_statement = 'Set-Cookie:%s=%s;' % (cookie_key, uid)
30*9c5db199SXin Li        set_cookie_statement += 'expires=Thu, 26-Dec-2013 22:03:25 GMT;'
31*9c5db199SXin Li        print(set_cookie_statement)
32*9c5db199SXin Li
33*9c5db199SXin Li    return uid
34