mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-30 11:43:08 +02:00
Resolve #365
This commit is contained in:
parent
2bd03ca725
commit
2615368b1e
8 changed files with 23 additions and 36 deletions
|
@ -8,7 +8,7 @@ export type PackedMessagingMessage = SchemaType<typeof packedMessagingMessageSch
|
||||||
|
|
||||||
@EntityRepository(MessagingMessage)
|
@EntityRepository(MessagingMessage)
|
||||||
export class MessagingMessageRepository extends Repository<MessagingMessage> {
|
export class MessagingMessageRepository extends Repository<MessagingMessage> {
|
||||||
public isValidText(text: string): boolean {
|
public validateText(text: string): boolean {
|
||||||
return text.trim().length <= 1000 && text.trim() != '';
|
return text.trim().length <= 1000 && text.trim() != '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import $ from 'cafy';
|
||||||
import { EntityRepository, Repository, In } from 'typeorm';
|
import { EntityRepository, Repository, In } from 'typeorm';
|
||||||
import { User, ILocalUser, IRemoteUser } from '../entities/user';
|
import { User, ILocalUser, IRemoteUser } from '../entities/user';
|
||||||
import { Emojis, Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserGroupJoinings } from '..';
|
import { Emojis, Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserGroupJoinings } from '..';
|
||||||
|
@ -231,29 +232,13 @@ export class UserRepository extends Repository<User> {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region Validators
|
//#region Validators
|
||||||
public validateUsername(username: string, remote = false): boolean {
|
public validateLocalUsername = $.str.match(/^\w{1,20}$/);
|
||||||
return typeof username == 'string' && (remote ? /^\w([\w-]*\w)?$/ : /^\w{1,20}$/).test(username);
|
public validateRemoteUsername = $.str.match(/^\w([\w-]*\w)?$/);
|
||||||
}
|
public validatePassword = $.str.min(1);
|
||||||
|
public validateName = $.str.min(1).max(50);
|
||||||
public validatePassword(password: string): boolean {
|
public validateDescription = $.str.min(1).max(500);
|
||||||
return typeof password == 'string' && password != '';
|
public validateLocation = $.str.min(1).max(50);
|
||||||
}
|
public validateBirthday = $.str.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/);
|
||||||
|
|
||||||
public isValidName(name?: string): boolean {
|
|
||||||
return name === null || (typeof name == 'string' && name.length < 50 && name.trim() != '');
|
|
||||||
}
|
|
||||||
|
|
||||||
public isValidDescription(description: string): boolean {
|
|
||||||
return typeof description == 'string' && description.length < 500 && description.trim() != '';
|
|
||||||
}
|
|
||||||
|
|
||||||
public isValidLocation(location: string): boolean {
|
|
||||||
return typeof location == 'string' && location.length < 50 && location.trim() != '';
|
|
||||||
}
|
|
||||||
|
|
||||||
public isValidBirthday(birthday: string): boolean {
|
|
||||||
return typeof birthday == 'string' && /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.test(birthday);
|
|
||||||
}
|
|
||||||
//#endregion
|
//#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,13 +53,15 @@ function validatePerson(x: any, uri: string) {
|
||||||
return new Error('invalid person: inbox is not a string');
|
return new Error('invalid person: inbox is not a string');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Users.validateUsername(x.preferredUsername, true)) {
|
if (!Users.validateRemoteUsername.ok(x.preferredUsername)) {
|
||||||
return new Error('invalid person: invalid username');
|
return new Error('invalid person: invalid username');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Users.isValidName(x.name == '' ? null : x.name)) {
|
if (x.name != null && x.name != '') {
|
||||||
|
if (!Users.validateName.ok(x.name)) {
|
||||||
return new Error('invalid person: invalid name');
|
return new Error('invalid person: invalid name');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof x.id !== 'string') {
|
if (typeof x.id !== 'string') {
|
||||||
return new Error('invalid person: id is not a string');
|
return new Error('invalid person: id is not a string');
|
||||||
|
|
|
@ -29,14 +29,14 @@ export const meta = {
|
||||||
|
|
||||||
params: {
|
params: {
|
||||||
name: {
|
name: {
|
||||||
validator: $.optional.nullable.str.pipe(Users.isValidName),
|
validator: $.optional.nullable.use(Users.validateName),
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': '名前(ハンドルネームやニックネーム)'
|
'ja-JP': '名前(ハンドルネームやニックネーム)'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
description: {
|
description: {
|
||||||
validator: $.optional.nullable.str.pipe(Users.isValidDescription),
|
validator: $.optional.nullable.use(Users.validateDescription),
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'アカウントの説明や自己紹介'
|
'ja-JP': 'アカウントの説明や自己紹介'
|
||||||
}
|
}
|
||||||
|
@ -50,14 +50,14 @@ export const meta = {
|
||||||
},
|
},
|
||||||
|
|
||||||
location: {
|
location: {
|
||||||
validator: $.optional.nullable.str.pipe(Users.isValidLocation),
|
validator: $.optional.nullable.use(Users.validateLocation),
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': '住んでいる地域、所在'
|
'ja-JP': '住んでいる地域、所在'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
birthday: {
|
birthday: {
|
||||||
validator: $.optional.nullable.str.pipe(Users.isValidBirthday),
|
validator: $.optional.nullable.use(Users.validateBirthday),
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': '誕生日 (YYYY-MM-DD形式)'
|
'ja-JP': '誕生日 (YYYY-MM-DD形式)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ export const meta = {
|
||||||
},
|
},
|
||||||
|
|
||||||
text: {
|
text: {
|
||||||
validator: $.optional.str.pipe(MessagingMessages.isValidText)
|
validator: $.optional.str.pipe(MessagingMessages.validateText)
|
||||||
},
|
},
|
||||||
|
|
||||||
fileId: {
|
fileId: {
|
||||||
|
|
|
@ -9,7 +9,7 @@ export const meta = {
|
||||||
|
|
||||||
params: {
|
params: {
|
||||||
username: {
|
username: {
|
||||||
validator: $.str.pipe(Users.validateUsername)
|
validator: $.use(Users.validateLocalUsername)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -66,7 +66,7 @@ export const meta = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export default define(meta, async (ps, me) => {
|
export default define(meta, async (ps, me) => {
|
||||||
const isUsername = Users.validateUsername(ps.query.replace('@', ''), !ps.localOnly);
|
const isUsername = ps.localOnly ? Users.validateLocalUsername.ok(ps.query.replace('@', '')) : Users.validateRemoteUsername.ok(ps.query.replace('@', ''));
|
||||||
|
|
||||||
let users: User[] = [];
|
let users: User[] = [];
|
||||||
|
|
||||||
|
|
|
@ -58,13 +58,13 @@ export default async (ctx: Koa.BaseContext) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate username
|
// Validate username
|
||||||
if (!Users.validateUsername(username)) {
|
if (!Users.validateLocalUsername.ok(username)) {
|
||||||
ctx.status = 400;
|
ctx.status = 400;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate password
|
// Validate password
|
||||||
if (!Users.validatePassword(password)) {
|
if (!Users.validatePassword.ok(password)) {
|
||||||
ctx.status = 400;
|
ctx.status = 400;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue