ryu-js / plugins /federations.js
randydev's picture
Update plugins/federations.js
14b551c verified
raw
history blame
2.88 kB
import express from 'express';
import axios from 'axios';
import { authenticateApiKey, apiLimiter } from '../middleware/midware.js';
import { Federation } from '../models.js';
const FedsRoutes = express.Router();
FedsRoutes.post("/api/v1/fed/newfed", authenticateApiKey, apiLimiter, async (req, res) => {
try {
const { name, owner } = req.body;
const existing = await Federation.findOne({ name });
if (existing) return res.status(400).json({ error: "Federation already exists" });
const federation = new Federation({ name, owner, banned_users: [], sub_federations: [] });
await federation.save();
res.json({ message: "Federation created successfully", federation });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
FedsRoutes.post("/api/v1/fed/subfed", authenticateApiKey, apiLimiter, async (req, res) => {
try {
const { parent_uuid, child_uuid } = req.body;
const parent = await Federation.findOne({ uuid: parent_uuid });
const child = await Federation.findOne({ uuid: child_uuid });
if (!parent || !child) return res.status(404).json({ error: "Federation not found" });
if (!parent.sub_federations.includes(child.uuid)) {
parent.sub_federations.push(child.uuid);
await parent.save();
}
res.json({ message: `Federation ${child.name} is now a sub-federation of ${parent.name}` });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
FedsRoutes.get("/api/v1/fed/getfed/:uuid", authenticateApiKey, apiLimiter, async (req, res) => {
try {
const federation = await Federation.findOne({ uuid: req.params.uuid });
if (!federation) return res.status(404).json({ error: "Federation not found" });
const subFeds = await Federation.find({ uuid: { $in: federation.sub_federations } });
res.json({ federation, sub_federations: subFeds });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
FedsRoutes.post("/api/v1/fed/ban", authenticateApiKey, apiLimiter, async (req, res) => {
try {
const { federation_uuid, user_id } = req.body;
const federation = await Federation.findOne({ uuid: federation_uuid });
if (!federation) return res.status(404).json({ error: "Federation not found" });
if (!federation.banned_users.includes(user_id)) {
federation.banned_users.push(user_id);
await federation.save();
}
const subFeds = await Federation.find({ uuid: { $in: federation.sub_federations } });
for (const subFed of subFeds) {
if (!subFed.banned_users.includes(user_id)) {
subFed.banned_users.push(user_id);
await subFed.save();
}
}
res.json({ message: `User ${user_id} banned in ${federation.name} and all its sub-federations` });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
export { FedsRoutes };