Merge pull request 'Create move type' (#9139) from pawdev/calckey:recieve_moveto into account_migration

Reviewed-on: https://codeberg.org/thatonecalculator/calckey/pulls/9139
This commit is contained in:
Kainoa Kanter 2022-11-23 22:03:12 +00:00
commit 9f0e9896ed
4 changed files with 20 additions and 7 deletions

8
packages/backend/.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View file

@ -20,7 +20,7 @@ import { UserPublickey } from '@/models/entities/user-publickey.js';
const logger = new Logger('inbox'); const logger = new Logger('inbox');
// ユーザーのinboxにアクティビティが届いた時の処理 // Processing when an activity arrives in the user's inbox
export default async (job: Bull.Job<InboxJobData>): Promise<string> => { export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
const signature = job.data.signature; // HTTP-signature const signature = job.data.signature; // HTTP-signature
const activity = job.data.activity; const activity = job.data.activity;
@ -30,16 +30,15 @@ export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
delete info['@context']; delete info['@context'];
logger.debug(JSON.stringify(info, null, 2)); logger.debug(JSON.stringify(info, null, 2));
//#endregion //#endregion
const host = toPuny(new URL(signature.keyId).hostname); const host = toPuny(new URL(signature.keyId).hostname);
// ブロックしてたら中断 // interrupt if blocked
const meta = await fetchMeta(); const meta = await fetchMeta();
if (meta.blockedHosts.includes(host)) { if (meta.blockedHosts.includes(host)) {
return `Blocked request: ${host}`; return `Blocked request: ${host}`;
} }
// 非公開モードなら許可なインスタンスのみ // only whitelisted instances in private mode
if (meta.privateMode && !meta.allowedHosts.includes(host)) { if (meta.privateMode && !meta.allowedHosts.includes(host)) {
return `Blocked request: ${host}`; return `Blocked request: ${host}`;
} }
@ -51,7 +50,7 @@ export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
const dbResolver = new DbResolver(); const dbResolver = new DbResolver();
// HTTP-Signature keyIdを元にDBから取得 // HTTP-Signature keyId from DB
let authUser: { let authUser: {
user: CacheableRemoteUser; user: CacheableRemoteUser;
key: UserPublickey | null; key: UserPublickey | null;
@ -62,7 +61,7 @@ export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
try { try {
authUser = await dbResolver.getAuthUserFromApId(getApId(activity.actor)); authUser = await dbResolver.getAuthUserFromApId(getApId(activity.actor));
} catch (e) { } catch (e) {
// 対象が4xxならスキップ // Skip if target is 4xx
if (e instanceof StatusError) { if (e instanceof StatusError) {
if (e.isClientError) { if (e.isClientError) {
return `skip: Ignored deleted actors on both ends ${activity.actor} - ${e.statusCode}`; return `skip: Ignored deleted actors on both ends ${activity.actor} - ${e.statusCode}`;

View file

@ -157,6 +157,7 @@ export interface IActor extends IObject {
preferredUsername?: string; preferredUsername?: string;
manuallyApprovesFollowers?: boolean; manuallyApprovesFollowers?: boolean;
movedTo?: string; movedTo?: string;
alsoKnownAs?: string[];
discoverable?: boolean; discoverable?: boolean;
inbox: string; inbox: string;
sharedInbox?: string; // 後方互換性のため sharedInbox?: string; // 後方互換性のため
@ -280,6 +281,10 @@ export interface IFlag extends IActivity {
type: 'Flag'; type: 'Flag';
} }
export interface IMove extends IActivity {
type: 'Move';
}
export const isCreate = (object: IObject): object is ICreate => getApType(object) === 'Create'; export const isCreate = (object: IObject): object is ICreate => getApType(object) === 'Create';
export const isDelete = (object: IObject): object is IDelete => getApType(object) === 'Delete'; export const isDelete = (object: IObject): object is IDelete => getApType(object) === 'Delete';
export const isUpdate = (object: IObject): object is IUpdate => getApType(object) === 'Update'; export const isUpdate = (object: IObject): object is IUpdate => getApType(object) === 'Update';

View file

@ -38,6 +38,7 @@ function inbox(ctx: Router.RouterContext) {
return; return;
} }
// @ts-ignore
processInbox(ctx.request.body, signature); processInbox(ctx.request.body, signature);
ctx.status = 202; ctx.status = 202;
@ -86,7 +87,7 @@ router.get('/notes/:note', async (ctx, next) => {
return; return;
} }
// リモートだったらリダイレクト // redirect if remote
if (note.userHost != null) { if (note.userHost != null) {
if (note.uri == null || isSelfHost(note.userHost)) { if (note.uri == null || isSelfHost(note.userHost)) {
ctx.status = 500; ctx.status = 500;