Light12306/ChatRoomServer.Www/Areas/Api/Controllers/UsersController.cs

130 lines
3.5 KiB
C#
Raw Normal View History

2015-07-03 21:04:37 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace ChatRoomServer.Www.Areas.Api.Controllers
{
2015-07-15 20:55:09 +08:00
using System.Data.Entity;
2015-07-08 17:24:45 +08:00
using System.Net.Http.Headers;
2015-07-15 20:55:09 +08:00
using System.Threading.Tasks;
2015-07-08 17:24:45 +08:00
using System.Web.Http.Cors;
using System.Web.Http.Results;
using ChatRoomServer.Db;
2015-07-13 21:18:04 +08:00
using ChatRoomServer.Db.Entities;
2015-07-08 17:24:45 +08:00
2015-07-15 20:55:09 +08:00
[RoutePrefix("api/users"), Authorize]
2015-07-08 17:24:45 +08:00
public class UsersController : ApiController
{
2015-07-13 21:18:04 +08:00
[Route("abuseList")]
2015-07-15 20:55:09 +08:00
public async Task<object> AbuseList([FromBody]Dictionary<string, string> query)
2015-07-03 21:04:37 +08:00
{
2015-07-13 21:18:04 +08:00
var pageindex = query.GetValue("pageIndex").ToInt32(1);
var pageSize = query.GetValue("pageSize").ToInt32(20);
var filter = query.GetValue("filter").ToInt32(-1);
2015-07-08 17:24:45 +08:00
2015-07-15 20:55:09 +08:00
var db = new ChatDb();
var data = await db.GetAbuseReportPagedList(filter, pageindex, pageSize);
2015-07-08 17:24:45 +08:00
2015-07-15 20:55:09 +08:00
//rooms
var msgids = (from p in data.Data select p.TargetId).Distinct().ToArray();
var msgs = await db.MsgLogs.Where(s => msgids.Contains(s.Id)).ToDictionaryAsync(s => s.Id);
var roomids = (from p in msgs select p.Value.RoomId).Distinct().ToArray();
var rooms = await db.Rooms.Where(s => roomids.Contains(s.ID)).ToDictionaryAsync(s => s.ID);
2015-07-03 21:04:37 +08:00
2015-07-15 20:55:09 +08:00
return new
{
itemsCount = data.TotalCount,
items = data.Data.Select(s =>
new
{
id = s.Id,
msg = msgs[s.TargetId],
room = rooms[msgs[s.TargetId].RoomId],
info = s
})
};
}
[Route("updateAbuseReport")]
public async Task<object> UpdateAbuseState([FromBody] Dictionary<string, int> query)
{
var db = new ChatDb();
var item = await db.AbuseReports.FindAsync(query["id"]);
if (item == null || item.Status != ReportState.Submited)
return new { success = false, message = "report not found or has been processed." };
var newStatus = query["status"];
var msg = (string)null;
var result = true;
if (newStatus == 3)
{
//忽略
item.Status = ReportState.Invalid;
}
else if (newStatus == 1 || newStatus == 2)
{
var username = newStatus == 1 ? item.TargetUser : item.ReportUser;
DateTime? expiresTime;
result = BanUser(username, query["bantime"], out expiresTime);
item.Status = ReportState.Processed;
if (result)
msg = $"已屏蔽指定用户。用户名:{username},解封时间:" + (expiresTime.HasValue ? expiresTime.Value.ToString() : "永久") + "。";
else msg = "操作失败。";
}
2015-07-08 17:24:45 +08:00
2015-07-15 20:55:09 +08:00
await db.SaveChangesAsync();
return new { success = result, message = msg ?? "更新成功。" };
}
bool BanUser(string username, int banTime, out DateTime? expiresTime)
{
var db = new ChatDb();
//是否已经有屏蔽记录了?
var currentRule = db.GetBlockRuleForUser(username).LastOrDefault();
if (currentRule != null)
{
if (currentRule.UnblockTime != null)
{
//如果是隔期解开的,那么将会延长
if (banTime == 0)
{
expiresTime = null;
currentRule.UnblockTime = null;
}
else
{
currentRule.UnblockTime = currentRule.UnblockTime.Value.AddMinutes(banTime);
expiresTime = currentRule.UnblockTime;
}
}
else
{
expiresTime = null;
}
}
else
{
currentRule = new BlockUser()
{
BlockTime = DateTime.Now,
UserName = username,
UnblockTime = banTime == 0 ? null : (DateTime?)DateTime.Now.AddMinutes(300)
};
db.BlockUsers.Add(currentRule);
expiresTime = currentRule.UnblockTime;
}
db.SaveChanges();
return true;
2015-07-03 21:04:37 +08:00
}
2015-07-08 17:24:45 +08:00
}
2015-07-03 21:04:37 +08:00
}