public string setForumPostDeletionPermissions(string forumName, postDeletionPermission permission,
                                                      string requestingUser)
        {
            List <string> input = new List <string>()
            {
                forumName, requestingUser
            };

            if (!Constants.isValidInput(input))
            {
                return(Constants.INVALID_INPUT);
            }
            if (_um.getUserPermissionsForForum(forumName, requestingUser) < userManagement.permission.ADMIN)
            {
                return("Unauthorized user");
            }
            Forum f = getForum(forumName);

            if (f == null)
            {
                return(Constants.forumDoesntExist(forumName));
            }
            f.setPostDeletionPermissions(permission);
            return(permission == f.getPostDeletionPermissions() ? Constants.SUCCESS : Constants.FUNCTION_ERRROR);
        }
        public string deletePost(string forumName, string subForumName, int postNo, string requestingUser)
        {
            List <string> input = new List <string>()
            {
                forumName, subForumName, requestingUser
            };

            if (Constants.isValidInput(input))
            {
                lock (o)
                {
                    postDeletionPermission pdp = _fm.getForumPostDeletionPermission(forumName);
                    if (pdp == postDeletionPermission.INVALID)
                    {
                        return(Constants.noPermissionToDeletePost(requestingUser));
                    }
                    permission p = _um.getUserPermissionsForSubForum(forumName, subForumName, requestingUser);
                    if (p == permission.INVALID)
                    {
                        return(Constants.noPermissionToDeletePost(requestingUser));
                    }
                    return(_fm.deletePost(forumName, subForumName, postNo, pdp, p, requestingUser));
                }
            }
            return(Constants.INVALID_INPUT);
        }
        public string setForumPostDeletionPermissions(string forumName, postDeletionPermission permission,
                                                      string requestingUser)
        {
            List <string> input = new List <string>()
            {
                forumName
            };

            if (Constants.isValidInput(input))
            {
                lock (o)
                {
                    if (_um.getUserPermissionsForForum(forumName, requestingUser) != WSEP_domain.userManagement.permission.SUPER_ADMIN && _um.getUserPermissionsForForum(forumName, requestingUser) != WSEP_domain.userManagement.permission.ADMIN)
                    {
                        return("Unauthorized user");
                    }
                    if (!_fm.setForumPostDeletionPermissions(forumName, permission))
                    {
                        return(Constants.forumDoesntExist(forumName));
                    }
                    return(Constants.SUCCESS);
                }
            }
            return(Constants.INVALID_INPUT);
        }
        public string deletePost(string forumName, string subForumName, int postNo, string requestingUser)
        {
            List <string> input = new List <string>()
            {
                forumName, subForumName, requestingUser
            };

            if (!Constants.isValidInput(input))
            {
                return(Constants.INVALID_INPUT);
            }
            Forum f = getForum(forumName);

            if (f == null)
            {
                return(Constants.forumDoesntExist(forumName));
            }
            postDeletionPermission pdp = f.getPostDeletionPermissions();

            if (pdp == postDeletionPermission.INVALID)
            {
                return(Constants.noPermissionToDeletePost(requestingUser));
            }
            permission p = _um.getUserPermissionsForSubForum(forumName, subForumName, requestingUser);

            if (p == permission.INVALID)
            {
                return(Constants.noPermissionToDeletePost(requestingUser));
            }
            return(f.deletePost(subForumName, postNo, pdp, p, requestingUser));
        }
 public void setPostDeletionPermissions(postDeletionPermission permission)
 {
     if (_policy == null)
     {
         return;
     }
     _policy.setPostDeletionPermissions(permission);
 }
 public void setPostDeletionPermissions(postDeletionPermission permission)
 {
     if (permission == postDeletionPermission.INVALID)
     {
         return;
     }
     _pdp = permission;
 }
        public string deletePost(string subForumName, int postNo, postDeletionPermission pdp, permission p, string requestingUser)
        {
            SubForum sf = getSubForum(subForumName);

            if (sf == null)
            {
                return(subForumDoesntExist(subForumName));
            }
            return(sf.deletePost(postNo, pdp, p, requestingUser));
        }
 public static ForumPolicy create(int maxNumOfAdmins, int minNumOfAdmins, int maxNumOfModerators, int minNumOfModerators,
                                  postDeletionPermission pdp, int passwordLifespan, int moderatorSeniority, modUnassignmentPermission mup)
 {
     if (minNumOfAdmins > maxNumOfAdmins || minNumOfModerators > maxNumOfModerators || maxNumOfAdmins <= 0 || maxNumOfModerators <= 0 ||
         passwordLifespan <= 0 || moderatorSeniority < 0 || pdp == postDeletionPermission.INVALID || mup == modUnassignmentPermission.INVALID)
     {
         return(null);
     }
     return(new ForumPolicy(maxNumOfAdmins, minNumOfAdmins, maxNumOfModerators, minNumOfModerators, pdp, passwordLifespan, moderatorSeniority, mup));
 }
 public ForumPolicy()
 {
     _maxNumOfAdmins     = 10;
     _minNumOfAdmins     = 1;
     _maxNumOfModerators = 10;
     _minNumOfModerators = 1;
     _pdp = postDeletionPermission.WRITER;
     _passwordLifespan   = 365;
     _moderatorSeniority = 0;
     _mup = modUnassignmentPermission.ADMIN;
 }
 public ForumPolicy(int maxNumOfAdmins, int minNumOfAdmins, int maxNumOfModerators, int minNumOfModerators,
                    postDeletionPermission pdp, int passwordLifespan, int moderatorSeniority, modUnassignmentPermission mup)
 {
     _maxNumOfAdmins     = maxNumOfAdmins;
     _minNumOfAdmins     = minNumOfAdmins;
     _maxNumOfModerators = maxNumOfModerators;
     _minNumOfModerators = minNumOfModerators;
     _pdp = pdp;
     _passwordLifespan   = passwordLifespan;
     _moderatorSeniority = moderatorSeniority;
     _mup = mup;
 }
