mirror of
https://github.com/Dokploy/cli.git
synced 2026-06-15 20:25:22 +02:00
107 lines
2.8 KiB
TypeScript
107 lines
2.8 KiB
TypeScript
import { Command, Flags } from "@oclif/core";
|
|
import axios from "axios";
|
|
import chalk from "chalk";
|
|
import inquirer, { type Answers, type QuestionCollection } from "inquirer";
|
|
import * as fs from "node:fs";
|
|
import * as path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
const configPath = path.join(__dirname, "..", "..", "config.json");
|
|
|
|
export default class Authenticate extends Command {
|
|
static description = "Authenticate the user by saving server URL and token";
|
|
|
|
static examples = [
|
|
"$ <%= config.bin %> <%= command.id %> --url=https://panel.dokploy.com --token=MRTHGZDGMRZWM43EMZSHGZTTMRTHGZDGONSGMZDTMY",
|
|
"$ <%= config.bin %> <%= command.id %> -u https://panel.dokploy.com -t MRTHGZDGMRZWM43EMZSHGZTTMRTHGZDGONSGMZDTMY",
|
|
];
|
|
|
|
static flags = {
|
|
token: Flags.string({
|
|
char: "t",
|
|
description: "Authentication token",
|
|
}),
|
|
url: Flags.string({
|
|
char: "u",
|
|
description: "Server URL",
|
|
}),
|
|
};
|
|
|
|
async run() {
|
|
console.log(
|
|
chalk.blue.bold("\n Welcome to Dokploy CLI Authentication \n"),
|
|
);
|
|
|
|
const { flags } = await this.parse(Authenticate);
|
|
|
|
let answers: Answers = {};
|
|
|
|
const questions: QuestionCollection[] = [];
|
|
|
|
let config: { token?: string; url?: string } = {};
|
|
if (fs.existsSync(configPath)) {
|
|
const configFileContent = fs.readFileSync(configPath, "utf8");
|
|
config = JSON.parse(configFileContent);
|
|
}
|
|
|
|
if (!flags.url) {
|
|
questions.push({
|
|
default: config.url,
|
|
message: chalk.green(
|
|
"Enter your server URL (e.g., https://panel.dokploy.com): ",
|
|
),
|
|
name: "url",
|
|
type: "input",
|
|
validate: (input) => (input ? true : "Server URL is required"),
|
|
});
|
|
}
|
|
|
|
if (!flags.token) {
|
|
questions.push({
|
|
default: config.token,
|
|
message: chalk.green(
|
|
"Enter your authentication token (e.g., MRTHGZDGMRZWM43EMZSHGZTTMRTHGZDGONSGMZDTMY=): ",
|
|
),
|
|
name: "token",
|
|
type: "input",
|
|
validate: (input) =>
|
|
input ? true : "Authentication token is required",
|
|
});
|
|
}
|
|
|
|
if (questions.length > 0) {
|
|
answers = await inquirer.prompt(questions);
|
|
}
|
|
|
|
const url = flags.url || answers.url;
|
|
const token = flags.token || answers.token;
|
|
|
|
config.token = token;
|
|
config.url = url;
|
|
|
|
try {
|
|
console.log(`\n${chalk.blue("Validating server...")}`);
|
|
|
|
await axios.post(
|
|
`${url}/api/trpc/auth.verifyToken`,
|
|
{},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${token}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
},
|
|
);
|
|
|
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
this.log(chalk.green("Authentication details saved successfully."));
|
|
} catch (error) {
|
|
this.error(
|
|
// @ts-expect-error - Type
|
|
chalk.red(`Failed to save authentication details: ${error.message}`),
|
|
);
|
|
}
|
|
}
|
|
}
|