Files
goodie/pkg/server/stubs.go
Marc 9c444061fd Backend improvements: views, fields_get, session, RPC stubs
- 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>
2026-03-31 23:16:26 +02:00

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)
}