Example #1
0
        public ActionResult GetNewMessages(GetNewMessagesRequestModel request)
        {
            int        parentChatroomId = request.ParentChatroomId;
            int        chatroomId       = request.ChatroomId;
            List <int> existingIds      = request.ExistingMessageIds;

            GetNewMessagesResponseModel response = new GetNewMessagesResponseModel();

            var user = UserService.GetUser(request.UserId);

            if (user == null || user.Role == Models.User_Model.RoleLevel.Blocked)
            {
                response.Logout = true;
            }
            else
            {
                var messageInformationModels = ChatroomService.GetNewMessagesInformation(parentChatroomId, chatroomId, existingIds);

                foreach (var messageInformationModel in messageInformationModels)
                {
                    if (messageInformationModel.IntendedForUserId != -1)
                    {
                        if (messageInformationModel.IntendedForUserId == request.UserId)
                        {
                            response.MessagesInformation.Add(messageInformationModel);
                        }
                    }
                    else
                    {
                        response.MessagesInformation.Add(messageInformationModel);
                    }
                }
            }
            return(Json(response));
        }
Example #2
0
        public static List <ErrorModel> CanUserJoinChatroom(JoinChatroomRequestModel request)
        {
            var errors = new List <ErrorModel>();

            if (request.User.Role == Models.User_Model.RoleLevel.Blocked)
            {
                errors.Add(new ErrorModel("User has been blocked."));
                return(errors);
            }

            Chatroom c = ChatroomService.GetChatroom(request.ChatroomId, request.ParentChatroomId);

            if (c.HasPassword && !c.CheckPasswordHash(GetStringSha256Hash(request.Password)))
            {
                errors.Add(new ErrorModel("Incorrect Password."));
            }
            else if (c.IsAtCapacity)
            {
                errors.Add(new ErrorModel("Chatroom is full."));
            }
            else if (c.IsOnBlacklist(request.User.Username))
            {
                errors.Add(new ErrorModel("User blocked from chatroom."));
            }
            else if (c.DoesHandleExist(request.UserHandle))
            {
                errors.Add(new ErrorModel("User Handle already exists in Chatroom."));
            }

            return(errors);
        }
Example #3
0
        public ActionResult ComposeMessage(ComposeMessageRequestModel request)
        {
            ComposeMessageResponseModel response = new ComposeMessageResponseModel();

            var user = UserService.GetUser(request.UserId);

            if (user == null || user.Role == Models.User_Model.RoleLevel.Blocked)
            {
                response.Logout = true;
            }
            else
            {
                try
                {
                    var m = ChatroomService.SendMessage(request);

                    response.MessageId = m.MessageId;
                    response.Errors.AddRange(m.Errors);
                }
                catch (Exception e)
                {
                    response.AddError(e.ToString());
                }
            }

            return(Json(response));
        }
Example #4
0
        public ActionResult Chat(ChatRequestModel request)
        {
            var response = new PartialViewModel();

            var user = UserService.GetUser(request.User.Id);

            if (user == null || user.Role == Models.User_Model.RoleLevel.Blocked)
            {
                response.Logout = true;
                return(Json(response));
            }

            int chatroomId = 0;

            if (request.RawChatroomIdValue != null)
            {
                chatroomId = request.RawChatroomIdValue.GetHashCode();
            }
            int parentChatroomId = chatroomId; //temporary during initial testing

            string chatroomName = request.ChatroomName;

            if (!ChatroomService.DoesChatroomExist(chatroomId))
            {
                ChatroomService.CreateChatroom(chatroomId, chatroomName);
            }

            var joinErrors = SecurityService.CanUserJoinChatroom(request);

            response.Errors.AddRange(joinErrors);

            if (joinErrors.Count == 0)
            {
                if (!ChatroomService.AddUserToChatroom(chatroomId, parentChatroomId, request.User.Id, request.UserHandle))
                {
                    response.AddError("Error adding user into chatroom.");
                }
            }

            var chatroomModel = new ChatroomModel()
            {
                ChatroomId       = chatroomId,
                ChatroomName     = chatroomName,
                ParentChatroomId = parentChatroomId,
                UserHandle       = request.UserHandle,
                UserId           = request.User.Id
            };

            //response.Data = PartialView("~/Views/Chatroom/_Chat.cshtml", chatroomModel);
            response.Data = RenderPartialViewToString(this.ControllerContext, "~/Views/Chatroom/_Chat.cshtml", chatroomModel);

            return(Json(response));
        }
