예제 #1
0
        /// <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));
            }
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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));
            }
        }
예제 #4
0
        /// <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));
            }
        }
예제 #5
0
        /// <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));
            }
        }
예제 #6
0
        /// <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));
            }
        }
예제 #7
0
        /// <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));
            }
        }
예제 #8
0
        /// <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));
            }
        }
예제 #9
0
        /// <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));
            }
        }
예제 #12
0
        /// <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));
        }
예제 #13
0
        /// <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));
        }
예제 #14
0
        /// <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));
            }
        }
예제 #15
0
        /// <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 }));
        }
예제 #16
0
        /// <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" }));
        }
예제 #17
0
        /// <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));
            }
        }
예제 #18
0
        /// <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));
            }
        }
예제 #19
0
        /// <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));
            }
        }
예제 #20
0
        /// <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));
            }
        }
예제 #21
0
        /// <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);
        }
예제 #22
0
        /// <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));
            }
        }
예제 #23
0
        /// <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));
            }
        }
예제 #25
0
        /// <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));
            }
        }
예제 #26
0
        /// <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));
            }
        }
예제 #27
0
        /// <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());
        }
예제 #28
0
        /// <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));
            }
        }
예제 #29
0
        /// <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));
            }
        }
예제 #30
0
        /// <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));
            }
        }