示例#1
0
        public void AddOrUpdateChatPermission(AddOrUpdateChatPermissionOptions options)
        {
            if (string.IsNullOrEmpty(options.UserLogin) ||
                string.IsNullOrEmpty(options.InitiatorLogin) ||
                !this.userService.DoesUserExist(options.UserLogin) ||
                (options.InitiatorLogin != SYSTEM_PERMISSION &&
                 !this.userService.DoesUserExist(options.InitiatorLogin)))
            {
                throw new ArgumentException($"Chat #{options.ChatId.ToString()} or " +
                                            $"user #{options.UserLogin.ToString()} or" +
                                            $"initiator user #{options.InitiatorLogin.ToString()} does not exist");
            }

            if (options.InitiatorLogin != SYSTEM_PERMISSION &&
                options.InitiatorLogin != options.UserLogin &&
                !DoesUserHavePermission(options.InitiatorLogin, options.ChatId, ChatPermissionTypes.Moderate))
            {
                throw new InvalidOperationException($"User {options.InitiatorLogin} does not have permissions" +
                                                    $"to assign to {options.UserLogin} new chat permission");
            }

            var entityChatPermission = this.chatPermissionRepository.GetChatPermission(options.UserLogin, options.ChatId);

            entityChatPermission = entityChatPermission ?? mapper.Map <DataEntities.ChatPermission>(options);
            entityChatPermission.PermissionType = (int)options.PermissionType;
            entityChatPermission.ChatUser       = this.userRepository.GetUser(options.UserLogin);
            entityChatPermission.Chat           = this.chatRepository.GetChat(options.ChatId);
            entityChatPermission.LastUpdate     = DateTime.Now;

            this.chatPermissionRepository.SaveChatPermission(entityChatPermission);
        }
示例#2
0
        private DataEntities.Chat CreateChat(CreateOrUpdateChatOptions options)
        {
            var chatMemberLogins = (IList <string>)options.ExtraData;

            var chat = mapper.Map <DataEntities.Chat>(options);

            chat.LastUpdate = DateTime.Now;
            chatRepository.SaveChat(chat);

            var initiator           = this.userService.GetUser(options.InitiatorLogin);
            var adminChatPermission = new AddOrUpdateChatPermissionOptions(
                userLogin: initiator.Login,
                chatId: chat.ChatId,
                permissionType: ChatPermissionTypes.Administrate,
                initiatorLogin: ChatPermissionService.SYSTEM_PERMISSION,
                lastUpdate: DateTime.Now);

            this.chatPermissionService.AddOrUpdateChatPermission(adminChatPermission);

            foreach (var userLogin in chatMemberLogins)
            {
                var userChatPermission = new AddOrUpdateChatPermissionOptions(
                    userLogin: userLogin,
                    chatId: chat.ChatId,
                    permissionType: chat.ChatType == (int)ChatTypes.PrivateChat
                        ? ChatPermissionTypes.Administrate
                        : ChatPermissionTypes.ReadWrite,
                    initiatorLogin: initiator.Login,
                    lastUpdate: DateTime.Now);
                this.chatPermissionService.AddOrUpdateChatPermission(userChatPermission);
            }

            return(chat);
        }
示例#3
0
        private DataEntities.Chat UpdateChat(CreateOrUpdateChatOptions options)
        {
            var chat = this.chatRepository.GetChat(options.ChatId);

            chat.Title      = options.Title;
            chat.LastUpdate = DateTime.Now;
            this.chatRepository.SaveChat(chat);

            var chatMemberLogins    = (IList <string>)options.ExtraData;
            var existingChatMembers = chat.ChatPermissions
                                      .Where(chp => chp.Chat.ChatId == chat.ChatId)
                                      .Select(chp => chp.ChatUser.Login)
                                      .ToList();
            var newChatMembers = chatMemberLogins
                                 .Where(nchm => !existingChatMembers.Contains(nchm));

            foreach (var userLogin in newChatMembers)
            {
                var userChatPermission = new AddOrUpdateChatPermissionOptions(
                    userLogin: userLogin,
                    chatId: chat.ChatId,
                    permissionType: chat.ChatType == (int)ChatTypes.PrivateChat
                        ? ChatPermissionTypes.Administrate
                        : ChatPermissionTypes.ReadWrite,
                    initiatorLogin: options.InitiatorLogin,
                    lastUpdate: DateTime.Now);
                this.chatPermissionService.AddOrUpdateChatPermission(userChatPermission);
            }

            return(chat);
        }
        public OperationResult UpdateUserPermissionInChat(AddOrUpdateChatPermissionOptions options)
        {
            OperationResult operationResult;

            try
            {
                var domainOptions = mapper.Map <DomainOptions.AddOrUpdateChatPermissionOptions>(options);
                this.chatPermissionService.AddOrUpdateChatPermission(domainOptions);

                if (this.chatServiceCallbacks.ContainsKey(options.ChatMemberLogin))
                {
                    var domainResultPermission = this.chatPermissionService.GetChatPermission(
                        options.ChatMemberLogin,
                        options.ChatId);
                    var resultPermissionOptions = this.mapper.Map <AddOrUpdateChatPermissionOptions>(domainResultPermission);
                    var userChatServiceCallback = this.chatServiceCallbacks[options.ChatMemberLogin];
                    userChatServiceCallback.UpdateChatPermission(resultPermissionOptions);
                    if (options.PermissionType == ChatPermissionTypes.Banned ||
                        options.PermissionType == ChatPermissionTypes.None)
                    {
                        userChatServiceCallback.RemoveChat(domainOptions.ChatId);
                    }
                }

                operationResult = new OperationResult(OperationResultTypes.Success);
            }
            catch (Exception exception)
            {
                operationResult = new OperationResult(
                    operationResultType: OperationResultTypes.Failure,
                    message: exception.ToString());
            }

            return(operationResult);
        }
示例#5
0
        public void UpdateChatPermission(AddOrUpdateChatPermissionOptions options)
        {
            var chatPermission = this.mapper.Map <ChatPermission>(options);

            if (this.userService.IsCurrentClientUser(options.ChatMemberLogin))
            {
                this.userService.SaveClientChatPermission(chatPermission);
            }

            ChatEventsConnector.OnUpdateChatPermission(chatPermission);
        }
        public AddOrUpdateChatPermissionOptions CreateAddOrUpdateChatPermissionOptions(
            string userLogin,
            int chatId,
            ChatPermissionTypes permissionType,
            string initiatorLogin)
        {
            var options = new AddOrUpdateChatPermissionOptions();

            options.ChatId          = chatId;
            options.ChatMemberLogin = userLogin;
            options.PermissionType  = permissionType;
            options.InitiatorLogin  = initiatorLogin;
            return(options);
        }