summaryrefslogtreecommitdiff
path: root/viewstate.py
blob: d1c9cf821d9b6dacabad8d7c4e34672ea7624d37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from base64 import b64decode, b64encode


CONSTS = {
    '\x64': {},
    '\x65': '',
    '\x66': 0,
    '\x67': True,
    '\x68': False
}

def parse():
    pass


class ViewState(object):

    def __init__(self, base64_encoded):
        self.base64_encoded = base64_encoded
        self.raw = b64decode(self.base64_encoded)
        self.decoded = None

    @property
    def body(self):
        return self.raw[:2]

    def is_valid(self):
        format_marker = b'\xff'
        version_marker = b'\x01'
        preamble = format_marker + version_marker
        return self.body == preamble

    def decode(self):
        if not self.is_valid():
            raise Exception('Cannot decode invalid viewstate, bad preamble')
        self.decoded = parse(self.body)
        return self.decoded