- Improved auto-generated list/form/search views with priority fields, two-column form layout, statusbar widget, notebook for O2M fields - Enhanced fields_get with currency_field, compute, related metadata - Fixed session handling: handleSessionInfo/handleSessionCheck use real session from cookie instead of hardcoded values - Added read_progress_bar and activity_format RPC stubs - Improved bootstrap translations with lang_parameters - Added "contacts" to session modules list Server starts successfully: 14 modules, 93 models, 378 XML templates, 503 JS modules transpiled — all from local frontend/ directory. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
package server
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
)
|
|
|
|
// handleSessionCheck verifies the session is valid and returns session info.
|
|
func (s *Server) handleSessionCheck(w http.ResponseWriter, r *http.Request) {
|
|
sess := GetSession(r)
|
|
if sess == nil {
|
|
if cookie, err := r.Cookie("session_id"); err == nil && cookie.Value != "" {
|
|
sess = s.sessions.Get(cookie.Value)
|
|
}
|
|
}
|
|
if sess == nil {
|
|
s.writeJSONRPC(w, nil, nil, &RPCError{
|
|
Code: 100, Message: "Session expired",
|
|
})
|
|
return
|
|
}
|
|
s.writeJSONRPC(w, nil, s.buildSessionInfo(sess), nil)
|
|
}
|
|
|
|
// handleSessionModules returns installed module names.
|
|
func (s *Server) handleSessionModules(w http.ResponseWriter, r *http.Request) {
|
|
s.writeJSONRPC(w, nil, []string{
|
|
"base", "web", "contacts", "sale", "account", "stock",
|
|
"purchase", "crm", "hr", "project", "fleet", "product", "l10n_de",
|
|
}, nil)
|
|
}
|
|
|
|
// handleManifest returns a minimal PWA manifest.
|
|
func (s *Server) handleManifest(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/manifest+json")
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|
"name": "Odoo",
|
|
"short_name": "Odoo",
|
|
"start_url": "/web",
|
|
"display": "standalone",
|
|
"background_color": "#71639e",
|
|
"theme_color": "#71639e",
|
|
"icons": []map[string]string{
|
|
{"src": "/web/static/img/odoo-icon-192x192.png", "sizes": "192x192", "type": "image/png"},
|
|
},
|
|
})
|
|
}
|
|
|
|
// handleBootstrapTranslations returns empty translations for initial boot.
|
|
func (s *Server) handleBootstrapTranslations(w http.ResponseWriter, r *http.Request) {
|
|
s.writeJSONRPC(w, nil, map[string]interface{}{
|
|
"lang": "en_US",
|
|
"hash": "empty",
|
|
"lang_parameters": map[string]interface{}{
|
|
"direction": "ltr",
|
|
"date_format": "%%m/%%d/%%Y",
|
|
"time_format": "%%H:%%M:%%S",
|
|
"grouping": "[3,0]",
|
|
"decimal_point": ".",
|
|
"thousands_sep": ",",
|
|
"week_start": 1,
|
|
},
|
|
"modules": map[string]interface{}{},
|
|
"multi_lang": false,
|
|
}, nil)
|
|
}
|