summaryrefslogtreecommitdiff
path: root/addons/hw_drivers/http.py
blob: b0ea9bee700d8f8012fae5773696ce475dd9712a (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
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import http


class IoTBoxHttpRequest(http.HttpRequest):
    def dispatch(self):
        if self._is_cors_preflight(http.request.endpoint):
            # Using the PoS in debug mode in v12, the call to '/hw_proxy/handshake' contains the
            # 'X-Debug-Mode' header, which was removed from 'Access-Control-Allow-Headers' in v13.
            # When the code of http.py is not checked out to v12 (i.e. in Community), the connection
            # fails as the header is rejected and none of the devices can be used.
            headers = {
                'Access-Control-Max-Age': 60 * 60 * 24,
                'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Debug-Mode'
            }
            return http.Response(status=200, headers=headers)
        return super(IoTBoxHttpRequest, self).dispatch()


class IoTBoxRoot(http.Root):
    def setup_db(self, httprequest):
        # No database on the IoT Box
        pass

    def get_request(self, httprequest):
        # Override HttpRequestwith IoTBoxHttpRequest
        if httprequest.mimetype not in ("application/json", "application/json-rpc"):
            return IoTBoxHttpRequest(httprequest)
        return super(IoTBoxRoot, self).get_request(httprequest)

http.Root = IoTBoxRoot
http.root = IoTBoxRoot()