Compare commits

..

4 Commits

Author SHA1 Message Date
abe9c6994d feat: add self checking 2025-04-17 15:54:34 -04:00
3d08b14e0f ci: remove bump action 2025-04-17 15:54:18 -04:00
5d6d67c51d [m] docs: lint 2025-04-17 15:53:35 -04:00
d27bdfc4fb chore: bump 2025-04-17 15:53:18 -04:00
5 changed files with 72 additions and 41 deletions

View File

@ -1,30 +0,0 @@
name: Build and Push Docker Image
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build_and_push:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Log in to Gitea Package Registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.SERVER_URL }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PACKAGE_TOKEN }}
- name: Build Docker Image
run: docker build -t git.pontusmail.org/librecloud/mail-connect:latest .
- name: Push Docker Image
run: docker push git.pontusmail.org/librecloud/mail-connect:latest

View File

@ -1,7 +1,5 @@
# mail-connect # mail-connect
[![Build and Push Docker Image](https://github.com/ihatenodejs/mail-connect/actions/workflows/docker.yml/badge.svg)](https://github.com/ihatenodejs/mail-connect/actions/workflows/docker.yml)
API bridge for docker-mailserver API bridge for docker-mailserver
*mail-connect is still in early beta* *mail-connect is still in early beta*

View File

@ -8,32 +8,33 @@
}, },
"devDependencies": { "devDependencies": {
"@types/bun": "latest", "@types/bun": "latest",
"@types/dockerode": "^3.3.37", "@types/dockerode": "^3.3.38",
"@types/express": "^5.0.1", "@types/express": "^5.0.1",
"@types/node": "^22.13.17", "@types/node": "^22.14.1",
"@types/validator": "^13.12.3", "@types/validator": "^13.15.0",
"drizzle-kit": "^0.30.6" "drizzle-kit": "^0.30.6"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "^5.8.2" "typescript": "^5.8.3"
}, },
"dependencies": { "dependencies": {
"@types/better-sqlite3": "^7.6.12", "@types/better-sqlite3": "^7.6.13",
"@types/figlet": "^1.7.0", "@types/figlet": "^1.7.0",
"better-sqlite3": "^11.9.1", "better-sqlite3": "^11.9.1",
"child_process": "^1.0.2", "child_process": "^1.0.2",
"dockerode": "^4.0.5", "dockerode": "^4.0.5",
"dotenv": "^16.4.7", "dotenv": "^16.5.0",
"drizzle-orm": "^0.39.3", "drizzle-orm": "^0.39.3",
"express": "^4.21.2", "express": "^4.21.2",
"express-rate-limit": "^7.5.0", "express-rate-limit": "^7.5.0",
"figlet": "^1.8.0", "figlet": "^1.8.1",
"password-validator": "^5.3.0", "password-validator": "^5.3.0",
"validator": "^13.15.0" "validator": "^13.15.0"
}, },
"trustedDependencies": [ "trustedDependencies": [
"better-sqlite3", "better-sqlite3",
"cpu-features", "cpu-features",
"esbuild",
"protobufjs", "protobufjs",
"ssh2" "ssh2"
] ]

View File

@ -0,0 +1,52 @@
import fs from "fs";
const requiredEnvVars = ['MIGRATE_TXT', 'DB_FILE_NAME', 'MAILCONNECT_ROOT_DIR'];
function checkRatelimit() {
const ratelimitExists = fs.existsSync("ratelimit.json");
if (!ratelimitExists) {
console.log("[!] Ratelimit config not found");
return false;
} else {
console.log("[✓] Found ratelimit config");
return true;
};
};
function checkEnv() {
const envExists = fs.existsSync(".env");
if (!envExists) {
console.log("[!] .env file not found");
return false;
} else {
console.log("[✓] Found .env file");
let allVarsPresent = true;
for (const envVar of requiredEnvVars) {
if (!process.env[envVar]) {
console.log(` [!] ${envVar} not found`);
allVarsPresent = false;
} else {
console.log(` [✓] Found ${envVar}`);
}
}
if (!allVarsPresent) {
return false;
} else {
return true;
}
};
};
// the return value of this function determines if server should exit early
export default function initialChecks() {
const ratelimitCheck = checkRatelimit();
const envCheck = checkEnv();
if (!ratelimitCheck || !envCheck) {
return false;
} else {
return true;
}
};

View File

@ -5,10 +5,20 @@ import { listAccounts } from "./actions/accounts/listAccounts";
import { getUserAccount } from "./actions/accounts/getUserAccount"; import { getUserAccount } from "./actions/accounts/getUserAccount";
import { updatePassword } from "./actions/accounts/updatePassword"; import { updatePassword } from "./actions/accounts/updatePassword";
import { addAccount } from "./actions/accounts/addAccount"; import { addAccount } from "./actions/accounts/addAccount";
import initialChecks from "./actions/initialChecks";
const app = express(); const app = express();
app.use(express.json()); app.use(express.json());
console.log("==== SELF CHECK STARTING ====\n");
const rCResult = initialChecks();
if (!rCResult) {
console.log("\n==== SELF CHECK FAIL ====");
process.exit(1);
} else {
console.log("\n==== SELF CHECK PASS ====\n");
}
interface RateLimitOptions { interface RateLimitOptions {
windowMs: number; windowMs: number;
limit: number; limit: number;
@ -35,7 +45,7 @@ app.listen(PORT, () => {
console.log('mail-connect'); console.log('mail-connect');
console.log('Version: 0.1.1'); console.log('Version: 0.1.1');
console.log(`API listening on port ${PORT}\n`); console.log(`API listening on port ${PORT}\n`);
console.dir("[!] " + err); console.log("[!] " + err);
} else { } else {
console.log(data); console.log(data);
console.log('Version: 0.1.1'); console.log('Version: 0.1.1');