Files
1b-agent 93a5a0a221 Initial commit: one_os_compositor Odoo 20 addon — core OWL library + backend models + JWT auth
Includes:
- compositor.app, compositor.session, compositor.session.app, compositor.audit.log models
- /web/compositor/{token,apps,launch,audit} HTTP controllers with JWT (HS256)
- CompositorService OWL service (reusable via useService('compositor'))
- CompositorCanvas OWL component (reusable canvas wrapper)
- Security: compositor_group_user, compositor_group_manager groups + ir.access.csv rules
- 5 demo apps pre-loaded (gnome-calculator, xterm, gtk4-demo, glxgears, featherpad)
- Audit log capturing JWT issuance + app launch events
- Stub mode: launching apps returns a stub SurfaceHandle when proxy isn't connected
- Tested against Odoo 20 + PostgreSQL 17

Author: 1bspace.com
Parent company: 1B Global
License: Proprietary (1B Space internal use)
2026-10-08 08:48:46 +00:00

47 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
"""1B Space Compositor Core addon.
This package contains the backend models, controllers, and the OWL library
service/component registrations for the compositor.
Public Python API:
- :class:`compositor.app` — application catalog model
- :class:`compositor.session` — per-browser-tab session (mail.thread mixin)
- :class:`compositor.audit.log` — append-only audit log
- :class:`CompositorController` — HTTP controllers
Public JS API (via ``@one_os_compositor/*`` imports):
- ``@one_os_compositor/services/compositor_service`` — main service
- ``@one_os_compositor/components/compositor_canvas`` — canvas component
- ``@one_os_compositor/components/compositor_surface`` — single surface wrapper
"""
from . import models
from . import controllers
def _post_init_hook(env):
"""Called after the addon is installed.
Sets the default JWT secret if not already configured. The secret
is stored in ``ir.config_parameter`` so it can be rotated without
restarting Odoo.
:param env: Odoo environment.
"""
config_param = env["ir.config_parameter"]
if not config_param.get_str("compositor.jwt_secret"):
# Auto-generate a strong secret on first install
import secrets
secret = secrets.token_urlsafe(48)
config_param.set_str("compositor.jwt_secret", secret)
env["ir.logging"].sudo().create({
"name": "one_os_compositor",
"type": "server",
"level": "INFO",
"message": "Compositor JWT secret auto-generated on first install.",
"dbname": env.cr.dbname,
})