summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/i
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints/i')
-rw-r--r--src/server/api/endpoints/i/2fa/done.ts2
-rw-r--r--src/server/api/endpoints/i/2fa/register.ts2
-rw-r--r--src/server/api/endpoints/i/2fa/unregister.ts2
-rw-r--r--src/server/api/endpoints/i/authorized_apps.ts10
-rw-r--r--src/server/api/endpoints/i/change_password.ts8
-rw-r--r--src/server/api/endpoints/i/favorites.ts63
-rw-r--r--src/server/api/endpoints/i/notifications.ts18
-rw-r--r--src/server/api/endpoints/i/pin.ts8
-rw-r--r--src/server/api/endpoints/i/regenerate_token.ts6
-rw-r--r--src/server/api/endpoints/i/signin_history.ts12
-rw-r--r--src/server/api/endpoints/i/update.ts41
-rw-r--r--src/server/api/endpoints/i/update_client_setting.ts27
-rw-r--r--src/server/api/endpoints/i/update_home.ts18
-rw-r--r--src/server/api/endpoints/i/update_mobile_home.ts15
14 files changed, 119 insertions, 113 deletions
diff --git a/src/server/api/endpoints/i/2fa/done.ts b/src/server/api/endpoints/i/2fa/done.ts
index 3e824feffd..1a2706aa84 100644
--- a/src/server/api/endpoints/i/2fa/done.ts
+++ b/src/server/api/endpoints/i/2fa/done.ts
@@ -7,7 +7,7 @@ import User from '../../../../../models/user';
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'token' parameter
- const [token, tokenErr] = $(params.token).string().$;
+ const [token, tokenErr] = $.str.get(params.token);
if (tokenErr) return rej('invalid token param');
const _token = token.replace(/\s/g, '');
diff --git a/src/server/api/endpoints/i/2fa/register.ts b/src/server/api/endpoints/i/2fa/register.ts
index bed64a2545..d314e1a280 100644
--- a/src/server/api/endpoints/i/2fa/register.ts
+++ b/src/server/api/endpoints/i/2fa/register.ts
@@ -10,7 +10,7 @@ import config from '../../../../../config';
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'password' parameter
- const [password, passwordErr] = $(params.password).string().$;
+ const [password, passwordErr] = $.str.get(params.password);
if (passwordErr) return rej('invalid password param');
// Compare password
diff --git a/src/server/api/endpoints/i/2fa/unregister.ts b/src/server/api/endpoints/i/2fa/unregister.ts
index f9d7a25f53..336a3564ab 100644
--- a/src/server/api/endpoints/i/2fa/unregister.ts
+++ b/src/server/api/endpoints/i/2fa/unregister.ts
@@ -7,7 +7,7 @@ import User from '../../../../../models/user';
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'password' parameter
- const [password, passwordErr] = $(params.password).string().$;
+ const [password, passwordErr] = $.str.get(params.password);
if (passwordErr) return rej('invalid password param');
// Compare password
diff --git a/src/server/api/endpoints/i/authorized_apps.ts b/src/server/api/endpoints/i/authorized_apps.ts
index 82fd2d2516..d15bd67bf2 100644
--- a/src/server/api/endpoints/i/authorized_apps.ts
+++ b/src/server/api/endpoints/i/authorized_apps.ts
@@ -7,22 +7,18 @@ import { pack } from '../../../../models/app';
/**
* Get authorized apps of my account
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
*/
module.exports = (params, user) => new Promise(async (res, rej) => {
// Get 'limit' parameter
- const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$;
+ const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit);
if (limitErr) return rej('invalid limit param');
// Get 'offset' parameter
- const [offset = 0, offsetErr] = $(params.offset).optional.number().min(0).$;
+ const [offset = 0, offsetErr] = $.num.optional().min(0).get(params.offset);
if (offsetErr) return rej('invalid offset param');
// Get 'sort' parameter
- const [sort = 'desc', sortError] = $(params.sort).optional.string().or('desc asc').$;
+ const [sort = 'desc', sortError] = $.str.optional().or('desc asc').get(params.sort);
if (sortError) return rej('invalid sort param');
// Get tokens
diff --git a/src/server/api/endpoints/i/change_password.ts b/src/server/api/endpoints/i/change_password.ts
index 57415083f1..a1a1a43406 100644
--- a/src/server/api/endpoints/i/change_password.ts
+++ b/src/server/api/endpoints/i/change_password.ts
@@ -7,18 +7,14 @@ import User from '../../../../models/user';
/**
* Change password
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
*/
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'currentPasword' parameter
- const [currentPassword, currentPasswordErr] = $(params.currentPasword).string().$;
+ const [currentPassword, currentPasswordErr] = $.str.get(params.currentPasword);
if (currentPasswordErr) return rej('invalid currentPasword param');
// Get 'newPassword' parameter
- const [newPassword, newPasswordErr] = $(params.newPassword).string().$;
+ const [newPassword, newPasswordErr] = $.str.get(params.newPassword);
if (newPasswordErr) return rej('invalid newPassword param');
// Compare password
diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts
index b40f2b3887..23517baaff 100644
--- a/src/server/api/endpoints/i/favorites.ts
+++ b/src/server/api/endpoints/i/favorites.ts
@@ -1,44 +1,53 @@
/**
* Module dependencies
*/
-import $ from 'cafy';
-import Favorite from '../../../../models/favorite';
-import { pack } from '../../../../models/note';
+import $ from 'cafy'; import ID from '../../../../cafy-id';
+import Favorite, { pack } from '../../../../models/favorite';
/**
- * Get followers of a user
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
+ * Get favorited notes
*/
module.exports = (params, user) => new Promise(async (res, rej) => {
// Get 'limit' parameter
- const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$;
+ const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit);
if (limitErr) return rej('invalid limit param');
- // Get 'offset' parameter
- const [offset = 0, offsetErr] = $(params.offset).optional.number().min(0).$;
- if (offsetErr) return rej('invalid offset param');
+ // Get 'sinceId' parameter
+ const [sinceId, sinceIdErr] = $.type(ID).optional().get(params.sinceId);
+ if (sinceIdErr) return rej('invalid sinceId param');
- // Get 'sort' parameter
- const [sort = 'desc', sortError] = $(params.sort).optional.string().or('desc asc').$;
- if (sortError) return rej('invalid sort param');
+ // Get 'untilId' parameter
+ const [untilId, untilIdErr] = $.type(ID).optional().get(params.untilId);
+ if (untilIdErr) return rej('invalid untilId param');
+
+ // Check if both of sinceId and untilId is specified
+ if (sinceId && untilId) {
+ return rej('cannot set sinceId and untilId');
+ }
+
+ const query = {
+ userId: user._id
+ } as any;
+
+ const sort = {
+ _id: -1
+ };
+
+ if (sinceId) {
+ sort._id = 1;
+ query._id = {
+ $gt: sinceId
+ };
+ } else if (untilId) {
+ query._id = {
+ $lt: untilId
+ };
+ }
// Get favorites
const favorites = await Favorite
- .find({
- userId: user._id
- }, {
- limit: limit,
- skip: offset,
- sort: {
- _id: sort == 'asc' ? 1 : -1
- }
- });
+ .find(query, { limit, sort });
// Serialize
- res(await Promise.all(favorites.map(async favorite =>
- await pack(favorite.noteId)
- )));
+ res(await Promise.all(favorites.map(favorite => pack(favorite, user))));
});
diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts
index 3b4899682d..50ed9b27e8 100644
--- a/src/server/api/endpoints/i/notifications.ts
+++ b/src/server/api/endpoints/i/notifications.ts
@@ -1,11 +1,11 @@
/**
* Module dependencies
*/
-import $ from 'cafy';
+import $ from 'cafy'; import ID from '../../../../cafy-id';
import Notification from '../../../../models/notification';
import Mute from '../../../../models/mute';
import { pack } from '../../../../models/notification';
-import getFriends from '../../common/get-friends';
+import { getFriendIds } from '../../common/get-friends';
import read from '../../common/read-notification';
/**
@@ -14,27 +14,27 @@ import read from '../../common/read-notification';
module.exports = (params, user) => new Promise(async (res, rej) => {
// Get 'following' parameter
const [following = false, followingError] =
- $(params.following).optional.boolean().$;
+ $.bool.optional().get(params.following);
if (followingError) return rej('invalid following param');
// Get 'markAsRead' parameter
- const [markAsRead = true, markAsReadErr] = $(params.markAsRead).optional.boolean().$;
+ const [markAsRead = true, markAsReadErr] = $.bool.optional().get(params.markAsRead);
if (markAsReadErr) return rej('invalid markAsRead param');
// Get 'type' parameter
- const [type, typeErr] = $(params.type).optional.array('string').unique().$;
+ const [type, typeErr] = $.arr($.str).optional().unique().get(params.type);
if (typeErr) return rej('invalid type param');
// Get 'limit' parameter
- const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$;
+ const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit);
if (limitErr) return rej('invalid limit param');
// Get 'sinceId' parameter
- const [sinceId, sinceIdErr] = $(params.sinceId).optional.id().$;
+ const [sinceId, sinceIdErr] = $.type(ID).optional().get(params.sinceId);
if (sinceIdErr) return rej('invalid sinceId param');
// Get 'untilId' parameter
- const [untilId, untilIdErr] = $(params.untilId).optional.id().$;
+ const [untilId, untilIdErr] = $.type(ID).optional().get(params.untilId);
if (untilIdErr) return rej('invalid untilId param');
// Check if both of sinceId and untilId is specified
@@ -62,7 +62,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
if (following) {
// ID list of the user itself and other users who the user follows
- const followingIds = await getFriends(user._id);
+ const followingIds = await getFriendIds(user._id);
query.$and.push({
notifierId: {
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index 909a6fdbde..423f0ac4ae 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -1,21 +1,17 @@
/**
* Module dependencies
*/
-import $ from 'cafy';
+import $ from 'cafy'; import ID from '../../../../cafy-id';
import User from '../../../../models/user';
import Note from '../../../../models/note';
import { pack } from '../../../../models/user';
/**
* Pin note
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
*/
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'noteId' parameter
- const [noteId, noteIdErr] = $(params.noteId).id().$;
+ const [noteId, noteIdErr] = $.type(ID).get(params.noteId);
if (noteIdErr) return rej('invalid noteId param');
// Fetch pinee
diff --git a/src/server/api/endpoints/i/regenerate_token.ts b/src/server/api/endpoints/i/regenerate_token.ts
index f9e92c1797..6e1e571297 100644
--- a/src/server/api/endpoints/i/regenerate_token.ts
+++ b/src/server/api/endpoints/i/regenerate_token.ts
@@ -9,14 +9,10 @@ import generateUserToken from '../../common/generate-native-user-token';
/**
* Regenerate native token
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
*/
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'password' parameter
- const [password, passwordErr] = $(params.password).string().$;
+ const [password, passwordErr] = $.str.get(params.password);
if (passwordErr) return rej('invalid password param');
// Compare password
diff --git a/src/server/api/endpoints/i/signin_history.ts b/src/server/api/endpoints/i/signin_history.ts
index 931b9e2252..63a74b41b1 100644
--- a/src/server/api/endpoints/i/signin_history.ts
+++ b/src/server/api/endpoints/i/signin_history.ts
@@ -1,27 +1,23 @@
/**
* Module dependencies
*/
-import $ from 'cafy';
+import $ from 'cafy'; import ID from '../../../../cafy-id';
import Signin, { pack } from '../../../../models/signin';
/**
* Get signin history of my account
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
*/
module.exports = (params, user) => new Promise(async (res, rej) => {
// Get 'limit' parameter
- const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$;
+ const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit);
if (limitErr) return rej('invalid limit param');
// Get 'sinceId' parameter
- const [sinceId, sinceIdErr] = $(params.sinceId).optional.id().$;
+ const [sinceId, sinceIdErr] = $.type(ID).optional().get(params.sinceId);
if (sinceIdErr) return rej('invalid sinceId param');
// Get 'untilId' parameter
- const [untilId, untilIdErr] = $(params.untilId).optional.id().$;
+ const [untilId, untilIdErr] = $.type(ID).optional().get(params.untilId);
if (untilIdErr) return rej('invalid untilId param');
// Check if both of sinceId and untilId is specified
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index f3c9d777b5..b7b25d0f65 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -1,9 +1,10 @@
/**
* Module dependencies
*/
-import $ from 'cafy';
+import $ from 'cafy'; import ID from '../../../../cafy-id';
import User, { isValidName, isValidDescription, isValidLocation, isValidBirthday, pack } from '../../../../models/user';
import event from '../../../../publishers/stream';
+import DriveFile from '../../../../models/drive-file';
/**
* Update myself
@@ -12,51 +13,73 @@ module.exports = async (params, user, app) => new Promise(async (res, rej) => {
const isSecure = user != null && app == null;
// Get 'name' parameter
- const [name, nameErr] = $(params.name).optional.nullable.string().pipe(isValidName).$;
+ const [name, nameErr] = $.str.optional().nullable().pipe(isValidName).get(params.name);
if (nameErr) return rej('invalid name param');
if (name) user.name = name;
// Get 'description' parameter
- const [description, descriptionErr] = $(params.description).optional.nullable.string().pipe(isValidDescription).$;
+ const [description, descriptionErr] = $.str.optional().nullable().pipe(isValidDescription).get(params.description);
if (descriptionErr) return rej('invalid description param');
if (description !== undefined) user.description = description;
// Get 'location' parameter
- const [location, locationErr] = $(params.location).optional.nullable.string().pipe(isValidLocation).$;
+ const [location, locationErr] = $.str.optional().nullable().pipe(isValidLocation).get(params.location);
if (locationErr) return rej('invalid location param');
if (location !== undefined) user.profile.location = location;
// Get 'birthday' parameter
- const [birthday, birthdayErr] = $(params.birthday).optional.nullable.string().pipe(isValidBirthday).$;
+ const [birthday, birthdayErr] = $.str.optional().nullable().pipe(isValidBirthday).get(params.birthday);
if (birthdayErr) return rej('invalid birthday param');
if (birthday !== undefined) user.profile.birthday = birthday;
// Get 'avatarId' parameter
- const [avatarId, avatarIdErr] = $(params.avatarId).optional.id().$;
+ const [avatarId, avatarIdErr] = $.type(ID).optional().get(params.avatarId);
if (avatarIdErr) return rej('invalid avatarId param');
if (avatarId) user.avatarId = avatarId;
// Get 'bannerId' parameter
- const [bannerId, bannerIdErr] = $(params.bannerId).optional.id().$;
+ const [bannerId, bannerIdErr] = $.type(ID).optional().get(params.bannerId);
if (bannerIdErr) return rej('invalid bannerId param');
if (bannerId) user.bannerId = bannerId;
// Get 'isBot' parameter
- const [isBot, isBotErr] = $(params.isBot).optional.boolean().$;
+ const [isBot, isBotErr] = $.bool.optional().get(params.isBot);
if (isBotErr) return rej('invalid isBot param');
if (isBot != null) user.isBot = isBot;
// Get 'autoWatch' parameter
- const [autoWatch, autoWatchErr] = $(params.autoWatch).optional.boolean().$;
+ const [autoWatch, autoWatchErr] = $.bool.optional().get(params.autoWatch);
if (autoWatchErr) return rej('invalid autoWatch param');
if (autoWatch != null) user.settings.autoWatch = autoWatch;
+ if (avatarId) {
+ const avatar = await DriveFile.findOne({
+ _id: avatarId
+ });
+
+ if (avatar != null && avatar.metadata.properties.avgColor) {
+ user.avatarColor = avatar.metadata.properties.avgColor;
+ }
+ }
+
+ if (bannerId) {
+ const banner = await DriveFile.findOne({
+ _id: bannerId
+ });
+
+ if (banner != null && banner.metadata.properties.avgColor) {
+ user.bannerColor = banner.metadata.properties.avgColor;
+ }
+ }
+
await User.update(user._id, {
$set: {
name: user.name,
description: user.description,
avatarId: user.avatarId,
+ avatarColor: user.avatarColor,
bannerId: user.bannerId,
+ bannerColor: user.bannerColor,
profile: user.profile,
isBot: user.isBot,
settings: user.settings
diff --git a/src/server/api/endpoints/i/update_client_setting.ts b/src/server/api/endpoints/i/update_client_setting.ts
index b0d5db5ec2..e91d7565fd 100644
--- a/src/server/api/endpoints/i/update_client_setting.ts
+++ b/src/server/api/endpoints/i/update_client_setting.ts
@@ -2,23 +2,19 @@
* Module dependencies
*/
import $ from 'cafy';
-import User, { pack } from '../../../../models/user';
+import User from '../../../../models/user';
import event from '../../../../publishers/stream';
/**
* Update myself
- *
- * @param {any} params
- * @param {any} user
- * @return {Promise<any>}
*/
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'name' parameter
- const [name, nameErr] = $(params.name).string().$;
+ const [name, nameErr] = $.str.get(params.name);
if (nameErr) return rej('invalid name param');
// Get 'value' parameter
- const [value, valueErr] = $(params.value).nullable.any().$;
+ const [value, valueErr] = $.any.nullable().get(params.value);
if (valueErr) return rej('invalid value param');
const x = {};
@@ -28,16 +24,11 @@ module.exports = async (params, user) => new Promise(async (res, rej) => {
$set: x
});
- // Serialize
- user.clientSettings[name] = value;
- const iObj = await pack(user, user, {
- detail: true,
- includeSecrets: true
- });
-
- // Send response
- res(iObj);
+ res();
- // Publish i updated event
- event(user._id, 'i_updated', iObj);
+ // Publish event
+ event(user._id, 'clientSettingUpdated', {
+ key: name,
+ value
+ });
});
diff --git a/src/server/api/endpoints/i/update_home.ts b/src/server/api/endpoints/i/update_home.ts
index ce7661ede0..8ce551957e 100644
--- a/src/server/api/endpoints/i/update_home.ts
+++ b/src/server/api/endpoints/i/update_home.ts
@@ -7,20 +7,22 @@ import event from '../../../../publishers/stream';
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'home' parameter
- const [home, homeErr] = $(params.home).optional.array().each(
- $().strict.object()
- .have('name', $().string())
- .have('id', $().string())
- .have('place', $().string())
- .have('data', $().object())).$;
+ const [home, homeErr] = $.arr(
+ $.obj.strict()
+ .have('name', $.str)
+ .have('id', $.str)
+ .have('place', $.str)
+ .have('data', $.obj))
+ .optional()
+ .get(params.home);
if (homeErr) return rej('invalid home param');
// Get 'id' parameter
- const [id, idErr] = $(params.id).optional.string().$;
+ const [id, idErr] = $.str.optional().get(params.id);
if (idErr) return rej('invalid id param');
// Get 'data' parameter
- const [data, dataErr] = $(params.data).optional.object().$;
+ const [data, dataErr] = $.obj.optional().get(params.data);
if (dataErr) return rej('invalid data param');
if (home) {
diff --git a/src/server/api/endpoints/i/update_mobile_home.ts b/src/server/api/endpoints/i/update_mobile_home.ts
index b710e2f330..d79a77072b 100644
--- a/src/server/api/endpoints/i/update_mobile_home.ts
+++ b/src/server/api/endpoints/i/update_mobile_home.ts
@@ -7,19 +7,20 @@ import event from '../../../../publishers/stream';
module.exports = async (params, user) => new Promise(async (res, rej) => {
// Get 'home' parameter
- const [home, homeErr] = $(params.home).optional.array().each(
- $().strict.object()
- .have('name', $().string())
- .have('id', $().string())
- .have('data', $().object())).$;
+ const [home, homeErr] = $.arr(
+ $.obj.strict()
+ .have('name', $.str)
+ .have('id', $.str)
+ .have('data', $.obj))
+ .optional().get(params.home);
if (homeErr) return rej('invalid home param');
// Get 'id' parameter
- const [id, idErr] = $(params.id).optional.string().$;
+ const [id, idErr] = $.str.optional().get(params.id);
if (idErr) return rej('invalid id param');
// Get 'data' parameter
- const [data, dataErr] = $(params.data).optional.object().$;
+ const [data, dataErr] = $.obj.optional().get(params.data);
if (dataErr) return rej('invalid data param');
if (home) {