Example #1
0
        /**************************************
        *  Validate开头的函数会抛出错误信息  *
        **************************************/

        /// <summary>
        /// 验证记录的内容合法性
        /// </summary>
        /// <param name="content">记录的内容</param>
        /// <returns></returns>
        private bool ValidateDoingContent(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                Context.ThrowError(new EmptyDoingContentError("content"));
                return(false);
            }

            if (StringUtil.GetByteCount(content) > Consts.Doing_Length)
            {
                Context.ThrowError(new InvalidDoingContentLengthError("content", content, Consts.Doing_Length));
                return(false);
            }

            ContentKeywordSettings keywords = AllSettings.Current.ContentKeywordSettings;

            string keyword = null;

            if (keywords.BannedKeywords.IsMatch(content, out keyword))
            {
                ThrowError(new DoingContentBannedKeywordsError("content", keyword));
                return(false);
            }

            return(true);
        }
Example #2
0
        private bool ValidateText(string text)
        {
            int maxLength = 100;

            if (string.IsNullOrEmpty(text))
            {
                ThrowError(new ImpressionTextEmptyError("text"));
                return(false);
            }

            if (StringUtil.GetByteCount(text) > maxLength)
            {
                ThrowError(new ImpressionTextLengthError("text", text, maxLength));
                return(false);
            }

            ContentKeywordSettings keywords = AllSettings.Current.ContentKeywordSettings;

            string keyword = null;

            if (keywords.BannedKeywords.IsMatch(text, out keyword))
            {
                ThrowError(new ImpressionTextBannedKeywordsError("text", keyword));
                return(false);
            }

            return(true);
        }
        protected override bool SetSettingItemValue(SettingBase setting, System.Reflection.PropertyInfo property)
        {
            bool result = base.SetSettingItemValue(setting, property);

            if (property.Name == "BannedKeywords")
            {
                ContentKeywordSettings keywordSettings = (ContentKeywordSettings)setting;
                keywordSettings.BannedKeywords.SetValue(SecurityUtil.Base64Decode(keywordSettings.BannedKeywords.GetValue()));
            }
            else if (property.Name == "ReplaceKeywords")
            {
                ContentKeywordSettings keywordSettings = (ContentKeywordSettings)setting;
                keywordSettings.ReplaceKeywords.SetValue(SecurityUtil.Base64Decode(keywordSettings.ReplaceKeywords.GetValue()));
            }
            else if (property.Name == "ApprovedKeywords")
            {
                ContentKeywordSettings keywordSettings = (ContentKeywordSettings)setting;
                keywordSettings.ApprovedKeywords.SetValue(SecurityUtil.Base64Decode(keywordSettings.ApprovedKeywords.GetValue()));
            }
            return(result);
        }
