Fix following from Preroma does not complete (#2905)
* In Follow Accept/Reject, send previous received id * In Follow Accept/Reject, send Activity.actor
This commit is contained in:
parent
2ad2779096
commit
49dbd7f9d2
|
@ -12,6 +12,7 @@ export type IFollowRequest = {
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
followeeId: mongo.ObjectID;
|
followeeId: mongo.ObjectID;
|
||||||
followerId: mongo.ObjectID;
|
followerId: mongo.ObjectID;
|
||||||
|
requestId?: string; // id of Follow Activity
|
||||||
|
|
||||||
// 非正規化
|
// 非正規化
|
||||||
_followee: {
|
_followee: {
|
||||||
|
|
|
@ -23,5 +23,5 @@ export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
|
||||||
throw new Error('フォローしようとしているユーザーはローカルユーザーではありません');
|
throw new Error('フォローしようとしているユーザーはローカルユーザーではありません');
|
||||||
}
|
}
|
||||||
|
|
||||||
await follow(actor, followee);
|
await follow(actor, followee, activity.id);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
export default (object: any) => ({
|
import config from '../../../config';
|
||||||
|
import { ILocalUser } from '../../../models/user';
|
||||||
|
|
||||||
|
export default (object: any, user: ILocalUser) => ({
|
||||||
type: 'Accept',
|
type: 'Accept',
|
||||||
|
actor: `${config.url}/users/${user._id}`,
|
||||||
object
|
object
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
import config from '../../../config';
|
import config from '../../../config';
|
||||||
import { IUser, isLocalUser } from '../../../models/user';
|
import { IUser, isLocalUser } from '../../../models/user';
|
||||||
|
|
||||||
export default (follower: IUser, followee: IUser) => ({
|
export default (follower: IUser, followee: IUser, requestId?: string) => {
|
||||||
|
const follow = {
|
||||||
type: 'Follow',
|
type: 'Follow',
|
||||||
actor: isLocalUser(follower) ? `${config.url}/users/${follower._id}` : follower.uri,
|
actor: isLocalUser(follower) ? `${config.url}/users/${follower._id}` : follower.uri,
|
||||||
object: isLocalUser(followee) ? `${config.url}/users/${followee._id}` : followee.uri
|
object: isLocalUser(followee) ? `${config.url}/users/${followee._id}` : followee.uri
|
||||||
});
|
} as any;
|
||||||
|
|
||||||
|
if (requestId) follow.id = requestId;
|
||||||
|
|
||||||
|
return follow;
|
||||||
|
};
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
export default (object: any) => ({
|
import config from '../../../config';
|
||||||
|
import { ILocalUser } from '../../../models/user';
|
||||||
|
|
||||||
|
export default (object: any, user: ILocalUser) => ({
|
||||||
type: 'Reject',
|
type: 'Reject',
|
||||||
|
actor: `${config.url}/users/${user._id}`,
|
||||||
object
|
object
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,13 +10,13 @@ import renderAccept from '../../remote/activitypub/renderer/accept';
|
||||||
import { deliver } from '../../queue';
|
import { deliver } from '../../queue';
|
||||||
import createFollowRequest from './requests/create';
|
import createFollowRequest from './requests/create';
|
||||||
|
|
||||||
export default async function(follower: IUser, followee: IUser) {
|
export default async function(follower: IUser, followee: IUser, requestId?: string) {
|
||||||
// フォロー対象が鍵アカウントである or
|
// フォロー対象が鍵アカウントである or
|
||||||
// フォロワーがBotであり、フォロー対象がBotからのフォローに慎重である or
|
// フォロワーがBotであり、フォロー対象がBotからのフォローに慎重である or
|
||||||
// フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである
|
// フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである
|
||||||
// 上記のいずれかに当てはまる場合はすぐフォローせずにフォローリクエストを発行しておく
|
// 上記のいずれかに当てはまる場合はすぐフォローせずにフォローリクエストを発行しておく
|
||||||
if (followee.isLocked || (followee.carefulBot && follower.isBot) || (isLocalUser(follower) && isRemoteUser(followee))) {
|
if (followee.isLocked || (followee.carefulBot && follower.isBot) || (isLocalUser(follower) && isRemoteUser(followee))) {
|
||||||
await createFollowRequest(follower, followee);
|
await createFollowRequest(follower, followee, requestId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ export default async function(follower: IUser, followee: IUser) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isRemoteUser(follower) && isLocalUser(followee)) {
|
if (isRemoteUser(follower) && isLocalUser(followee)) {
|
||||||
const content = pack(renderAccept(renderFollow(follower, followee)));
|
const content = pack(renderAccept(renderFollow(follower, followee, requestId), followee));
|
||||||
deliver(followee, content, follower.inbox);
|
deliver(followee, content, follower.inbox);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,12 @@ export default async function(followee: IUser, follower: IUser) {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isRemoteUser(follower)) {
|
if (isRemoteUser(follower)) {
|
||||||
const content = pack(renderAccept(renderFollow(follower, followee)));
|
const request = await FollowRequest.findOne({
|
||||||
|
followeeId: followee._id,
|
||||||
|
followerId: follower._id
|
||||||
|
});
|
||||||
|
|
||||||
|
const content = pack(renderAccept(renderFollow(follower, followee, request.requestId), followee as ILocalUser));
|
||||||
deliver(followee as ILocalUser, content, follower.inbox);
|
deliver(followee as ILocalUser, content, follower.inbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,12 @@ import renderFollow from '../../../remote/activitypub/renderer/follow';
|
||||||
import { deliver } from '../../../queue';
|
import { deliver } from '../../../queue';
|
||||||
import FollowRequest from '../../../models/follow-request';
|
import FollowRequest from '../../../models/follow-request';
|
||||||
|
|
||||||
export default async function(follower: IUser, followee: IUser) {
|
export default async function(follower: IUser, followee: IUser, requestId?: string) {
|
||||||
await FollowRequest.insert({
|
await FollowRequest.insert({
|
||||||
createdAt: new Date(),
|
createdAt: new Date(),
|
||||||
followerId: follower._id,
|
followerId: follower._id,
|
||||||
followeeId: followee._id,
|
followeeId: followee._id,
|
||||||
|
requestId,
|
||||||
|
|
||||||
// 非正規化
|
// 非正規化
|
||||||
_follower: {
|
_follower: {
|
||||||
|
|
|
@ -8,7 +8,12 @@ import { publishMainStream } from '../../../stream';
|
||||||
|
|
||||||
export default async function(followee: IUser, follower: IUser) {
|
export default async function(followee: IUser, follower: IUser) {
|
||||||
if (isRemoteUser(follower)) {
|
if (isRemoteUser(follower)) {
|
||||||
const content = pack(renderReject(renderFollow(follower, followee)));
|
const request = await FollowRequest.findOne({
|
||||||
|
followeeId: followee._id,
|
||||||
|
followerId: follower._id
|
||||||
|
});
|
||||||
|
|
||||||
|
const content = pack(renderReject(renderFollow(follower, followee, request.requestId), followee as ILocalUser));
|
||||||
deliver(followee as ILocalUser, content, follower.inbox);
|
deliver(followee as ILocalUser, content, follower.inbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue