const page = req.params.page || 1
const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE)
- const result = await db.Account.listFollowerUrlsForApi(account.id, start, count)
+ const result = await db.Account.listAcceptedFollowerUrlsForApi(account.id, start, count)
const activityPubResult = activityPubCollectionPagination(req.url, page, result)
return res.json(activityPubResult)
const page = req.params.page || 1
const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE)
- const result = await db.Account.listFollowingUrlsForApi(account.id, start, count)
+ const result = await db.Account.listAcceptedFollowingUrlsForApi(account.id, start, count)
const activityPubResult = activityPubCollectionPagination(req.url, page, result)
return res.json(activityPubResult)
import { followValidator } from '../../middlewares/validators/pods'
import { followersSortValidator, followingSortValidator } from '../../middlewares/validators/sort'
import { sendFollow } from '../../lib/activitypub/send-request'
+import { authenticate } from '../../middlewares/oauth'
+import { ensureUserHasRight } from '../../middlewares/user-right'
+import { UserRight } from '../../../shared/models/users/user-right.enum'
const podsRouter = express.Router()
)
podsRouter.post('/follow',
+ authenticate,
+ ensureUserHasRight(UserRight.MANAGE_PEERTUBE_FOLLOW),
followValidator,
setBodyHostsPort,
asyncMiddleware(follow)
// ---------------------------------------------------------------------------
async function broadcastToFollowers (data: any, fromAccount: AccountInstance, t: Sequelize.Transaction) {
- const result = await db.Account.listFollowerUrlsForApi(fromAccount.id, 0)
+ const result = await db.Account.listAcceptedFollowerUrlsForApi(fromAccount.id, 0)
const jobPayload = {
uris: result.data,
export type LoadAccountByPodAndUUID = (uuid: string, podId: number, transaction: Sequelize.Transaction) => Bluebird<AccountInstance>
export type LoadLocalAccountByNameAndPod = (name: string, host: string) => Bluebird<AccountInstance>
export type ListOwned = () => Bluebird<AccountInstance[]>
- export type ListFollowerUrlsForApi = (id: number, start: number, count?: number) => Promise< ResultList<string> >
- export type ListFollowingUrlsForApi = (id: number, start: number, count?: number) => Promise< ResultList<string> >
+ export type ListAcceptedFollowerUrlsForApi = (id: number, start: number, count?: number) => Promise< ResultList<string> >
+ export type ListAcceptedFollowingUrlsForApi = (id: number, start: number, count?: number) => Promise< ResultList<string> >
export type ListFollowingForApi = (id: number, start: number, count: number, sort: string) => Bluebird< ResultList<AccountInstance> >
export type ListFollowersForApi = (id: number, start: number, count: number, sort: string) => Bluebird< ResultList<AccountInstance> >
loadByUrl: AccountMethods.LoadByUrl
loadLocalAccountByNameAndPod: AccountMethods.LoadLocalAccountByNameAndPod
listOwned: AccountMethods.ListOwned
- listFollowerUrlsForApi: AccountMethods.ListFollowerUrlsForApi
- listFollowingUrlsForApi: AccountMethods.ListFollowingUrlsForApi
+ listAcceptedFollowerUrlsForApi: AccountMethods.ListAcceptedFollowerUrlsForApi
+ listAcceptedFollowingUrlsForApi: AccountMethods.ListAcceptedFollowingUrlsForApi
listFollowingForApi: AccountMethods.ListFollowingForApi
listFollowersForApi: AccountMethods.ListFollowersForApi
}
let loadByUrl: AccountMethods.LoadByUrl
let loadLocalAccountByNameAndPod: AccountMethods.LoadLocalAccountByNameAndPod
let listOwned: AccountMethods.ListOwned
-let listFollowerUrlsForApi: AccountMethods.ListFollowerUrlsForApi
-let listFollowingUrlsForApi: AccountMethods.ListFollowingUrlsForApi
+let listAcceptedFollowerUrlsForApi: AccountMethods.ListAcceptedFollowerUrlsForApi
+let listAcceptedFollowingUrlsForApi: AccountMethods.ListAcceptedFollowingUrlsForApi
let listFollowingForApi: AccountMethods.ListFollowingForApi
let listFollowersForApi: AccountMethods.ListFollowersForApi
let isOwned: AccountMethods.IsOwned
loadByUrl,
loadLocalAccountByNameAndPod,
listOwned,
- listFollowerUrlsForApi,
- listFollowingUrlsForApi,
+ listAcceptedFollowerUrlsForApi,
+ listAcceptedFollowingUrlsForApi,
listFollowingForApi,
listFollowersForApi
]
return Account.findAll(query)
}
-listFollowerUrlsForApi = function (id: number, start: number, count?: number) {
- return createListFollowForApiQuery('followers', id, start, count)
+listAcceptedFollowerUrlsForApi = function (id: number, start: number, count?: number) {
+ return createListAcceptedFollowForApiQuery('followers', id, start, count)
}
-listFollowingUrlsForApi = function (id: number, start: number, count?: number) {
- return createListFollowForApiQuery('following', id, start, count)
+listAcceptedFollowingUrlsForApi = function (id: number, start: number, count?: number) {
+ return createListAcceptedFollowForApiQuery('following', id, start, count)
}
listFollowingForApi = function (id: number, start: number, count: number, sort: string) {
// ------------------------------ UTILS ------------------------------
-async function createListFollowForApiQuery (type: 'followers' | 'following', id: number, start: number, count?: number) {
+async function createListAcceptedFollowForApiQuery (type: 'followers' | 'following', id: number, start: number, count?: number) {
let firstJoin: string
let secondJoin: string
let query = 'SELECT ' + selection + ' FROM "Account" ' +
'INNER JOIN "AccountFollower" ON "AccountFollower"."' + firstJoin + '" = "Account"."id" ' +
'INNER JOIN "Account" AS "Follows" ON "Followers"."id" = "Follows"."' + secondJoin + '" ' +
- 'WHERE "Account"."id" = $id ' +
+ 'WHERE "Account"."id" = $id AND "AccountFollower"."state" = \'accepted\' ' +
'LIMIT ' + start
if (count !== undefined) query += ', ' + count
export enum UserRight {
ALL,
MANAGE_USERS,
- MANAGE_PODS,
+ MANAGE_PEERTUBE_FOLLOW,
MANAGE_VIDEO_ABUSES,
- MANAGE_REQUEST_SCHEDULERS,
MANAGE_VIDEO_BLACKLIST,
REMOVE_ANY_VIDEO,
REMOVE_ANY_VIDEO_CHANNEL,