bazaar-compute-node 0.2.1rc7__tar.gz → 0.2.1rc9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/PKG-INFO +1 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/pyproject.toml +1 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/pyproject.toml.orig +1 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +2 -0
- bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +12 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/storage.py +13 -59
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/fleet.py +1 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/gate.py +19 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/computers.py +22 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/oidc.py +4 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/oidc_login.py +69 -26
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/profile.py +3 -3
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/shares.py +26 -74
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/permissions.py +9 -9
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/locales/en.toml +7 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/locales/zh-CN.toml +7 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/app.css +15 -15
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/components.js +6 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/poll.js +1 -0
- bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +1 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_detail.html +13 -2
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history.html +2 -1
- bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +1 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_oidc.html +1 -0
- bazaar_compute_node-0.2.1rc7/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html → bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/resources/templates/shares.html +4 -4
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/shell.html +0 -1
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/sessions.py +8 -5
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/storage.py +1 -19
- bazaar_compute_node-0.2.1rc7/src/bazaar_compute_server/resources/templates/shares.html +0 -19
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/LICENSE +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/README.md +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/agent_management.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/application.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/command.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/config.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/health_report.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/resource_dispatch.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/server_management.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/system_service.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/transport.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/upgrade.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/usage.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/version_check.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/wrapper.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/bcc.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cli.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/_format.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/message.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/control.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/actor.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/client.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/command.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/concurrency.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/control.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/correlation.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/inbox.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/instruction.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/lifecycle.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/entities.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/events.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/states.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/observability.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/messages.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/orchestrator.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/outcomes.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/paths.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/restart.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/review.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/serialize.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/storage.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/timerwheel.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/children.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/clock.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/command.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/text.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/i18n/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/i18n/catalog.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/access.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/accounts.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/activity.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/app.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/cli.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/clock.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/config.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/configure.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/consumers.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contacts.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/control.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/history.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/i18n.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/images.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/accounts.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/agents.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/login.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/poll.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/roles.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/settings.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/poll_rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/polling.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/reauth.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/refs.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/agent-form.js +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/app.webmanifest +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/activity_card.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_form.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_list.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_new.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_row.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agents.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/chat.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/code.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/components.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_list.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_row.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computers.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/contact_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/contacts.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/conversation_reminders.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/error.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history_end.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/loader.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/pencil.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/image.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/login.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/login_form.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/password_form.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/presence.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/profile.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/rail.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/remove_ask.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/review_card.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/scripts.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_accounts.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_appearance.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_roles.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/unreachable.html +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/review.py +0 -0
- {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/secrets.py +0 -0
|
@@ -14,6 +14,7 @@ from .v03_roles_oidc import ROLES_OIDC_MIGRATION
|
|
|
14
14
|
from .v04_login_order import LOGIN_ORDER_MIGRATION
|
|
15
15
|
from .v05_provider_description import PROVIDER_DESCRIPTION_MIGRATION
|
|
16
16
|
from .v06_provider_default_role import PROVIDER_DEFAULT_ROLE_MIGRATION
|
|
17
|
+
from .v07_oidc_session_settings import OIDC_SESSION_SETTINGS_MIGRATION
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class MigrationError(RuntimeError):
|
|
@@ -38,6 +39,7 @@ MIGRATIONS = _migration_ledger(
|
|
|
38
39
|
LOGIN_ORDER_MIGRATION,
|
|
39
40
|
PROVIDER_DESCRIPTION_MIGRATION,
|
|
40
41
|
PROVIDER_DEFAULT_ROLE_MIGRATION,
|
|
42
|
+
OIDC_SESSION_SETTINGS_MIGRATION,
|
|
41
43
|
)
|
|
42
44
|
|
|
43
45
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .model import Migration
|
|
4
|
+
|
|
5
|
+
OIDC_SESSION_SETTINGS_MIGRATION = Migration(
|
|
6
|
+
version=7,
|
|
7
|
+
name="oidc_session_settings",
|
|
8
|
+
statements=(
|
|
9
|
+
"ALTER TABLE oidc_providers ADD COLUMN session_minutes INTEGER NOT NULL DEFAULT 10",
|
|
10
|
+
"DROP TABLE oidc_transactions",
|
|
11
|
+
),
|
|
12
|
+
)
|
|
@@ -15,7 +15,7 @@ from uuid import uuid7
|
|
|
15
15
|
import aiosqlite
|
|
16
16
|
|
|
17
17
|
from ...clock import now_ms
|
|
18
|
-
from ...permissions import Permission
|
|
18
|
+
from ...permissions import SHARE_POINTS, Permission
|
|
19
19
|
from ...protocol import Event
|
|
20
20
|
from ...secrets import derive, hash_secret, new_secret, verify_secret
|
|
21
21
|
from ...storage import (
|
|
@@ -25,7 +25,6 @@ from ...storage import (
|
|
|
25
25
|
Enrolment,
|
|
26
26
|
IStorage,
|
|
27
27
|
OIDCProvider,
|
|
28
|
-
OIDCTransaction,
|
|
29
28
|
Role,
|
|
30
29
|
RoleShare,
|
|
31
30
|
StoredEvent,
|
|
@@ -300,10 +299,10 @@ class SqliteStorage(IStorage):
|
|
|
300
299
|
async def save_oidc_provider(self, provider: OIDCProvider) -> None:
|
|
301
300
|
async def save(db: aiosqlite.Connection) -> None:
|
|
302
301
|
await db.execute(
|
|
303
|
-
"INSERT INTO oidc_providers(id,name,logo_url,issuer,client_id,client_secret,redirect_uri,created_at_ms,updated_at_ms,description,default_role_id)"
|
|
304
|
-
" VALUES (
|
|
302
|
+
"INSERT INTO oidc_providers(id,name,logo_url,issuer,client_id,client_secret,redirect_uri,created_at_ms,updated_at_ms,description,default_role_id,session_minutes)"
|
|
303
|
+
" VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET"
|
|
305
304
|
" name=excluded.name,logo_url=excluded.logo_url,issuer=excluded.issuer,client_id=excluded.client_id,"
|
|
306
|
-
" client_secret=excluded.client_secret,redirect_uri=excluded.redirect_uri,updated_at_ms=excluded.updated_at_ms,description=excluded.description,default_role_id=excluded.default_role_id",
|
|
305
|
+
" client_secret=excluded.client_secret,redirect_uri=excluded.redirect_uri,updated_at_ms=excluded.updated_at_ms,description=excluded.description,default_role_id=excluded.default_role_id,session_minutes=excluded.session_minutes",
|
|
307
306
|
(
|
|
308
307
|
provider.id,
|
|
309
308
|
provider.name,
|
|
@@ -316,6 +315,7 @@ class SqliteStorage(IStorage):
|
|
|
316
315
|
provider.updated_at_ms,
|
|
317
316
|
provider.description,
|
|
318
317
|
provider.default_role_id,
|
|
318
|
+
provider.session_minutes,
|
|
319
319
|
),
|
|
320
320
|
)
|
|
321
321
|
await db.execute(
|
|
@@ -376,41 +376,6 @@ class SqliteStorage(IStorage):
|
|
|
376
376
|
|
|
377
377
|
return await self._write(resolve)
|
|
378
378
|
|
|
379
|
-
async def save_oidc_transaction(self, transaction: OIDCTransaction) -> None:
|
|
380
|
-
async def save(db: aiosqlite.Connection) -> None:
|
|
381
|
-
await db.execute(
|
|
382
|
-
"DELETE FROM oidc_transactions WHERE expires_at_ms <= ?", (now_ms(),)
|
|
383
|
-
)
|
|
384
|
-
await db.execute(
|
|
385
|
-
"INSERT INTO oidc_transactions(state,provider_id,browser_hash,nonce,code_verifier,redirect_uri,expires_at_ms,issuer,subject) VALUES (?,?,?,?,?,?,?,?,?)",
|
|
386
|
-
(
|
|
387
|
-
transaction.state,
|
|
388
|
-
transaction.provider_id,
|
|
389
|
-
transaction.browser_hash,
|
|
390
|
-
transaction.nonce,
|
|
391
|
-
transaction.code_verifier,
|
|
392
|
-
transaction.redirect_uri,
|
|
393
|
-
transaction.expires_at_ms,
|
|
394
|
-
transaction.issuer,
|
|
395
|
-
transaction.subject,
|
|
396
|
-
),
|
|
397
|
-
)
|
|
398
|
-
|
|
399
|
-
await self._write(save)
|
|
400
|
-
|
|
401
|
-
async def consume_oidc_transaction(
|
|
402
|
-
self, state: str, browser_hash: str, provider_id: str
|
|
403
|
-
) -> OIDCTransaction | None:
|
|
404
|
-
async def consume(db: aiosqlite.Connection) -> OIDCTransaction | None:
|
|
405
|
-
async with db.execute(
|
|
406
|
-
"DELETE FROM oidc_transactions WHERE state=? AND browser_hash=? AND provider_id=? AND expires_at_ms>? RETURNING *",
|
|
407
|
-
(state, browser_hash, provider_id, now_ms()),
|
|
408
|
-
) as rows:
|
|
409
|
-
row = await rows.fetchone()
|
|
410
|
-
return None if row is None else OIDCTransaction(**dict(row))
|
|
411
|
-
|
|
412
|
-
return await self._write(consume)
|
|
413
|
-
|
|
414
379
|
async def list_role_shares(self, kind: str, target_id: str) -> list[RoleShare]:
|
|
415
380
|
async with (
|
|
416
381
|
self._reader() as db,
|
|
@@ -514,7 +479,7 @@ class SqliteStorage(IStorage):
|
|
|
514
479
|
async def allowed_targets(
|
|
515
480
|
self, account_id: str, kind: str, point: Permission
|
|
516
481
|
) -> set[str]:
|
|
517
|
-
"""Ownership and
|
|
482
|
+
"""Ownership and grants explicitly attached to this resource kind."""
|
|
518
483
|
account = await self.get_account(account_id)
|
|
519
484
|
if account is None:
|
|
520
485
|
return set()
|
|
@@ -537,26 +502,15 @@ class SqliteStorage(IStorage):
|
|
|
537
502
|
(account_id, f"{kind}_owner"),
|
|
538
503
|
) as rows:
|
|
539
504
|
targets = {row["target_id"] async for row in rows}
|
|
505
|
+
if point not in SHARE_POINTS[kind]:
|
|
506
|
+
return targets
|
|
540
507
|
async with db.execute(
|
|
541
|
-
"SELECT
|
|
542
|
-
(account_id, f"{kind}_share_role"
|
|
508
|
+
"SELECT target_id,ext FROM relations WHERE subject_id IN (SELECT role_id FROM account_roles WHERE account_id=?) AND kind=?",
|
|
509
|
+
(account_id, f"{kind}_share_role"),
|
|
543
510
|
) as rows:
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
if point not in json.loads(grant["ext"])["permissions"]:
|
|
548
|
-
continue
|
|
549
|
-
if grant["kind"] == f"{kind}_share_role":
|
|
550
|
-
targets.add(grant["target_id"])
|
|
551
|
-
elif kind == "agent":
|
|
552
|
-
computers.add(grant["target_id"])
|
|
553
|
-
if computers:
|
|
554
|
-
async with db.execute(
|
|
555
|
-
"SELECT target_id,ext FROM relations WHERE kind='agent_owner'"
|
|
556
|
-
) as rows:
|
|
557
|
-
async for row in rows:
|
|
558
|
-
if json.loads(row["ext"])["computer_id"] in computers:
|
|
559
|
-
targets.add(row["target_id"])
|
|
511
|
+
async for row in rows:
|
|
512
|
+
if point in json.loads(row["ext"])["permissions"]:
|
|
513
|
+
targets.add(row["target_id"])
|
|
560
514
|
return targets
|
|
561
515
|
|
|
562
516
|
# ---- accounts --------------------------------------------------------
|
{bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/fleet.py
RENAMED
|
@@ -219,7 +219,7 @@ async def _views(
|
|
|
219
219
|
visible = await access.visible("agent", [agent.id for agent in agents_of(views)])
|
|
220
220
|
computer_actions = {
|
|
221
221
|
point: await access.targets("computer", point)
|
|
222
|
-
for point in SHARE_POINTS["computer"]
|
|
222
|
+
for point in (*SHARE_POINTS["computer"], Permission.COMPUTERS_SHARE)
|
|
223
223
|
}
|
|
224
224
|
agent_actions = {
|
|
225
225
|
point: await access.targets("agent", point) for point in SHARE_POINTS["agent"]
|
{bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/gate.py
RENAMED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from urllib.parse import urlencode, urlsplit
|
|
6
|
+
|
|
5
7
|
from starlette.requests import Request
|
|
6
8
|
from starlette.responses import RedirectResponse, Response
|
|
7
9
|
from starlette.types import ASGIApp, Message, Receive, Scope, Send
|
|
@@ -106,6 +108,23 @@ def _to_login(request: Request) -> Response:
|
|
|
106
108
|
destination = (
|
|
107
109
|
"/login/oidc/resume" if request.cookies.get(reauth.COOKIE) else LOGIN_PATH
|
|
108
110
|
)
|
|
111
|
+
if request.cookies.get(reauth.COOKIE):
|
|
112
|
+
# Partial requests name the page in the browser, not the fragment endpoint.
|
|
113
|
+
if request.headers.get("HX-Request") == "true":
|
|
114
|
+
current = request.headers.get("HX-Current-URL", "")
|
|
115
|
+
elif request.method in ("GET", "HEAD"):
|
|
116
|
+
current = str(request.url)
|
|
117
|
+
else:
|
|
118
|
+
current = request.headers.get("Referer", "")
|
|
119
|
+
try:
|
|
120
|
+
current = urlsplit(current)
|
|
121
|
+
origin = urlsplit(str(request.url))
|
|
122
|
+
if (current.scheme, current.netloc) == (origin.scheme, origin.netloc):
|
|
123
|
+
destination += "?" + urlencode(
|
|
124
|
+
{"return_to": current._replace(scheme="", netloc="").geturl()}
|
|
125
|
+
)
|
|
126
|
+
except ValueError:
|
|
127
|
+
pass
|
|
109
128
|
# htmx cannot follow a redirect into the shell; it is told to go there whole
|
|
110
129
|
if request.headers.get("HX-Request") == "true":
|
|
111
130
|
return Response(status_code=401, headers={"HX-Redirect": destination})
|
|
@@ -19,6 +19,7 @@ from ..protocol import MAX_NAME_CHARS
|
|
|
19
19
|
from ..refs import Refs, expanded
|
|
20
20
|
from ..rendering import Renderer
|
|
21
21
|
from ..storage import IStorage
|
|
22
|
+
from .shares import SharePages
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class ComputerPages:
|
|
@@ -71,6 +72,15 @@ class ComputerPages:
|
|
|
71
72
|
self, request: Request, page: Fleet, selected: ComputerView | None, *, view: str
|
|
72
73
|
) -> Response:
|
|
73
74
|
await self.refs.load(_named(page.computers, selected))
|
|
75
|
+
context = {}
|
|
76
|
+
if (
|
|
77
|
+
selected is not None
|
|
78
|
+
and request.query_params.get("tab") == "sharing"
|
|
79
|
+
and Permission.COMPUTERS_SHARE in selected.actions
|
|
80
|
+
):
|
|
81
|
+
context = await SharePages(self._storage, self._render, self.refs).context(
|
|
82
|
+
request, "computer", selected.computer.id
|
|
83
|
+
)
|
|
74
84
|
return self._render.page(
|
|
75
85
|
request,
|
|
76
86
|
"computers",
|
|
@@ -83,6 +93,7 @@ class ComputerPages:
|
|
|
83
93
|
else str(self.refs.ref(selected.computer.id)),
|
|
84
94
|
enrolment=None,
|
|
85
95
|
view=view,
|
|
96
|
+
**context,
|
|
86
97
|
)
|
|
87
98
|
|
|
88
99
|
@allowed(Permission.COMPUTERS_VIEW)
|
|
@@ -127,7 +138,17 @@ class ComputerPages:
|
|
|
127
138
|
selected = await self._selected(request)
|
|
128
139
|
if selected is None:
|
|
129
140
|
return HTMLResponse("", status_code=404)
|
|
130
|
-
|
|
141
|
+
context = {}
|
|
142
|
+
if (
|
|
143
|
+
request.query_params.get("tab") == "sharing"
|
|
144
|
+
and Permission.COMPUTERS_SHARE in selected.actions
|
|
145
|
+
):
|
|
146
|
+
context = await SharePages(self._storage, self._render, self.refs).context(
|
|
147
|
+
request, "computer", selected.computer.id
|
|
148
|
+
)
|
|
149
|
+
return self._render.fragment(
|
|
150
|
+
request, "computer_detail.html", selected=selected, **context
|
|
151
|
+
)
|
|
131
152
|
|
|
132
153
|
@expanded("computer_id")
|
|
133
154
|
@allowed(Permission.COMPUTERS_VIEW, "computer")
|
|
@@ -38,6 +38,7 @@ class ProviderForm(BaseModel):
|
|
|
38
38
|
str, StringConstraints(strip_whitespace=True, max_length=200)
|
|
39
39
|
] = ""
|
|
40
40
|
default_role_id: str = ""
|
|
41
|
+
session_minutes: int = Field(default=10, ge=1)
|
|
41
42
|
|
|
42
43
|
clear_logo: bool = False
|
|
43
44
|
issuer: HttpUrl
|
|
@@ -127,6 +128,7 @@ class OIDCPages:
|
|
|
127
128
|
"name": selected.name if selected else "",
|
|
128
129
|
"description": selected.description if selected else "",
|
|
129
130
|
"default_role_id": (selected.default_role_id or "") if selected else "",
|
|
131
|
+
"session_minutes": str(selected.session_minutes if selected else 10),
|
|
130
132
|
"logo_url": selected.logo_url if selected else "",
|
|
131
133
|
"issuer": selected.issuer if selected else "",
|
|
132
134
|
"client_id": selected.client_id if selected else "",
|
|
@@ -179,6 +181,7 @@ class OIDCPages:
|
|
|
179
181
|
"redirect_uri",
|
|
180
182
|
)
|
|
181
183
|
}
|
|
184
|
+
values["session_minutes"] = str(form.get("session_minutes", "10"))
|
|
182
185
|
values["logo_url"] = selected.logo_url if selected else ""
|
|
183
186
|
logo = form.get("logo")
|
|
184
187
|
logo_url = values["logo_url"]
|
|
@@ -241,6 +244,7 @@ class OIDCPages:
|
|
|
241
244
|
now_ms(),
|
|
242
245
|
description=parsed.description,
|
|
243
246
|
default_role_id=parsed.default_role_id or None,
|
|
247
|
+
session_minutes=parsed.session_minutes,
|
|
244
248
|
)
|
|
245
249
|
await self._storage.save_oidc_provider(provider)
|
|
246
250
|
await self.refs.load([provider.id])
|
|
@@ -1,30 +1,60 @@
|
|
|
1
|
-
"""OIDC protocol calls with
|
|
1
|
+
"""OIDC protocol calls with short-lived, single-use in-memory login state."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from collections import OrderedDict
|
|
5
6
|
from hashlib import sha256
|
|
7
|
+
from pathlib import PurePosixPath
|
|
6
8
|
from secrets import token_urlsafe
|
|
7
9
|
|
|
8
10
|
from authlib.integrations.base_client import OAuthError
|
|
9
11
|
from authlib.integrations.starlette_client import StarletteOAuth2App
|
|
10
12
|
from httpx2 import HTTPError
|
|
11
13
|
from joserfc.errors import JoseError
|
|
12
|
-
from pydantic import BaseModel, Field, ValidationError
|
|
14
|
+
from pydantic import BaseModel, Field, ValidationError, field_validator
|
|
13
15
|
from starlette.requests import Request
|
|
14
16
|
from starlette.responses import RedirectResponse, Response
|
|
17
|
+
from yarl import URL
|
|
15
18
|
|
|
16
19
|
from .. import reauth
|
|
17
20
|
from ..clock import now_ms
|
|
18
21
|
from ..gate import set_session
|
|
19
22
|
from ..rendering import Renderer
|
|
20
23
|
from ..sessions import Sessions
|
|
21
|
-
from ..storage import IStorage, OIDCProvider
|
|
24
|
+
from ..storage import IStorage, OIDCProvider
|
|
22
25
|
from .login import HOME
|
|
23
26
|
|
|
24
27
|
LIFETIME = 600
|
|
28
|
+
MAX_TRANSACTIONS = 1024
|
|
25
29
|
COOKIE = "bcs_oidc"
|
|
26
30
|
|
|
27
31
|
|
|
32
|
+
class Destination(BaseModel):
|
|
33
|
+
return_to: str = Field(default=HOME, max_length=8192)
|
|
34
|
+
|
|
35
|
+
@field_validator("return_to")
|
|
36
|
+
@classmethod
|
|
37
|
+
def local_path(cls, value: str) -> str:
|
|
38
|
+
url = URL(value)
|
|
39
|
+
path = PurePosixPath(url.raw_path)
|
|
40
|
+
if url.scheme or url.authority or path.root != "/":
|
|
41
|
+
raise ValueError("return_to must be a local absolute path")
|
|
42
|
+
return str(
|
|
43
|
+
url.with_path(str(path), encoded=True, keep_query=True, keep_fragment=True)
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class Transaction(Destination):
|
|
48
|
+
expires_at_ms: int
|
|
49
|
+
browser_hash: str
|
|
50
|
+
provider_id: str
|
|
51
|
+
nonce: str
|
|
52
|
+
code_verifier: str
|
|
53
|
+
redirect_uri: str
|
|
54
|
+
issuer: str
|
|
55
|
+
subject: str
|
|
56
|
+
|
|
57
|
+
|
|
28
58
|
class Callback(BaseModel):
|
|
29
59
|
state: str = Field(min_length=1, max_length=256)
|
|
30
60
|
code: str = Field(default="", max_length=8192)
|
|
@@ -39,8 +69,8 @@ class Identity(BaseModel):
|
|
|
39
69
|
|
|
40
70
|
|
|
41
71
|
def client(provider: OIDCProvider) -> StarletteOAuth2App:
|
|
42
|
-
# BCS
|
|
43
|
-
#
|
|
72
|
+
# BCS keeps login state in memory rather than the framework session adapter.
|
|
73
|
+
# Authlib handles the protocol and token checks.
|
|
44
74
|
return StarletteOAuth2App(
|
|
45
75
|
framework=None,
|
|
46
76
|
client_id=provider.client_id,
|
|
@@ -62,6 +92,7 @@ class OIDCLoginPages:
|
|
|
62
92
|
self._storage = storage
|
|
63
93
|
self._render = renderer
|
|
64
94
|
self._sessions = sessions
|
|
95
|
+
self._transactions: OrderedDict[str, Transaction] = OrderedDict()
|
|
65
96
|
|
|
66
97
|
async def failure(self, request: Request, reason: str) -> Response:
|
|
67
98
|
response = self._render.standalone(
|
|
@@ -106,6 +137,10 @@ class OIDCLoginPages:
|
|
|
106
137
|
async def _start(
|
|
107
138
|
self, request: Request, provider: OIDCProvider, hint: reauth.Hint | None = None
|
|
108
139
|
) -> Response:
|
|
140
|
+
try:
|
|
141
|
+
destination = Destination.model_validate(dict(request.query_params))
|
|
142
|
+
except ValidationError:
|
|
143
|
+
destination = Destination()
|
|
109
144
|
state, nonce, verifier, browser = (token_urlsafe(32) for _ in range(4))
|
|
110
145
|
oauth = client(provider)
|
|
111
146
|
try:
|
|
@@ -121,19 +156,24 @@ class OIDCLoginPages:
|
|
|
121
156
|
)
|
|
122
157
|
except HTTPError, OAuthError, ValueError, KeyError, RuntimeError:
|
|
123
158
|
return await self.failure(request, "oidc.unavailable")
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
hint.subject if hint else "",
|
|
135
|
-
)
|
|
159
|
+
self._transactions[state] = Transaction(
|
|
160
|
+
expires_at_ms=now_ms() + LIFETIME * 1000,
|
|
161
|
+
browser_hash=sha256(browser.encode()).hexdigest(),
|
|
162
|
+
provider_id=provider.id,
|
|
163
|
+
nonce=nonce,
|
|
164
|
+
code_verifier=verifier,
|
|
165
|
+
redirect_uri=provider.redirect_uri,
|
|
166
|
+
issuer=hint.issuer if hint else "",
|
|
167
|
+
subject=hint.subject if hint else "",
|
|
168
|
+
return_to=destination.return_to,
|
|
136
169
|
)
|
|
170
|
+
# Each entry is read only when consumed, so the oldest pending entry
|
|
171
|
+
# is also the least recently used one.
|
|
172
|
+
while self._transactions and (
|
|
173
|
+
len(self._transactions) > MAX_TRANSACTIONS
|
|
174
|
+
or next(iter(self._transactions.values())).expires_at_ms <= now_ms()
|
|
175
|
+
):
|
|
176
|
+
self._transactions.popitem(last=False)
|
|
137
177
|
response = RedirectResponse(authorization["url"], status_code=302)
|
|
138
178
|
response.delete_cookie(reauth.COOKIE, path="/")
|
|
139
179
|
response.set_cookie(
|
|
@@ -154,13 +194,16 @@ class OIDCLoginPages:
|
|
|
154
194
|
values = Callback.model_validate(dict(request.query_params))
|
|
155
195
|
except ValidationError:
|
|
156
196
|
return await self.failure(request, "oidc.expired")
|
|
157
|
-
transaction =
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
197
|
+
transaction = self._transactions.get(values.state)
|
|
198
|
+
if (
|
|
199
|
+
transaction is None
|
|
200
|
+
or transaction.expires_at_ms <= now_ms()
|
|
201
|
+
or transaction.browser_hash
|
|
202
|
+
!= sha256(request.cookies.get(COOKIE, "").encode()).hexdigest()
|
|
203
|
+
or request.path_params["provider_id"] != transaction.provider_id
|
|
204
|
+
):
|
|
163
205
|
return await self.failure(request, "oidc.expired")
|
|
206
|
+
self._transactions.pop(values.state)
|
|
164
207
|
if values.error or not values.code:
|
|
165
208
|
return await self.failure(request, "oidc.failed")
|
|
166
209
|
provider = await self._storage.get_oidc_provider(transaction.provider_id)
|
|
@@ -203,12 +246,12 @@ class OIDCLoginPages:
|
|
|
203
246
|
)
|
|
204
247
|
except ValueError:
|
|
205
248
|
return await self.failure(request, "oidc.default_required")
|
|
206
|
-
response = RedirectResponse(
|
|
249
|
+
response = RedirectResponse(transaction.return_to, status_code=302)
|
|
207
250
|
set_session(
|
|
208
251
|
response,
|
|
209
|
-
self._sessions.issue(account),
|
|
252
|
+
self._sessions.issue(account, max_age=provider.session_minutes * 60),
|
|
210
253
|
request=request,
|
|
211
|
-
max_age=
|
|
254
|
+
max_age=provider.session_minutes * 60,
|
|
212
255
|
)
|
|
213
256
|
response.delete_cookie(COOKIE, path="/login/oidc")
|
|
214
257
|
hint = reauth.Hint(
|
|
@@ -352,9 +352,9 @@ class ProfilePages:
|
|
|
352
352
|
"""What one tab shows."""
|
|
353
353
|
|
|
354
354
|
if tab == "sharing":
|
|
355
|
-
return await SharePages(
|
|
356
|
-
|
|
357
|
-
)
|
|
355
|
+
return await SharePages(self._storage, self._render, self.refs).context(
|
|
356
|
+
request, "agent", request.path_params["agent_id"]
|
|
357
|
+
)
|
|
358
358
|
if tab == "config":
|
|
359
359
|
agents, reply = await asyncio.gather(
|
|
360
360
|
held(
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
-
from pydantic import BaseModel,
|
|
7
|
+
from pydantic import BaseModel, ValidationError
|
|
8
8
|
from starlette.requests import Request
|
|
9
9
|
from starlette.responses import HTMLResponse, Response
|
|
10
10
|
|
|
@@ -15,11 +15,6 @@ from ..rendering import Renderer
|
|
|
15
15
|
from ..storage import IStorage
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class ShareForm(BaseModel):
|
|
19
|
-
role: str
|
|
20
|
-
permissions: list[Permission] = Field(default_factory=list)
|
|
21
|
-
|
|
22
|
-
|
|
23
18
|
class ShareChanges(BaseModel):
|
|
24
19
|
grants: dict[str, frozenset[Permission]]
|
|
25
20
|
|
|
@@ -46,7 +41,10 @@ class SharePages:
|
|
|
46
41
|
target_id = request.path_params["agent_id"]
|
|
47
42
|
if not await access.can_share("agent", target_id):
|
|
48
43
|
return HTMLResponse("", status_code=404)
|
|
49
|
-
|
|
44
|
+
return await self._handle(request, "agent", target_id)
|
|
45
|
+
|
|
46
|
+
async def _handle(self, request: Request, kind: str, target_id: str) -> Response:
|
|
47
|
+
context = await self.context(request, kind, target_id)
|
|
50
48
|
error = None
|
|
51
49
|
if request.method == "POST":
|
|
52
50
|
form = await request.form()
|
|
@@ -64,92 +62,46 @@ class SharePages:
|
|
|
64
62
|
else:
|
|
65
63
|
try:
|
|
66
64
|
await self._storage.save_role_shares(
|
|
67
|
-
|
|
65
|
+
kind, target_id, values.grants, points
|
|
68
66
|
)
|
|
69
67
|
except LookupError:
|
|
70
68
|
error = "shares.invalid"
|
|
71
69
|
else:
|
|
72
|
-
context = await self.
|
|
70
|
+
context = await self.context(request, kind, target_id)
|
|
73
71
|
context["error"] = error
|
|
74
|
-
return self._render.fragment(request, "
|
|
72
|
+
return self._render.fragment(request, "shares.html", **context)
|
|
75
73
|
|
|
76
|
-
async def
|
|
74
|
+
async def context(
|
|
75
|
+
self, request: Request, kind: str, target_id: str
|
|
76
|
+
) -> dict[str, Any]:
|
|
77
77
|
access = Access.of(request)
|
|
78
|
-
target_id = request.path_params["agent_id"]
|
|
79
78
|
points = [
|
|
80
79
|
point
|
|
81
|
-
for point in SHARE_POINTS[
|
|
82
|
-
if await access.can(
|
|
80
|
+
for point in SHARE_POINTS[kind]
|
|
81
|
+
if await access.can(kind, target_id, point)
|
|
83
82
|
]
|
|
84
83
|
roles = await self._storage.list_roles()
|
|
85
|
-
shares = await self._storage.list_role_shares(
|
|
84
|
+
shares = await self._storage.list_role_shares(kind, target_id)
|
|
86
85
|
grants = {
|
|
87
86
|
share.role_id: sorted(share.permissions & set(points)) for share in shares
|
|
88
87
|
}
|
|
88
|
+
key = self.refs.ref(target_id)
|
|
89
|
+
url = (
|
|
90
|
+
f"/computers/{key}/shares"
|
|
91
|
+
if kind == "computer"
|
|
92
|
+
else f"/agents/{self.refs.ref(request.path_params['computer_id'])}/{key}/shares"
|
|
93
|
+
)
|
|
89
94
|
return {
|
|
90
95
|
"points": points,
|
|
96
|
+
"share_kind": kind,
|
|
97
|
+
"share_id": f"computer-sharing-{key}"
|
|
98
|
+
if kind == "computer"
|
|
99
|
+
else "agent-sharing",
|
|
91
100
|
"share_data": {
|
|
92
101
|
"roles": [{"id": role.id, "name": role.name} for role in roles],
|
|
93
102
|
"grants": grants,
|
|
103
|
+
"default": f"{kind}s.view",
|
|
94
104
|
},
|
|
95
|
-
"share_url":
|
|
105
|
+
"share_url": url,
|
|
96
106
|
"error": None,
|
|
97
107
|
}
|
|
98
|
-
|
|
99
|
-
async def _handle(self, request: Request, kind: str, target_id: str) -> Response:
|
|
100
|
-
access = Access.of(request)
|
|
101
|
-
roles = await self._storage.list_roles()
|
|
102
|
-
points = [
|
|
103
|
-
point
|
|
104
|
-
for point in SHARE_POINTS[kind]
|
|
105
|
-
if await access.can(kind, target_id, point)
|
|
106
|
-
]
|
|
107
|
-
error = None
|
|
108
|
-
saved = False
|
|
109
|
-
selected = request.query_params.get("role")
|
|
110
|
-
if request.method == "POST":
|
|
111
|
-
form = await request.form()
|
|
112
|
-
try:
|
|
113
|
-
values = ShareForm.model_validate(
|
|
114
|
-
{
|
|
115
|
-
"role": form.get("role"),
|
|
116
|
-
"permissions": form.getlist("permissions"),
|
|
117
|
-
}
|
|
118
|
-
)
|
|
119
|
-
except ValidationError:
|
|
120
|
-
error = "shares.invalid"
|
|
121
|
-
else:
|
|
122
|
-
selected = values.role
|
|
123
|
-
if selected not in {role.id for role in roles} or not set(
|
|
124
|
-
values.permissions
|
|
125
|
-
) <= set(points):
|
|
126
|
-
error = "shares.invalid"
|
|
127
|
-
else:
|
|
128
|
-
try:
|
|
129
|
-
await self._storage.save_role_shares(
|
|
130
|
-
kind,
|
|
131
|
-
target_id,
|
|
132
|
-
{selected: frozenset(values.permissions)},
|
|
133
|
-
frozenset(points),
|
|
134
|
-
)
|
|
135
|
-
except LookupError:
|
|
136
|
-
error = "shares.invalid"
|
|
137
|
-
else:
|
|
138
|
-
saved = True
|
|
139
|
-
if selected is None and roles:
|
|
140
|
-
selected = roles[0].id
|
|
141
|
-
if selected is not None and selected not in {role.id for role in roles}:
|
|
142
|
-
return HTMLResponse("", status_code=404)
|
|
143
|
-
shares = await self._storage.list_role_shares(kind, target_id)
|
|
144
|
-
return self._render.fragment(
|
|
145
|
-
request,
|
|
146
|
-
"shares.html",
|
|
147
|
-
kind=kind,
|
|
148
|
-
roles=roles,
|
|
149
|
-
selected=selected,
|
|
150
|
-
points=points,
|
|
151
|
-
grants={share.role_id: share.permissions for share in shares},
|
|
152
|
-
url=request.url.path,
|
|
153
|
-
error=error,
|
|
154
|
-
saved=saved,
|
|
155
|
-
)
|
|
@@ -74,16 +74,16 @@ POLL_HANDLERS = MappingProxyType(
|
|
|
74
74
|
|
|
75
75
|
SHARE_POINTS = MappingProxyType(
|
|
76
76
|
{
|
|
77
|
-
"computer":
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
and point != Permission.COMPUTERS_CREATE
|
|
77
|
+
"computer": (
|
|
78
|
+
Permission.COMPUTERS_VIEW,
|
|
79
|
+
Permission.AGENTS_CREATE,
|
|
80
|
+
Permission.COMPUTERS_DELETE,
|
|
82
81
|
),
|
|
83
|
-
"agent":
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
"agent": (
|
|
83
|
+
Permission.AGENTS_VIEW,
|
|
84
|
+
Permission.AGENTS_UPDATE,
|
|
85
|
+
Permission.AGENTS_DELETE,
|
|
86
|
+
Permission.AGENTS_APPROVE,
|
|
87
87
|
),
|
|
88
88
|
}
|
|
89
89
|
)
|