Fix delete activities

pull/175/head
Chocobozzz 2018-01-04 16:56:36 +01:00
parent bb82394c0d
commit c3badc81fe
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 21 additions and 10 deletions

View File

@ -12,7 +12,7 @@ import { getOrCreateActorAndServerAndModel } from '../actor'
async function processDeleteActivity (activity: ActivityDelete) { async function processDeleteActivity (activity: ActivityDelete) {
const actor = await getOrCreateActorAndServerAndModel(activity.actor) const actor = await getOrCreateActorAndServerAndModel(activity.actor)
if (actor.url === activity.id) { if (actor.url === activity.object) {
if (actor.type === 'Person') { if (actor.type === 'Person') {
if (!actor.Account) throw new Error('Actor ' + actor.url + ' is a person but we cannot find it in database.') if (!actor.Account) throw new Error('Actor ' + actor.url + ' is a person but we cannot find it in database.')
@ -25,14 +25,14 @@ async function processDeleteActivity (activity: ActivityDelete) {
} }
{ {
const videoCommentInstance = await VideoCommentModel.loadByUrlAndPopulateAccount(activity.id) const videoCommentInstance = await VideoCommentModel.loadByUrlAndPopulateAccount(activity.object)
if (videoCommentInstance) { if (videoCommentInstance) {
return processDeleteVideoComment(actor, videoCommentInstance) return processDeleteVideoComment(actor, videoCommentInstance)
} }
} }
{ {
const videoInstance = await VideoModel.loadByUrlAndPopulateAccount(activity.id) const videoInstance = await VideoModel.loadByUrlAndPopulateAccount(activity.object)
if (videoInstance) { if (videoInstance) {
return processDeleteVideo(actor, videoInstance) return processDeleteVideo(actor, videoInstance)
} }

View File

@ -4,12 +4,14 @@ import { ActorModel } from '../../../models/activitypub/actor'
import { VideoModel } from '../../../models/video/video' import { VideoModel } from '../../../models/video/video'
import { VideoCommentModel } from '../../../models/video/video-comment' import { VideoCommentModel } from '../../../models/video/video-comment'
import { VideoShareModel } from '../../../models/video/video-share' import { VideoShareModel } from '../../../models/video/video-share'
import { getDeleteActivityPubUrl } from '../url'
import { broadcastToFollowers } from './misc' import { broadcastToFollowers } from './misc'
async function sendDeleteVideo (video: VideoModel, t: Transaction) { async function sendDeleteVideo (video: VideoModel, t: Transaction) {
const url = getDeleteActivityPubUrl(video.url)
const byActor = video.VideoChannel.Account.Actor const byActor = video.VideoChannel.Account.Actor
const data = deleteActivityData(video.url, byActor) const data = deleteActivityData(url, video.url, byActor)
const actorsInvolved = await VideoShareModel.loadActorsByShare(video.id, t) const actorsInvolved = await VideoShareModel.loadActorsByShare(video.id, t)
actorsInvolved.push(byActor) actorsInvolved.push(byActor)
@ -18,15 +20,17 @@ async function sendDeleteVideo (video: VideoModel, t: Transaction) {
} }
async function sendDeleteActor (byActor: ActorModel, t: Transaction) { async function sendDeleteActor (byActor: ActorModel, t: Transaction) {
const data = deleteActivityData(byActor.url, byActor) const url = getDeleteActivityPubUrl(byActor.url)
const data = deleteActivityData(url, byActor.url, byActor)
return broadcastToFollowers(data, byActor, [ byActor ], t) return broadcastToFollowers(data, byActor, [ byActor ], t)
} }
async function sendDeleteVideoComment (videoComment: VideoCommentModel, t: Transaction) { async function sendDeleteVideoComment (videoComment: VideoCommentModel, t: Transaction) {
const byActor = videoComment.Account.Actor const url = getDeleteActivityPubUrl(videoComment.url)
const data = deleteActivityData(videoComment.url, byActor) const byActor = videoComment.Account.Actor
const data = deleteActivityData(url, videoComment.url, byActor)
const actorsInvolved = await VideoShareModel.loadActorsByShare(videoComment.Video.id, t) const actorsInvolved = await VideoShareModel.loadActorsByShare(videoComment.Video.id, t)
actorsInvolved.push(videoComment.Video.VideoChannel.Account.Actor) actorsInvolved.push(videoComment.Video.VideoChannel.Account.Actor)
@ -45,10 +49,11 @@ export {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
function deleteActivityData (url: string, byActor: ActorModel): ActivityDelete { function deleteActivityData (url: string, object: string, byActor: ActorModel): ActivityDelete {
return { return {
type: 'Delete', type: 'Delete',
id: url, id: url,
actor: byActor.url actor: byActor.url,
object
} }
} }

View File

@ -55,6 +55,10 @@ function getAnnounceActivityPubUrl (originalUrl: string, byActor: ActorModel) {
return originalUrl + '/announces/' + byActor.id return originalUrl + '/announces/' + byActor.id
} }
function getDeleteActivityPubUrl (originalUrl: string) {
return originalUrl + '/delete'
}
function getUpdateActivityPubUrl (originalUrl: string, updatedAt: string) { function getUpdateActivityPubUrl (originalUrl: string, updatedAt: string) {
return originalUrl + '/updates/' + updatedAt return originalUrl + '/updates/' + updatedAt
} }
@ -76,5 +80,6 @@ export {
getVideoViewActivityPubUrl, getVideoViewActivityPubUrl,
getVideoLikeActivityPubUrl, getVideoLikeActivityPubUrl,
getVideoDislikeActivityPubUrl, getVideoDislikeActivityPubUrl,
getVideoCommentActivityPubUrl getVideoCommentActivityPubUrl,
getDeleteActivityPubUrl
} }

View File

@ -39,6 +39,7 @@ export interface ActivityUpdate extends BaseActivity {
export interface ActivityDelete extends BaseActivity { export interface ActivityDelete extends BaseActivity {
type: 'Delete' type: 'Delete'
object: string
} }
export interface ActivityFollow extends BaseActivity { export interface ActivityFollow extends BaseActivity {