Example #4
0
        /// <summary>
        /// 发送一个对话消息,并且根据指定参数决定是否需要同时返回最新消息
        /// </summary>
        /// <param name="operatorID">发送者</param>
        /// <param name="targetUserID">接受者</param>
        /// <param name="contentWithoutEncode">未经html编码的内容</param>
        /// <param name="ip">发送者IP</param>
        /// <param name="processContent">是否处理内容</param>
        /// <param name="getNewMessages">是否需要同时返回最新消息</param>
        /// <param name="lastMessageID">如果需要返回最新消息,则传入客户端</param>
        /// <returns></returns>
        public ChatMessageCollection SendMessage(int operatorID, int targetUserID, string contentWithoutEncode, string ip, bool processContent, bool getNewMessages, int lastMessageID)
        {
#if !Passport
            PassportClientConfig settings = Globals.PassportClient;
            if (settings.EnablePassport)
            {
                ChatMessageProxy[] chatMessages;
                APIResult          result  = null;
                string             content = ProcessChatContent(operatorID, contentWithoutEncode);
                content = content.Replace("{$root}", Globals.FullAppRoot);

                try
                {
                    result = settings.PassportService.Chat_SendMessage(operatorID, targetUserID, content, ip, getNewMessages, lastMessageID, out chatMessages);
                }
                catch (Exception ex)
                {
                    ThrowError(new APIError(ex.Message));
                    return(new ChatMessageCollection());
                }

                if (result.ErrorCode == Consts.ExceptionCode)
                {
                    if (result.Messages.Length > 0)
                    {
                        ThrowError(new CustomError("远程服务器错误, 请稍后重试." + (result.Messages.Length > 0 ? result.Messages[0] : string.Empty)));
                    }
                    return(new ChatMessageCollection());
                }
                else if (result.IsSuccess == false)
                {
                    ThrowError <CustomError>(new CustomError("", result.Messages[0]));
                    return(new ChatMessageCollection());
                }

                ChatMessageCollection messages = new ChatMessageCollection();
                foreach (ChatMessageProxy m in chatMessages)
                {
                    messages.Add(GetChatMessage(m));
                }
                return(messages);
            }
            else
#endif
            {
                if (!AllSettings.Current.ChatSettings.EnableChatFunction)
                {
                    return(new ChatMessageCollection());
                }

                if (operatorID <= 0)
                {
                    ThrowError(new NotLoginError());
                    return(new ChatMessageCollection());
                }

                if (targetUserID <= 0)
                {
                    ThrowError(new UserNotExistsError("targetUserID", targetUserID));
                    return(new ChatMessageCollection());
                }

                if (operatorID == targetUserID)
                {
                    ThrowError(new CustomError("targetUserID", "您不能和自己交谈"));  //临时的
                    return(new ChatMessageCollection());
                }

                if (string.IsNullOrEmpty(contentWithoutEncode) || (contentWithoutEncode = contentWithoutEncode.Trim()) == string.Empty)
                {
                    ThrowError(new EmptyMessageContentError("contentWithoutEncode"));
                    return(new ChatMessageCollection());
                }

                if (contentWithoutEncode.Length > MaxContentLength)
                {
                    ThrowError(new MessageContentLengthError("contentWithoutEncode", contentWithoutEncode, MaxContentLength));
                    return(new ChatMessageCollection());
                }

                if (FriendBO.Instance.InMyBlacklist(targetUserID, operatorID))
                {
                    ThrowError(new InBlackListError());
                    return(new ChatMessageCollection());
                }



                //if (AllSettings.Current.UserPermissionSet.Can(operatorID, UserPermissionSet.Action.UseMessage) == false)
                //{
                //    ThrowError(new NoPermissionUseMessageError());
                //    return false;
                //}
                string content = contentWithoutEncode;
                if (processContent)
                {
                    content = ProcessChatContent(operatorID, content);
                }

                ContentKeywordSettings keywords = AllSettings.Current.ContentKeywordSettings;

                string keyword = null;

                if (keywords.BannedKeywords.IsMatch(content, out keyword))
                {
                    ThrowError(new ChatMessageBannedKeywordsError("content", keyword));
                    return(null);
                }
                ChatMessageCollection newMessages = ChatDao.Instance.SendMessage(operatorID, targetUserID, content, ip, getNewMessages, lastMessageID);

                AuthUser user = UserBO.Instance.GetUserFromCache <AuthUser>(targetUserID);
                if (user != null)
                {
                    user.UnreadMessages++;
                }
                if (OnUsersMessageCountChanged != null)
                {
                    if (user == null)
                    {
                        user = UserBO.Instance.GetAuthUser(targetUserID);
                    }
                    if (user != null)
                    {
                        Dictionary <int, int> counts = new Dictionary <int, int>();
                        counts.Add(user.UserID, user.UnreadMessages);

                        OnUsersMessageCountChanged(counts);
                    }
                }

                ProcessKeyword(newMessages, ProcessKeywordMode.TryUpdateKeyword);

                return(newMessages);
            }
        }