| const express = require('express'); |
| const mongoose = require('mongoose'); |
| const bodyParser = require('body-parser'); |
| const cors = require('cors'); |
| const crypto = require('crypto'); |
| const path = require('path'); |
|
|
| const app = express(); |
| app.use(bodyParser.json()); |
| app.use(cors()); |
|
|
| |
| app.use(express.static('public')); |
|
|
| |
| |
| const mongoUri = process.env.MONGO_URL; |
| if (!mongoUri) { |
| console.error("❌ ERROR: MONGO_URL not found in Settings!"); |
| } else { |
| mongoose.connect(mongoUri) |
| .then(() => console.log("✅ Database Connected Successfully!")) |
| .catch(err => console.error("❌ Database Error:", err)); |
| } |
|
|
| |
| const licenseSchema = new mongoose.Schema({ |
| key: String, |
| clientName: String, |
| expires: Date, |
| active: { type: Boolean, default: true }, |
| isOnline: { type: Boolean, default: false }, |
| lastSeen: { type: Date, default: null } |
| }); |
| const License = mongoose.model('License', licenseSchema); |
|
|
| |
| const ADMIN_PASS = process.env.ADMIN_PASS || "admin123"; |
|
|
| |
|
|
| |
| app.post('/generate', async (req, res) => { |
| const { password, clientName, days, keyTag } = req.body; |
|
|
| |
| if (password !== ADMIN_PASS) { |
| return res.json({ success: false, message: "❌ Wrong Password!" }); |
| } |
|
|
| try { |
| |
| const mainPrefix = "CYPHER_MD"; |
|
|
| |
| const userTag = (keyTag || "USER").replace(/[^a-zA-Z0-9]/g, ""); |
|
|
| |
| const rand = crypto.randomBytes(8).toString('hex').toUpperCase(); |
| |
| |
| const p1 = rand.substring(0, 4); |
| const p2 = rand.substring(4, 8); |
| const p3 = rand.substring(8, 12); |
| const p4 = rand.substring(12, 16); |
|
|
| |
| const newKey = `${mainPrefix}-${userTag}-${p1}-${p2}-${p3}-${p4}`; |
|
|
| |
| const expireDate = new Date(); |
| expireDate.setDate(expireDate.getDate() + parseInt(days)); |
|
|
| |
| const newLicense = new License({ |
| key: newKey, |
| clientName: clientName || userTag, |
| expires: expireDate |
| }); |
|
|
| await newLicense.save(); |
| |
| console.log(`🎉 New Key Generated: ${newKey}`); |
| |
| res.json({ |
| success: true, |
| key: newKey, |
| expires: expireDate.toISOString().split('T')[0] |
| }); |
|
|
| } catch (e) { |
| res.json({ success: false, message: e.message }); |
| } |
| }); |
|
|
| |
| app.post('/verify', async (req, res) => { |
| const { key } = req.body; |
|
|
| |
| if (!key || key.trim() === "") return res.json({ valid: false, message: "KEY_MISSING" }); |
| |
| try { |
| const license = await License.findOne({ key: key }); |
|
|
| |
| if (!license) return res.json({ valid: false, message: "KEY_INVALID" }); |
| if (!license.active) return res.json({ valid: false, message: "KEY_BANNED" }); |
| if (new Date() > license.expires) return res.json({ valid: false, message: "KEY_EXPIRED" }); |
|
|
| |
| const now = new Date(); |
| const isSessionDead = license.lastSeen && ((now - new Date(license.lastSeen)) > 20000); |
|
|
| if (license.isOnline && !isSessionDead) { |
| return res.json({ valid: false, message: "ALREADY_IN_USE" }); |
| } |
|
|
| |
| license.isOnline = true; |
| license.lastSeen = now; |
| await license.save(); |
|
|
| return res.json({ valid: true, expires: license.expires }); |
|
|
| } catch (e) { |
| res.status(500).json({ valid: false, error: e.message }); |
| } |
| }); |
|
|
| |
| app.post('/ping', async (req, res) => { |
| const { key } = req.body; |
| try { |
| await License.findOneAndUpdate({ key: key }, { |
| isOnline: true, |
| lastSeen: new Date() |
| }); |
| res.json({ status: "OK" }); |
| } catch (e) { res.json({ status: "ERROR" }); } |
| }); |
|
|
| |
| app.get('/', (req, res) => { |
| res.sendFile(path.join(__dirname, 'public/index.html')); |
| }); |
|
|
| const port = 7860; |
| app.listen(port, () => console.log(`🚀 Server running on port ${port}`)); |