Merge branch 'develop'
This commit is contained in:
commit
c20311b8a7
13 changed files with 108 additions and 68 deletions
|
@ -9,6 +9,14 @@
|
||||||
You should also include the user name that made the change.
|
You should also include the user name that made the change.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
## 12.112.3 (2022/07/09)
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
- Make active email validation configurable
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- Server: Fix Attempts to update all notifications @mei23
|
||||||
|
|
||||||
## 12.112.2 (2022/07/08)
|
## 12.112.2 (2022/07/08)
|
||||||
|
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
|
|
|
@ -886,6 +886,7 @@ cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いためア
|
||||||
beta: "ベータ"
|
beta: "ベータ"
|
||||||
enableAutoSensitive: "自動NSFW判定"
|
enableAutoSensitive: "自動NSFW判定"
|
||||||
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、インスタンスによっては自動で設定されることがあります。"
|
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、インスタンスによっては自動で設定されることがあります。"
|
||||||
|
activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。"
|
||||||
|
|
||||||
_sensitiveMediaDetection:
|
_sensitiveMediaDetection:
|
||||||
description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。"
|
description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "12.112.2",
|
"version": "12.112.3",
|
||||||
"codename": "indigo",
|
"codename": "indigo",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
export class activeEmailValidation1657346559800 {
|
||||||
|
name = 'activeEmailValidation1657346559800'
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "enableActiveEmailValidation" boolean NOT NULL DEFAULT true`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableActiveEmailValidation"`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -104,7 +104,7 @@
|
||||||
"strict-event-emitter-types": "2.0.0",
|
"strict-event-emitter-types": "2.0.0",
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
"style-loader": "3.3.1",
|
"style-loader": "3.3.1",
|
||||||
"summaly": "2.6.0",
|
"summaly": "2.7.0",
|
||||||
"syslog-pro": "1.0.0",
|
"syslog-pro": "1.0.0",
|
||||||
"systeminformation": "5.11.22",
|
"systeminformation": "5.11.22",
|
||||||
"tinycolor2": "1.4.2",
|
"tinycolor2": "1.4.2",
|
||||||
|
|
|
@ -7,28 +7,31 @@ import { WriteStream } from 'node:fs';
|
||||||
import * as p from 'pureimage';
|
import * as p from 'pureimage';
|
||||||
import gen from 'random-seed';
|
import gen from 'random-seed';
|
||||||
|
|
||||||
const size = 256; // px
|
const size = 128; // px
|
||||||
const n = 5; // resolution
|
const n = 5; // resolution
|
||||||
const margin = (size / n);
|
const margin = (size / 4);
|
||||||
const colors = [
|
const colors = [
|
||||||
'#e57373',
|
['#FF512F', '#DD2476'],
|
||||||
'#F06292',
|
['#FF61D2', '#FE9090'],
|
||||||
'#BA68C8',
|
['#72FFB6', '#10D164'],
|
||||||
'#9575CD',
|
['#FD8451', '#FFBD6F'],
|
||||||
'#7986CB',
|
['#305170', '#6DFC6B'],
|
||||||
'#64B5F6',
|
['#00C0FF', '#4218B8'],
|
||||||
'#4FC3F7',
|
['#009245', '#FCEE21'],
|
||||||
'#4DD0E1',
|
['#0100EC', '#FB36F4'],
|
||||||
'#4DB6AC',
|
['#FDABDD', '#374A5A'],
|
||||||
'#81C784',
|
['#38A2D7', '#561139'],
|
||||||
'#8BC34A',
|
['#121C84', '#8278DA'],
|
||||||
'#AFB42B',
|
['#5761B2', '#1FC5A8'],
|
||||||
'#F57F17',
|
['#FFDB01', '#0E197D'],
|
||||||
'#FF5722',
|
['#FF3E9D', '#0E1F40'],
|
||||||
'#795548',
|
['#766eff', '#00d4ff'],
|
||||||
'#455A64',
|
['#9bff6e', '#00d4ff'],
|
||||||
|
['#ff6e94', '#00d4ff'],
|
||||||
|
['#ffa96e', '#00d4ff'],
|
||||||
|
['#ffa96e', '#ff009d'],
|
||||||
|
['#ffdd6e', '#ff009d'],
|
||||||
];
|
];
|
||||||
const bg = '#e9e9e9';
|
|
||||||
|
|
||||||
const actualSize = size - (margin * 2);
|
const actualSize = size - (margin * 2);
|
||||||
const cellSize = actualSize / n;
|
const cellSize = actualSize / n;
|
||||||
|
@ -42,11 +45,17 @@ export function genIdenticon(seed: string, stream: WriteStream): Promise<void> {
|
||||||
const canvas = p.make(size, size, undefined);
|
const canvas = p.make(size, size, undefined);
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
const bgColors = colors[rand(colors.length)];
|
||||||
|
|
||||||
|
const bg = ctx.createLinearGradient(0, 0, size, size);
|
||||||
|
bg.addColorStop(0, bgColors[0]);
|
||||||
|
bg.addColorStop(1, bgColors[1]);
|
||||||
|
|
||||||
ctx.fillStyle = bg;
|
ctx.fillStyle = bg;
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.fillRect(0, 0, size, size);
|
ctx.fillRect(0, 0, size, size);
|
||||||
|
|
||||||
ctx.fillStyle = colors[rand(colors.length)];
|
ctx.fillStyle = '#ffffff';
|
||||||
|
|
||||||
// side bitmap (filled by false)
|
// side bitmap (filled by false)
|
||||||
const side: boolean[][] = new Array(sideN);
|
const side: boolean[][] = new Array(sideN);
|
||||||
|
|
|
@ -454,4 +454,9 @@ export class Meta {
|
||||||
default: false,
|
default: false,
|
||||||
})
|
})
|
||||||
public enableIpLogging: boolean;
|
public enableIpLogging: boolean;
|
||||||
|
|
||||||
|
@Column('boolean', {
|
||||||
|
default: true,
|
||||||
|
})
|
||||||
|
public enableActiveEmailValidation: boolean;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ export async function readNotificationByQuery(
|
||||||
userId: User['id'],
|
userId: User['id'],
|
||||||
query: Record<string, any>
|
query: Record<string, any>
|
||||||
) {
|
) {
|
||||||
const notificationIds = await Notifications.find({
|
const notificationIds = await Notifications.findBy({
|
||||||
...query,
|
...query,
|
||||||
notifieeId: userId,
|
notifieeId: userId,
|
||||||
isRead: false,
|
isRead: false,
|
||||||
|
|
|
@ -324,6 +324,10 @@ export const meta = {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
optional: true, nullable: false,
|
optional: true, nullable: false,
|
||||||
},
|
},
|
||||||
|
enableActiveEmailValidation: {
|
||||||
|
type: 'boolean',
|
||||||
|
optional: true, nullable: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -421,5 +425,6 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
deeplAuthKey: instance.deeplAuthKey,
|
deeplAuthKey: instance.deeplAuthKey,
|
||||||
deeplIsPro: instance.deeplIsPro,
|
deeplIsPro: instance.deeplIsPro,
|
||||||
enableIpLogging: instance.enableIpLogging,
|
enableIpLogging: instance.enableIpLogging,
|
||||||
|
enableActiveEmailValidation: instance.enableActiveEmailValidation,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -101,6 +101,7 @@ export const paramDef = {
|
||||||
objectStorageSetPublicRead: { type: 'boolean' },
|
objectStorageSetPublicRead: { type: 'boolean' },
|
||||||
objectStorageS3ForcePathStyle: { type: 'boolean' },
|
objectStorageS3ForcePathStyle: { type: 'boolean' },
|
||||||
enableIpLogging: { type: 'boolean' },
|
enableIpLogging: { type: 'boolean' },
|
||||||
|
enableActiveEmailValidation: { type: 'boolean' },
|
||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -421,6 +422,10 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
set.enableIpLogging = ps.enableIpLogging;
|
set.enableIpLogging = ps.enableIpLogging;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ps.enableActiveEmailValidation !== undefined) {
|
||||||
|
set.enableActiveEmailValidation = ps.enableActiveEmailValidation;
|
||||||
|
}
|
||||||
|
|
||||||
await db.transaction(async transactionalEntityManager => {
|
await db.transaction(async transactionalEntityManager => {
|
||||||
const metas = await transactionalEntityManager.find(Meta, {
|
const metas = await transactionalEntityManager.find(Meta, {
|
||||||
order: {
|
order: {
|
||||||
|
|
|
@ -1,34 +1,37 @@
|
||||||
import { validate as validateEmail } from 'deep-email-validator';
|
import { validate as validateEmail } from 'deep-email-validator';
|
||||||
import { UserProfiles } from '@/models/index.js';
|
import { UserProfiles } from '@/models/index.js';
|
||||||
|
import { fetchMeta } from '@/misc/fetch-meta.js';
|
||||||
|
|
||||||
export async function validateEmailForAccount(emailAddress: string): Promise<{
|
export async function validateEmailForAccount(emailAddress: string): Promise<{
|
||||||
available: boolean;
|
available: boolean;
|
||||||
reason: null | 'used' | 'format' | 'disposable' | 'mx' | 'smtp';
|
reason: null | 'used' | 'format' | 'disposable' | 'mx' | 'smtp';
|
||||||
}> {
|
}> {
|
||||||
|
const meta = await fetchMeta();
|
||||||
|
|
||||||
const exist = await UserProfiles.countBy({
|
const exist = await UserProfiles.countBy({
|
||||||
emailVerified: true,
|
emailVerified: true,
|
||||||
email: emailAddress,
|
email: emailAddress,
|
||||||
});
|
});
|
||||||
|
|
||||||
const validated = await validateEmail({
|
const validated = meta.enableActiveEmailValidation ? await validateEmail({
|
||||||
email: emailAddress,
|
email: emailAddress,
|
||||||
validateRegex: true,
|
validateRegex: true,
|
||||||
validateMx: true,
|
validateMx: true,
|
||||||
validateTypo: false, // TLDを見ているみたいだけどclubとか弾かれるので
|
validateTypo: false, // TLDを見ているみたいだけどclubとか弾かれるので
|
||||||
validateDisposable: true, // 捨てアドかどうかチェック
|
validateDisposable: true, // 捨てアドかどうかチェック
|
||||||
validateSMTP: false, // 日本だと25ポートが殆どのプロバイダーで塞がれていてタイムアウトになるので
|
validateSMTP: false, // 日本だと25ポートが殆どのプロバイダーで塞がれていてタイムアウトになるので
|
||||||
});
|
}) : { valid: true };
|
||||||
|
|
||||||
const available = exist === 0 && validated.valid;
|
const available = exist === 0 && validated.valid;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
available,
|
available,
|
||||||
reason: available ? null :
|
reason: available ? null :
|
||||||
exist !== 0 ? 'used' :
|
exist !== 0 ? 'used' :
|
||||||
validated.reason === 'regex' ? 'format' :
|
validated.reason === 'regex' ? 'format' :
|
||||||
validated.reason === 'disposable' ? 'disposable' :
|
validated.reason === 'disposable' ? 'disposable' :
|
||||||
validated.reason === 'mx' ? 'mx' :
|
validated.reason === 'mx' ? 'mx' :
|
||||||
validated.reason === 'smtp' ? 'smtp' :
|
validated.reason === 'smtp' ? 'smtp' :
|
||||||
null,
|
null,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,12 +303,7 @@
|
||||||
pluralize "^8.0.0"
|
pluralize "^8.0.0"
|
||||||
yaml-ast-parser "0.0.43"
|
yaml-ast-parser "0.0.43"
|
||||||
|
|
||||||
"@sindresorhus/is@^3.0.0":
|
"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0":
|
||||||
version "3.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-3.1.2.tgz#548650de521b344e3781fbdb0ece4aa6f729afb8"
|
|
||||||
integrity sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==
|
|
||||||
|
|
||||||
"@sindresorhus/is@^4.6.0":
|
|
||||||
version "4.6.0"
|
version "4.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
|
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
|
||||||
integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
|
integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
|
||||||
|
@ -1736,19 +1731,6 @@ cacheable-lookup@^5.0.3:
|
||||||
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz#049fdc59dffdd4fc285e8f4f82936591bd59fec3"
|
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz#049fdc59dffdd4fc285e8f4f82936591bd59fec3"
|
||||||
integrity sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==
|
integrity sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==
|
||||||
|
|
||||||
cacheable-request@^7.0.1:
|
|
||||||
version "7.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58"
|
|
||||||
integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==
|
|
||||||
dependencies:
|
|
||||||
clone-response "^1.0.2"
|
|
||||||
get-stream "^5.1.0"
|
|
||||||
http-cache-semantics "^4.0.0"
|
|
||||||
keyv "^4.0.0"
|
|
||||||
lowercase-keys "^2.0.0"
|
|
||||||
normalize-url "^4.1.0"
|
|
||||||
responselike "^2.0.0"
|
|
||||||
|
|
||||||
cacheable-request@^7.0.2:
|
cacheable-request@^7.0.2:
|
||||||
version "7.0.2"
|
version "7.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
|
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
|
||||||
|
@ -3520,19 +3502,19 @@ google-protobuf@^3.9.2:
|
||||||
resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.20.1.tgz#1b255c2b59bcda7c399df46c65206aa3c7a0ce8b"
|
resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.20.1.tgz#1b255c2b59bcda7c399df46c65206aa3c7a0ce8b"
|
||||||
integrity sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==
|
integrity sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==
|
||||||
|
|
||||||
got@11.5.1:
|
got@11.8.5:
|
||||||
version "11.5.1"
|
version "11.8.5"
|
||||||
resolved "https://registry.yarnpkg.com/got/-/got-11.5.1.tgz#bf098a270fe80b3fb88ffd5a043a59ebb0a391db"
|
resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046"
|
||||||
integrity sha512-reQEZcEBMTGnujmQ+Wm97mJs/OK6INtO6HmLI+xt3+9CvnRwWjXutUvb2mqr+Ao4Lu05Rx6+udx9sOQAmExMxA==
|
integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@sindresorhus/is" "^3.0.0"
|
"@sindresorhus/is" "^4.0.0"
|
||||||
"@szmarczak/http-timer" "^4.0.5"
|
"@szmarczak/http-timer" "^4.0.5"
|
||||||
"@types/cacheable-request" "^6.0.1"
|
"@types/cacheable-request" "^6.0.1"
|
||||||
"@types/responselike" "^1.0.0"
|
"@types/responselike" "^1.0.0"
|
||||||
cacheable-lookup "^5.0.3"
|
cacheable-lookup "^5.0.3"
|
||||||
cacheable-request "^7.0.1"
|
cacheable-request "^7.0.2"
|
||||||
decompress-response "^6.0.0"
|
decompress-response "^6.0.0"
|
||||||
http2-wrapper "^1.0.0-beta.5.0"
|
http2-wrapper "^1.0.0-beta.5.2"
|
||||||
lowercase-keys "^2.0.0"
|
lowercase-keys "^2.0.0"
|
||||||
p-cancelable "^2.0.0"
|
p-cancelable "^2.0.0"
|
||||||
responselike "^2.0.0"
|
responselike "^2.0.0"
|
||||||
|
@ -3734,7 +3716,7 @@ http-signature@~1.2.0:
|
||||||
jsprim "^1.2.2"
|
jsprim "^1.2.2"
|
||||||
sshpk "^1.7.0"
|
sshpk "^1.7.0"
|
||||||
|
|
||||||
http2-wrapper@^1.0.0-beta.5.0:
|
http2-wrapper@^1.0.0-beta.5.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
|
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
|
||||||
integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
|
integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
|
||||||
|
@ -5380,11 +5362,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||||
|
|
||||||
normalize-url@^4.1.0:
|
|
||||||
version "4.5.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
|
|
||||||
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
|
|
||||||
|
|
||||||
normalize-url@^6.0.1:
|
normalize-url@^6.0.1:
|
||||||
version "6.1.0"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
|
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
|
||||||
|
@ -6974,15 +6951,15 @@ style-loader@3.3.1:
|
||||||
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
|
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
|
||||||
integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==
|
integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==
|
||||||
|
|
||||||
summaly@2.6.0:
|
summaly@2.7.0:
|
||||||
version "2.6.0"
|
version "2.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/summaly/-/summaly-2.6.0.tgz#aaac80eb8ae88b130318f44d9b98da9c2ccb328c"
|
resolved "https://registry.yarnpkg.com/summaly/-/summaly-2.7.0.tgz#ccccec0477938edea13cb34412a33e705398c0c4"
|
||||||
integrity sha512-wIv6fL3aeFfXcQoZISzeUfNUgD3u8Hwx8Rg0awZliQhans62w23K3nDezwfvmYAQCgXs6e0EF7jtGmJv/qeVTA==
|
integrity sha512-pEz9LL8Gp0oPIQfn6TrnBCcv/HkFE14hxhH3W6LPGdopXlPXjRcMlDMJaO+VupUNMOGaMjCsjq7+0rWnu8sp7w==
|
||||||
dependencies:
|
dependencies:
|
||||||
cheerio "0.22.0"
|
cheerio "0.22.0"
|
||||||
debug "4.3.3"
|
debug "4.3.3"
|
||||||
escape-regexp "0.0.1"
|
escape-regexp "0.0.1"
|
||||||
got "11.5.1"
|
got "11.8.5"
|
||||||
html-entities "2.3.2"
|
html-entities "2.3.2"
|
||||||
iconv-lite "0.6.3"
|
iconv-lite "0.6.3"
|
||||||
jschardet "3.0.0"
|
jschardet "3.0.0"
|
||||||
|
|
|
@ -57,6 +57,19 @@
|
||||||
</div>
|
</div>
|
||||||
</FormFolder>
|
</FormFolder>
|
||||||
|
|
||||||
|
<FormFolder class="_formBlock">
|
||||||
|
<template #label>Active Email Validation</template>
|
||||||
|
<template v-if="enableActiveEmailValidation" #suffix>Enabled</template>
|
||||||
|
<template v-else #suffix>Disabled</template>
|
||||||
|
|
||||||
|
<div class="_formRoot">
|
||||||
|
<span class="_formBlock">{{ i18n.ts.activeEmailValidationDescription }}</span>
|
||||||
|
<FormSwitch v-model="enableActiveEmailValidation" class="_formBlock" @update:modelValue="save">
|
||||||
|
<template #label>Enable</template>
|
||||||
|
</FormSwitch>
|
||||||
|
</div>
|
||||||
|
</FormFolder>
|
||||||
|
|
||||||
<FormFolder class="_formBlock">
|
<FormFolder class="_formBlock">
|
||||||
<template #label>Log IP address</template>
|
<template #label>Log IP address</template>
|
||||||
<template v-if="enableIpLogging" #suffix>Enabled</template>
|
<template v-if="enableIpLogging" #suffix>Enabled</template>
|
||||||
|
@ -112,6 +125,7 @@ let sensitiveMediaDetectionSensitivity: number = $ref(0);
|
||||||
let setSensitiveFlagAutomatically: boolean = $ref(false);
|
let setSensitiveFlagAutomatically: boolean = $ref(false);
|
||||||
let enableSensitiveMediaDetectionForVideos: boolean = $ref(false);
|
let enableSensitiveMediaDetectionForVideos: boolean = $ref(false);
|
||||||
let enableIpLogging: boolean = $ref(false);
|
let enableIpLogging: boolean = $ref(false);
|
||||||
|
let enableActiveEmailValidation: boolean = $ref(false);
|
||||||
|
|
||||||
async function init() {
|
async function init() {
|
||||||
const meta = await os.api('admin/meta');
|
const meta = await os.api('admin/meta');
|
||||||
|
@ -128,6 +142,7 @@ async function init() {
|
||||||
setSensitiveFlagAutomatically = meta.setSensitiveFlagAutomatically;
|
setSensitiveFlagAutomatically = meta.setSensitiveFlagAutomatically;
|
||||||
enableSensitiveMediaDetectionForVideos = meta.enableSensitiveMediaDetectionForVideos;
|
enableSensitiveMediaDetectionForVideos = meta.enableSensitiveMediaDetectionForVideos;
|
||||||
enableIpLogging = meta.enableIpLogging;
|
enableIpLogging = meta.enableIpLogging;
|
||||||
|
enableActiveEmailValidation = meta.enableActiveEmailValidation;
|
||||||
}
|
}
|
||||||
|
|
||||||
function save() {
|
function save() {
|
||||||
|
@ -144,6 +159,7 @@ function save() {
|
||||||
setSensitiveFlagAutomatically,
|
setSensitiveFlagAutomatically,
|
||||||
enableSensitiveMediaDetectionForVideos,
|
enableSensitiveMediaDetectionForVideos,
|
||||||
enableIpLogging,
|
enableIpLogging,
|
||||||
|
enableActiveEmailValidation,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
fetchInstance();
|
fetchInstance();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue