fix #18, cache users from fediverse
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
const config = require('config')
|
||||
const Helpers = require('./helpers')
|
||||
const { user: User } = require('../api/models')
|
||||
const { user: User, fed_users: FedUsers } = require('../api/models')
|
||||
const crypto = require('crypto')
|
||||
const debug = require('debug')('federation:follows')
|
||||
|
||||
@@ -10,13 +10,14 @@ module.exports = {
|
||||
const body = req.body
|
||||
if (typeof body.object !== 'string') { return }
|
||||
const username = body.object.replace(`${config.baseurl}/federation/u/`, '')
|
||||
const user = await User.findOne({ where: { username } })
|
||||
const user = await User.findOne({ where: { username }, include: [ FedUsers ] })
|
||||
if (!user) { return res.status(404).send('User not found') }
|
||||
|
||||
// check for duplicate
|
||||
if (!user.followers.includes(body.actor)) {
|
||||
await user.update({ followers: [...user.followers, body.actor] })
|
||||
debug('%s followed by %s (%d)', username, body.actor, user.followers.length)
|
||||
if (!user.fed_users.includes(body.actor)) {
|
||||
await user.addFed_users([req.fedi_user.id])
|
||||
// await user.update({ followers: [...user.followers, body.actor] })
|
||||
debug('%s followed by %s (%d)', username, body.actor, user.fed_users.length+1)
|
||||
} else {
|
||||
debug('duplicate %s followed by %s', username, body.actor)
|
||||
}
|
||||
@@ -39,13 +40,13 @@ module.exports = {
|
||||
const user = await User.findOne({ where: { username } })
|
||||
if (!user) { return res.status(404).send('User not found') }
|
||||
|
||||
if (body.actor !== body.object.actor) {
|
||||
if (body.actor !== body.object.actor || body.actor !== req.fedi_user.id) {
|
||||
debug('Unfollow an user created by a different actor !?!?')
|
||||
return res.status(400).send('Bad things')
|
||||
}
|
||||
const followers = user.followers.filter(follower => follower !== body.actor)
|
||||
await user.update({ followers })
|
||||
debug('%s unfollowed by %s (%d)', username, body.actor, user.followers.length)
|
||||
|
||||
if (req.fedi_user) await user.removeFed_users(req.fedi_user.id)
|
||||
debug('%s unfollowed by %s', username, body.actor)
|
||||
res.sendStatus(200)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user