Renote visibility (#3290)
This commit is contained in:
@@ -35,17 +35,11 @@ export default async function(resolver: Resolver, actor: IRemoteUser, activity:
|
||||
log(`Creating the (Re)Note: ${uri}`);
|
||||
|
||||
//#region Visibility
|
||||
let visibility = 'public';
|
||||
const visibility = getVisibility(activity.to, activity.cc, actor);
|
||||
|
||||
let visibleUsers: IUser[] = [];
|
||||
if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) {
|
||||
if (note.cc.includes('https://www.w3.org/ns/activitystreams#Public')) {
|
||||
visibility = 'home';
|
||||
} else if (note.to.includes(`${actor.uri}/followers`)) { // TODO: person.followerと照合するべき?
|
||||
visibility = 'followers';
|
||||
} else {
|
||||
visibility = 'specified';
|
||||
visibleUsers = await Promise.all(note.to.map(uri => resolvePerson(uri)));
|
||||
}
|
||||
if (visibility == 'specified') {
|
||||
visibleUsers = await Promise.all(note.to.map(uri => resolvePerson(uri)));
|
||||
}
|
||||
//#endergion
|
||||
|
||||
@@ -57,3 +51,22 @@ export default async function(resolver: Resolver, actor: IRemoteUser, activity:
|
||||
uri
|
||||
});
|
||||
}
|
||||
|
||||
type visibility = 'public' | 'home' | 'followers' | 'specified' | 'private';
|
||||
|
||||
function getVisibility(to: string[], cc: string[], actor: IRemoteUser): visibility {
|
||||
const PUBLIC = 'https://www.w3.org/ns/activitystreams#Public';
|
||||
|
||||
to = to || [];
|
||||
cc = cc || [];
|
||||
|
||||
if (to.includes(PUBLIC)) {
|
||||
return 'public';
|
||||
} else if (cc.includes(PUBLIC)) {
|
||||
return 'home';
|
||||
} else if (to.includes(`${actor.uri}/followers`)) {
|
||||
return 'followers';
|
||||
} else {
|
||||
return 'specified';
|
||||
}
|
||||
}
|
||||
|
@@ -4,13 +4,26 @@ import { INote } from '../../../models/note';
|
||||
export default (object: any, note: INote) => {
|
||||
const attributedTo = `${config.url}/users/${note.userId}`;
|
||||
|
||||
let to: string[] = [];
|
||||
let cc: string[] = [];
|
||||
|
||||
if (note.visibility == 'public') {
|
||||
to = ['https://www.w3.org/ns/activitystreams#Public'];
|
||||
cc = [`${attributedTo}/followers`];
|
||||
} else if (note.visibility == 'home') {
|
||||
to = [`${attributedTo}/followers`];
|
||||
cc = ['https://www.w3.org/ns/activitystreams#Public'];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
id: `${config.url}/notes/${note._id}/activity`,
|
||||
actor: `${config.url}/users/${note.userId}`,
|
||||
type: 'Announce',
|
||||
published: note.createdAt.toISOString(),
|
||||
to: ['https://www.w3.org/ns/activitystreams#Public'],
|
||||
cc: [attributedTo, `${attributedTo}/followers`],
|
||||
to,
|
||||
cc,
|
||||
object
|
||||
};
|
||||
};
|
||||
|
@@ -2,6 +2,8 @@ import config from '../../../config';
|
||||
import * as uuid from 'uuid';
|
||||
|
||||
export default (x: any) => {
|
||||
if (x == null) return null;
|
||||
|
||||
if (x !== null && typeof x === 'object' && x.id == null) {
|
||||
x.id = `${config.url}/${uuid.v4()}`;
|
||||
}
|
||||
|
Reference in New Issue
Block a user