summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2021-02-19 21:42:47 +0900
committersyuilo <syuilotan@yahoo.co.jp>2021-02-19 21:42:47 +0900
commitd6c8b9b99470db45c201229b5c9235e7be3067de (patch)
tree01e5fccad6d84cf1e7f41e0a5e3aae955f3695e0 /src/server
parentMerge branch 'develop' (diff)
parent12.70.0 (diff)
downloadmisskey-d6c8b9b99470db45c201229b5c9235e7be3067de.tar.gz
misskey-d6c8b9b99470db45c201229b5c9235e7be3067de.tar.bz2
misskey-d6c8b9b99470db45c201229b5c9235e7be3067de.zip
Merge branch 'develop'
Diffstat (limited to 'src/server')
-rw-r--r--src/server/activitypub.ts3
-rw-r--r--src/server/activitypub/featured.ts3
-rw-r--r--src/server/activitypub/outbox.ts3
-rw-r--r--src/server/api/authenticate.ts3
-rw-r--r--src/server/api/common/inject-featured.ts3
-rw-r--r--src/server/api/common/inject-promo.ts5
-rw-r--r--src/server/api/endpoints/admin/federation/remove-all-following.ts5
-rw-r--r--src/server/api/endpoints/admin/send-email.ts2
-rw-r--r--src/server/api/endpoints/auth/accept.ts3
-rw-r--r--src/server/api/endpoints/auth/session/userkey.ts5
-rw-r--r--src/server/api/endpoints/i.ts3
-rw-r--r--src/server/api/endpoints/i/2fa/done.ts3
-rw-r--r--src/server/api/endpoints/i/2fa/key-done.ts3
-rw-r--r--src/server/api/endpoints/i/2fa/register-key.ts3
-rw-r--r--src/server/api/endpoints/i/2fa/register.ts3
-rw-r--r--src/server/api/endpoints/i/2fa/remove-key.ts3
-rw-r--r--src/server/api/endpoints/i/2fa/unregister.ts3
-rw-r--r--src/server/api/endpoints/i/change-password.ts3
-rw-r--r--src/server/api/endpoints/i/delete-account.ts3
-rw-r--r--src/server/api/endpoints/i/regenerate-token.ts3
-rw-r--r--src/server/api/endpoints/i/update-email.ts7
-rw-r--r--src/server/api/endpoints/i/update.ts10
-rw-r--r--src/server/api/endpoints/notes/delete.ts3
-rw-r--r--src/server/api/endpoints/notes/polls/vote.ts5
-rw-r--r--src/server/api/endpoints/notes/search.ts15
-rw-r--r--src/server/api/endpoints/room/show.ts3
-rw-r--r--src/server/api/private/signin.ts3
-rw-r--r--src/server/api/service/discord.ts13
-rw-r--r--src/server/api/service/github.ts13
-rw-r--r--src/server/api/service/twitter.ts13
-rw-r--r--src/server/web/feed.ts3
-rw-r--r--src/server/web/index.ts9
32 files changed, 76 insertions, 86 deletions
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index c665fe28ca..bf71258625 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -16,7 +16,6 @@ import { isSelfHost } from '../misc/convert-host';
import { Notes, Users, Emojis, UserKeypairs, NoteReactions } from '../models';
import { ILocalUser, User } from '../models/entities/user';
import { In } from 'typeorm';
-import { ensure } from '../prelude/ensure';
import { renderLike } from '../remote/activitypub/renderer/like';
// Init router
@@ -136,7 +135,7 @@ router.get('/users/:user/publickey', async ctx => {
return;
}
- const keypair = await UserKeypairs.findOne(user.id).then(ensure);
+ const keypair = await UserKeypairs.findOneOrFail(user.id);
if (Users.isLocalUser(user)) {
ctx.body = renderActivity(renderKey(user, keypair));
diff --git a/src/server/activitypub/featured.ts b/src/server/activitypub/featured.ts
index 80a7852f59..66ad2aa86e 100644
--- a/src/server/activitypub/featured.ts
+++ b/src/server/activitypub/featured.ts
@@ -5,7 +5,6 @@ import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-c
import { setResponseType } from '../activitypub';
import renderNote from '../../remote/activitypub/renderer/note';
import { Users, Notes, UserNotePinings } from '../../models';
-import { ensure } from '../../prelude/ensure';
export default async (ctx: Router.RouterContext) => {
const userId = ctx.params.user;
@@ -27,7 +26,7 @@ export default async (ctx: Router.RouterContext) => {
});
const pinnedNotes = await Promise.all(pinings.map(pining =>
- Notes.findOne(pining.noteId).then(ensure)));
+ Notes.findOneOrFail(pining.noteId)));
const renderedNotes = await Promise.all(pinnedNotes.map(note => renderNote(note)));
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index 03cf65bce6..3c1b07a679 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -15,7 +15,6 @@ import { Users, Notes } from '../../models';
import { makePaginationQuery } from '../api/common/make-pagination-query';
import { Brackets } from 'typeorm';
import { Note } from '../../models/entities/note';
-import { ensure } from '../../prelude/ensure';
export default async (ctx: Router.RouterContext) => {
const userId = ctx.params.user;
@@ -101,7 +100,7 @@ export default async (ctx: Router.RouterContext) => {
*/
export async function packActivity(note: Note): Promise<any> {
if (note.renoteId && note.text == null && !note.hasPoll && (note.fileIds == null || note.fileIds.length === 0)) {
- const renote = await Notes.findOne(note.renoteId).then(ensure);
+ const renote = await Notes.findOneOrFail(note.renoteId);
return renderAnnounce(renote.uri ? renote.uri : `${config.url}/notes/${renote.id}`, note);
}
diff --git a/src/server/api/authenticate.ts b/src/server/api/authenticate.ts
index 0785372b3b..0374ca35ea 100644
--- a/src/server/api/authenticate.ts
+++ b/src/server/api/authenticate.ts
@@ -1,7 +1,6 @@
import isNativeToken from './common/is-native-token';
import { User } from '../../models/entities/user';
import { Users, AccessTokens, Apps } from '../../models';
-import { ensure } from '../../prelude/ensure';
import { AccessToken } from '../../models/entities/access-token';
export default async (token: string): Promise<[User | null | undefined, AccessToken | null | undefined]> => {
@@ -43,7 +42,7 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo
if (accessToken.appId) {
const app = await Apps
- .findOne(accessToken.appId).then(ensure);
+ .findOneOrFail(accessToken.appId);
return [user, {
id: accessToken.id,
diff --git a/src/server/api/common/inject-featured.ts b/src/server/api/common/inject-featured.ts
index 098d20e72d..3f47c13385 100644
--- a/src/server/api/common/inject-featured.ts
+++ b/src/server/api/common/inject-featured.ts
@@ -3,7 +3,6 @@ import { Note } from '../../../models/entities/note';
import { User } from '../../../models/entities/user';
import { Notes, UserProfiles, NoteReactions } from '../../../models';
import { generateMutedUserQuery } from './generate-muted-user-query';
-import { ensure } from '../../../prelude/ensure';
// TODO: リアクション、Renote、返信などをしたノートは除外する
@@ -11,7 +10,7 @@ export async function injectFeatured(timeline: Note[], user?: User | null) {
if (timeline.length < 5) return;
if (user) {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
if (!profile.injectFeaturedNote) return;
}
diff --git a/src/server/api/common/inject-promo.ts b/src/server/api/common/inject-promo.ts
index f694ce6ea0..2c16ca4cf7 100644
--- a/src/server/api/common/inject-promo.ts
+++ b/src/server/api/common/inject-promo.ts
@@ -2,7 +2,6 @@ import rndstr from 'rndstr';
import { Note } from '../../../models/entities/note';
import { User } from '../../../models/entities/user';
import { PromoReads, PromoNotes, Notes, Users } from '../../../models';
-import { ensure } from '../../../prelude/ensure';
export async function injectPromo(timeline: Note[], user?: User | null) {
if (timeline.length < 5) return;
@@ -23,10 +22,10 @@ export async function injectPromo(timeline: Note[], user?: User | null) {
// Pick random promo
const promo = promos[Math.floor(Math.random() * promos.length)];
- const note = await Notes.findOne(promo.noteId).then(ensure);
+ const note = await Notes.findOneOrFail(promo.noteId);
// Join
- note.user = await Users.findOne(note.userId).then(ensure);
+ note.user = await Users.findOneOrFail(note.userId);
(note as any)._prId_ = rndstr('a-z0-9', 8);
diff --git a/src/server/api/endpoints/admin/federation/remove-all-following.ts b/src/server/api/endpoints/admin/federation/remove-all-following.ts
index 76497c0dd8..e593193552 100644
--- a/src/server/api/endpoints/admin/federation/remove-all-following.ts
+++ b/src/server/api/endpoints/admin/federation/remove-all-following.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import define from '../../../define';
import deleteFollowing from '../../../../../services/following/delete';
import { Followings, Users } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
export const meta = {
tags: ['admin'],
@@ -23,8 +22,8 @@ export default define(meta, async (ps, me) => {
});
const pairs = await Promise.all(followings.map(f => Promise.all([
- Users.findOne(f.followerId).then(ensure),
- Users.findOne(f.followeeId).then(ensure)
+ Users.findOneOrFail(f.followerId),
+ Users.findOneOrFail(f.followeeId)
])));
for (const pair of pairs) {
diff --git a/src/server/api/endpoints/admin/send-email.ts b/src/server/api/endpoints/admin/send-email.ts
index 9af931ad99..c0e77e1621 100644
--- a/src/server/api/endpoints/admin/send-email.ts
+++ b/src/server/api/endpoints/admin/send-email.ts
@@ -22,5 +22,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
- await sendEmail(ps.to, ps.subject, ps.text);
+ await sendEmail(ps.to, ps.subject, ps.text, ps.text);
});
diff --git a/src/server/api/endpoints/auth/accept.ts b/src/server/api/endpoints/auth/accept.ts
index e98242a3c3..6d4d31fa1e 100644
--- a/src/server/api/endpoints/auth/accept.ts
+++ b/src/server/api/endpoints/auth/accept.ts
@@ -4,7 +4,6 @@ import define from '../../define';
import { ApiError } from '../../error';
import { AuthSessions, AccessTokens, Apps } from '../../../../models';
import { genId } from '../../../../misc/gen-id';
-import { ensure } from '../../../../prelude/ensure';
import { secureRndstr } from '../../../../misc/secure-rndstr';
export const meta = {
@@ -49,7 +48,7 @@ export default define(meta, async (ps, user) => {
if (exist == null) {
// Lookup app
- const app = await Apps.findOne(session.appId).then(ensure);
+ const app = await Apps.findOneOrFail(session.appId);
// Generate Hash
const sha256 = crypto.createHash('sha256');
diff --git a/src/server/api/endpoints/auth/session/userkey.ts b/src/server/api/endpoints/auth/session/userkey.ts
index 7b474c8295..68d0c7bdf1 100644
--- a/src/server/api/endpoints/auth/session/userkey.ts
+++ b/src/server/api/endpoints/auth/session/userkey.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import define from '../../../define';
import { ApiError } from '../../../error';
import { Apps, AuthSessions, AccessTokens, Users } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
export const meta = {
tags: ['auth'],
@@ -92,10 +91,10 @@ export default define(meta, async (ps) => {
}
// Lookup access token
- const accessToken = await AccessTokens.findOne({
+ const accessToken = await AccessTokens.findOneOrFail({
appId: app.id,
userId: session.userId
- }).then(ensure);
+ });
// Delete session
AuthSessions.delete(session.id);
diff --git a/src/server/api/endpoints/i.ts b/src/server/api/endpoints/i.ts
index 3d0c092adb..e5b65e0930 100644
--- a/src/server/api/endpoints/i.ts
+++ b/src/server/api/endpoints/i.ts
@@ -1,6 +1,5 @@
import define from '../define';
import { RegistryItems, UserProfiles, Users } from '../../../models';
-import { ensure } from '../../../prelude/ensure';
import { genId } from '../../../misc/gen-id';
export const meta = {
@@ -25,7 +24,7 @@ export default define(meta, async (ps, user, token) => {
const isSecure = token == null;
// TODO: そのうち消す
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
for (const [k, v] of Object.entries(profile.clientData)) {
await RegistryItems.insert({
id: genId(),
diff --git a/src/server/api/endpoints/i/2fa/done.ts b/src/server/api/endpoints/i/2fa/done.ts
index 7d35f929e0..9a74d7675b 100644
--- a/src/server/api/endpoints/i/2fa/done.ts
+++ b/src/server/api/endpoints/i/2fa/done.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import * as speakeasy from 'speakeasy';
import define from '../../../define';
import { UserProfiles } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
export const meta = {
requireCredential: true as const,
@@ -19,7 +18,7 @@ export const meta = {
export default define(meta, async (ps, user) => {
const token = ps.token.replace(/\s/g, '');
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
if (profile.twoFactorTempSecret == null) {
throw new Error('二段階認証の設定が開始されていません');
diff --git a/src/server/api/endpoints/i/2fa/key-done.ts b/src/server/api/endpoints/i/2fa/key-done.ts
index 8ac165e629..4634944ca7 100644
--- a/src/server/api/endpoints/i/2fa/key-done.ts
+++ b/src/server/api/endpoints/i/2fa/key-done.ts
@@ -9,7 +9,6 @@ import {
AttestationChallenges,
Users
} from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
import config from '../../../../../config';
import { procedures, hash } from '../../../2fa';
import { publishMainStream } from '../../../../../services/stream';
@@ -43,7 +42,7 @@ export const meta = {
const rpIdHashReal = hash(Buffer.from(config.hostname, 'utf-8'));
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/2fa/register-key.ts b/src/server/api/endpoints/i/2fa/register-key.ts
index e189519a4c..d5cc11c7fb 100644
--- a/src/server/api/endpoints/i/2fa/register-key.ts
+++ b/src/server/api/endpoints/i/2fa/register-key.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles, AttestationChallenges } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
import { promisify } from 'util';
import * as crypto from 'crypto';
import { genId } from '../../../../../misc/gen-id';
@@ -23,7 +22,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/2fa/register.ts b/src/server/api/endpoints/i/2fa/register.ts
index 784b276a26..a39b2963e9 100644
--- a/src/server/api/endpoints/i/2fa/register.ts
+++ b/src/server/api/endpoints/i/2fa/register.ts
@@ -5,7 +5,6 @@ import * as QRCode from 'qrcode';
import config from '../../../../../config';
import define from '../../../define';
import { UserProfiles } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
export const meta = {
requireCredential: true as const,
@@ -20,7 +19,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/2fa/remove-key.ts b/src/server/api/endpoints/i/2fa/remove-key.ts
index 3eb92ba19d..135f0eb284 100644
--- a/src/server/api/endpoints/i/2fa/remove-key.ts
+++ b/src/server/api/endpoints/i/2fa/remove-key.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles, UserSecurityKeys, Users } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
import { publishMainStream } from '../../../../../services/stream';
export const meta = {
@@ -21,7 +20,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/2fa/unregister.ts b/src/server/api/endpoints/i/2fa/unregister.ts
index f1287b2dca..e809f40c71 100644
--- a/src/server/api/endpoints/i/2fa/unregister.ts
+++ b/src/server/api/endpoints/i/2fa/unregister.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles } from '../../../../../models';
-import { ensure } from '../../../../../prelude/ensure';
export const meta = {
requireCredential: true as const,
@@ -17,7 +16,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/change-password.ts b/src/server/api/endpoints/i/change-password.ts
index bc2ec3d7b5..0a8b86e665 100644
--- a/src/server/api/endpoints/i/change-password.ts
+++ b/src/server/api/endpoints/i/change-password.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../define';
import { UserProfiles } from '../../../../models';
-import { ensure } from '../../../../prelude/ensure';
export const meta = {
requireCredential: true as const,
@@ -21,7 +20,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.currentPassword, profile.password!);
diff --git a/src/server/api/endpoints/i/delete-account.ts b/src/server/api/endpoints/i/delete-account.ts
index 49a3349170..0f04c4c92d 100644
--- a/src/server/api/endpoints/i/delete-account.ts
+++ b/src/server/api/endpoints/i/delete-account.ts
@@ -2,7 +2,6 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../define';
import { Users, UserProfiles } from '../../../../models';
-import { ensure } from '../../../../prelude/ensure';
import { doPostSuspend } from '../../../../services/suspend-user';
export const meta = {
@@ -18,7 +17,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/regenerate-token.ts b/src/server/api/endpoints/i/regenerate-token.ts
index 5d322aa122..3596e20197 100644
--- a/src/server/api/endpoints/i/regenerate-token.ts
+++ b/src/server/api/endpoints/i/regenerate-token.ts
@@ -4,7 +4,6 @@ import { publishMainStream } from '../../../../services/stream';
import generateUserToken from '../../common/generate-native-user-token';
import define from '../../define';
import { Users, UserProfiles } from '../../../../models';
-import { ensure } from '../../../../prelude/ensure';
export const meta = {
requireCredential: true as const,
@@ -19,7 +18,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
diff --git a/src/server/api/endpoints/i/update-email.ts b/src/server/api/endpoints/i/update-email.ts
index 20d9703320..730918aebe 100644
--- a/src/server/api/endpoints/i/update-email.ts
+++ b/src/server/api/endpoints/i/update-email.ts
@@ -6,7 +6,6 @@ import config from '../../../../config';
import * as ms from 'ms';
import * as bcrypt from 'bcryptjs';
import { Users, UserProfiles } from '../../../../models';
-import { ensure } from '../../../../prelude/ensure';
import { sendEmail } from '../../../../services/send-email';
import { ApiError } from '../../error';
@@ -40,7 +39,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password!);
@@ -72,7 +71,9 @@ export default define(meta, async (ps, user) => {
const link = `${config.url}/verify-email/${code}`;
- sendEmail(ps.email, 'Email verification', `To verify email, please click this link: ${link}`);
+ sendEmail(ps.email, 'Email verification',
+ `To verify email, please click this link:<br><a href="${link}">${link}</a>`,
+ `To verify email, please click this link: ${link}`);
}
return iObj;
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index e4c0e8cec9..3d7f1fa76f 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -13,7 +13,6 @@ import { ApiError } from '../../error';
import { Users, DriveFiles, UserProfiles, Pages } from '../../../../models';
import { User } from '../../../../models/entities/user';
import { UserProfile } from '../../../../models/entities/user-profile';
-import { ensure } from '../../../../prelude/ensure';
import { notificationTypes } from '../../../../types';
import { normalizeForSearch } from '../../../../misc/normalize-for-search';
@@ -161,6 +160,10 @@ export const meta = {
mutingNotificationTypes: {
validator: $.optional.arr($.str.or(notificationTypes as unknown as string[]))
},
+
+ emailNotificationTypes: {
+ validator: $.optional.arr($.str)
+ },
},
errors: {
@@ -202,11 +205,11 @@ export default define(meta, async (ps, user, token) => {
const updates = {} as Partial<User>;
const profileUpdates = {} as Partial<UserProfile>;
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
if (ps.name !== undefined) updates.name = ps.name;
if (ps.description !== undefined) profileUpdates.description = ps.description;
- //if (ps.lang !== undefined) updates.lang = ps.lang;
+ if (ps.lang !== undefined) profileUpdates.lang = ps.lang;
if (ps.location !== undefined) profileUpdates.location = ps.location;
if (ps.birthday !== undefined) profileUpdates.birthday = ps.birthday;
if (ps.avatarId !== undefined) updates.avatarId = ps.avatarId;
@@ -226,6 +229,7 @@ export default define(meta, async (ps, user, token) => {
if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote;
if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail;
if (typeof ps.alwaysMarkNsfw === 'boolean') profileUpdates.alwaysMarkNsfw = ps.alwaysMarkNsfw;
+ if (ps.emailNotificationTypes !== undefined) profileUpdates.emailNotificationTypes = ps.emailNotificationTypes;
if (ps.avatarId) {
const avatar = await DriveFiles.findOne(ps.avatarId);
diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 65565ee3ab..5afd911ca9 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -6,7 +6,6 @@ import * as ms from 'ms';
import { getNote } from '../../common/getters';
import { ApiError } from '../../error';
import { Users } from '../../../../models';
-import { ensure } from '../../../../prelude/ensure';
export const meta = {
desc: {
@@ -62,5 +61,5 @@ export default define(meta, async (ps, user) => {
}
// この操作を行うのが投稿者とは限らない(例えばモデレーター)ため
- await deleteNote(await Users.findOne(note.userId).then(ensure), note);
+ await deleteNote(await Users.findOneOrFail(note.userId), note);
});
diff --git a/src/server/api/endpoints/notes/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts
index 1e6ab472cc..6113d7ea9a 100644
--- a/src/server/api/endpoints/notes/polls/vote.ts
+++ b/src/server/api/endpoints/notes/polls/vote.ts
@@ -13,7 +13,6 @@ import { PollVotes, NoteWatchings, Users, Polls } from '../../../../../models';
import { Not } from 'typeorm';
import { IRemoteUser } from '../../../../../models/entities/user';
import { genId } from '../../../../../misc/gen-id';
-import { ensure } from '../../../../../prelude/ensure';
export const meta = {
desc: {
@@ -87,7 +86,7 @@ export default define(meta, async (ps, user) => {
throw new ApiError(meta.errors.noPoll);
}
- const poll = await Polls.findOne({ noteId: note.id }).then(ensure);
+ const poll = await Polls.findOneOrFail({ noteId: note.id });
if (poll.expiresAt && poll.expiresAt < createdAt) {
throw new ApiError(meta.errors.alreadyExpired);
@@ -153,7 +152,7 @@ export default define(meta, async (ps, user) => {
// リモート投票の場合リプライ送信
if (note.userHost != null) {
- const pollOwner = await Users.findOne(note.userId).then(ensure) as IRemoteUser;
+ const pollOwner = await Users.findOneOrFail(note.userId) as IRemoteUser;
deliver(user, renderActivity(await renderVote(user, vote, note, poll, pollOwner)), pollOwner.inbox);
}
diff --git a/src/server/api/endpoints/notes/search.ts b/src/server/api/endpoints/notes/search.ts
index 2c75d2a55a..1aca056299 100644
--- a/src/server/api/endpoints/notes/search.ts
+++ b/src/server/api/endpoints/notes/search.ts
@@ -46,6 +46,11 @@ export const meta = {
validator: $.optional.nullable.type(ID),
default: null
},
+
+ channelId: {
+ validator: $.optional.nullable.type(ID),
+ default: null
+ },
},
res: {
@@ -64,7 +69,15 @@ export const meta = {
export default define(meta, async (ps, me) => {
if (es == null) {
- const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
+ const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId);
+
+ if (ps.userId) {
+ query.andWhere('note.userId = :userId', { userId: ps.userId });
+ } else if (ps.channelId) {
+ query.andWhere('note.channelId = :channelId', { channelId: ps.channelId });
+ }
+
+ query
.andWhere('note.text ILIKE :q', { q: `%${ps.query}%` })
.leftJoinAndSelect('note.user', 'user');
diff --git a/src/server/api/endpoints/room/show.ts b/src/server/api/endpoints/room/show.ts
index 96248a8c0c..e8af68956d 100644
--- a/src/server/api/endpoints/room/show.ts
+++ b/src/server/api/endpoints/room/show.ts
@@ -3,7 +3,6 @@ import define from '../../define';
import { ApiError } from '../../error';
import { Users, UserProfiles } from '../../../../models';
import { ID } from '../../../../misc/cafy-id';
-import { ensure } from '../../../../prelude/ensure';
import { toPunyNullable } from '../../../../misc/convert-host';
export const meta = {
@@ -51,7 +50,7 @@ export default define(meta, async (ps, me) => {
throw new ApiError(meta.errors.noSuchUser);
}
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
if (profile.room.furnitures == null) {
await UserProfiles.update(user.id, {
diff --git a/src/server/api/private/signin.ts b/src/server/api/private/signin.ts
index 734758d63d..7a5efc6cc9 100644
--- a/src/server/api/private/signin.ts
+++ b/src/server/api/private/signin.ts
@@ -6,7 +6,6 @@ import config from '../../../config';
import { Users, Signins, UserProfiles, UserSecurityKeys, AttestationChallenges } from '../../../models';
import { ILocalUser } from '../../../models/entities/user';
import { genId } from '../../../misc/gen-id';
-import { ensure } from '../../../prelude/ensure';
import { verifyLogin, hash } from '../2fa';
import { randomBytes } from 'crypto';
@@ -47,7 +46,7 @@ export default async (ctx: Koa.Context) => {
return;
}
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
const same = await bcrypt.compare(password, profile.password!);
diff --git a/src/server/api/service/discord.ts b/src/server/api/service/discord.ts
index 007458066d..fce840cde5 100644
--- a/src/server/api/service/discord.ts
+++ b/src/server/api/service/discord.ts
@@ -10,7 +10,6 @@ import signin from '../common/signin';
import { fetchMeta } from '../../../misc/fetch-meta';
import { Users, UserProfiles } from '../../../models';
import { ILocalUser } from '../../../models/entities/user';
-import { ensure } from '../../../prelude/ensure';
function getUserToken(ctx: Koa.Context) {
return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
@@ -41,12 +40,12 @@ router.get('/disconnect/discord', async ctx => {
return;
}
- const user = await Users.findOne({
+ const user = await Users.findOneOrFail({
host: null,
token: userToken
- }).then(ensure);
+ });
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
delete profile.integrations.discord;
@@ -253,12 +252,12 @@ router.get('/dc/cb', async ctx => {
return;
}
- const user = await Users.findOne({
+ const user = await Users.findOneOrFail({
host: null,
token: userToken
- }).then(ensure);
+ });
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
await UserProfiles.update(user.id, {
integrations: {
diff --git a/src/server/api/service/github.ts b/src/server/api/service/github.ts
index 663c3cc754..2b10fa02a0 100644
--- a/src/server/api/service/github.ts
+++ b/src/server/api/service/github.ts
@@ -10,7 +10,6 @@ import signin from '../common/signin';
import { fetchMeta } from '../../../misc/fetch-meta';
import { Users, UserProfiles } from '../../../models';
import { ILocalUser } from '../../../models/entities/user';
-import { ensure } from '../../../prelude/ensure';
function getUserToken(ctx: Koa.Context) {
return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
@@ -41,12 +40,12 @@ router.get('/disconnect/github', async ctx => {
return;
}
- const user = await Users.findOne({
+ const user = await Users.findOneOrFail({
host: null,
token: userToken
- }).then(ensure);
+ });
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
delete profile.integrations.github;
@@ -227,12 +226,12 @@ router.get('/gh/cb', async ctx => {
return;
}
- const user = await Users.findOne({
+ const user = await Users.findOneOrFail({
host: null,
token: userToken
- }).then(ensure);
+ });
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
await UserProfiles.update(user.id, {
integrations: {
diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts
index 000eb57c1b..97e9d3a7fc 100644
--- a/src/server/api/service/twitter.ts
+++ b/src/server/api/service/twitter.ts
@@ -9,7 +9,6 @@ import signin from '../common/signin';
import { fetchMeta } from '../../../misc/fetch-meta';
import { Users, UserProfiles } from '../../../models';
import { ILocalUser } from '../../../models/entities/user';
-import { ensure } from '../../../prelude/ensure';
function getUserToken(ctx: Koa.Context) {
return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
@@ -40,12 +39,12 @@ router.get('/disconnect/twitter', async ctx => {
return;
}
- const user = await Users.findOne({
+ const user = await Users.findOneOrFail({
host: null,
token: userToken
- }).then(ensure);
+ });
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
delete profile.integrations.twitter;
@@ -163,12 +162,12 @@ router.get('/tw/cb', async ctx => {
const result = await twAuth!.done(JSON.parse(twCtx), verifier);
- const user = await Users.findOne({
+ const user = await Users.findOneOrFail({
host: null,
token: userToken
- }).then(ensure);
+ });
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
await UserProfiles.update(user.id, {
integrations: {
diff --git a/src/server/web/feed.ts b/src/server/web/feed.ts
index 9c7591d744..6078fbe0f3 100644
--- a/src/server/web/feed.ts
+++ b/src/server/web/feed.ts
@@ -3,7 +3,6 @@ import config from '../../config';
import { User } from '../../models/entities/user';
import { Notes, DriveFiles, UserProfiles } from '../../models';
import { In } from 'typeorm';
-import { ensure } from '../../prelude/ensure';
export default async function(user: User) {
const author = {
@@ -11,7 +10,7 @@ export default async function(user: User) {
name: user.name || user.username
};
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
const notes = await Notes.find({
where: {
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index f3442c6199..8ea7e15751 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -20,7 +20,6 @@ import config from '../../config';
import { Users, Notes, Emojis, UserProfiles, Pages, Channels, Clips } from '../../models';
import parseAcct from '../../misc/acct/parse';
import { getNoteSummary } from '../../misc/get-note-summary';
-import { ensure } from '../../prelude/ensure';
import { getConnection } from 'typeorm';
import redis from '../../db/redis';
import locales = require('../../../locales');
@@ -199,7 +198,7 @@ router.get(['/@:user', '/@:user/:sub'], async (ctx, next) => {
});
if (user != null) {
- const profile = await UserProfiles.findOne(user.id).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(user.id);
const meta = await fetchMeta();
const me = profile.fields
? profile.fields
@@ -242,7 +241,7 @@ router.get('/notes/:note', async ctx => {
if (note) {
const _note = await Notes.pack(note);
- const profile = await UserProfiles.findOne(note.userId).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(note.userId);
const meta = await fetchMeta();
await ctx.render('note', {
note: _note,
@@ -282,7 +281,7 @@ router.get('/@:user/pages/:page', async ctx => {
if (page) {
const _page = await Pages.pack(page);
- const profile = await UserProfiles.findOne(page.userId).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(page.userId);
const meta = await fetchMeta();
await ctx.render('page', {
page: _page,
@@ -311,7 +310,7 @@ router.get('/clips/:clip', async ctx => {
if (clip) {
const _clip = await Clips.pack(clip);
- const profile = await UserProfiles.findOne(clip.userId).then(ensure);
+ const profile = await UserProfiles.findOneOrFail(clip.userId);
const meta = await fetchMeta();
await ctx.render('clip', {
clip: _clip,