Example #11
0
 public void setPostDeletionPermissions(postDeletionPermission permission)
 {
     if (!ForumSystem._testFlag)
     {
         ForumPolicy fp = new ForumPolicy();
         fp.setPostDeletionPermissions(permission);
         if (!setForumPolicy(fp))
         {
             return;
         }
     }
     _policy.setPostDeletionPermissions(permission);
 }
        // deletePost need to be synchronized
        public string deletePost(int postNo, postDeletionPermission pdp, permission p, string requestingUser)
        {
            Post post = searchPost(_threads, postNo);

            if (post == null)
            {
                return(Constants.SUCCESS);
            }
            switch (pdp)
            {
            case postDeletionPermission.WRITER:
                if (p < permission.MODERATOR && !post.getWriter().Equals(requestingUser))
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            case postDeletionPermission.MODERATOR:
                if (p < permission.MODERATOR)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            case postDeletionPermission.ADMIN:
                if (p < permission.ADMIN)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            case postDeletionPermission.SUPER_ADMIN:
                if (p < permission.SUPER_ADMIN)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            default:
                return(Constants.noPermissionToDeletePost(requestingUser));
            }
            if (post.delete())
            {
                _numOfPosts--;
                return(Constants.SUCCESS);
            }
            return("Could not delete post");
        }
        private ForumPolicy getForumPolicy(string forumName)
        {
            List <Tuple <Tuple <int, int>, Tuple <int, int>, Tuple <int, int>, Tuple <int, int> > > policies =
                _db.ReturnforumPolicy(forumName);
            Tuple <Tuple <int, int>, Tuple <int, int>, Tuple <int, int>, Tuple <int, int> > policy = policies.ElementAt(0);
            postDeletionPermission pdp = postDeletionPermission.WRITER;

            switch (policy.Item3.Item1)
            {
            case 2:
                pdp = postDeletionPermission.WRITER;
                break;

            case 3:
                pdp = postDeletionPermission.MODERATOR;
                break;

            case 4:
                pdp = postDeletionPermission.ADMIN;
                break;

            case 5:
                pdp = postDeletionPermission.SUPER_ADMIN;
                break;
            }
            modUnassignmentPermission mup = modUnassignmentPermission.ADMIN;

            switch (policy.Item4.Item2)
            {
            case 2:
                mup = modUnassignmentPermission.ADMIN;
                break;

            case 3:
                mup = modUnassignmentPermission.ASSIGNING_ADMIN;
                break;

            case 4:
                mup = modUnassignmentPermission.SUPER_ADMIN;
                break;
            }
            return(new ForumPolicy(policy.Item1.Item1, policy.Item1.Item2, policy.Item2.Item1,
                                   policy.Item2.Item2, pdp, policy.Item3.Item2, policy.Item4.Item1, mup));
        }
        public bool setForumPostDeletionPermissions(string forumName, postDeletionPermission permission)
        {
            List <string> input = new List <string>()
            {
                forumName
            };

            if (!Constants.isValidInput(input))
            {
                return(false);
            }
            Forum f = getForum(forumName);

            if (f == null)
            {
                return(false);
            }
            f.setPostDeletionPermissions(permission);
            return(f.getPostDeletionPermissions() == permission);
        }
        public string setForumPostDeletionPermissions(string forumName, postDeletionPermission permission, string requestingUser)
        {
            lock (syncLock)
            {
                List <string> strList = new List <string>();
                List <int>    intList = new List <int>();
                strList.Add(forumName);
                strList.Add(requestingUser);
                int toAdd = 0;
                switch (permission)
                {
                case postDeletionPermission.WRITER:
                    toAdd = 2;
                    break;

                case postDeletionPermission.MODERATOR:
                    toAdd = 3;
                    break;

                case postDeletionPermission.ADMIN:
                    toAdd = 4;
                    break;

                case postDeletionPermission.SUPER_ADMIN:
                    toAdd = 5;
                    break;
                }
                intList.Add(toAdd);
                serverMessage ans = sendMessage("setForumPostDeletionPermissions", strList, intList, DateTime.Now);
                if (ans._messageType.Equals(serverMessage.messageType.success))
                {
                    return("true");
                }
                if (ans.stringContent.Count > 0)
                {
                    return(ans.stringContent.ElementAt(0));
                }
                return("error, not successful for unknown reason");
            }
        }
Example #16
0
        private bool setForumPolicy(ForumPolicy p)
        {
            int i_pdp = 2;
            postDeletionPermission e_pdp = p.getPostDeletionPermissions();

            switch (e_pdp)
            {
            case postDeletionPermission.MODERATOR:
                i_pdp = 3;
                break;

            case postDeletionPermission.ADMIN:
                i_pdp = 4;
                break;

            case postDeletionPermission.SUPER_ADMIN:
                i_pdp = 5;
                break;
            }
            int i_mup = 2;
            modUnassignmentPermission e_mup = p.getModUnassignmentPermissions();

            switch (e_mup)
            {
            case modUnassignmentPermission.ASSIGNING_ADMIN:
                i_mup = 3;
                break;

            case modUnassignmentPermission.SUPER_ADMIN:
                i_mup = 4;
                break;
            }
            if (!ForumSystem._db.changeForumPolicy(p.getMaxAdmins(), p.getMinAdmins(), p.getMaxModerators(), p.getMinModerators(), _name,
                                                   i_pdp, p.getPasswordLifespan(), p.getModeratorsSeniority(), i_mup))
            {
                return(false);
            }
            return(true);
        }
Example #17
0
        // deletePost need to be synchronized
        public string deletePost(int postNo, postDeletionPermission pdp, permission p, string requestingUser)
        {
            Post post = searchPost(_threads, postNo);

            if (post == null)
            {
                return("Post doesn't exist");
            }
            switch (pdp)
            {
            case postDeletionPermission.WRITER:
                if (p < permission.MODERATOR && !post.getWriter().Equals(requestingUser))
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            case postDeletionPermission.MODERATOR:
                if (p < permission.MODERATOR)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            case postDeletionPermission.ADMIN:
                if (p < permission.ADMIN)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            case postDeletionPermission.SUPER_ADMIN:
                if (p < permission.SUPER_ADMIN)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;

            default:
                if (p != permission.SUPER_ADMIN)
                {
                    return(Constants.noPermissionToDeletePost(requestingUser));
                }
                break;
            }
            if (!ForumSystem._testFlag)
            {
                if (!ForumSystem._db.removeSubForumPost(post.getSN()))
                {
                    return(Constants.DB_ERROR);
                }
            }
            if (_threads.Contains(post))
            {
                _threads.Remove(post);
                if (_threads.Contains(post))
                {
                    throw new ShouldNotHappenException(); // cannot cover this case
                }
                List <Tuple <string, string, DateTime, int, int, string, DateTime> > list = new List <Tuple <string, string, DateTime, int, int, string, DateTime> >();
                post.getAllTree(list);
                _numOfPosts -= list.Count;
                ForumSystem.notify("A thread you are following has been deleted.", post.getAllFollowers(), _forumName);
                ForumSystem.notify("A thread you are currently watching has been deleted.", post.getInteractiveFollowers(), _forumName);
                return(Constants.SUCCESS);
            }
            Tuple <bool, List <string> > deletion = post.delete();

            if (deletion.Item1)
            {
                List <Tuple <string, string, DateTime, int, int, string, DateTime> > list = new List <Tuple <string, string, DateTime, int, int, string, DateTime> >();
                post.getAllTree(list);
                _numOfPosts -= list.Count;
                ForumSystem.notify("A post you are following has been deleted.", post.getAllFollowers(), _forumName);
                ForumSystem.notify("A post in a thread you are currently watching has been deleted.", getAncestor(post).getInteractiveFollowers(), _forumName);
                return(Constants.SUCCESS);
            }
            return("Could not delete post"); // cannot cover this case
        }
Example #18
0
        private serverMessage parseServerMessage(serverMessage message)
        {
            List <string> strLst = new List <string>();
            List <int>    intLst = new List <int>();
            DateTime      date = new DateTime();
            string        forumName, user, scndUser, subforumName, ans, password;
            int           number;

            switch (message._messageType)
            {
            case serverMessage.messageType.checkForumPolicy:
                forumName = message.stringContent.ElementAt(0);
                ans       = forumSystem.checkForumPolicy(forumName, message.policy);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, new List <string>(), new List <int>(), date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));

            case serverMessage.messageType.addForum:
                //Console.WriteLine("got to add forum");
                if (checkArgs(message.stringContent, 2))
                {
                    strLst.Add("error, needed 2 arguments exactley");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                ans       = forumSystem.addForum(forumName, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.addSubForum:
                if (checkArgs(message.stringContent, 4) & (checkArgs(message.intContent, message.stringContent.Count - 3)))
                {
                    strLst.Add("error, arguments not valid");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                List <Tuple <string, string, int> > tupleList = new List <Tuple <string, string, int> >();
                for (int i = 0; i < (message.stringContent.Count - 3); i++)
                {
                    tupleList.Add(new Tuple <string, string, int>(message.stringContent.ElementAt(i + 3), "", message.intContent.ElementAt(i)));
                }

                ans = forumSystem.addSubForum(forumName, subforumName, tupleList, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.assignAdmin:
                if (checkArgs(message.stringContent, 3))
                {
                    strLst.Add("error, needed 4 arguments exactley");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                scndUser  = message.stringContent.ElementAt(2);

                ans = forumSystem.assignAdmin(forumName, user, scndUser);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.registerMemberToForum:
                // Console.WriteLine("got to register member");
                if (checkArgs(message.stringContent, 4))
                {
                    strLst.Add("error, needed 4 arguments exactley");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                password  = message.stringContent.ElementAt(2);
                string mail = message.stringContent.ElementAt(3);
                ans = forumSystem.registerMemberToForum(forumName, user, password, mail);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.unassignAdmin:
                if (checkArgs(message.stringContent, 3))
                {
                    strLst.Add("error, needed 3 arguments exactley");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                scndUser  = message.stringContent.ElementAt(2);
                ans       = forumSystem.unassignAdmin(forumName, user, scndUser);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.assignModerator:
                if ((checkArgs(message.stringContent, 4)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                scndUser     = message.stringContent.ElementAt(3);
                number       = message.intContent.ElementAt(0);
                ans          = forumSystem.assignModerator(forumName, subforumName, user, scndUser, number);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.sendPM:
                if (checkArgs(message.stringContent, 4))
                {
                    strLst.Add("error, needed 4 arguments exactley");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                scndUser  = message.stringContent.ElementAt(2);
                ans       = message.stringContent.ElementAt(3);
                ans       = forumSystem.sendPM(forumName, user, scndUser, ans);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumMaxAdmins:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                ans       = forumSystem.setForumMaxAdmins(forumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumMinAdmins:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                ans       = forumSystem.setForumMinAdmins(forumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumMaxModerators:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                ans       = forumSystem.setForumMaxModerators(forumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumMinModerators:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                ans       = forumSystem.setForumMinModerators(forumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumPostDeletionPermissions:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                postDeletionPermission pdp = postDeletionPermission.WRITER;
                switch (number)
                {
                case 2:
                    pdp = postDeletionPermission.WRITER;
                    break;

                case 3:
                    pdp = postDeletionPermission.MODERATOR;
                    break;

                case 4:
                    pdp = postDeletionPermission.ADMIN;
                    break;

                case 5:
                    pdp = postDeletionPermission.SUPER_ADMIN;
                    break;

                default:
                    return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));
                }
                ans = forumSystem.setForumPostDeletionPermissions(forumName, pdp, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumPasswordLifespan:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                ans       = forumSystem.setForumPasswordLifespan(forumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumModeratorsSeniority:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                ans       = forumSystem.setForumModeratorsSeniority(forumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setForumModUnassignmentPermissions:
                if ((checkArgs(message.stringContent, 2)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                number    = message.intContent.ElementAt(0);
                modUnassignmentPermission mup = modUnassignmentPermission.ASSIGNING_ADMIN;
                switch (number)
                {
                case 2:
                    mup = modUnassignmentPermission.ADMIN;
                    break;

                case 3:
                    mup = modUnassignmentPermission.ASSIGNING_ADMIN;
                    break;

                case 4:
                    mup = modUnassignmentPermission.SUPER_ADMIN;
                    break;

                default:
                    return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));
                }
                ans = forumSystem.setForumModUnassignmentPermissions(forumName, mup, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.writePost:
                if ((checkArgs(message.stringContent, 5)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                ans          = message.stringContent.ElementAt(3);
                password     = message.stringContent.ElementAt(4);
                number       = message.intContent.ElementAt(0);
                ans          = forumSystem.writePost(forumName, subforumName, number, user, ans, password);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.setModeratorTrialTime:
                if ((checkArgs(message.stringContent, 4)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                scndUser     = message.stringContent.ElementAt(3);
                number       = message.intContent.ElementAt(0);
                ans          = forumSystem.setModeratorTrialTime(forumName, subforumName, user, number, scndUser);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.deletePost:
                if ((checkArgs(message.stringContent, 3)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                number       = message.intContent.ElementAt(0);
                ans          = forumSystem.deletePost(forumName, subforumName, number, user);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.editPost:
                if ((checkArgs(message.stringContent, 3)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                ans          = message.stringContent.ElementAt(3);
                number       = message.intContent.ElementAt(0);
                ans          = forumSystem.editPost(forumName, subforumName, number, user, ans);
                if (ans.Equals("true"))
                {
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                strLst.Add(ans);
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.getNumOfPostsInSubForum:
                if ((checkArgs(message.stringContent, 3)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                number       = forumSystem.getNumOfPostsInSubForum(forumName, subforumName, user);
                if (number != -1)
                {
                    intLst.Add(number);
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            case serverMessage.messageType.getListOfMemberMessages:
                if ((checkArgs(message.stringContent, 3)) & (checkArgs(message.intContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                scndUser  = message.stringContent.ElementAt(2);
                List <Tuple <string, string, DateTime, int> > returnForMemMesages = new List <Tuple <string, string, DateTime, int> >();
                returnForMemMesages = forumSystem.getListOfMemberMessages(forumName, user, scndUser);
                if (returnForMemMesages != null)
                {
                    if (returnForMemMesages.Count != 0)
                    {
                        return(new serverMessage(serverMessage.messageType.success, returnForMemMesages));
                    }
                }
                return(new serverMessage(serverMessage.messageType.unsuccess, returnForMemMesages));

            case serverMessage.messageType.getListOfForummoderators:
                if ((checkArgs(message.stringContent, 2)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                List <Tuple <string, string, DateTime, string> > returnForMemMesages2 = new List <Tuple <string, string, DateTime, string> >();
                returnForMemMesages2 = forumSystem.getListOfForumModerators(forumName, user);
                if (returnForMemMesages2 != null)
                {
                    if (returnForMemMesages2.Count != 0)
                    {
                        return(new serverMessage(serverMessage.messageType.success, returnForMemMesages2));
                    }
                }
                return(new serverMessage(serverMessage.messageType.unsuccess, returnForMemMesages2));

            case serverMessage.messageType.numOfForums:
                if ((checkArgs(message.stringContent, 1)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                user   = message.stringContent.ElementAt(0);
                number = forumSystem.numOfForums(user);
                if (number != -1)
                {
                    intLst.Add(number);
                    return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
                }
                return(new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date));

            /* case serverMessage.messageType.ForumsByUser:
             *  if ((checkArgs(message.stringContent, 2)))
             *  {
             *      strLst.Add("error");
             *      return new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date);
             *  }
             *  user = message.stringContent.ElementAt(0);
             *  scndUser = message.stringContent.ElementAt(1);
             *  strLst = forumSystem.ForumsByUser(user, scndUser);
             *  if (strLst.Count != 0)
             *  {
             *
             *      return new serverMessage(serverMessage.messageType.success, strLst, intLst, date);
             *  }
             *  return new serverMessage(serverMessage.messageType.unsuccess, strLst, intLst, date);*/
            case serverMessage.messageType.getForums:
                List <string> forums = forumSystem.getForums();
                return(new serverMessage(serverMessage.messageType.success, forums, intLst, date));

            case serverMessage.messageType.getSubForums:
                if ((checkArgs(message.stringContent, 2)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                List <string> subForums = forumSystem.getSubForums(forumName, user);
                return(new serverMessage(serverMessage.messageType.success, subForums, intLst, date));

            case serverMessage.messageType.getThreads:
                if ((checkArgs(message.stringContent, 3)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                List <Tuple <string, DateTime, int> > returnForMemMesages3 = new List <Tuple <string, DateTime, int> >();
                returnForMemMesages3 = forumSystem.getThreads(forumName, subforumName, user);
                if (returnForMemMesages3 != null)
                {
                    if (returnForMemMesages3.Count != 0)
                    {
                        return(new serverMessage(serverMessage.messageType.success, returnForMemMesages3));
                    }
                }
                return(new serverMessage(serverMessage.messageType.unsuccess, returnForMemMesages3));

            case serverMessage.messageType.getThread:
                if ((checkArgs(message.stringContent, 3)) & checkArgs(message.intContent, 1))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                number       = message.intContent.ElementAt(0);
                List <Tuple <string, string, DateTime, int, int, string, DateTime> > returnForMemMesages4 = new List <Tuple <string, string, DateTime, int, int, string, DateTime> >();
                returnForMemMesages4 = forumSystem.getThread(forumName, subforumName, number, user);
                if (returnForMemMesages4 != null)
                {
                    if (returnForMemMesages4.Count != 0)
                    {
                        return(new serverMessage(serverMessage.messageType.success, returnForMemMesages4));
                    }
                }
                return(new serverMessage(serverMessage.messageType.unsuccess, returnForMemMesages4));

            case serverMessage.messageType.login:
                if ((checkArgs(message.stringContent, 3)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                password  = message.stringContent.ElementAt(2);
                loginStatus ls = forumSystem.login(forumName, user, password);
                number = 1;
                switch (ls)
                {
                case loginStatus.FALSE:
                    number = 1;
                    break;

                case loginStatus.TRUE:
                    number = 2;
                    break;

                case loginStatus.UPDATE_PASSWORD:
                    number = 3;
                    break;
                }
                intLst.Add(number);
                return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));

            case serverMessage.messageType.getUserPermissionsForForum:
                if ((checkArgs(message.stringContent, 2)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName = message.stringContent.ElementAt(0);
                user      = message.stringContent.ElementAt(1);
                permission p = forumSystem.getUserPermissionsForForum(forumName, user);
                number = 1;
                switch (p)
                {
                case permission.INVALID:
                    number = 1;
                    break;

                case permission.GUEST:
                    number = 2;
                    break;

                case permission.MEMBER:
                    number = 3;
                    break;

                case permission.ADMIN:
                    number = 5;
                    break;

                case permission.SUPER_ADMIN:
                    number = 6;
                    break;
                }
                intLst.Add(number);
                return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));

            case serverMessage.messageType.getUserPermissionsForSubForum:
                if ((checkArgs(message.stringContent, 2)))
                {
                    strLst.Add("error");
                    return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
                }
                forumName    = message.stringContent.ElementAt(0);
                subforumName = message.stringContent.ElementAt(1);
                user         = message.stringContent.ElementAt(2);
                permission p1 = forumSystem.getUserPermissionsForSubForum(forumName, subforumName, user);
                number = 1;
                switch (p1)
                {
                case permission.INVALID:
                    number = 1;
                    break;

                case permission.GUEST:
                    number = 2;
                    break;

                case permission.MEMBER:
                    number = 3;
                    break;

                case permission.MODERATOR:
                    number = 4;
                    break;

                case permission.ADMIN:
                    number = 5;
                    break;

                case permission.SUPER_ADMIN:
                    number = 6;
                    break;
                }
                intLst.Add(number);
                return(new serverMessage(serverMessage.messageType.success, strLst, intLst, date));
            }

            return(new serverMessage(serverMessage.messageType.errorHappened, strLst, intLst, date));
        }
 public void setPostDeletionPermissions(postDeletionPermission permission)
 {
     _pdp = permission;
 }