1
1
import json
2
2
3
+ from werkzeug .urls import url_encode
3
4
from werkzeug .wrappers import Response
4
5
5
6
from odoo import http
6
7
from odoo .http import request
7
8
8
9
from odoo .addons .portal .controllers .web import Home
9
10
11
+ from ..utils import get_param , telemetry_payload , version_info_payload
12
+
10
13
11
14
class OpenSPPHome (Home ):
12
15
"""Restrict debug mode to administrators when enabled via parameter."""
13
16
14
17
@http .route ()
15
18
def web_client (self , s_action = None , ** kw ):
16
19
# Enforce optional debug restriction before rendering
17
- try :
18
- config_parameter = request .env ["ir.config_parameter" ].sudo ()
19
- debug_admin_only = config_parameter .get_param ("openspp.debug.admin_only" , "True" ) == "True"
20
- except Exception : # pragma: no cover - defensive
21
- debug_admin_only = True
20
+ debug_admin_only = get_param (request .env , "openspp.debug.admin_only" , "True" ) == "True"
22
21
23
22
# Detect debug flag from kwargs or query string
24
23
has_debug = bool (kw .get ("debug" )) or ("debug" in (request .httprequest .args or {}))
@@ -28,7 +27,8 @@ def web_client(self, s_action=None, **kw):
28
27
if not uid or not request .env .user ._is_admin ():
29
28
kw .pop ("debug" , None )
30
29
args = {k : v for k , v in request .httprequest .args .items () if k != "debug" }
31
- return request .redirect ("/web" , query = args )
30
+ query = url_encode (args )
31
+ return request .redirect ("/web" + (f"?{ query } " if query else "" ))
32
32
33
33
return super ().web_client (s_action , ** kw )
34
34
@@ -39,48 +39,23 @@ class OpenSPPBrandingController(http.Controller):
39
39
@http .route ("/openspp/about" , type = "http" , auth = "public" )
40
40
def openspp_about (self , ** kwargs ):
41
41
"""Custom about page for OpenSPP"""
42
- config_parameter = request .env ["ir.config_parameter" ].sudo ()
43
42
return json .dumps (
44
43
{
45
44
"title" : "About OpenSPP" ,
46
45
"version" : "1.0.0" ,
47
- "system_name" : config_parameter .get_param ("openspp.system.name" , "OpenSPP Platform" ),
48
- "documentation_url" : config_parameter .get_param (
49
- "openspp.documentation.url" , "https://docs.openspp.org"
50
- ),
51
- "support_url" : config_parameter .get_param ("openspp.support.url" , "https://openspp.org" ),
46
+ "system_name" : get_param (request .env , "openspp.system.name" , "OpenSPP Platform" ),
47
+ "documentation_url" : get_param (request .env , "openspp.documentation.url" , "https://docs.openspp.org" ),
48
+ "support_url" : get_param (request .env , "openspp.support.url" , "https://openspp.org" ),
52
49
}
53
50
)
54
51
55
52
@http .route ("/web/webclient/version_info" , type = "json" , auth = "none" )
56
53
def version_info (self ):
57
54
"""Override version info to show OpenSPP branding"""
58
- config_parameter = request .env ["ir.config_parameter" ].sudo ()
59
- system_name = config_parameter .get_param ("openspp.system.name" , "OpenSPP Platform" )
60
- return {
61
- "server_version" : system_name ,
62
- # Keep the server series aligned with the actual Odoo major version
63
- "server_serie" : "17.0" ,
64
- "protocol_version" : 1 ,
65
- }
55
+ return version_info_payload (request .env )
66
56
67
57
@http .route ("/publisher-warranty" , type = "http" , auth = "none" , csrf = False )
68
58
def publisher_warranty (self , ** kwargs ):
69
59
"""Handle telemetry based on configuration"""
70
- config_parameter = request .env ["ir.config_parameter" ].sudo ()
71
- telemetry_enabled = config_parameter .get_param ("openspp.telemetry.enabled" , "True" ) == "True"
72
-
73
- if not telemetry_enabled :
74
- payload = {"status" : "disabled" , "message" : "Telemetry disabled" }
75
- else :
76
- # Redirect to OpenSPP telemetry endpoint
77
- telemetry_endpoint = config_parameter .get_param (
78
- "openspp.telemetry.endpoint" , "https://telemetry.openspp.org"
79
- )
80
- payload = {
81
- "status" : "redirected" ,
82
- "endpoint" : telemetry_endpoint ,
83
- "message" : "Telemetry redirected to OpenSPP" ,
84
- }
85
-
60
+ payload = telemetry_payload (request .env )
86
61
return Response (json .dumps (payload ), content_type = "application/json" )
0 commit comments