forked from FoundKeyGang/FoundKey
Compare commits
6 Commits
main
...
non-federa
Author | SHA1 | Date |
---|---|---|
Norm | e6a13c177d | |
Norm | c5e5fb1162 | |
Norm | 87faaac49e | |
Johann150 | 0669083916 | |
FloatingGhost | fb938e7ed6 | |
FloatingGhost | 6f238fb505 |
|
@ -797,6 +797,8 @@ onlineStatus: "Online status"
|
|||
hideOnlineStatus: "Hide online status"
|
||||
hideOnlineStatusDescription: "Hiding your online status reduces the convenience of\
|
||||
\ some features such as the search."
|
||||
federateBlocks: "Federate blocks"
|
||||
federateBlocksDescription: "If disabled, block activities won't be sent."
|
||||
online: "Online"
|
||||
active: "Active"
|
||||
offline: "Offline"
|
||||
|
|
|
@ -740,6 +740,8 @@ unknown: "不明"
|
|||
onlineStatus: "オンライン状態"
|
||||
hideOnlineStatus: "オンライン状態を隠す"
|
||||
hideOnlineStatusDescription: "オンライン状態を隠すと、検索などの一部機能において利便性が低下することがあります。"
|
||||
federateBlocks: "ブロックを連合に送信"
|
||||
federateBlocksDescription: "オフにするとBlockのActivityは連合に送信しません"
|
||||
online: "オンライン"
|
||||
active: "アクティブ"
|
||||
offline: "オフライン"
|
||||
|
|
|
@ -46,9 +46,11 @@
|
|||
"devDependencies": {
|
||||
"@types/gulp": "4.0.9",
|
||||
"@types/gulp-rename": "2.0.1",
|
||||
"@types/sinon": "^10.0.13",
|
||||
"@typescript-eslint/parser": "^5.36.2",
|
||||
"cross-env": "7.0.3",
|
||||
"cypress": "10.3.0",
|
||||
"sinon": "11.1.2",
|
||||
"start-server-and-test": "1.14.0",
|
||||
"typescript": "4.8.3"
|
||||
},
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||
|
||||
export class userBlockFederation1631880003000 implements MigrationInterface {
|
||||
name = 'userBlockFederation1631880003000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "user" ADD "federateBlocks" boolean NOT NULL DEFAULT false`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "federateBlocks"`);
|
||||
}
|
||||
|
||||
}
|
|
@ -142,7 +142,7 @@
|
|||
"@types/koa__cors": "3.1.1",
|
||||
"@types/koa__multer": "2.0.4",
|
||||
"@types/koa__router": "8.0.11",
|
||||
"@types/mocha": "9.1.1",
|
||||
"@types/mocha": "^10.0.0",
|
||||
"@types/node": "18.7.16",
|
||||
"@types/node-fetch": "3.0.3",
|
||||
"@types/nodemailer": "6.4.5",
|
||||
|
|
|
@ -218,6 +218,11 @@ export class User {
|
|||
})
|
||||
public token: string | null;
|
||||
|
||||
@Column('boolean', {
|
||||
default: false,
|
||||
})
|
||||
public federateBlocks: boolean;
|
||||
|
||||
constructor(data: Partial<User>) {
|
||||
if (data == null) return;
|
||||
|
||||
|
|
|
@ -335,6 +335,7 @@ export const UserRepository = db.getRepository(User).extend({
|
|||
isLocked: user.isLocked,
|
||||
isSilenced: user.isSilenced || falsy,
|
||||
isSuspended: user.isSuspended || falsy,
|
||||
federateBlocks: user!.federateBlocks,
|
||||
description: profile!.description,
|
||||
location: profile!.location,
|
||||
birthday: profile!.birthday,
|
||||
|
|
|
@ -117,6 +117,7 @@ export const paramDef = {
|
|||
emailNotificationTypes: { type: 'array', items: {
|
||||
type: 'string',
|
||||
} },
|
||||
federateBlocks: { type: 'boolean' },
|
||||
},
|
||||
} as const;
|
||||
|
||||
|
@ -165,6 +166,7 @@ export default define(meta, paramDef, async (ps, _user, token) => {
|
|||
if (typeof ps.carefulBot === 'boolean') profileUpdates.carefulBot = ps.carefulBot;
|
||||
if (typeof ps.autoAcceptFollowed === 'boolean') profileUpdates.autoAcceptFollowed = ps.autoAcceptFollowed;
|
||||
if (typeof ps.noCrawle === 'boolean') profileUpdates.noCrawle = ps.noCrawle;
|
||||
if (typeof ps.federateBlocks === 'boolean') updates.federateBlocks = ps.federateBlocks;
|
||||
if (typeof ps.isCat === 'boolean') updates.isCat = ps.isCat;
|
||||
if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote;
|
||||
if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail;
|
||||
|
|
|
@ -32,7 +32,7 @@ export default async function(blocker: User, blockee: User) {
|
|||
|
||||
await Blockings.insert(blocking);
|
||||
|
||||
if (Users.isLocalUser(blocker) && Users.isRemoteUser(blockee)) {
|
||||
if (Users.isLocalUser(blocker) && Users.isRemoteUser(blockee) && blocker.federateBlocks) {
|
||||
const content = renderActivity(renderBlock(blocking));
|
||||
deliver(blocker, content, blockee.inbox);
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ export default async function(blocker: CacheableUser, blockee: CacheableUser) {
|
|||
Blockings.delete(blocking.id);
|
||||
|
||||
// deliver if remote bloking
|
||||
if (Users.isLocalUser(blocker) && Users.isRemoteUser(blockee)) {
|
||||
if (Users.isLocalUser(blocker) && Users.isRemoteUser(blockee) && blocker.federateBlocks) {
|
||||
const content = renderActivity(renderUndo(renderBlock(blocking), blocker));
|
||||
deliver(blocker, content, blockee.inbox);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { describe, before, beforeEach, after, it } from 'mocha';
|
||||
import * as sinon from 'sinon';
|
||||
import { async, signup, startServer, shutdownServer, initTestDb } from '../utils.js';
|
||||
|
||||
describe('Creating a block activity', () => {
|
||||
let p: childProcess.ChildProcess;
|
||||
|
||||
// alice blocks bob
|
||||
let alice: any;
|
||||
let bob: any;
|
||||
let carol: any;
|
||||
|
||||
before(async () => {
|
||||
await initTestDb();
|
||||
p = await startServer();
|
||||
alice = await signup({ username: 'alice' });
|
||||
bob = await signup({ username: 'bob' });
|
||||
carol = await signup({ username: 'carol' });
|
||||
bob.host = 'http://remote';
|
||||
carol.host = 'http://remote';
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
sinon.restore();
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await shutdownServer(p);
|
||||
});
|
||||
|
||||
it('Should not federate blocks normally', async(async () => {
|
||||
const createBlock = (await import('../../src/services/blocking/create')).default;
|
||||
const deleteBlock = (await import('../../src/services/blocking/delete')).default;
|
||||
|
||||
const queues = await import('../../src/queue/index');
|
||||
const spy = sinon.spy(queues, 'deliver');
|
||||
await createBlock(alice, bob);
|
||||
assert(spy.notCalled);
|
||||
await deleteBlock(alice, bob);
|
||||
assert(spy.notCalled);
|
||||
}));
|
||||
|
||||
it('Should federate blocks if federateBlocks is true', async () => {
|
||||
const createBlock = (await import('../../src/services/blocking/create')).default;
|
||||
const deleteBlock = (await import('../../src/services/blocking/delete')).default;
|
||||
|
||||
alice.federateBlocks = true;
|
||||
|
||||
const queues = await import('../../src/queue/index');
|
||||
const spy = sinon.spy(queues, 'deliver');
|
||||
await createBlock(alice, carol);
|
||||
await deleteBlock(alice, carol);
|
||||
assert(spy.calledTwice);
|
||||
});
|
||||
});
|
|
@ -28,6 +28,10 @@
|
|||
{{ i18n.ts.makeExplorable }}
|
||||
<template #caption>{{ i18n.ts.makeExplorableDescription }}</template>
|
||||
</FormSwitch>
|
||||
<FormSwitch v-model="federateBlocks" @update:value="save()">
|
||||
{{ $ts.federateBlocks }}
|
||||
<template #caption>{{ $ts.federateBlocksDescription }}</template>
|
||||
</FormSwitch>
|
||||
|
||||
<FormSection>
|
||||
<FormFolder class="_formBlock">
|
||||
|
@ -69,12 +73,13 @@ let isExplorable = $ref($i.isExplorable);
|
|||
let hideOnlineStatus = $ref($i.hideOnlineStatus);
|
||||
let publicReactions = $ref($i.publicReactions);
|
||||
let ffVisibility = $ref($i.ffVisibility);
|
||||
let federateBlocks = $ref($i.federateBlocks);
|
||||
|
||||
let defaultNoteVisibility = $computed(defaultStore.makeGetterSetter('defaultNoteVisibility'));
|
||||
let defaultNoteLocalOnly = $computed(defaultStore.makeGetterSetter('defaultNoteLocalOnly'));
|
||||
let keepCw = $computed(defaultStore.makeGetterSetter('keepCw'));
|
||||
|
||||
function save() {
|
||||
function save(): void {
|
||||
os.api('i/update', {
|
||||
isLocked: !!isLocked,
|
||||
autoAcceptFollowed: !!autoAcceptFollowed,
|
||||
|
@ -83,6 +88,7 @@ function save() {
|
|||
hideOnlineStatus: !!hideOnlineStatus,
|
||||
publicReactions: !!publicReactions,
|
||||
ffVisibility,
|
||||
federateBlocks,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
126
yarn.lock
126
yarn.lock
|
@ -1449,7 +1449,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sinonjs/commons@npm:^1.7.0":
|
||||
"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.3":
|
||||
version: 1.8.3
|
||||
resolution: "@sinonjs/commons@npm:1.8.3"
|
||||
dependencies:
|
||||
|
@ -1458,7 +1458,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sinonjs/fake-timers@npm:9.1.2":
|
||||
"@sinonjs/fake-timers@npm:9.1.2, @sinonjs/fake-timers@npm:>=5":
|
||||
version: 9.1.2
|
||||
resolution: "@sinonjs/fake-timers@npm:9.1.2"
|
||||
dependencies:
|
||||
|
@ -1467,6 +1467,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sinonjs/fake-timers@npm:^7.1.2":
|
||||
version: 7.1.2
|
||||
resolution: "@sinonjs/fake-timers@npm:7.1.2"
|
||||
dependencies:
|
||||
"@sinonjs/commons": ^1.7.0
|
||||
checksum: c84773d7973edad5511a31d2cc75023447b5cf714a84de9bb50eda45dda88a0d3bd2c30bf6e6e936da50a048d5352e2151c694e13e59b97d187ba1f329e9a00c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sinonjs/fake-timers@npm:^8.0.1":
|
||||
version: 8.1.0
|
||||
resolution: "@sinonjs/fake-timers@npm:8.1.0"
|
||||
|
@ -1476,6 +1485,24 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sinonjs/samsam@npm:^6.0.2":
|
||||
version: 6.1.1
|
||||
resolution: "@sinonjs/samsam@npm:6.1.1"
|
||||
dependencies:
|
||||
"@sinonjs/commons": ^1.6.0
|
||||
lodash.get: ^4.4.2
|
||||
type-detect: ^4.0.8
|
||||
checksum: a09b0914bf573f0da82bd03c64ba413df81a7c173818dc3f0a90c2652240ac835ef583f4d52f0b215e626633c91a4095c255e0669f6ead97241319f34f05e7fc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sinonjs/text-encoding@npm:^0.7.1":
|
||||
version: 0.7.2
|
||||
resolution: "@sinonjs/text-encoding@npm:0.7.2"
|
||||
checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sqltools/formatter@npm:^1.2.2":
|
||||
version: 1.2.3
|
||||
resolution: "@sqltools/formatter@npm:1.2.3"
|
||||
|
@ -2153,6 +2180,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/mocha@npm:^10.0.0":
|
||||
version: 10.0.0
|
||||
resolution: "@types/mocha@npm:10.0.0"
|
||||
checksum: 69e3896a63ec93374e22afd03fdea4c2f31d609d6ea111c8403508ede90da9dc0140c7bb2edff8404114d9d980308e104e4236324bf6afac1410b2cfe35f98c6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node-fetch@npm:3.0.3":
|
||||
version: 3.0.3
|
||||
resolution: "@types/node-fetch@npm:3.0.3"
|
||||
|
@ -2378,6 +2412,22 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/sinon@npm:^10.0.13":
|
||||
version: 10.0.13
|
||||
resolution: "@types/sinon@npm:10.0.13"
|
||||
dependencies:
|
||||
"@types/sinonjs__fake-timers": "*"
|
||||
checksum: 46a14c888db50f0098ec53d451877e0111d878ec4a653b9e9ed7f8e54de386d6beb0e528ddc3e95cd3361a8ab9ad54e4cca33cd88d45b9227b83e9fc8fb6688a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/sinonjs__fake-timers@npm:*, @types/sinonjs__fake-timers@npm:8.1.2":
|
||||
version: 8.1.2
|
||||
resolution: "@types/sinonjs__fake-timers@npm:8.1.2"
|
||||
checksum: bbc73a5ab6c0ec974929392f3d6e1e8db4ebad97ec506d785301e1c3d8a4f98a35b1aa95b97035daef02886fd8efd7788a2fa3ced2ec7105988bfd8dce61eedd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/sinonjs__fake-timers@npm:8.1.1":
|
||||
version: 8.1.1
|
||||
resolution: "@types/sinonjs__fake-timers@npm:8.1.1"
|
||||
|
@ -2385,13 +2435,6 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/sinonjs__fake-timers@npm:8.1.2":
|
||||
version: 8.1.2
|
||||
resolution: "@types/sinonjs__fake-timers@npm:8.1.2"
|
||||
checksum: bbc73a5ab6c0ec974929392f3d6e1e8db4ebad97ec506d785301e1c3d8a4f98a35b1aa95b97035daef02886fd8efd7788a2fa3ced2ec7105988bfd8dce61eedd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/sizzle@npm:^2.3.2":
|
||||
version: 2.3.3
|
||||
resolution: "@types/sizzle@npm:2.3.3"
|
||||
|
@ -3650,7 +3693,7 @@ __metadata:
|
|||
"@types/koa__cors": 3.1.1
|
||||
"@types/koa__multer": 2.0.4
|
||||
"@types/koa__router": 8.0.11
|
||||
"@types/mocha": 9.1.1
|
||||
"@types/mocha": ^10.0.0
|
||||
"@types/node": 18.7.16
|
||||
"@types/node-fetch": 3.0.3
|
||||
"@types/nodemailer": 6.4.5
|
||||
|
@ -5926,6 +5969,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"diff@npm:^5.0.0":
|
||||
version: 5.1.0
|
||||
resolution: "diff@npm:5.1.0"
|
||||
checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"dijkstrajs@npm:^1.0.1":
|
||||
version: 1.0.2
|
||||
resolution: "dijkstrajs@npm:1.0.2"
|
||||
|
@ -7865,6 +7915,7 @@ __metadata:
|
|||
dependencies:
|
||||
"@types/gulp": 4.0.9
|
||||
"@types/gulp-rename": 2.0.1
|
||||
"@types/sinon": ^10.0.13
|
||||
"@typescript-eslint/parser": ^5.36.2
|
||||
cross-env: 7.0.3
|
||||
cypress: 10.3.0
|
||||
|
@ -7875,6 +7926,7 @@ __metadata:
|
|||
gulp-replace: 1.1.3
|
||||
gulp-terser: 2.1.0
|
||||
js-yaml: 4.1.0
|
||||
sinon: 11.1.2
|
||||
start-server-and-test: 1.14.0
|
||||
typescript: 4.8.3
|
||||
languageName: unknown
|
||||
|
@ -9773,6 +9825,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isarray@npm:0.0.1":
|
||||
version: 0.0.1
|
||||
resolution: "isarray@npm:0.0.1"
|
||||
checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isarray@npm:1.0.0, isarray@npm:^1.0.0, isarray@npm:~1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "isarray@npm:1.0.0"
|
||||
|
@ -10817,6 +10876,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"just-extend@npm:^4.0.2":
|
||||
version: 4.2.1
|
||||
resolution: "just-extend@npm:4.2.1"
|
||||
checksum: ff9fdede240fad313efeeeb68a660b942e5586d99c0058064c78884894a2690dc09bba44c994ad4e077e45d913fef01a9240c14a72c657b53687ac58de53b39c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jwa@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "jwa@npm:2.0.0"
|
||||
|
@ -12271,6 +12337,19 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"nise@npm:^5.1.0":
|
||||
version: 5.1.1
|
||||
resolution: "nise@npm:5.1.1"
|
||||
dependencies:
|
||||
"@sinonjs/commons": ^1.8.3
|
||||
"@sinonjs/fake-timers": ">=5"
|
||||
"@sinonjs/text-encoding": ^0.7.1
|
||||
just-extend: ^4.0.2
|
||||
path-to-regexp: ^1.7.0
|
||||
checksum: d8be29e84a014743c9a10f428fac86f294ac5f92bed1f606fe9b551e935f494d8e0ce1af8a12673c6014010ec7f771f2d48aa5c8e116f223eb4f40c5e1ab44b3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-abi@npm:^3.3.0":
|
||||
version: 3.24.0
|
||||
resolution: "node-abi@npm:3.24.0"
|
||||
|
@ -13142,6 +13221,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-to-regexp@npm:^1.7.0":
|
||||
version: 1.8.0
|
||||
resolution: "path-to-regexp@npm:1.8.0"
|
||||
dependencies:
|
||||
isarray: 0.0.1
|
||||
checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-to-regexp@npm:^6.1.0":
|
||||
version: 6.2.1
|
||||
resolution: "path-to-regexp@npm:6.2.1"
|
||||
|
@ -15351,6 +15439,20 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sinon@npm:11.1.2":
|
||||
version: 11.1.2
|
||||
resolution: "sinon@npm:11.1.2"
|
||||
dependencies:
|
||||
"@sinonjs/commons": ^1.8.3
|
||||
"@sinonjs/fake-timers": ^7.1.2
|
||||
"@sinonjs/samsam": ^6.0.2
|
||||
diff: ^5.0.0
|
||||
nise: ^5.1.0
|
||||
supports-color: ^7.2.0
|
||||
checksum: 1d01377e230c9ba976bf33f28b588bae7901b0b5a503d2f6b2a7914b0dbaa9f09823481926c6f2abed820123c7fa865519695af3ae2e9ba18d8b025616163501
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sisteransi@npm:^1.0.5":
|
||||
version: 1.0.5
|
||||
resolution: "sisteransi@npm:1.0.5"
|
||||
|
@ -16052,7 +16154,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0":
|
||||
"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0, supports-color@npm:^7.2.0":
|
||||
version: 7.2.0
|
||||
resolution: "supports-color@npm:7.2.0"
|
||||
dependencies:
|
||||
|
@ -16762,7 +16864,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"type-detect@npm:4.0.8":
|
||||
"type-detect@npm:4.0.8, type-detect@npm:^4.0.8":
|
||||
version: 4.0.8
|
||||
resolution: "type-detect@npm:4.0.8"
|
||||
checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15
|
||||
|
|
Loading…
Reference in New Issue