feat: add import restore options, OAuth confirmation, and fixes

- database import: add keep_owners (restore PostgreSQL owners and
  privileges) and sqlite_database (pick the target SQLite file) to the
  API, OpenAPI spec, and import form
- oauth: require password confirmation and support team selection on
  OAuth login
- remote process: send team broadcast events to the team of the server
  that ran the process instead of the causer's user id
- servers API: handle the legacy build server setting
- compose: support parent bind paths and volume driver options
- dns: improve record hints and provider management
- notifications: fix throttling and missing backup notifications
- ui: rework the confirmation modal
- add feature and unit tests for the new behavior
This commit is contained in:
Andras Bacsai
2026-09-30 13:35:22 +02:00
parent d1bdecba6d
commit 9e7cb60b0d
57 changed files with 3032 additions and 194 deletions
+46
View File
@@ -16821,6 +16821,11 @@
"example": "both",
"description": "Server role."
},
"is_build_server": {
"type": "boolean",
"deprecated": true,
"description": "Deprecated: use server_role instead. true sets server_role to build, false sets it to both. Must not conflict with server_role."
},
"instant_validate": {
"type": "boolean",
"example": false,
@@ -17058,6 +17063,11 @@
],
"description": "Server role."
},
"is_build_server": {
"type": "boolean",
"deprecated": true,
"description": "Deprecated: use server_role instead. true sets server_role to build, false changes a build server to both and leaves other roles unchanged. Must not conflict with server_role."
},
"instant_validate": {
"type": "boolean",
"description": "Instant validate."
@@ -22425,6 +22435,16 @@
"description": "Drop matching PostgreSQL objects before restoring a single-database archive.",
"type": "boolean",
"default": false
},
"keep_owners": {
"description": "Restore object owners and privileges from a single-database PostgreSQL archive. By default they are skipped, because the roles of another server usually do not exist.",
"type": "boolean",
"default": false
},
"sqlite_database": {
"description": "SQLite: the database file to restore into. Must be one of the database files. Defaults to the file named in the backup file name, else the first file.",
"type": "string",
"example": "app.db"
}
},
"type": "object",
@@ -22457,6 +22477,16 @@
"description": "Drop matching PostgreSQL objects before restoring a single-database archive.",
"type": "boolean",
"default": false
},
"keep_owners": {
"description": "Restore object owners and privileges from a single-database PostgreSQL archive. By default they are skipped, because the roles of another server usually do not exist.",
"type": "boolean",
"default": false
},
"sqlite_database": {
"description": "SQLite: the database file to restore into. Must be one of the database files. Defaults to the file named in the backup file name, else the first file.",
"type": "string",
"example": "app.db"
}
},
"type": "object",
@@ -22486,6 +22516,16 @@
"description": "Drop matching PostgreSQL objects before restoring a single-database archive.",
"type": "boolean",
"default": false
},
"keep_owners": {
"description": "Restore object owners and privileges from a single-database PostgreSQL archive. By default they are skipped, because the roles of another server usually do not exist.",
"type": "boolean",
"default": false
},
"sqlite_database": {
"description": "SQLite: the database file to restore into. Must be one of the database files. Defaults to the file named in the backup file name, else the first file.",
"type": "string",
"example": "app.db"
}
},
"type": "object",
@@ -23690,6 +23730,12 @@
"both"
]
},
"is_build_server": {
"type": "boolean",
"deprecated": true,
"readOnly": true,
"description": "Deprecated: use server_role instead. true when server_role is build."
},
"is_cloudflare_tunnel": {
"type": "boolean"
},