185 lines
4.9 KiB
C#
185 lines
4.9 KiB
C#
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
|
|
{
|
|
using System.Data.Entity;
|
|
using System.Net.Http.Headers;
|
|
using System.Threading.Tasks;
|
|
using System.Web.Http.Cors;
|
|
using System.Web.Http.Results;
|
|
using ChatRoomServer.Db;
|
|
using ChatRoomServer.Db.Entities;
|
|
|
|
[RoutePrefix("api/users"), Authorize]
|
|
public class UsersController : ApiController
|
|
{
|
|
[Route("blockList")]
|
|
public async Task<object> BlockUsersList([FromBody] Dictionary<string, string> query)
|
|
{
|
|
var searchUser = query.GetValue("searchUser") ?? "";
|
|
var pageIndex = query.GetValue("pageIndex").ToInt32(1);
|
|
var pagesize = query.GetValue("pagesize").ToInt32(20);
|
|
var db = new ChatDb();
|
|
|
|
var data = await db.GetBlockUserList(searchUser, pagesize, pageIndex);
|
|
|
|
return new
|
|
{
|
|
count = data.TotalCount,
|
|
list = data.Data
|
|
};
|
|
}
|
|
|
|
[Route("connectionLog")]
|
|
public async Task<object> ConnectionLog([FromBody] Dictionary<string, string> query)
|
|
{
|
|
var searchUser = query.GetValue("searchUser") ?? "";
|
|
var pageIndex = query.GetValue("pageIndex").ToInt32(1);
|
|
var pagesize = query.GetValue("pagesize").ToInt32(20);
|
|
var db = new ChatDb();
|
|
|
|
var data = await db.GetConnectionLogList(searchUser, pagesize, pageIndex);
|
|
var rooms = data.Data.Select(s => s.RoomID).Distinct().ToArray();
|
|
var roomdata = await db.Rooms.Where(s => rooms.Contains(s.ID)).ToDictionaryAsync(s => s.ID);
|
|
|
|
|
|
return new
|
|
{
|
|
count = data.TotalCount,
|
|
list = data.Data.Select(s => new
|
|
{
|
|
msg = s,
|
|
room = roomdata.GetValue(s.RoomID)
|
|
})
|
|
};
|
|
}
|
|
|
|
[Route("list"), HttpGet]
|
|
public async Task<object> UserList(int pageindex, int pagesize, string user)
|
|
{
|
|
var db = new ChatDb();
|
|
|
|
var data = await db.GetUserList(user, pagesize, pageindex);
|
|
|
|
return new
|
|
{
|
|
count = data.TotalCount,
|
|
list = data.Data
|
|
};
|
|
}
|
|
|
|
|
|
[Route("abuseList")]
|
|
public async Task<object> AbuseList([FromBody]Dictionary<string, string> query)
|
|
{
|
|
var pageindex = query.GetValue("pageIndex").ToInt32(1);
|
|
var pageSize = query.GetValue("pageSize").ToInt32(20);
|
|
var filter = query.GetValue("filter").ToInt32(-1);
|
|
|
|
var db = new ChatDb();
|
|
var data = await db.GetAbuseReportPagedList(filter, pageindex, pageSize);
|
|
|
|
//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);
|
|
|
|
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 = "操作失败。";
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|