Beispiel #1
0
        public NanoHttpResponse Handle(NanoHttpRequest request)
        {
            if (string.IsNullOrEmpty(request.Content))
            {
                return(new ErrorHandler(StatusCode.BadRequest, "Empty message").Handle(request));
            }

            Hash thread = new Hash(request.Address.Split('/').Last());

            if (thread.Invalid)
            {
                return(new ErrorHandler(StatusCode.BadRequest, "Invalid hash").Handle(request));
            }

            var str = Encoding.UTF8.GetString(request.Connection.Raw);

            str = str.Substring(str.IndexOf("\r\n\r\n") + 4);
            NanoPost post = null;

            if (thread.Value != NanoDB.CategoriesHashValue)
            {
                post = new NanoPost(thread, "[g]" + GetPostHeader() + "[/g]\n" + str);
            }

            else
            {
                post = new NanoPost(thread, str);
            }

            if (post.Invalid)
            {
                NotificationHandler.Instance.AddNotification("Превышен максимальный размер поста.");
                return(new NanoHttpResponse(StatusCode.BadRequest, ""));
            }

            if (SpamDetector.IsSpam(post.Message))
            {
                NotificationHandler.Instance.AddNotification("Ваш пост из-за своего содержания будет считаться спамом.");
                return(new NanoHttpResponse(StatusCode.BadRequest, ""));
            }
            else
            {
                NotificationHandler.Instance.AddNotification(
                    "Сообщение добавлено, " + post.SerializedBytes().Length + " байт (" + post.SerializedString().Length + " симв.)");

                if (_db.AddPost(post))
                {
                    _db.WriteNewPosts(false);
                }

                return(new NanoHttpResponse(StatusCode.Ok, post.GetHash().Value));
            }
        }
Beispiel #2
0
        public void ReadInbox(NanoDB to)
        {
            if (_isReading)
            {
                return;
            }
            _isReading = true;

            if (Directory.Exists(Strings.Download))
            {
                string[] files = Directory.GetFiles(Strings.Download);

                foreach (string f in files)
                {
                    string pathToPng = f;
                    byte[] packed    = null;

                    try
                    {
                        packed = new PngStegoUtil().ReadHiddenBytesFromPng(pathToPng);
                        GC.Collect();
                    }
                    catch
                    {
                        // invalid container
                    }

                    NanoPost[] posts = null;

                    try
                    {
                        posts = NanoPostPackUtil.Unpack(packed);
                    }
                    catch
                    {
                        // inavlid container
                    }

                    bool any = false;

                    if (posts != null)
                    {
                        foreach (var p in posts)
                        {
                            any |= to.AddPost(p);
                        }
                    }

                    if (any)
                    {
                        NotificationHandler.Instance.AddNotification("Извлечены новые сообщения.");
                        to.WriteNewPosts(false);
                    }
                }

                try
                {
                    foreach (string f in files)
                    {
                        File.Delete(f);
                    }
                }
                catch
                {
                }
            }

            _isReading = false;
        }
Beispiel #3
0
        public void ReadInbox(NanoDB to)
        {
            if (_isReading) return;
            _isReading = true;

            if (Directory.Exists(Strings.Download))
            {
                string[] files = Directory.GetFiles(Strings.Download);

                foreach (string f in files)
                {
                    string pathToPng = f;
                    byte[] packed = null;

                    try
                    {
                        packed = new PngStegoUtil().ReadHiddenBytesFromPng(pathToPng);
                        GC.Collect();
                    }
                    catch
                    {
                        // invalid container
                    }

                    NanoPost[] posts = null;

                    try
                    {
                        posts = NanoPostPackUtil.Unpack(packed);
                    }
                    catch
                    {
                        // inavlid container
                    }

                    bool any = false;

                    if (posts != null)
                    {
                        foreach (var p in posts)
                        {
                            any |= to.AddPost(p);
                        }
                    }

                    if (any)
                    {
                        NotificationHandler.Instance.AddNotification("Извлечены новые сообщения.");
                        to.WriteNewPosts(false);
                    }
                }

                try
                {
                    foreach (string f in files)
                    {
                        File.Delete(f);
                    }
                }
                catch
                {
                }
            }

            _isReading = false;
        }