Example #5
0
        public void Destroy()
        {
            IdleTimer.Enabled = false;
            IdleTimer.Stop();
            IdleTimer.Dispose();

            if (Parent != null)
            {
                Parent.AllSubChatrooms.Remove(Id);
            }

            ChatroomService.RemoveChatroomFromCache(Id);
        }
Example #6
0
        public ActionResult GetJoinChatroomForm(GetJoinChatroomFormRequestModel request)
        {
            var response = new PartialViewModel();

            var model = new GetJoinChatroomFormResponseModel();

            model.HasPassword  = ChatroomService.HasPassword(request.ParentChatroomId, request.ChatroomId);
            model.ChatroomName = ChatroomService.GetChatroomName(request.ParentChatroomId, request.ChatroomId);

            model.NewChatroomId = request.ChatroomId;

            response.Data = RenderPartialViewToString(this.ControllerContext, "~/Views/Chatroom/_JoinChatroomForm.cshtml", model);

            return(Json(response));
        }
Example #7
0
        public ActionResult GetChatroomInformation(GetChatroomInformationRequestModel request)
        {
            int parentChatroomId = request.ParentChatroomId;
            int chatroomId       = request.ChatroomId;
            int userId           = request.UserId;

            ChatroomService.UpdateUserInChatroom(parentChatroomId, chatroomId, userId);

            GetChatroomInformationResponseModel response = new GetChatroomInformationResponseModel()
            {
                UsersInformation            = ChatroomService.GetUsersInformation(parentChatroomId, chatroomId),
                PrivateChatroomsInformation = ChatroomService.GetPrivateChatroomsInformation(parentChatroomId)
            };

            return(Json(response));
        }
Example #8
0
        public ActionResult DirtyLogout(LogoutRequestModel request)
        {
            var response = new LogoutResponseModel();

            if (request.User != null)
            {
                if (request.ChatroomId != -1 && request.ParentChatroomId != -1)
                {
                    ChatroomService.RemoveUserFromChatroom(request.ChatroomId, request.ParentChatroomId, request.User.Id);
                }

                UserService.Logout(request.User.Id);
            }

            return(Json(response));
        }
Example #9
0
        public ActionResult CreateChatroom(CreateChatroomRequestModel request)
        {
            var response = new CreateChatroomResponseModel()
            {
                ChatroomName     = request.ChatroomName,
                ParentChatroomId = request.ParentChatroomId,
                UserId           = request.User.Id
            };

            response.ChatroomId = request.ChatroomName.GetHashCode(); //TODO temporary until DB is linked up

            var errors = ChatroomService.CreatePrivateChatroom(request);

            response.Errors.AddRange(errors);

            return(Json(response));
        }
