feat: enforce private backend isolation, deploy live interactive SOC Gateway UI, and provide English security report
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
const fs = require('fs');
|
||||
const { getAuth } = require('./auth_manager');
|
||||
|
||||
async function main() {
|
||||
const tokenData = await getAuth();
|
||||
const token = tokenData.token;
|
||||
|
||||
console.log('=== Step 1: Generating Static Nginx Config ===');
|
||||
const configRes = await fetch('https://graphql.ghaymah.systems/v1/graphql', {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
query: `mutation GenerateStaticConfig($framework: String!) {
|
||||
generateStaticConfig(arg1: { framework: $framework }) {
|
||||
nginxConfig
|
||||
appConfig
|
||||
}
|
||||
}`,
|
||||
variables: { framework: 'static' }
|
||||
})
|
||||
});
|
||||
const configData = await configRes.json();
|
||||
if (configData.errors) {
|
||||
throw new Error('Config error: ' + JSON.stringify(configData.errors));
|
||||
}
|
||||
const { nginxConfig, appConfig } = configData.data.generateStaticConfig;
|
||||
console.log('Got nginxConfig and appConfig');
|
||||
|
||||
// Deployment ID: 24 hex characters
|
||||
const deploymentId = Array.from(crypto.getRandomValues(new Uint8Array(12)), b => b.toString(16).padStart(2, '0')).join('');
|
||||
console.log('Generated Deployment ID:', deploymentId);
|
||||
|
||||
console.log('=== Step 2: Requesting S3 Upload URLs ===');
|
||||
async function getUploadUrl(fileName, contentType) {
|
||||
const res = await fetch('https://graphql.ghaymah.systems/v1/graphql', {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
query: `mutation CreateStaticUploadURL($deploymentId: String!, $fileName: String!, $contentType: String!) {
|
||||
createStaticUploadURL(arg1: { deploymentId: $deploymentId, fileName: $fileName, contentType: $contentType }) {
|
||||
url objectKey bucket endpoint expiresIn
|
||||
}
|
||||
}`,
|
||||
variables: { deploymentId, fileName, contentType }
|
||||
})
|
||||
});
|
||||
const d = await res.json();
|
||||
if (d.errors) throw new Error(`UploadURL error for ${fileName}: ` + JSON.stringify(d.errors));
|
||||
return d.data.createStaticUploadURL;
|
||||
}
|
||||
|
||||
const [urlZip, urlNginx, urlApp] = await Promise.all([
|
||||
getUploadUrl('app.zip', 'application/zip'),
|
||||
getUploadUrl('nginx.conf', 'text/plain'),
|
||||
getUploadUrl('app.conf', 'text/plain')
|
||||
]);
|
||||
console.log('Got all 3 upload URLs');
|
||||
|
||||
console.log('=== Step 3: Uploading Files to S3 ===');
|
||||
const zipBuffer = fs.readFileSync('D:/cumin/ghaymah_dns_net_sec_tests/soc_gateway_ui/app.zip');
|
||||
|
||||
const [upZip, upNginx, upApp] = await Promise.all([
|
||||
fetch(urlZip.url, { method: 'PUT', headers: { 'Content-Type': 'application/zip' }, body: zipBuffer }),
|
||||
fetch(urlNginx.url, { method: 'PUT', headers: { 'Content-Type': 'text/plain' }, body: nginxConfig }),
|
||||
fetch(urlApp.url, { method: 'PUT', headers: { 'Content-Type': 'text/plain' }, body: appConfig })
|
||||
]);
|
||||
console.log('Upload status: app.zip =', upZip.status, '| nginx.conf =', upNginx.status, '| app.conf =', upApp.status);
|
||||
|
||||
console.log('=== Step 4: Creating Static App: ghaymah-soc-gateway ===');
|
||||
const createRes = await fetch('https://graphql.ghaymah.systems/v1/graphql', {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
query: `mutation CreateStaticApp($input: StaticAppInput!) {
|
||||
createStaticApp(arg1: $input) {
|
||||
id name image status url ports { name number hostname }
|
||||
}
|
||||
}`,
|
||||
variables: {
|
||||
input: {
|
||||
name: 'ghaymah-soc-gateway',
|
||||
deploymentId: deploymentId
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
const createData = await createRes.json();
|
||||
console.log('createStaticApp response:', JSON.stringify(createData, null, 2));
|
||||
|
||||
const app = createData.data?.createStaticApp;
|
||||
const publicUrl = app?.url || (app?.ports && app.ports[0]?.hostname ? `https://${app.ports[0].hostname}` : null);
|
||||
console.log('\n>>> STATIC SOC GATEWAY DEPLOYED! <<<');
|
||||
console.log('Public URL:', publicUrl);
|
||||
|
||||
const deploymentMeta = {
|
||||
deploymentId,
|
||||
appId: app?.id,
|
||||
name: 'ghaymah-soc-gateway',
|
||||
publicUrl,
|
||||
deployedAt: new Date().toISOString()
|
||||
};
|
||||
fs.writeFileSync('D:/cumin/ghaymah_dns_net_sec_tests/soc_static_gateway.json', JSON.stringify(deploymentMeta, null, 2));
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
Reference in New Issue
Block a user