aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/builtins/setheaders.py
blob: 4cb9905ec7074549f158862851cb6f941d592c93 (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
38
39
from mitmproxy import exceptions
from mitmproxy import filt


class SetHeaders:
    def __init__(self):
        self.lst = []

    def configure(self, options, updated):
        """
            options.setheaders is a tuple of (fpatt, header, value)

            fpatt: String specifying a filter pattern.
            header: Header name.
            value: Header value string
        """
        for fpatt, header, value in options.setheaders:
            cpatt = filt.parse(fpatt)
            if not cpatt:
                raise exceptions.OptionsError(
                    "Invalid setheader filter pattern %s" % fpatt
                )
            self.lst.append((fpatt, header, value, cpatt))

    def run(self, f, hdrs):
        for _, header, value, cpatt in self.lst:
            if cpatt(f):
                hdrs.pop(header, None)
        for _, header, value, cpatt in self.lst:
            if cpatt(f):
                hdrs.add(header, value)

    def request(self, flow):
        if not flow.reply.has_message:
            self.run(flow, flow.request.headers)

    def response(self, flow):
        if not flow.reply.has_message:
            self.run(flow, flow.response.headers)