Example #10
0
        //Helper method for creating a chatroom since MVC uses controller contexts to route the user to the chat partial view page/
        //We don't need that routing here, all we need is the logic or 99% above that line so just replicate it here and
        //This will create a chatroom and add the user to it
        //The chatrrom only exists in memory while the tests are run. Each new build refreshes
        public ChatResponseTestModel createChatroomAndAddUser(ChatRequestModel request)
        {
            var response = new ChatResponseTestModel();

            int chatroomId = 0;

            if (request.RawChatroomIdValue != null)
            {
                chatroomId = request.RawChatroomIdValue.GetHashCode();
            }
            int parentChatroomId = chatroomId; //temporary during initial testing

            string chatroomName = request.ChatroomName;

            if (!ChatroomService.DoesChatroomExist(chatroomId))
            {
                ChatroomService.CreateChatroom(chatroomId, chatroomName);
            }

            var joinErrors = SecurityService.CanUserJoinChatroom(request);

            response.Errors.AddRange(joinErrors);

            if (joinErrors.Count == 0)
            {
                if (!ChatroomService.AddUserToChatroom(chatroomId, parentChatroomId, request.User.Id, request.UserHandle))
                {
                    response.AddError("Error adding user into chatroom.");
                }
            }

            var chatroomModel = new ChatroomModel()
            {
                ChatroomId       = chatroomId,
                ChatroomName     = chatroomName,
                ParentChatroomId = parentChatroomId,
                UserHandle       = request.UserHandle,
                UserId           = request.User.Id
            };

            response.ChatroomModel = chatroomModel;

            return(response);
        }
Example #11
0
        public ActionResult Logout(LogoutRequestModel request)
        {
            var response = new LogoutResponseModel();

            if (request.ChatroomId != -1 && request.ParentChatroomId != -1)
            {
                if (!ChatroomService.RemoveUserFromChatroom(request.ChatroomId, request.ParentChatroomId, request.User.Id))
                {
                    response.AddError("Could not remove user from chatroom.");
                }
            }

            if (!UserService.Logout(request.User.Id))
            {
                response.AddError("Could not logout user.");
            }

            return(Json(response));
        }
Example #12
0
        public Server(IServiceProvider provider)
        {
            _provider = provider;
            _logger   = provider.GetService <ILoggerFactory>()?.CreateLogger("Chat.Server");

            _eventBus = provider.GetRequiredService <IEventBus>();

            var eventLogger = provider.GetService <ILoggerFactory>()?.CreateLogger("Chat.Server.Events");

            _eventBus.GetEventStream <DomainEvent>().Subscribe(e => eventLogger.LogInformation(
                                                                   e.GetType().Name + " " + JsonConvert.SerializeObject(e)));

            _userRepo     = provider.GetRequiredService <IUserRepository>();
            _chatroomRepo = provider.GetRequiredService <IChatroomRepository>();
            _messageRepo  = provider.GetRequiredService <IMessageRepository>();

            _identityService   = provider.GetRequiredService <IdentityService>();
            _chatroomService   = provider.GetRequiredService <ChatroomService>();
            _messageService    = provider.GetRequiredService <MessageService>();
            _userClientService = provider.GetRequiredService <UserClientService>();

            _chatroomService.EnsureGlobalChatroomCreated();
        }
Example #13
0
        public ActionResult JoinChatroom(JoinChatroomRequestModel request)
        {
            int    chatroomId       = request.ChatroomId;
            int    parentChatroomId = request.ParentChatroomId;
            int    userId           = request.UserId;
            string userHandle       = request.UserHandle;

            JoinChatroomResponseModel response = new JoinChatroomResponseModel();

            var joinErrors = SecurityService.CanUserJoinChatroom(request);

            response.Errors.AddRange(joinErrors);

            if (joinErrors.Count == 0)
            {
                ChatroomService.RemoveUserFromChatroom(request.CurrentChatroomId, parentChatroomId, userId);
                ChatroomService.AddUserToChatroom(chatroomId, parentChatroomId, userId, userHandle);
                response.Name       = ChatroomService.GetChatroomName(parentChatroomId, chatroomId);
                response.Id         = chatroomId;
                response.UserHandle = userHandle;
            }

            return(Json(response));
        }
 public ChatroomController(ChatroomService service)
 {
     _service = service ?? throw new ArgumentNullException(nameof(service));
 }
Example #15
0
 public EmptyResult LeaveChatroom(LeaveChatroomRequestModel request)
 {
     ChatroomService.RemoveUserFromChatroom(request.ChatroomId, request.ParentId, request.UserId);
     return(new EmptyResult());
 }
Example #16
0
 public ChatroomsController(UserManager <ChatUser> userManager, ChatroomService service)
 {
     _userManager = userManager;
     _service     = service;
 }