Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
67 lines (50 loc) · 1.69 KB
/
Copy pathserver.js
File metadata and controls
67 lines (50 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const express = require("express");
require("dotenv").config();
const mongoose = require("mongoose");
const wordList = require("./word-list.js");
const app = express();
const PORT = process.env.PORT || 3000;
const MONGODB_URI = process.env.MONGODB_URI;
mongoose
.connect(MONGODB_URI)
.then(() => console.log("MongoDB connected successfully"))
.catch((err) => console.log("MongoDB connection error: ", err));
const seedPhraseSchema = new mongoose.Schema({
phrase: String,
createdAt: { type: Date, default: Date.now },
});
const SeedPhrase = mongoose.model("SeedPhrase", seedPhraseSchema);
function generateSeedPhrase(numWords) {
let seedPhrase = [];
for (let i = 0; i < numWords; i++) {
const randomIndex = Math.floor(Math.random() * wordList.length);
seedPhrase.push(wordList[randomIndex]);
}
return seedPhrase.join(" ");
}
async function generateUniqueSeedPhrase(numWords) {
let unique = false;
let newSeedPhrase;
while (!unique) {
newSeedPhrase = generateSeedPhrase(numWords);
const existingPhrase = await SeedPhrase.findOne({ phrase: newSeedPhrase });
if (!existingPhrase) {
unique = true;
}
}
const savedPhrase = new SeedPhrase({ phrase: newSeedPhrase });
await savedPhrase.save();
return newSeedPhrase;
}
app.get("/generate", async (req, res) => {
const numWords = parseInt(req.query.numWords);
if (numWords < 12 || numWords > 24) {
return res.status(400).send("Invalid number of words.");
}
const uniqueSeedPhrase = await generateUniqueSeedPhrase(numWords);
res.json({ phrase: uniqueSeedPhrase });
});
app.use(express.static("public"));
app.listen(PORT, () => {
console.log(`Server running on ${process.env.SITE_URL}:${PORT}`);
});