copied new version
This commit is contained in:
156
onix-gui/GUI/app/api/install-registry/route.js
Normal file
156
onix-gui/GUI/app/api/install-registry/route.js
Normal file
@@ -0,0 +1,156 @@
|
||||
import { exec } from "child_process";
|
||||
import { NextResponse } from "next/server";
|
||||
import { promises as fs } from "fs";
|
||||
import { tmpdir } from "os";
|
||||
import { join } from "path";
|
||||
import os from "os";
|
||||
|
||||
async function directoryExists(path) {
|
||||
try {
|
||||
await fs.access(path);
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function POST(req, res) {
|
||||
const pathDir = join(os.homedir(), "beckn-onix");
|
||||
const becknOnixDirExists = await directoryExists(pathDir);
|
||||
console.log("Installing Beckn Onix...", becknOnixDirExists);
|
||||
|
||||
if (!becknOnixDirExists) {
|
||||
console.log(`Directory beckn-onix does not exist. Cloning repository...`);
|
||||
try {
|
||||
const response = await fetch(`${req.nextUrl.origin}/api/clonning-repo`);
|
||||
if (!response.ok) {
|
||||
console.error(
|
||||
`Failed to clone repository: ${response.status} ${response.statusText}`
|
||||
);
|
||||
return NextResponse.json(
|
||||
{
|
||||
error: `Failed to clone repository: ${response.status} ${response.statusText}`,
|
||||
},
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
console.log("Repository cloned successfully.");
|
||||
} catch (error) {
|
||||
console.error("An error occurred while cloning the repository:", error);
|
||||
return NextResponse.json(
|
||||
{ error: "An error occurred while cloning the repository" },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const data = await req.json();
|
||||
const executeCommand = (command) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
exec(command, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error("Error:", error);
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
const output = stdout + stderr;
|
||||
console.log("Output:", output);
|
||||
resolve(output);
|
||||
});
|
||||
});
|
||||
};
|
||||
const updateRegistryDetails = async (url) => {
|
||||
let registryUrl = "";
|
||||
let registryPort = "";
|
||||
let protocol = "";
|
||||
|
||||
if (url) {
|
||||
if (url.startsWith("https://")) {
|
||||
registryUrl = url.replace("https://", "");
|
||||
registryPort = "443";
|
||||
protocol = "https";
|
||||
} else if (url.startsWith("http://")) {
|
||||
registryUrl = url.replace("http://", "");
|
||||
registryPort = "80";
|
||||
protocol = "http";
|
||||
}
|
||||
} else {
|
||||
registryUrl = "registry";
|
||||
registryPort = "3030";
|
||||
protocol = "http";
|
||||
}
|
||||
|
||||
console.log("Registry URL:", registryUrl);
|
||||
|
||||
const configFile = join(
|
||||
pathDir,
|
||||
"install",
|
||||
"registry_data",
|
||||
"config",
|
||||
"swf.properties"
|
||||
);
|
||||
const sampleFile = join(
|
||||
pathDir,
|
||||
"install",
|
||||
"registry_data",
|
||||
"config",
|
||||
"swf.properties-sample"
|
||||
);
|
||||
|
||||
try {
|
||||
await fs.copyFile(sampleFile, configFile);
|
||||
const tempDir = join(os.homedir(), "beckn-onix", "tmp");
|
||||
await fs.mkdir(tempDir, { recursive: true }); // Create the temporary directory if it doesn't exist
|
||||
|
||||
const tempFile = join(tempDir, "tempfile.XXXXXXXXXX");
|
||||
const configData = await fs.readFile(configFile, "utf8");
|
||||
const updatedConfigData = configData
|
||||
.replace(/REGISTRY_URL/g, registryUrl)
|
||||
.replace(/REGISTRY_PORT/g, registryPort)
|
||||
.replace(/PROTOCOL/g, protocol);
|
||||
|
||||
await fs.writeFile(tempFile, updatedConfigData);
|
||||
await fs.rename(tempFile, configFile);
|
||||
await executeCommand("docker volume create registry_data_volume");
|
||||
await executeCommand("docker volume create registry_database_volume");
|
||||
await executeCommand("docker volume create gateway_data_volume");
|
||||
await executeCommand("docker volume create gateway_database_volume");
|
||||
await executeCommand(
|
||||
`docker run --rm -v ${join(
|
||||
pathDir,
|
||||
"install",
|
||||
"registry_data",
|
||||
"config"
|
||||
)}:/source -v registry_data_volume:/target busybox sh -c "cp /source/envvars /target/ && cp /source/logger.properties /target/ && cp /source/swf.properties /target/"`
|
||||
);
|
||||
|
||||
// Start the registry container
|
||||
await executeCommand(
|
||||
`docker-compose -f ${join(
|
||||
pathDir,
|
||||
"install",
|
||||
"docker-compose-v2.yml"
|
||||
)} up -d registry`
|
||||
);
|
||||
|
||||
// Wait for 10 seconds
|
||||
await new Promise((resolve) => setTimeout(resolve, 10000));
|
||||
|
||||
console.log("Registry installation successful");
|
||||
} catch (error) {
|
||||
console.error("Error updating registry details:", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
const url = data.registryUrl;
|
||||
await updateRegistryDetails(url);
|
||||
return NextResponse.json({
|
||||
message: "Registry details updated successfully",
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("An error occurred:", error);
|
||||
return NextResponse.json({ error: "An error occurred" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user