|
2 | 2 |
|
3 | 3 | const _ = require('lodash'); |
4 | 4 | const utility = require('utility'); |
5 | | - |
| 5 | +const tools = require('../common/tools'); |
| 6 | +const validator = require('validator'); |
6 | 7 | const Controller = require('egg').Controller; |
7 | 8 |
|
8 | 9 | class UserController extends Controller { |
@@ -177,6 +178,145 @@ class UserController extends Controller { |
177 | 178 | }); |
178 | 179 | } |
179 | 180 |
|
| 181 | + async showSetting() { |
| 182 | + const { ctx, service } = this; |
| 183 | + const id = ctx.session.user._id; |
| 184 | + const user = await service.user.getUserById(id); |
| 185 | + |
| 186 | + if (!user) { |
| 187 | + ctx.status = 404; |
| 188 | + ctx.message = '发生错误'; |
| 189 | + return; |
| 190 | + } |
| 191 | + |
| 192 | + if (ctx.request.query.save === 'success') { |
| 193 | + user.success = '保存成功。'; |
| 194 | + } |
| 195 | + |
| 196 | + return await ctx.render('user/setting', { user }); |
| 197 | + } |
| 198 | + |
| 199 | + async setting() { |
| 200 | + const { ctx, ctx: { request: req }, service } = this; |
| 201 | + // 显示出错或成功信息 |
| 202 | + async function showMessage(msg, data, isSuccess) { |
| 203 | + data = data || req.body; |
| 204 | + const user = { |
| 205 | + loginname: data.loginname, |
| 206 | + email: data.email, |
| 207 | + url: data.url, |
| 208 | + location: data.location, |
| 209 | + signature: data.signature, |
| 210 | + weibo: data.weibo, |
| 211 | + accessToken: data.accessToken, |
| 212 | + }; |
| 213 | + if (isSuccess) { |
| 214 | + user.success = msg; |
| 215 | + } else { |
| 216 | + user.error = msg; |
| 217 | + } |
| 218 | + return await ctx.render('user/setting', { user }); |
| 219 | + } |
| 220 | + |
| 221 | + // post |
| 222 | + const { body, body: { action } } = req; |
| 223 | + if (action === 'change_setting') { |
| 224 | + const url = validator.trim(body.url); |
| 225 | + const location = validator.trim(body.location); |
| 226 | + const weibo = validator.trim(body.weibo); |
| 227 | + const signature = validator.trim(body.signature); |
| 228 | + |
| 229 | + const user = await service.user.getUserById(ctx.session.user._id); |
| 230 | + user.url = url; |
| 231 | + user.location = location; |
| 232 | + user.signature = signature; |
| 233 | + user.weibo = weibo; |
| 234 | + user.save(); |
| 235 | + |
| 236 | + ctx.session.user = user.toObject({ virtual: true }); |
| 237 | + return ctx.redirect('/setting?save=success'); |
| 238 | + } |
| 239 | + |
| 240 | + if (action === 'change_password') { |
| 241 | + const oldPass = validator.trim(req.body.old_pass); |
| 242 | + const newPass = validator.trim(req.body.new_pass); |
| 243 | + if (!oldPass || !newPass) { |
| 244 | + return showMessage('旧密码或新密码不得为空'); |
| 245 | + } |
| 246 | + |
| 247 | + const user = await service.user.getUserById(ctx.session.user._id); |
| 248 | + const equal = tools.bcompare(oldPass, user.pass); |
| 249 | + if (!equal) { |
| 250 | + return showMessage('当前密码不正确。', user); |
| 251 | + } |
| 252 | + |
| 253 | + const newPassHash = tools.bhash(newPass); |
| 254 | + user.pass = newPassHash; |
| 255 | + user.save(); |
| 256 | + return showMessage('密码已被修改。', user, true); |
| 257 | + } |
| 258 | + } |
| 259 | + |
| 260 | + async toggleStar() { |
| 261 | + const { ctx, ctx: { request: req }, service } = this; |
| 262 | + const { body } = req; |
| 263 | + const user_id = body.user_id; |
| 264 | + const user = await service.user.getUserById(user_id); |
| 265 | + |
| 266 | + if (!user) { |
| 267 | + ctx.status = 404; |
| 268 | + ctx.message = 'user is not exists'; |
| 269 | + return; |
| 270 | + } |
| 271 | + user.is_star = !user.is_star; |
| 272 | + user.save(); |
| 273 | + |
| 274 | + ctx.body = { status: 'success' }; |
| 275 | + } |
| 276 | + |
| 277 | + async block() { |
| 278 | + const { ctx, ctx: { request: req }, service } = this; |
| 279 | + const { body: { action } } = req; |
| 280 | + const loginname = ctx.params.name; |
| 281 | + |
| 282 | + const user = await service.user.getUserByLoginName(loginname); |
| 283 | + if (!user) { |
| 284 | + ctx.status = 404; |
| 285 | + ctx.message = 'user is not exists'; |
| 286 | + return; |
| 287 | + } |
| 288 | + |
| 289 | + if (action === 'set_block') { |
| 290 | + user.is_block = true; |
| 291 | + user.save(); |
| 292 | + ctx.body = { status: 'success' }; |
| 293 | + } else if (action === 'cancel_block') { |
| 294 | + user.is_block = false; |
| 295 | + user.save(); |
| 296 | + ctx.body = { status: 'success' }; |
| 297 | + } |
| 298 | + } |
| 299 | + |
| 300 | + async deleteAll() { |
| 301 | + const { ctx, service } = this; |
| 302 | + const loginname = ctx.params.name; |
| 303 | + |
| 304 | + |
| 305 | + const user = await service.user.getUserByLoginName(loginname); |
| 306 | + if (!user) { |
| 307 | + ctx.status = 404; |
| 308 | + ctx.message = 'user is not exists'; |
| 309 | + return; |
| 310 | + } |
| 311 | + |
| 312 | + // 删除主题 |
| 313 | + ctx.model.Topic.update({ author_id: user._id }, { $set: { deleted: true } }, { multi: true }); |
| 314 | + // 删除评论 |
| 315 | + ctx.model.Reply.update({ author_id: user._id }, { $set: { deleted: true } }, { multi: true }); |
| 316 | + // 点赞数也全部干掉 |
| 317 | + ctx.model.Reply.update({}, { $pull: { ups: user._id } }, { multi: true }); |
| 318 | + ctx.body = { status: 'success' }; |
| 319 | + } |
180 | 320 | } |
181 | 321 |
|
182 | 322 | // var User = require('../proxy').User; |
|
0 commit comments