57
src/server/api/endpoints/admin/reset-password.ts
Normal file
57
src/server/api/endpoints/admin/reset-password.ts
Normal file
@ -0,0 +1,57 @@
|
||||
import $ from 'cafy';
|
||||
import ID, { transform } from '../../../../misc/cafy-id';
|
||||
import define from '../../define';
|
||||
import User from '../../../../models/user';
|
||||
import * as bcrypt from 'bcryptjs';
|
||||
import rndstr from 'rndstr';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
'ja-JP': '指定したユーザーのパスワードをリセットします。',
|
||||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
validator: $.type(ID),
|
||||
transform: transform,
|
||||
desc: {
|
||||
'ja-JP': '対象のユーザーID',
|
||||
'en-US': 'The user ID which you want to suspend'
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps) => new Promise(async (res, rej) => {
|
||||
const user = await User.findOne({
|
||||
_id: ps.userId
|
||||
});
|
||||
|
||||
if (user == null) {
|
||||
return rej('user not found');
|
||||
}
|
||||
|
||||
if (user.isAdmin) {
|
||||
return rej('cannot reset password of admin');
|
||||
}
|
||||
|
||||
const passwd = rndstr('a-zA-Z0-9', 8);
|
||||
|
||||
// Generate hash of password
|
||||
const hash = bcrypt.hashSync(passwd);
|
||||
|
||||
await User.findOneAndUpdate({
|
||||
_id: user._id
|
||||
}, {
|
||||
$set: {
|
||||
password: hash
|
||||
}
|
||||
});
|
||||
|
||||
res({
|
||||
password: passwd
|
||||
});
|
||||
}));
|
40
src/server/api/endpoints/admin/show-user.ts
Normal file
40
src/server/api/endpoints/admin/show-user.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import $ from 'cafy';
|
||||
import ID, { transform } from '../../../../misc/cafy-id';
|
||||
import define from '../../define';
|
||||
import User from '../../../../models/user';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
'ja-JP': '指定したユーザーの情報を取得します。',
|
||||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
validator: $.type(ID),
|
||||
transform: transform,
|
||||
desc: {
|
||||
'ja-JP': '対象のユーザーID',
|
||||
'en-US': 'The user ID which you want to suspend'
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
||||
const user = await User.findOne({
|
||||
_id: ps.userId
|
||||
});
|
||||
|
||||
if (user == null) {
|
||||
return rej('user not found');
|
||||
}
|
||||
|
||||
if (me.isModerator && user.isAdmin) {
|
||||
return rej('cannot show info of admin');
|
||||
}
|
||||
|
||||
res(user);
|
||||
}));
|
@ -17,7 +17,23 @@ export const meta = {
|
||||
},
|
||||
|
||||
sort: {
|
||||
validator: $.str.optional.or('+follower|-follower'),
|
||||
validator: $.str.optional.or([
|
||||
'+follower',
|
||||
'-follower',
|
||||
'+createdAt',
|
||||
'-createdAt',
|
||||
'+updatedAt',
|
||||
'-updatedAt',
|
||||
]),
|
||||
},
|
||||
|
||||
origin: {
|
||||
validator: $.str.optional.or([
|
||||
'combined',
|
||||
'local',
|
||||
'remote',
|
||||
]),
|
||||
default: 'local'
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -33,6 +49,22 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
||||
_sort = {
|
||||
followersCount: 1
|
||||
};
|
||||
} else if (ps.sort == '+createdAt') {
|
||||
_sort = {
|
||||
createdAt: -1
|
||||
};
|
||||
} else if (ps.sort == '+updatedAt') {
|
||||
_sort = {
|
||||
updatedAt: -1
|
||||
};
|
||||
} else if (ps.sort == '-createdAt') {
|
||||
_sort = {
|
||||
createdAt: 1
|
||||
};
|
||||
} else if (ps.sort == '-updatedAt') {
|
||||
_sort = {
|
||||
updatedAt: 1
|
||||
};
|
||||
}
|
||||
} else {
|
||||
_sort = {
|
||||
@ -40,14 +72,17 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
||||
};
|
||||
}
|
||||
|
||||
const q =
|
||||
ps.origin == 'local' ? { host: null } :
|
||||
ps.origin == 'remote' ? { host: { $ne: null } } :
|
||||
{};
|
||||
|
||||
const users = await User
|
||||
.find({
|
||||
host: null
|
||||
}, {
|
||||
.find(q, {
|
||||
limit: ps.limit,
|
||||
sort: _sort,
|
||||
skip: ps.offset
|
||||
});
|
||||
|
||||
res(await Promise.all(users.map(user => pack(user, me))));
|
||||
res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
|
||||
}));
|
||||
|
@ -80,7 +80,7 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
||||
}));
|
||||
|
||||
if (isRemoteUser(user)) {
|
||||
if (user.updatedAt == null || Date.now() - user.updatedAt.getTime() > 1000 * 60 * 60 * 24) {
|
||||
if (user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24) {
|
||||
resolveRemoteUser(ps.username, ps.host, { }, true);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user