2024-11-25 14:12:43 -05:00
|
|
|
import Route from "../route.js";
|
|
|
|
import initDb from "../db.js";
|
|
|
|
import { randomUUID } from 'node:crypto';
|
|
|
|
import auth from "../form/auth.js";
|
|
|
|
|
|
|
|
let db = await initDb();
|
|
|
|
function isValid(user) {
|
|
|
|
return user.search(/[^A-Za-z0-9\-\_]/g) == -1;
|
|
|
|
}
|
|
|
|
// TODO: rewrite
|
|
|
|
let main = new Route([auth], async function (req, res, input) {
|
|
|
|
let { username } = input;
|
|
|
|
let id = randomUUID();
|
|
|
|
|
|
|
|
let { target } = req.body;
|
|
|
|
if (!isValid(target) || username == '!nobody')
|
|
|
|
return { 'success': false, 'message': 'Some fields are missing' }; // probably should not re-use these strings
|
|
|
|
|
|
|
|
let isFollowing = await db.all('SELECT * FROM follow WHERE username = ? AND target = ?', [
|
|
|
|
username,
|
|
|
|
target
|
|
|
|
]);
|
|
|
|
|
|
|
|
if (isFollowing.length > 0) {
|
|
|
|
await db.run('DELETE FROM follow WHERE username = ? AND target = ?', [
|
|
|
|
username,
|
|
|
|
target
|
|
|
|
]);
|
2024-11-25 14:12:43 -05:00
|
|
|
res.send({'success': true, 'message': 'User unfollowed'});
|
2024-11-25 14:12:43 -05:00
|
|
|
} else {
|
|
|
|
await db.run('INSERT INTO follow (username,target) VALUES (?,?)', [
|
|
|
|
username,
|
|
|
|
target
|
|
|
|
]);
|
2024-11-25 14:12:43 -05:00
|
|
|
res.send({'success': true, 'message': 'User followed'});
|
2024-11-25 14:12:43 -05:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
export default main;
|