|
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 }; |