Files
infisical/backend/src/server/boot-strap-check.ts
T

80 lines
2.1 KiB
TypeScript

/* eslint-disable no-console */
import { Redis } from "ioredis";
import { Knex } from "knex";
import { createTransport } from "nodemailer";
import { formatSmtpConfig, getConfig } from "@app/lib/config/env";
import { logger } from "@app/lib/logger";
import { getTlsOption } from "@app/services/smtp/smtp-service";
import { getServerCfg } from "@app/services/super-admin/super-admin-service";
type BootstrapOpt = {
db: Knex;
};
const bootstrapCb = async () => {
const appCfg = getConfig();
const serverCfg = await getServerCfg();
if (!serverCfg.initialized) {
console.info(`Welcome to Infisical
Create your Infisical administrator account at:
http://localhost:${appCfg.PORT}/admin/signup
`);
} else {
console.info(`Welcome back!
To access Infisical Administrator Panel open
http://localhost:${appCfg.PORT}/admin
To access Infisical server
http://localhost:${appCfg.PORT}
`);
}
};
export const bootstrapCheck = async ({ db }: BootstrapOpt) => {
const appCfg = getConfig();
if (appCfg.isDevelopmentMode) {
console.log("Development mode. Skipping initial check");
return bootstrapCb;
}
console.info("Checking configurations...");
console.info("Testing smtp connection");
const smtpCfg = formatSmtpConfig();
await createTransport({ ...smtpCfg, ...getTlsOption(smtpCfg.host, smtpCfg.secure) })
.verify()
.then(async () => {
console.info("SMTP successfully connected");
})
.catch((err) => {
console.error(`SMTP - Failed to connect to ${appCfg.SMTP_HOST}:${appCfg.SMTP_PORT}`);
logger.error(err);
});
console.log("Testing Postgres connection");
await db
.raw("SELECT NOW()")
.then(() => {
console.log("PostgreSQL - Connected successfully");
})
.catch((err) => {
console.error("Failed to connect to PostgreSQL");
logger.error(err);
});
console.log("Testing redis connection");
const redis = new Redis(appCfg.REDIS_URL);
const redisPing = await redis?.ping();
if (!redisPing) {
console.error("Redis - Failed to connect");
} else {
console.error("Redis successfully connected");
redis.disconnect();
}
return bootstrapCb;
};