/// <summary> /// Removes a new /// </summary> /// <param name="id">The id of the new</param> /// <returns>The IActionResult of the remove new action</returns> public IActionResult removeNew(string id) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } List <New> possibleNews = _context.News.Where(n => n.id.ToString() == id && n.userid == null).ToList(); if (possibleNews.Count() != 1) { return(BadRequest()); } try { _context.Remove(possibleNews.First()); _context.SaveChanges(); using (var scope = _scopeFactory.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDBContext>(); List <NewMessage> retMessage = GetNews.getStandNews(true, dbContext); return(Ok(retMessage)); } } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Search a user for a direct message conversation /// </summary> /// <param name="findTo">The username or email of the user to find</param> /// <returns>A list with all the not-admin users who username or email match with the param</returns> /// See <see cref="Areas.Admin.Models.SearchUserDM"/> to know the response structure> public List <SearchUserDM> search(string findTo) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!AdminPolicy.isAdmin(user, _context)) { return(new List <SearchUserDM>()); } //The request name is empty if (findTo == null || findTo.Length == 0) { return(new List <SearchUserDM>()); } Role adminRole = RoleManager.getAdmin(_context); List <User> userWithSameMail = _context.User.Where(u => (u.email.ToLower().Contains(findTo.ToLower().Trim()) || u.nickname.ToLower().Contains(findTo.ToLower().Trim())) && u.role != adminRole ).ToList(); List <SearchUserDM> usersRet = new List <SearchUserDM>(); userWithSameMail.ForEach(u => usersRet.Add(new SearchUserDM(u))); return(usersRet); }
/// <summary> /// Mark as "read" one notifications /// </summary> /// <param name="id">The id of the notification</param> /// <returns>Code 200 if the process was correct, 500 or 400 otherwise</returns> public IActionResult readNotifications(string id) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } try { _context.Entry(user).Collection("notifications").Load(); List <Notifications> nots = user.notifications.Where(n => n.id.ToString() == id).ToList(); if (nots.Count() != 1) { return(Ok()); } try { _context.Remove(nots.First()); _context.SaveChanges(); return(Ok()); } catch (Exception) { return(StatusCode(500)); } } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Launchs a new new for all the users /// </summary> /// <param name="message">The info</param> /// See <see cref="Areas.Admin.Models.Message"/> to see the param info /// <returns>The IActionResult of the launch new action</returns> public IActionResult launchNew([FromBody] Message message) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } try { _context.Add(new New { title = "Aviso de los administradores!", message = message.message }); _context.SaveChanges(); List <NewMessage> retMessage = GetNews.getStandNews(true, _context); return(Ok(retMessage)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Log a user in to the notifications /// </summary> /// <returns>IActionResult of the log notifications action</returns> /// See <see cref="Areas.Alive.Models.LoginNotifications"/> to see the response structure public IActionResult loginNotifications() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } try { _context.Entry(user).Collection("notifications").Load(); List <NotificationMessage> notifications = new List <NotificationMessage>(); user.notifications.OrderByDescending(n => n.time).ToList().ForEach(n => { notifications.Add(new NotificationMessage { id = n.id.ToString(), message = n.message }); }); return(Ok(new LoginNotifications { publicUserid = user.publicid.ToString(), messages = notifications })); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Log the user in a group chat /// </summary> /// <param name="groupName">The name of the group</param> /// <returns>IActionResult of the log chat action</returns> /// See <see cref="Areas.Alive.Models.ChatLogin"/> to see the response structure public IActionResult loginChat([Required] string groupName) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } Group group = new Group(); UserGroup ugCaller = new UserGroup(); if (!UserFromGroup.isOnIt(user.id, ref group, groupName, ref ugCaller, _context)) { return(BadRequest()); } try { _context.Entry(group).Collection("chatMessages").Load(); ChatLogin retMessages = new ChatLogin(); retMessages.callerPublicId = user.publicid; retMessages.group = group.name; retMessages.userMessages = filterMessages(group.chatMessages.OrderBy(m => m.time).ToList()); return(Ok(retMessages)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Bans a group /// </summary> /// <param name="order">The info</param> /// See <see cref="Areas.Admin.Models.BanGroup"/> to see the param info /// <returns>The IActionResult of the ban action</returns> public IActionResult banGroup([FromBody] BanGroup order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); Group targetGroup = new Group(); if (!AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } if (!existGroup(ref targetGroup, order.groupName)) { return(BadRequest()); } if (validOrder(targetGroup, order.ban)) { return(BadRequest()); } try { targetGroup.open = !targetGroup.open; _context.Update(targetGroup); _context.SaveChanges(); sendNews(targetGroup, order.ban); string retMessage = order.ban ? "SuccessfullGroupBan" : "SuccessfullGroupUnban"; return(Ok(new { success = retMessage })); } catch (Exception) { return(BadRequest(500)); } }
/// <summary> /// Load the messages in a dm conversation /// </summary> /// <param name="dmId">The id of the dm conversation</param> /// <returns>IActionResult of the load action</returns> /// See <see cref="Areas.DirectMessages.Models.DMRoom"/> to know the response structure public IActionResult load(string dmId) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); DirectMessageTitle title = new DirectMessageTitle(); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (!getDMTitle(ref title, dmId, user)) { return(BadRequest()); } try { readMessages(title, AdminPolicy.isAdmin(user, _context)); _context.SaveChanges(); Models.DMRoom room = new Models.DMRoom(title, user, _context); return(Ok(room)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Get all the dm conversations of the user /// </summary> /// <returns>The IActionResult of the load titles action</returns> /// See <see cref="Areas.DirectMessages.Models.DMTitle"/> to know the response structure public IActionResult loadTitles() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } try { List <DMTitle> retList = new List <DMTitle>(); _context.Entry(user).Collection("directMessages").Load(); bool isAdmin = API.Util.AdminPolicy.isAdmin(user, _context); List <DirectMessageTitle> all = new List <DirectMessageTitle>(); all.AddRange(user.directMessages); all.AddRange(_context.DirectMessagesTitle.Where(dm => dm.receiver == user).ToList()); unreadTitles(all, isAdmin).ForEach(dm => retList.Add(new DMTitle(dm, user.id, isAdmin, _context))); unclosedTitles(all, isAdmin).ForEach(dm => retList.Add(new DMTitle(dm, user.id, isAdmin, _context))); closedTitles(all).ForEach(dm => retList.Add(new DMTitle(dm, user.id, isAdmin, _context))); return(Ok(retList)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Kick a user out from the group /// </summary> /// <param name="order">The info to kick a user from the group</param> /// See <see cref="Areas.GroupManage.Models.KickUser"/> to know the param structure /// <returns>The updated group page</returns> /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure public async System.Threading.Tasks.Task <IActionResult> removeUserAsync([FromBody] KickUser order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to kick the user from the group if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } UserGroup targetUser = new UserGroup(); Group group = new Group(); if (!GroupAdminFuncionlities.checkFuncionality(user, ref group, order.groupName, ref targetUser, order.publicId, _context, GroupAdminFuncionality.REMOVE_USER, false)) { return(BadRequest()); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } try { _context.Entry(targetUser).Reference("User").Load(); User sendNew = targetUser.User; Guid targetUserid = targetUser.User.id; await QuitUserFromGroup.quitUser(targetUser, _context, _notificationHub); await KickChatNotification.sendKickMessageAsync(group.name, targetUser.User.publicid, _chatHub); InteractionManager.manageInteraction(targetUser.User, group, interactionType.KICKED, _context); using (var scope = _scopeFactory.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDBContext>(); group = dbContext.Group.Where(g => g.name == order.groupName).First(); User recv = dbContext.User.Where(u => u.id == targetUserid).First(); user = dbContext.User.Where(u => u.id == user.id).First(); Home.Util.GroupNew.launch(sendNew, group, null, Home.Models.TypeGroupNew.KICK_USER_USER, false, dbContext); Home.Util.GroupNew.launch(sendNew, group, null, Home.Models.TypeGroupNew.KICK_USER_GROUP, false, dbContext); await SendNotification.send(_notificationHub, group.name, recv, NotificationType.KICKED_GROUP, dbContext); return(Ok(GroupPageManager.GetPage(user, group, dbContext))); } } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Cancel a user fb /// </summary> /// <param name="order">The info to cancel the user fb</param> /// See <see cref="Areas.Bet.Models.CancelUserFootballBet"/> to know the param structure /// <returns>The IActionResult of the cancel a user fb action</returns> /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure public IActionResult cancelUserFootballBet([FromBody] CancelUserFootballBet order) { User caller = TokenUserManager.getUserFromToken(HttpContext, _context); if (!caller.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(caller, _context)) { return(BadRequest("notAllowed")); } UserGroup ugCaller = new UserGroup(); Group group = new Group(); FootballBet footballBet = new FootballBet(); UserFootballBet userFootballBet = new UserFootballBet(); if (!UserInFootballBet.check(caller, ref group, order.groupName, ref ugCaller, ref footballBet, order.footballBet, _context, false)) { return(BadRequest()); } if (footballBet.cancelled) { return(BadRequest(new { error = "CancelBetCancelled" })); } if (footballBet.ended) { return(BadRequest(new { error = "CancelBetEnded" })); } if (footballBet.dateLastBet < DateTime.Now) { return(BadRequest(new { error = "CancelBetLastBetPassed" })); } if (!checkBet(ref userFootballBet, order.userBet, footballBet, caller)) { return(BadRequest()); } try { ugCaller.coins += CheckBetType.calculateCancelRate(footballBet, userFootballBet.bet, _context); userFootballBet.valid = false; userFootballBet.dateInvalid = DateTime.Now; _context.Update(ugCaller); _context.Update(userFootballBet); _context.SaveChanges(); return(Ok(GroupPageManager.GetPage(caller, group, _context))); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Get all the users from the database who are not admin users /// </summary> /// <returns>A list with all the not-admin users</returns> /// See <see cref="Areas.Admin.Models.UserSearchInfo"/> to know the response structure public List <UserSearchInfo> getAllUsers() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!AdminPolicy.isAdmin(user, _context)) { return(new List <UserSearchInfo>()); } List <UserSearchInfo> userRet = new List <UserSearchInfo>(); Role adminRole = RoleManager.getAdmin(_context); return(MakeListUserSearchInfo.make(_context.User.Where(u => u.role != adminRole).Take(25).ToList(), _context)); }
/// <summary> /// Get all the groups that the user is not join in /// </summary> /// <returns>A list with the groups that the user is not join in</returns> /// See <see cref="Areas.GroupManage.Models.GroupInfo"/> to see the response structure public List <GroupInfo> getAllGroups() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(new List <GroupInfo>()); } bool isAdmin = AdminPolicy.isAdmin(user, _context); List <Group> groups = !isAdmin?_context.Group.Where(g => g.open).Take(25).ToList() : _context.Group.Take(25).ToList(); return(MakeGroupInfoList.make(groups, AdminPolicy.isAdmin(user, _context), _context)); }
/// <summary> /// Block/unblock a user from the group /// </summary> /// <param name="order">The info to block/unblock the user</param> /// See <see cref="Areas.GroupManage.Models.MakeAdmin_blockUser"/> to know the param structure /// <returns>The updated group page</returns> /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure public async Task <IActionResult> blockUser([FromBody] MakeAdmin_blockUser order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to kick the user from the group if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } UserGroup targetUser = new UserGroup(); Group group = new Group(); if (!GroupAdminFuncionlities.checkFuncionality(user, ref group, order.groupName, ref targetUser, order.publicId, _context, GroupAdminFuncionality.BLOCK_USER, order.make_unmake)) { return(BadRequest()); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } try { _context.Entry(user).Collection("groups").Load(); UserGroup callerUG = user.groups.Where(g => g.groupid == group.id).First(); targetUser.blocked = !targetUser.blocked; targetUser.role = RoleManager.getGroupNormal(_context); targetUser.blockedBy = callerUG.role; _context.Update(targetUser); _context.SaveChanges(); _context.Entry(targetUser).Reference("User").Load(); if (order.make_unmake) { await KickChatNotification.sendKickMessageAsync(group.name, targetUser.User.publicid, _chatHub); } await sendMessages(targetUser, group, order.make_unmake); return(Ok(GroupPageManager.GetPage(user, group, _context))); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Change the info of the user /// </summary> /// <param name="info">The new info of the user</param> /// See <see cref="Areas.UserInfo.Models.ChangeUserInfo"/> to know the param structure /// <returns>IActionResult of the change user info action</returns> /// See <see cref="Areas.UserInfo.Models.UserData"/> to know the response structure public IActionResult changeUser([FromBody] ChangeUserInfo info) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } bool isAdmin = AdminPolicy.isAdmin(user, _context); try { user.nickname = !isAdmin?changeNickname(info.nickname, user.nickname) : user.nickname; user.password = changePassword(info.oldpassword, info.newPassword, user.password); user.profileImg = !isAdmin ? info.image ?? user.profileImg : user.profileImg; _context.Update(user); _context.SaveChanges(); } catch (DbUpdateException) { return(StatusCode(500)); } catch (Exception e) { if (e.Message == "") { return(BadRequest()); } else { return(BadRequest(new { error = e.Message })); } } string successRes = ""; if (_changePass) { successRes = "PassChanged"; } UserData userShow = new UserData { email = user.email, nickname = user.nickname, img = user.profileImg, groups = GroupsOfUser.get(user, _context), timeSignUp = user.dateSignUp }; return(Ok(new { success = successRes, info = userShow })); }
/// <summary> /// Get a user out of a group /// </summary> /// <param name="groupName">The name of the group that the user is gonna left</param> /// <returns>IActionResult of the leaving group action</returns> public async System.Threading.Tasks.Task <IActionResult> leaveGroup(string groupName) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to leave the group if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } UserGroup ugCaller = new UserGroup(); Group group = new Group(); if (!UserFromGroup.isOnIt(user.id, ref group, groupName, ref ugCaller, _context)) { return(BadRequest()); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } if (!await QuitUserFromGroup.quitUser(ugCaller, _context, _hub)) { return(StatusCode(500)); } InteractionManager.manageInteraction(user, group, interactionType.LEAVED, _context); using (var scope = _scopeFactory.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDBContext>(); var groupE = dbContext.Group.Where(g => g.name == groupName); if (groupE.Count() == 1) { Home.Util.GroupNew.launch(user, group, null, Home.Models.TypeGroupNew.JOIN_LEFT_GROUP, false, _context); } if (groupE.Count() == 1) { Home.Util.GroupNew.launch(user, group, null, Home.Models.TypeGroupNew.JOIN_LEFT_USER, false, _context); } } return(Ok(new { success = "SuccesfullGroupLeave" })); }
/// <summary> /// Sends a message to a dm conversation /// </summary> /// <param name="order">The info to send the message</param> /// See <see cref="Areas.DirectMessages.Models.SendDMMessage"/> to know the param structure /// <returns>IActionResult of the send message action</returns> /// See <see cref="Areas.DirectMessages.Models.DMRoom"/> to know the response structure public async Task <IActionResult> sendMsg([FromBody] SendDMMessage order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); DirectMessageTitle title = new DirectMessageTitle(); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (!checkOrder(ref title, order.dmId, user)) { return(BadRequest()); } try { bool isAdmin = AdminPolicy.isAdmin(user, _context); DirectMessageMessages msg = new DirectMessageMessages { message = order.message, isAdmin = isAdmin, DirectMessageTitle = title }; addUnreadMessages(title, isAdmin); _context.Add(msg); _context.SaveChanges(); await sendMailAndSendNotification(title, user); using (var scope = _scopeFactory.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDBContext>(); DirectMessageTitle dbTitle = dbContext.DirectMessagesTitle.Where(t => t.id == title.id).First(); User dbuser = dbContext.User.Where(u => u.id == user.id).First(); DMRoom room = new DMRoom(dbTitle, dbuser, dbContext); return(Ok(room)); } } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Closes or open a dm conversation /// </summary> /// <param name="id">The id of the dm conversation</param> /// <param name="openOrder">"1" to open de conversation, "0" to clse it</param> /// <returns>The IActionResult of the open/close action</returns> /// See <see cref="Areas.DirectMessages.Models.DMRoom"/> to know the response structure public async Task <IActionResult> close(string id, string openOrder) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); DirectMessageTitle title = new DirectMessageTitle(); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (!AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } if (openOrder != "1" && openOrder != "0") { return(BadRequest()); } bool open = openOrder == "1"; if (!checkOrder(ref title, id, open)) { return(BadRequest()); } if (!checkAdminInDM(title, user)) { return(BadRequest()); } try { sendClosedMessage(title, open); title.closed = !open; _context.SaveChanges(); await sendMailAndNotification(title, user, open); DMRoom room = new DMRoom(title, user, _context); return(Ok(room)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Change the weekly pay of a group /// </summary> /// <param name="order">The info to change the weekly pay</param> /// See <see cref="Areas.GroupManage.Models.ManageWeeklyPay"/> to know the param structure /// <returns>The updated group page</returns> /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure public IActionResult manageWeeklyPay([FromBody] ManageWeeklyPay order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to make admin to another user if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } Group group = new Group(); if (!GroupMakerFuncionlities.checkFuncionality(user, ref group, order.groupName, GroupMakerFuncionality.MANAGEWEEKPAY, _context, "", "")) { return(BadRequest()); } if (order.weeklyPay < 100 || order.weeklyPay > 2000) { return(BadRequest()); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } try { int oldPay = group.weeklyPay; group.weeklyPay = order.weeklyPay; _context.Update(group); _context.SaveChanges(); launchNews_changeUserCoins(group, oldPay, order.weeklyPay, user.id); _context.SaveChanges(); return(Ok(GroupPageManager.GetPage(user, group, _context))); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Mange the password of the group /// </summary> /// <param name="order">The info to manage the password of the group</param> /// See <see cref="Areas.GroupManage.Models.ManagePassword"/> to know the param structure /// <returns>The updated group page</returns> /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure public IActionResult managePassword([FromBody] ManagePassword order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to make admin to another user if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } Group group = new Group(); if (!GroupMakerFuncionlities.checkFuncionality(user, ref group, order.name, GroupMakerFuncionality.MANAGE_PASSWORD, _context, order.newPassword, order.oldPassword)) { return(BadRequest()); } if (group.password != null && !PasswordHasher.areEquals(order.oldPassword, group.password)) { return(BadRequest(new { error = "IncorrectOldPassword" })); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } try { group.password = order.newPassword == null ? null : PasswordHasher.hashPassword(order.newPassword); _context.Update(group); _context.SaveChanges(); Home.Util.GroupNew.launch(null, group, null, Home.Models.TypeGroupNew.MAKE_PRIVATE, group.password != null, _context); return(Ok(GroupPageManager.GetPage(user, group, _context))); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Gives an updated list of the groups of the user /// </summary> /// <returns>A list of the groups of the user</returns> public List <string> reloadUserGroups() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(new List <string>()); } List <string> groupsInfo = new List <string>(); _context.Entry(user).Collection("groups").Load(); user.groups.Where(g => !g.blocked).ToList().ForEach(group => { _context.Entry(group).Reference("Group").Load(); groupsInfo.Add(group.Group.name); }); return(groupsInfo); }
/// <summary> /// Bans a user /// </summary> /// <param name="order">The info</param> /// See <see cref="Areas.Admin.Models.BanUser"/> to see the param info /// <returns>The IActionResult of the ban action</returns> public IActionResult banUser([FromBody] BanUser order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); User targetUser = new User(); if (!AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } if (!existUser(ref targetUser, order.publicUserId)) { return(BadRequest()); } if (validOrder(targetUser, order.ban)) { return(BadRequest()); } try { targetUser.open = !targetUser.open; _context.Update(targetUser); _context.SaveChanges(); if (order.ban) { manageGroups(targetUser); } EmailSender.sendBanNotification(targetUser.email, targetUser.nickname, order.ban); string retMessage = order.ban ? "SuccessfullUserBan" : "SuccessfullUserUnban"; return(Ok(new { success = retMessage })); } catch (Exception) { return(BadRequest(500)); } }
/// <summary> /// Gives the group-admin to a member of a group /// </summary> /// <param name="order">The infoto make a user admin of a group</param> /// See <see cref="Areas.GroupManage.Models.MakeAdmin_blockUser"/> to know the param structure /// <returns>The updated group page</returns> /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure public async Task <IActionResult> makeAdmin([FromBody] MakeAdmin_blockUser order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to make admin to another user if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } UserGroup targetUser = new UserGroup(); Group group = new Group(); if (!GroupAdminFuncionlities.checkFuncionality(user, ref group, order.groupName, ref targetUser, order.publicId, _context, GroupAdminFuncionality.MAKE_ADMIN, order.make_unmake)) { return(BadRequest()); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } try { targetUser.role = order.make_unmake ? RoleManager.getGroupAdmin(_context) : RoleManager.getNormalUser(_context); _context.Update(targetUser); _context.SaveChanges(); await sendNews(targetUser, group, order.make_unmake); return(Ok(GroupPageManager.GetPage(user, group, _context))); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Mark as "read" all the notifications of a user /// </summary> /// <returns>Code 200 if the process was correct, 500 or 400 otherwise</returns> public IActionResult readAllNotifications() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } try { _context.Entry(user).Collection("notifications").Load(); _context.RemoveRange(user.notifications.ToList()); _context.SaveChanges(); return(Ok()); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Create a direct conversation /// </summary> /// <param name="order">The info to create the DM</param> /// See <see cref="Areas.DirectMessages.Models.CreateDMTitle"/> to know the param structure /// <returns>IActionResult of the createTitle structure with the id of the dm created</returns> public async Task <IActionResult> createTitle([FromBody] CreateDMTitle order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); User receiver = new User(); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (!checkSenderAndReceiver(user, order.emailReceiver)) { return(BadRequest()); } if (!getReceiver(ref receiver, order.emailReceiver)) { return(BadRequest(new { error = "recvNotExist" })); } try { DirectMessageTitle dm = new DirectMessageTitle { Sender = user, receiver = receiver, title = order.title }; _context.Add(dm); _context.SaveChanges(); await sendNotification(user, receiver, dm); return(Ok(dm.id.ToString())); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Get the info to launch a new fb /// </summary> /// <param name="groupName">The name of the group where the new bet wants to be launched</param> /// <returns>IActionResult of the get fb page action</returns> /// See <see cref="Areas.GroupManage.Models.LaunchFootballBetManager"/> to know the response structure public IActionResult getFootBallPage([Required] string groupName) { User caller = TokenUserManager.getUserFromToken(HttpContext, _context); if (!caller.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(caller, _context)) { return(BadRequest("notAllowed")); } Group group = new Group(); if (!GroupMakerFuncionlities.checkFuncionality(caller, ref group, groupName, GroupMakerFuncionality.STARTCREATE_FOOTBALL_BET, _context)) { return(BadRequest()); } if (!checkMaxBetAllowed(group)) { return(Ok(getMaxReachResponse())); } try { List <FootballMatch> availableMatches = getAvailableMatchDays(group); LaunchFootballBetManager response = new LaunchFootballBetManager(); response.typeBets = loadTypeFootballBet(); response.typePays = loadTypePays(); response.competitionMatches = getAvailableBets(availableMatches); return(Ok(response)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Removes a account of a user /// </summary> /// <param name="userDelete">Removes the account of a user</param> /// See <see cref=""/> to know the param structure /// <returns>IActionResult of the delete account action</returns> public async Task <IActionResult> deleteAccount([FromBody] DeleteUser userDelete) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } string userDeletePass = PasswordHasher.hashPassword(userDelete.password); if (user.password != userDeletePass) { return(BadRequest(new { error = "CantDeleteAccount" })); } if (!await deleteAccountBeingNormal(user)) { return(BadRequest(new { error = "CantDeleteAccount" })); } try { user.dateDeleted = DateTime.Now; _context.SaveChanges(); removeTitles(user); removeNotifications(user); } catch (Exception) { return(StatusCode(500)); } return(Ok()); }
/// <summary> /// Deletes a group /// </summary> /// <param name="order">The info to remove a group</param> /// See <see cref="Areas.GroupManage.Models.RemoveGroup"/> to know the param structure /// <returns>IActionResult of the remove group action</returns> public IActionResult removeGroup([FromBody] Models.RemoveGroup order) { User user = TokenUserManager.getUserFromToken(HttpContext, _context); //The user who tries to kick the user from the group if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } Group group = new Group(); if (!GroupMakerFuncionlities.checkFuncionality(user, ref group, order.name, GroupMakerFuncionality.REMOVE_GROUP, _context)) { return(BadRequest()); } if (!PasswordHasher.areEquals(order.userPassword, user.password)) { return(BadRequest(new { error = "IncorrectOldPassword" })); } if (!group.open) { return(BadRequest(new { error = "GroupBanned" })); } try { RemoveGroup.remove(group, _context, _hub); return(Ok(new { success = "SuccesfullGroupRemoved" })); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Get the news for not logged users /// </summary> /// <returns>The IActionResult of the get the not logged news action</returns> /// See <see cref="Areas.Home.Models.NewMessage"/> to see the response structure public IActionResult GetStand() { bool isAdmin; try { User user = TokenUserManager.getUserFromToken(HttpContext, _context); isAdmin = AdminPolicy.isAdmin(user, _context); } catch (Exception) { isAdmin = false; } try { List <NewMessage> retMessage = GetNews.getStandNews(isAdmin, _context); return(Ok(retMessage)); } catch (Exception) { return(StatusCode(500)); } }
/// <summary> /// Get the news for auhtorized users /// </summary> /// <returns>The IActionResult of the get authorized news action</returns> /// See <see cref="Areas.Home.Models.NewMessage"/> to see the response structure public IActionResult getAuth() { User user = TokenUserManager.getUserFromToken(HttpContext, _context); if (!user.open) { return(BadRequest(new { error = "YoureBanned" })); } if (AdminPolicy.isAdmin(user, _context)) { return(BadRequest("notAllowed")); } try { List <NewMessage> retMessage = GetNews.getAuthNews(user.id, _context); return(Ok(retMessage)); } catch (Exception) { return(StatusCode(500)); } }