mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 15:15:24 +00:00
chore: switch to calver, bump version to 26.10.0
This commit is contained in:
1 parent
29719dbb87
commit
d4b68ea5a2
22 files changed
+32
-25
No files matched your search
+1
-1
@@ -83,7 +83,7 @@ contextBridge.exposeInMainWorld("electronAPI", {
|
|||||||
|
|
||||||
externalBrowserLogin: (authUrl, callbackPort) =>
|
externalBrowserLogin: (authUrl, callbackPort) =>
|
||||||
ipcRenderer.invoke("external-browser-login", authUrl, callbackPort),
|
ipcRenderer.invoke("external-browser-login", authUrl, callbackPort),
|
||||||
// 2.8 name, read by older server login pages. Remove in 3.0.0.
|
// 2.8 name, read by older server login pages. Remove in 26.10.0.
|
||||||
oidcSystemBrowserAuth: (authUrl, callbackPort) =>
|
oidcSystemBrowserAuth: (authUrl, callbackPort) =>
|
||||||
ipcRenderer.invoke("external-browser-login", authUrl, callbackPort),
|
ipcRenderer.invoke("external-browser-login", authUrl, callbackPort),
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "termix",
|
"name": "termix",
|
||||||
"version": "2.9.0",
|
"version": "26.10.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "termix",
|
"name": "termix",
|
||||||
"version": "2.9.0",
|
"version": "26.10.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*",
|
"packages/*",
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
"packages/*",
|
"packages/*",
|
||||||
"plugins/*"
|
"plugins/*"
|
||||||
],
|
],
|
||||||
"version": "2.9.0",
|
"version": "26.10.0",
|
||||||
"description": "Self-hosted SSH and remote desktop management.",
|
"description": "Self-hosted SSH and remote desktop management.",
|
||||||
"author": "Karmaa",
|
"author": "Karmaa",
|
||||||
"main": "electron/main.cjs",
|
"main": "electron/main.cjs",
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ with a real install, a real device or a repo outside this one.
|
|||||||
|
|
||||||
## Left for later
|
## Left for later
|
||||||
|
|
||||||
- 3.0.0: drop the migrated 2.8 settings rows (`guac_url`, `step_ca_url`,
|
- 26.10.0: drop the migrated 2.8 settings rows (`guac_url`, `step_ca_url`,
|
||||||
`global_metrics_interval` and the rest). The upgrade moves leave them in
|
`global_metrics_interval` and the rest). The upgrade moves leave them in
|
||||||
place so a downgrade to 2.8 still works; nothing reads them in 2.9.
|
place so a downgrade to 2.8 still works; nothing reads them in 2.9.
|
||||||
- Plugin repo split: knip still reports about 150 unused exports inside
|
- Plugin repo split: knip still reports about 150 unused exports inside
|
||||||
@@ -225,4 +225,4 @@ with a real install, a real device or a repo outside this one.
|
|||||||
SSH password for an RDP login (2.8 behaviour, behind `credentials:read`);
|
SSH password for an RDP login (2.8 behaviour, behind `credentials:read`);
|
||||||
a remote desktop display token can be replayed within its five minute TTL
|
a remote desktop display token can be replayed within its five minute TTL
|
||||||
(strict single use would break the touch mode switch and reconnect, which
|
(strict single use would break the touch mode switch and reconnect, which
|
||||||
reuse it). Revisit with signing and the install UI in 3.0.0.
|
reuse it). Revisit with signing and the install UI in 26.10.0.
|
||||||
@@ -277,7 +277,7 @@ export interface PluginSettingsField {
|
|||||||
component?: string;
|
component?: string;
|
||||||
/**
|
/**
|
||||||
* Deprecated and ignored: host defaults cover every host field now. Still
|
* Deprecated and ignored: host defaults cover every host field now. Still
|
||||||
* accepted so an older manifest loads. Removed in 3.0.0.
|
* accepted so an older manifest loads. Removed in 26.10.0.
|
||||||
*/
|
*/
|
||||||
defaultFrom?: string;
|
defaultFrom?: string;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,6 +15,13 @@ describe("latestDevBranch", () => {
|
|||||||
expect(latestDevBranch(["dev-2.10.0", "dev-2.9.0"])).toBe("dev-2.10.0");
|
expect(latestDevBranch(["dev-2.10.0", "dev-2.9.0"])).toBe("dev-2.10.0");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("ranks calendar versions above the old semver ones", () => {
|
||||||
|
expect(
|
||||||
|
latestDevBranch(["dev-2.9.1", "dev-26.10.0", "dev-26.9.0", "dev-3.0.0"]),
|
||||||
|
).toBe("dev-26.10.0");
|
||||||
|
expect(latestDevBranch(["dev-26.12.0", "dev-27.1.0"])).toBe("dev-27.1.0");
|
||||||
|
});
|
||||||
|
|
||||||
it("ignores main and non-dev branches", () => {
|
it("ignores main and non-dev branches", () => {
|
||||||
expect(latestDevBranch(["main", "feature/x", "dev-1.0.0"])).toBe(
|
expect(latestDevBranch(["main", "feature/x", "dev-1.0.0"])).toBe(
|
||||||
"dev-1.0.0",
|
"dev-1.0.0",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Whether a user signs in through an external login (SSO, LDAP or any login
|
* Whether a user signs in through an external login (SSO, LDAP or any login
|
||||||
* plugin) rather than only a password. Read from the is_oidc column, which
|
* plugin) rather than only a password. Read from the is_oidc column, which
|
||||||
* keeps its 2.8 name until 3.0.0 replaces it with user_external_identities.
|
* keeps its 2.8 name until 26.10.0 replaces it with user_external_identities.
|
||||||
*/
|
*/
|
||||||
export function isExternalAccount(user: {
|
export function isExternalAccount(user: {
|
||||||
isOidc?: boolean | number | null;
|
isOidc?: boolean | number | null;
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ export async function issueSession(
|
|||||||
username: user.username,
|
username: user.username,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
is_external: isExternalAccount(user),
|
is_external: isExternalAccount(user),
|
||||||
// 2.8 name, kept until 3.0.0.
|
// 2.8 name, kept until 26.10.0.
|
||||||
is_oidc: !!user.isOidc,
|
is_oidc: !!user.isOidc,
|
||||||
// Any second factor; the name is what 2.8 clients read.
|
// Any second factor; the name is what 2.8 clients read.
|
||||||
totp_enabled: await createCurrentUserAuthRepository().hasSecondFactor(
|
totp_enabled: await createCurrentUserAuthRepository().hasSecondFactor(
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export function parseTerminalConfig(
|
|||||||
* terminal_config is merged into what is stored rather than replaced. The
|
* terminal_config is merged into what is stored rather than replaced. The
|
||||||
* 2.8 keys the editor no longer sends (the terminal's look, which the
|
* 2.8 keys the editor no longer sends (the terminal's look, which the
|
||||||
* ssh-terminal plugin copies into its host settings, and a sudo password 2.8
|
* ssh-terminal plugin copies into its host settings, and a sudo password 2.8
|
||||||
* editors kept there) stay until 3.0.0 drops the column. A shared editor
|
* editors kept there) stay until 26.10.0 drops the column. A shared editor
|
||||||
* never changes the owner's private keys in either JSON. Returns an error
|
* never changes the owner's private keys in either JSON. Returns an error
|
||||||
* for a terminalConfig that cannot be read.
|
* for a terminalConfig that cannot be read.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ export function registerUserExternalAccountRoutes(
|
|||||||
|
|
||||||
router.post("/link-external-to-password", authenticateJWT, link);
|
router.post("/link-external-to-password", authenticateJWT, link);
|
||||||
router.post("/unlink-external-from-password", authenticateJWT, unlink);
|
router.post("/unlink-external-from-password", authenticateJWT, unlink);
|
||||||
// 2.8 paths, kept until 3.0.0.
|
// 2.8 paths, kept until 26.10.0.
|
||||||
router.post("/link-oidc-to-password", authenticateJWT, link);
|
router.post("/link-oidc-to-password", authenticateJWT, link);
|
||||||
router.post("/unlink-oidc-from-password", authenticateJWT, unlink);
|
router.post("/unlink-oidc-from-password", authenticateJWT, unlink);
|
||||||
}
|
}
|
||||||
@@ -613,7 +613,7 @@ router.get("/me", authenticateJWT, async (req: Request, res: Response) => {
|
|||||||
username: user.username,
|
username: user.username,
|
||||||
is_admin: !!user.isAdmin,
|
is_admin: !!user.isAdmin,
|
||||||
is_external: isExternalAccount(user),
|
is_external: isExternalAccount(user),
|
||||||
// 2.8 name, kept until 3.0.0.
|
// 2.8 name, kept until 26.10.0.
|
||||||
is_oidc: !!user.isOidc,
|
is_oidc: !!user.isOidc,
|
||||||
is_dual_auth: isDualAuth,
|
is_dual_auth: isDualAuth,
|
||||||
// Any second factor; the name is what 2.8 clients read.
|
// Any second factor; the name is what 2.8 clients read.
|
||||||
@@ -1022,7 +1022,7 @@ router.patch(
|
|||||||
authenticateJWT,
|
authenticateJWT,
|
||||||
setExternalAutoProvision,
|
setExternalAutoProvision,
|
||||||
);
|
);
|
||||||
// 2.8 paths, kept until 3.0.0.
|
// 2.8 paths, kept until 26.10.0.
|
||||||
router.get("/oidc-auto-provision", getExternalAutoProvision);
|
router.get("/oidc-auto-provision", getExternalAutoProvision);
|
||||||
router.patch("/oidc-auto-provision", authenticateJWT, setExternalAutoProvision);
|
router.patch("/oidc-auto-provision", authenticateJWT, setExternalAutoProvision);
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ const HOST_LOCAL_FIELDS = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Columns kept until 3.0.0 that nothing reads any more: their values moved
|
* Columns kept until 26.10.0 that nothing reads any more: their values moved
|
||||||
* into plugin host settings, which sync with the host's pluginSettings. They
|
* into plugin host settings, which sync with the host's pluginSettings. They
|
||||||
* stay off the wire so a stale local id never reaches the other side.
|
* stay off the wire so a stale local id never reaches the other side.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -119,8 +119,8 @@ describe("manifest v2 validation", () => {
|
|||||||
it("checks engine.termix against the core version", () => {
|
it("checks engine.termix against the core version", () => {
|
||||||
expect(isTermixCompatible(">=2.9.0", "2.9.0")).toBe(true);
|
expect(isTermixCompatible(">=2.9.0", "2.9.0")).toBe(true);
|
||||||
expect(isTermixCompatible(">=2.9.0", "2.9.0-beta.3")).toBe(true);
|
expect(isTermixCompatible(">=2.9.0", "2.9.0-beta.3")).toBe(true);
|
||||||
expect(isTermixCompatible(">=3.0.0", "2.9.1")).toBe(false);
|
expect(isTermixCompatible(">=26.10.0", "2.9.1")).toBe(false);
|
||||||
expect(isTermixCompatible(">=3.0.0", null)).toBe(true);
|
expect(isTermixCompatible(">=26.10.0", null)).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("fills in the entry point defaults", () => {
|
it("fills in the entry point defaults", () => {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ describe("desktop update check", () => {
|
|||||||
it("stays quiet when up to date, ahead, or turned off", async () => {
|
it("stays quiet when up to date, ahead, or turned off", async () => {
|
||||||
version.value = "2.9.1";
|
version.value = "2.9.1";
|
||||||
await checkForDesktopUpdate();
|
await checkForDesktopUpdate();
|
||||||
version.value = "3.0.0";
|
version.value = "26.10.0";
|
||||||
await checkForDesktopUpdate();
|
await checkForDesktopUpdate();
|
||||||
version.value = "2.9.0";
|
version.value = "2.9.0";
|
||||||
disabled.value = true;
|
disabled.value = true;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
* The classify pass that follows compares those against the new levels, so
|
* The classify pass that follows compares those against the new levels, so
|
||||||
* nothing a user sees changes.
|
* nothing a user sees changes.
|
||||||
*
|
*
|
||||||
* The old rows stay in place for a downgrade until 3.0.0.
|
* The old rows stay in place for a downgrade until 26.10.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { PluginManifest } from "@termix/plugin-sdk/manifest";
|
import type { PluginManifest } from "@termix/plugin-sdk/manifest";
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* login for a 2.8 key only the password unwraps. Until then the channel shows
|
* login for a 2.8 key only the password unwraps. Until then the channel shows
|
||||||
* as needing to be saved again.
|
* as needing to be saved again.
|
||||||
*
|
*
|
||||||
* The old table stays until 3.0.0, like the old columns. Idempotent.
|
* The old table stays until 26.10.0, like the old columns. Idempotent.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { sql } from "drizzle-orm";
|
import { sql } from "drizzle-orm";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* columns into host_protocol_auth, re-encrypted with the owner's data key
|
* columns into host_protocol_auth, re-encrypted with the owner's data key
|
||||||
* under the new table's context.
|
* under the new table's context.
|
||||||
*
|
*
|
||||||
* The columns stay in the database, unused, until 3.0.0. A user's hosts are
|
* The columns stay in the database, unused, until 26.10.0. A user's hosts are
|
||||||
* copied once their data key opens (at boot for a system-wrapped key, at the
|
* copied once their data key opens (at boot for a system-wrapped key, at the
|
||||||
* next password login for a 2.8 key that only the password opens), and a
|
* next password login for a 2.8 key that only the password opens), and a
|
||||||
* per-user marker then stops a later boot from bringing back a login the
|
* per-user marker then stops a later boot from bringing back a login the
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* user_preferences.confirm_snippet_execution and folders_collapsed become the
|
* user_preferences.confirm_snippet_execution and folders_collapsed become the
|
||||||
* confirmExecution and foldersCollapsed user settings.
|
* confirmExecution and foldersCollapsed user settings.
|
||||||
*
|
*
|
||||||
* The columns keep their values until 3.0.0 drops them.
|
* The columns keep their values until 26.10.0 drops them.
|
||||||
*
|
*
|
||||||
* Idempotent: a host that already has either host setting, and a user key
|
* Idempotent: a host that already has either host setting, and a user key
|
||||||
* already set, are skipped, so this is safe on every boot.
|
* already set, are skipped, so this is safe on every boot.
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
* Per user, user_preferences.terminal_defaults, custom_themes and
|
* Per user, user_preferences.terminal_defaults, custom_themes and
|
||||||
* command_autocomplete become user settings.
|
* command_autocomplete become user settings.
|
||||||
*
|
*
|
||||||
* The columns keep their values until 3.0.0 drops them.
|
* The columns keep their values until 26.10.0 drops them.
|
||||||
*
|
*
|
||||||
* Idempotent: a host that already has any of these rows, and a user key that
|
* Idempotent: a host that already has any of these rows, and a user key that
|
||||||
* is already set, are skipped, so this is safe on every boot.
|
* is already set, are skipped, so this is safe on every boot.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* macros user setting. Macros a browser kept on its own (storage mode
|
* macros user setting. Macros a browser kept on its own (storage mode
|
||||||
* "local") are moved by the plugin's frontend the first time the panel opens.
|
* "local") are moved by the plugin's frontend the first time the panel opens.
|
||||||
*
|
*
|
||||||
* The column keeps its value until 3.0.0 drops it.
|
* The column keeps its value until 26.10.0 drops it.
|
||||||
*
|
*
|
||||||
* Idempotent: a user whose macros setting is already set is skipped.
|
* Idempotent: a user whose macros setting is already set is skipped.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* instance keeps reporting under the same id.
|
* instance keeps reporting under the same id.
|
||||||
*
|
*
|
||||||
* Idempotent: nothing is written where the plugin already has a row. The
|
* Idempotent: nothing is written where the plugin already has a row. The
|
||||||
* legacy settings rows stay in place until 3.0.0. The plugin waits a few
|
* legacy settings rows stay in place until 26.10.0. The plugin waits a few
|
||||||
* minutes before its first send, so this lands first.
|
* minutes before its first send, so this lands first.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
* there sealed with the installation key (what ctx.secrets.seal writes),
|
* there sealed with the installation key (what ctx.secrets.seal writes),
|
||||||
* then the users columns are cleared.
|
* then the users columns are cleared.
|
||||||
*
|
*
|
||||||
* The columns stay in the database until 3.0.0, since core's drizzle
|
* The columns stay in the database until 26.10.0, since core's drizzle
|
||||||
* migrations run before this does. A user whose data key cannot be opened
|
* migrations run before this does. A user whose data key cannot be opened
|
||||||
* at boot is skipped and tried again on the next one. Idempotent.
|
* at boot is skipped and tried again on the next one. Idempotent.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in new issue
Block a user