Pulse/tests/integration/scripts/hosted-mobile-token-runtime.mjs
2026-04-02 23:26:13 +01:00

103 lines
2.6 KiB
JavaScript

import { execFileSync } from 'node:child_process';
import path from 'node:path';
import process from 'node:process';
import { fileURLToPath } from 'node:url';
import {
resolveHostedTenantRootDataDir,
runRemote,
shellQuote,
} from './hosted-tenant-runtime.mjs';
const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
function buildLocalHelper(tempDir) {
const binaryPath = path.join(tempDir, 'relay-mobile-token-helper');
execFileSync('go', [
'build',
'-buildvcs=false',
'-o',
binaryPath,
'./tests/integration/scripts/relay-mobile-token-helper.go',
], {
cwd: REPO_ROOT,
encoding: 'utf8',
env: {
...process.env,
CGO_ENABLED: '0',
GOARCH: 'amd64',
GOOS: 'linux',
},
stdio: 'pipe',
});
return binaryPath;
}
function runHostedRelayMobileTokenHelper({ args, cloudHost, tempDir }) {
const localBinaryPath = buildLocalHelper(tempDir);
const remoteBinaryPath = `/tmp/relay-mobile-token-helper-${process.pid}-${Date.now()}`;
try {
execFileSync('scp', [localBinaryPath, `${cloudHost}:${remoteBinaryPath}`], {
encoding: 'utf8',
maxBuffer: 32 * 1024 * 1024,
stdio: 'pipe',
});
runRemote(cloudHost, `chmod +x ${shellQuote(remoteBinaryPath)}`);
return runRemote(cloudHost, [
shellQuote(remoteBinaryPath),
...args.map((value) => shellQuote(value)),
].join(' '));
} finally {
try {
runRemote(cloudHost, `rm -f ${shellQuote(remoteBinaryPath)}`);
} catch {}
}
}
export function createHostedRelayMobileToken({ cloudHost, issuedVia = null, tenantId, tempDir }) {
const args = [
'create',
'--data-dir',
resolveHostedTenantRootDataDir(tenantId),
'--org-id',
tenantId,
];
if (issuedVia) {
args.push('--issued-via', issuedVia);
}
return JSON.parse(runHostedRelayMobileTokenHelper({ args, cloudHost, tempDir }));
}
export function deleteHostedRelayMobileToken({
cloudHost,
tenantId,
tempDir,
token = null,
tokenId = null,
}) {
const args = [
'delete',
'--data-dir',
resolveHostedTenantRootDataDir(tenantId),
];
if (tokenId) {
args.push('--token-id', tokenId);
}
if (token) {
args.push('--token', token);
}
return JSON.parse(runHostedRelayMobileTokenHelper({ args, cloudHost, tempDir }));
}
export function validateHostedRelayMobileToken({ cloudHost, tenantId, tempDir, token }) {
const args = [
'validate',
'--data-dir',
resolveHostedTenantRootDataDir(tenantId),
'--token',
token,
];
return JSON.parse(runHostedRelayMobileTokenHelper({ args, cloudHost, tempDir }));
}