feat: rebuild xiteng.site homelab platform
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import assert from "node:assert/strict";
|
||||
import {randomBytes} from "node:crypto";
|
||||
import {mkdtempSync, rmSync} from "node:fs";
|
||||
import {tmpdir} from "node:os";
|
||||
import {join} from "node:path";
|
||||
import {loadBuiltinProviders, normalizeProvider} from "./providers.mjs";
|
||||
import {Vault} from "./vault.mjs";
|
||||
|
||||
const directory = mkdtempSync(join(tmpdir(), "xiteng-vault-test-"));
|
||||
const vault = new Vault({
|
||||
databasePath: join(directory, "vault.db"),
|
||||
masterKey: randomBytes(32),
|
||||
builtinProviders: loadBuiltinProviders(new URL("providers.json", import.meta.url))
|
||||
});
|
||||
const admin = {issuer: "https://id.xiteng.site", sub: "admin-sub", username: "liooil", admin: true};
|
||||
const user = {issuer: "https://id.xiteng.site", sub: "user-sub", username: "ziyue", admin: false};
|
||||
|
||||
try {
|
||||
const providers = vault.listProviders(user);
|
||||
assert.ok(providers.length >= 25);
|
||||
assert.equal(providers.find((provider) => provider.id === "ollama").connection.type, "frontend");
|
||||
|
||||
assert.throws(() => vault.createCredential(user, {
|
||||
providerId: "ollama",
|
||||
name: "default",
|
||||
secret: "must-not-enter-server"
|
||||
}), /remain in the browser/i);
|
||||
|
||||
const custom = normalizeProvider({
|
||||
id: "team-proxy",
|
||||
name: "Team Proxy",
|
||||
api: "openai-completions",
|
||||
connection: {
|
||||
type: "backend",
|
||||
baseUrl: "https://models.example.com/v1",
|
||||
proxy: {type: "socks5", url: "socks5://proxy.example.com:1080"}
|
||||
},
|
||||
auth: {type: "bearer"},
|
||||
defaultModel: "team-model",
|
||||
discovery: {type: "openai-models-list", url: "https://models.example.com/v1/catalog"}
|
||||
});
|
||||
vault.saveCustomProvider(user, custom);
|
||||
assert.equal(vault.getProvider(user, "team-proxy").connection.proxy.type, "socks5");
|
||||
assert.equal(vault.getProvider(user, "team-proxy").discovery.url, "https://models.example.com/v1/catalog");
|
||||
assert.equal("models" in vault.getProvider(user, "team-proxy"), false);
|
||||
|
||||
const credential = vault.createCredential(user, {
|
||||
providerId: "team-proxy",
|
||||
name: "default",
|
||||
secret: {
|
||||
provider: {apiKey: "secret-one"},
|
||||
proxy: {username: "proxy-user", password: "proxy-pass"}
|
||||
}
|
||||
});
|
||||
assert.equal(vault.listCredentials(user).length, 1);
|
||||
assert.equal(vault.listCredentials(admin, {all: true}).length, 1);
|
||||
assert.equal(vault.verifyCredential(user, credential.id).verified, true);
|
||||
|
||||
const resolved = vault.resolve(user, {providerId: "team-proxy", credentialName: "default"});
|
||||
assert.equal(resolved.provider.id, "team-proxy");
|
||||
assert.equal(resolved.credential.secret.provider.apiKey, "secret-one");
|
||||
assert.equal(resolved.credential.secret.proxy.username, "proxy-user");
|
||||
|
||||
vault.replaceCredential(user, credential.id, {secret: "secret-two"});
|
||||
assert.equal(vault.resolve(user, {providerId: "team-proxy"}).credential.secret.provider.apiKey, "secret-two");
|
||||
assert.throws(() => vault.resolve(admin, {providerId: "team-proxy"}), /provider not found/i);
|
||||
|
||||
vault.deleteCredential(user, credential.id);
|
||||
assert.equal(vault.listCredentials(user).length, 0);
|
||||
vault.deleteCustomProvider(user, "team-proxy");
|
||||
assert.equal(vault.getProvider(user, "team-proxy"), null);
|
||||
assert.ok(vault.listAudit(admin, {all: true}).length >= 7);
|
||||
console.log("Vault tests passed");
|
||||
} finally {
|
||||
vault.close();
|
||||
rmSync(directory, {recursive: true, force: true});
|
||||
}
|
||||
Reference in New Issue
Block a user