This commit is contained in:
parent
9e1d276bbd
commit
9c905f84e8
|
@ -265,17 +265,43 @@ export class NoteCreateService implements OnApplicationShutdown {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.utilityService.isKeyWordIncluded(data.cw ?? data.text ?? '', meta.prohibitedWords)) {
|
if (this.utilityService.isKeyWordIncluded(data.cw ?? data.text ?? '', meta.prohibitedWords)) {
|
||||||
const { DiscordWebhookUrl } = (await this.metaService.fetch());
|
const { DiscordWebhookUrlWordBlock } = (await this.metaService.fetch());
|
||||||
|
const regexpregexp = /^\/(.+)\/(.*)$/;
|
||||||
|
let matchedString = '';
|
||||||
|
for (const filter of meta.prohibitedWords) {
|
||||||
|
// represents RegExp
|
||||||
|
const regexp = filter.match(regexpregexp);
|
||||||
|
// This should never happen due to input sanitisation.
|
||||||
|
if (!regexp) {
|
||||||
|
const words = filter.split(' ');
|
||||||
|
const foundWord = words.find(keyword => (data.cw ?? data.text ?? '').includes(keyword));
|
||||||
|
if (foundWord) {
|
||||||
|
matchedString = foundWord;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const match = new RE2(regexp[1], regexp[2]).exec(data.cw ?? data.text ?? '');
|
||||||
|
if (match) {
|
||||||
|
matchedString = match[0];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (DiscordWebhookUrl) {
|
console.log('matched', matchedString);
|
||||||
|
if (DiscordWebhookUrlWordBlock) {
|
||||||
const data_disc = { 'username': 'ノートブロックお知らせ',
|
const data_disc = { 'username': 'ノートブロックお知らせ',
|
||||||
'content':
|
'content':
|
||||||
'ユーザー名 :' + user.username + '\n' +
|
'ユーザー名 :' + user.username + '\n' +
|
||||||
'url : ' + user.host + '\n' +
|
'url : ' + user.host + '\n' +
|
||||||
'contents : ' + data.text,
|
'contents : ' + data.text + '\n' +
|
||||||
|
'引っかかったワード :' + matchedString,
|
||||||
|
'allowed_mentions': {
|
||||||
|
'parse': [],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
await fetch(DiscordWebhookUrl, {
|
await fetch(DiscordWebhookUrlWordBlock, {
|
||||||
'method': 'post',
|
'method': 'post',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
|
|
|
@ -229,6 +229,13 @@ export class MiMeta {
|
||||||
nullable: true,
|
nullable: true,
|
||||||
})
|
})
|
||||||
public DiscordWebhookUrl: string | null;
|
public DiscordWebhookUrl: string | null;
|
||||||
|
|
||||||
|
@Column('varchar', {
|
||||||
|
length: 1024,
|
||||||
|
nullable: true,
|
||||||
|
})
|
||||||
|
public DiscordWebhookUrlWordBlock: string | null;
|
||||||
|
|
||||||
@Column('varchar', {
|
@Column('varchar', {
|
||||||
length: 1024,
|
length: 1024,
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
|
|
@ -458,6 +458,9 @@ export const meta = {
|
||||||
DiscordWebhookUrl: {
|
DiscordWebhookUrl: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
optional: false, nullable: true,
|
optional: false, nullable: true,
|
||||||
|
}, DiscordWebhookUrlWordBlock: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false, nullable: true,
|
||||||
},
|
},
|
||||||
enableProxyCheckio: {
|
enableProxyCheckio: {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
|
@ -595,6 +598,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
perUserListTimelineCacheMax: instance.perUserListTimelineCacheMax,
|
perUserListTimelineCacheMax: instance.perUserListTimelineCacheMax,
|
||||||
notesPerOneAd: instance.notesPerOneAd,
|
notesPerOneAd: instance.notesPerOneAd,
|
||||||
DiscordWebhookUrl: instance.DiscordWebhookUrl,
|
DiscordWebhookUrl: instance.DiscordWebhookUrl,
|
||||||
|
DiscordWebhookUrlWordBlock: instance.DiscordWebhookUrlWordBlock,
|
||||||
EmojiBotToken: instance.EmojiBotToken,
|
EmojiBotToken: instance.EmojiBotToken,
|
||||||
ApiBase: instance.ApiBase,
|
ApiBase: instance.ApiBase,
|
||||||
enableGDPRMode: instance.enableGDPRMode,
|
enableGDPRMode: instance.enableGDPRMode,
|
||||||
|
|
|
@ -92,6 +92,7 @@ export const paramDef = {
|
||||||
},
|
},
|
||||||
summalyProxy: { type: 'string', nullable: true },
|
summalyProxy: { type: 'string', nullable: true },
|
||||||
DiscordWebhookUrl: { type: 'string', nullable: true },
|
DiscordWebhookUrl: { type: 'string', nullable: true },
|
||||||
|
DiscordWebhookUrlWordBlock: { type: 'string', nullable: true },
|
||||||
deeplAuthKey: { type: 'string', nullable: true },
|
deeplAuthKey: { type: 'string', nullable: true },
|
||||||
deeplIsPro: { type: 'boolean' },
|
deeplIsPro: { type: 'boolean' },
|
||||||
enableEmail: { type: 'boolean' },
|
enableEmail: { type: 'boolean' },
|
||||||
|
@ -210,6 +211,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
if (ps.DiscordWebhookUrl !== undefined) {
|
if (ps.DiscordWebhookUrl !== undefined) {
|
||||||
set.DiscordWebhookUrl = ps.DiscordWebhookUrl;
|
set.DiscordWebhookUrl = ps.DiscordWebhookUrl;
|
||||||
}
|
}
|
||||||
|
if (ps.DiscordWebhookUrlWordBlock !== undefined) {
|
||||||
|
set.DiscordWebhookUrlWordBlock = ps.DiscordWebhookUrlWordBlock;
|
||||||
|
}
|
||||||
if (ps.EmojiBotToken !== undefined) {
|
if (ps.EmojiBotToken !== undefined) {
|
||||||
set.EmojiBotToken = ps.EmojiBotToken;
|
set.EmojiBotToken = ps.EmojiBotToken;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,6 @@ const clientAssets = `${_dirname}/../../../../frontend/assets/`;
|
||||||
const assets = `${_dirname}/../../../../../built/_frontend_dist_/`;
|
const assets = `${_dirname}/../../../../../built/_frontend_dist_/`;
|
||||||
const swAssets = `${_dirname}/../../../../../built/_sw_dist_/`;
|
const swAssets = `${_dirname}/../../../../../built/_sw_dist_/`;
|
||||||
const viteOut = `${_dirname}/../../../../../built/_vite_/`;
|
const viteOut = `${_dirname}/../../../../../built/_vite_/`;
|
||||||
const tarball = `${_dirname}/../../../../../built/tarball/`;
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ClientServerService {
|
export class ClientServerService {
|
||||||
|
@ -309,18 +308,6 @@ export class ClientServerService {
|
||||||
decorateReply: false,
|
decorateReply: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
fastify.register((fastify, options, done) => {
|
|
||||||
fastify.register(fastifyStatic, {
|
|
||||||
root: tarball,
|
|
||||||
prefix: '/tarball/',
|
|
||||||
maxAge: ms('30 days'),
|
|
||||||
immutable: true,
|
|
||||||
decorateReply: false,
|
|
||||||
});
|
|
||||||
fastify.addHook('onRequest', handleRequestRedirectToOmitSearch);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
|
|
||||||
fastify.get('/favicon.ico', async (request, reply) => {
|
fastify.get('/favicon.ico', async (request, reply) => {
|
||||||
return reply.sendFile('/favicon.ico', staticAssets);
|
return reply.sendFile('/favicon.ico', staticAssets);
|
||||||
});
|
});
|
||||||
|
|
|
@ -87,7 +87,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<FormLink :to="`/.well-known/nodeinfo`" external>nodeinfo</FormLink>
|
<FormLink :to="`/.well-known/nodeinfo`" external>nodeinfo</FormLink>
|
||||||
<FormLink :to="`/robots.txt`" external>robots.txt</FormLink>
|
<FormLink :to="`/robots.txt`" external>robots.txt</FormLink>
|
||||||
<FormLink :to="`/manifest.json`" external>manifest.json</FormLink>
|
<FormLink :to="`/manifest.json`" external>manifest.json</FormLink>
|
||||||
<FormLink :to="`/tarball/misskey-${version}.tar.gz`" external>source code</FormLink>
|
|
||||||
</div>
|
</div>
|
||||||
</FormSection>
|
</FormSection>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -36,21 +36,25 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<template #caption>{{ i18n.ts.turnOffToImprovePerformance }}</template>
|
<template #caption>{{ i18n.ts.turnOffToImprovePerformance }}</template>
|
||||||
</MkSwitch>
|
</MkSwitch>
|
||||||
</div>
|
</div>
|
||||||
<MkInput v-model="DiscordWebhookUrl" type="password">
|
<MkInput v-model="DiscordWebhookUrl" type="password">
|
||||||
<template #prefix><i class="ti ti-key"></i></template>
|
<template #prefix><i class="ti ti-key"></i></template>
|
||||||
<template #label>Discord Webhook URL</template>
|
<template #label>Discord Webhook URL</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="EmojiBotToken" type="password">
|
<MkInput v-model="DiscordWebhookUrlWordBlock" type="password">
|
||||||
<template #prefix><i class="ti ti-key"></i></template>
|
<template #prefix><i class="ti ti-key"></i></template>
|
||||||
<template #label>EmojiBotToken</template>
|
<template #label>Discord Webhook Url WordBlock</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="ApiBase">
|
<MkInput v-model="EmojiBotToken" type="password">
|
||||||
<template #prefix><i class="ti ti-key"></i></template>
|
<template #prefix><i class="ti ti-key"></i></template>
|
||||||
<template #label>ApiBase</template>
|
<template #label>EmojiBotToken</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkSwitch v-model="requestEmojiAllOk">
|
<MkInput v-model="ApiBase">
|
||||||
絵文字の申請全部許可
|
<template #prefix><i class="ti ti-key"></i></template>
|
||||||
</MkSwitch>
|
<template #label>ApiBase</template>
|
||||||
|
</MkInput>
|
||||||
|
<MkSwitch v-model="requestEmojiAllOk">
|
||||||
|
絵文字の申請全部許可
|
||||||
|
</MkSwitch>
|
||||||
</div>
|
</div>
|
||||||
</FormSuspense>
|
</FormSuspense>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
|
@ -67,26 +71,29 @@ import { fetchInstance } from '@/instance.js';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||||
import MkSwitch from '@/components/MkSwitch.vue';
|
import MkSwitch from '@/components/MkSwitch.vue';
|
||||||
import MkInput from "@/components/MkInput.vue";
|
import MkInput from '@/components/MkInput.vue';
|
||||||
|
|
||||||
const enableServerMachineStats = ref<boolean>(false);
|
const enableServerMachineStats = ref<boolean>(false);
|
||||||
const enableIdenticonGeneration = ref<boolean>(false);
|
const enableIdenticonGeneration = ref<boolean>(false);
|
||||||
const enableChartsForRemoteUser = ref<boolean>(false);
|
const enableChartsForRemoteUser = ref<boolean>(false);
|
||||||
const enableChartsForFederatedInstances = ref<boolean>(false);
|
const enableChartsForFederatedInstances = ref<boolean>(false);
|
||||||
const requestEmojiAllOk = ref(false)
|
const requestEmojiAllOk = ref(false);
|
||||||
let DiscordWebhookUrl = ref(null);
|
let DiscordWebhookUrl = ref(null);
|
||||||
let EmojiBotToken= ref(null);
|
let DiscordWebhookUrlWordBlock = ref(null);
|
||||||
let ApiBase= ref(null)
|
let EmojiBotToken = ref(null);
|
||||||
|
let ApiBase = ref(null);
|
||||||
|
|
||||||
async function init() {
|
async function init() {
|
||||||
const meta = await misskeyApi('admin/meta');
|
const meta = await misskeyApi('admin/meta');
|
||||||
enableServerMachineStats.value = meta.enableServerMachineStats;
|
enableServerMachineStats.value = meta.enableServerMachineStats;
|
||||||
enableIdenticonGeneration.value = meta.enableIdenticonGeneration;
|
enableIdenticonGeneration.value = meta.enableIdenticonGeneration;
|
||||||
enableChartsForRemoteUser.value = meta.enableChartsForRemoteUser;
|
enableChartsForRemoteUser.value = meta.enableChartsForRemoteUser;
|
||||||
enableChartsForFederatedInstances.value = meta.enableChartsForFederatedInstances;
|
enableChartsForFederatedInstances.value = meta.enableChartsForFederatedInstances;
|
||||||
requestEmojiAllOk.value = meta.requestEmojiAllOk;
|
requestEmojiAllOk.value = meta.requestEmojiAllOk;
|
||||||
DiscordWebhookUrl.value = meta.DiscordWebhookUrl;
|
DiscordWebhookUrl.value = meta.DiscordWebhookUrl;
|
||||||
EmojiBotToken.value = meta.EmojiBotToken;
|
DiscordWebhookUrlWordBlock.value = meta.DiscordWebhookUrlWordBlock;
|
||||||
ApiBase.value = meta.ApiBase;
|
EmojiBotToken.value = meta.EmojiBotToken;
|
||||||
|
ApiBase.value = meta.ApiBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
function save() {
|
function save() {
|
||||||
|
@ -94,11 +101,12 @@ function save() {
|
||||||
enableServerMachineStats: enableServerMachineStats.value,
|
enableServerMachineStats: enableServerMachineStats.value,
|
||||||
enableIdenticonGeneration: enableIdenticonGeneration.value,
|
enableIdenticonGeneration: enableIdenticonGeneration.value,
|
||||||
enableChartsForRemoteUser: enableChartsForRemoteUser.value,
|
enableChartsForRemoteUser: enableChartsForRemoteUser.value,
|
||||||
requestEmojiAllOk: requestEmojiAllOk.value,
|
requestEmojiAllOk: requestEmojiAllOk.value,
|
||||||
enableChartsForFederatedInstances: enableChartsForFederatedInstances.value,
|
enableChartsForFederatedInstances: enableChartsForFederatedInstances.value,
|
||||||
DiscordWebhookUrl:DiscordWebhookUrl.value,
|
DiscordWebhookUrl: DiscordWebhookUrl.value,
|
||||||
EmojiBotToken:EmojiBotToken.value,
|
EmojiBotToken: EmojiBotToken.value,
|
||||||
ApiBase:ApiBase.value
|
ApiBase: ApiBase.value,
|
||||||
|
DiscordWebhookUrlWordBlock: DiscordWebhookUrlWordBlock.value,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
fetchInstance();
|
fetchInstance();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue