Пример #1
0
        public async Task <RepositoryResult <HttpResponseMessage> > CancelReplace(Guid replaceCode)
        {
            RepositoryResult <HttpResponseMessage> result = new RepositoryResult <HttpResponseMessage>();

            result.Responce = new HttpResponseMessage(HttpStatusCode.Moved);
            result.Responce.Headers.Location = new Uri(string.Format("{0}/#/Home", DNS));

            User user = this.context.GetAll <User>().FirstOrDefault(u => u.ReplaceCode == replaceCode);

            if (user == null)
            {
                result.ResultType = RepositoryResultType.Bad;

                logger.WriteError(string.Format("Пользователь с кодом подтверждения {0} не найден.", replaceCode));
            }
            else
            {
                result.ResultType = RepositoryResultType.OK;

                user.ReplaceCode = Guid.Empty;

                await this.context.SaveChangesAsync();


                logger.WriteInformation(string.Format("Произведена отмена смены пароля пользователя с кодом подтверждения {0}", replaceCode));
            }

            return(result);
        }
Пример #2
0
        public async Task <RepositoryResult <ControllerResult> > Replace(Replace model)
        {
            User user = this.context.GetAll <User>().FirstOrDefault(u => u.ReplaceCode == model.ReplaceCode);

            RepositoryResult <ControllerResult> result = new RepositoryResult <ControllerResult>();

            if (user == null || user.ReplaceCode == Guid.Empty)
            {
                logger.WriteError(string.Format("Пользователь с кодом подтверждения {0} не найден.", model.ReplaceCode));

                result.ResultType = RepositoryResultType.Bad;
                result.Responce   = new ControllerResult()
                {
                    IsSucces = false,
                    Message  = "Код не найден, проверьте правильность введённого кода. Если всё правильно попробуйте повторить операцию. Если ошибка не исчезает обратитесь в техническую поддержку."
                };
            }
            else
            {
                Salt salt = user.Salt;

                this.context.Delete(salt);

                user.Salt         = new Salt();
                user.PasswordHash = User.HashPassword(model.Password, user.Salt);
                user.ReplaceCode  = Guid.Empty;

                int changes = await this.context.SaveChangesAsync();

                if (changes == 0)
                {
                    logger.WriteError("Данные не были сохранены.");

                    result.ResultType = RepositoryResultType.Bad;
                    result.Responce   = new ControllerResult()
                    {
                        IsSucces = false,
                        Message  = "Ошибка на серевере. Сервер временно недоступен, приносим свои извинения."
                    };
                }
                else
                {
                    logger.WriteInformation("Пароль успешно изменён.");

                    result.ResultType = RepositoryResultType.OK;
                    result.Responce   = new ControllerResult()
                    {
                        IsSucces = true,
                        Message  = "Пароль успешно сменён, пожалуйста войдите в систему."
                    };
                }
            }

            return(result);
        }
Пример #3
0
        public async Task <RepositoryResult <User, ControllerResult> > SignIn(SignIn model)
        {
            return(await Task.Run(() =>
            {
                RepositoryResult <User, ControllerResult> result = new RepositoryResult <User, ControllerResult>();

                User usr = this.context.GetAll <User>().FirstOrDefault((u) => u.Email == model.Email);

                if (usr == null)
                {
                    result.ResultType = RepositoryResultType.Bad;
                    result.Responce = new ControllerResult()
                    {
                        IsSucces = false,
                        Message = "Неверный логин или пароль."
                    };

                    logger.WriteError(string.Format("Пользователь с почтой {0} не найден.", model.Email));
                }
                else
                {
                    string hashPassword = User.HashPassword(model.Password, usr.Salt);

                    if (usr.PasswordHash == hashPassword)
                    {
                        result.ResultType = RepositoryResultType.OK;
                        result.Value = usr;
                        result.Responce = new ControllerResult()
                        {
                            IsSucces = true,
                            Message = "/#/Home"
                        };

                        logger.WriteInformation(string.Format("Пользователь с почтой {0} успешно вошёл в систему.", model.Email));
                    }
                    else
                    {
                        result.ResultType = RepositoryResultType.Bad;
                        result.Responce = new ControllerResult()
                        {
                            IsSucces = false,
                            Message = "Неверный логин или пароль."
                        };

                        logger.WriteError("Хэши паролей не совпадают");
                    }
                }

                return result;
            }));
        }
Пример #4
0
        public async Task <RepositoryResult <User, HttpResponseMessage> > Activation(Guid id)
        {
            RepositoryResult <User, HttpResponseMessage> result = new RepositoryResult <User, HttpResponseMessage>();

            NotActiveUser notActiveUser = this.context.Get <NotActiveUser, Guid>(id);

            if (notActiveUser == null)
            {
                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Moved);

                response.Headers.Location = new Uri(base.MovedError(404, "Пользователь не найден"));

                result.Responce   = response;
                result.ResultType = RepositoryResultType.Bad;

                logger.WriteError(string.Format("Не активированный пользователь с id = {0} не найден"));
            }
            else
            {
                User newUser = new User(notActiveUser);
                this.context.Delete(notActiveUser);
                await this.context.SaveChangesAsync();


                this.logger.WriteInformation(string.Format("Пользователь с id = {0} и ФИО = {1} успешно активировался, теперь id = {2}",
                                                           notActiveUser.Id,
                                                           newUser.FullName,
                                                           newUser.Id));

                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Moved);
                response.Headers.Location = new Uri(string.Format("{0}/#/SignIn", DNS));

                result.Responce   = response;
                result.Value      = newUser;
                result.ResultType = RepositoryResultType.OK;
            }
            return(result);
        }
Пример #5
0
        public async Task <RepositoryResult <News, ControllerResult> > CreateNews(CreateNews model)
        {
            RepositoryResult <News, ControllerResult> result = new RepositoryResult <News, ControllerResult>();

            MatchCollection matches   = Regex.Matches(model.Content, "<img src=\"" + @".+?" + "\"" + @"[.\s]*/>");
            List <string>   urls      = new List <string>(model.Urls);
            List <string>   usingUrls = new List <string>();

            News news = new News()
            {
                Title = model.Title
            };

            List <Image> images = new List <Image>();

            foreach (Match match in matches)
            {
                string url = Regex.Match(match.ToString(), "src=\"" + @".+?" + "\"").ToString()
                             .Replace("src=\"", string.Empty)
                             .Replace("\"", string.Empty)
                             .Replace(DNS, string.Empty);

                if (urls.Contains(url) || usingUrls.Contains(url))
                {
                    if (usingUrls.Contains(url))
                    {
                        continue;
                    }
                    else
                    {
                        usingUrls.Add(url);
                    }

                    urls.Remove(url);

                    string serverPath = HttpContext.Current.Server.MapPath(url);

                    string fileName      = Path.GetFileName(serverPath);
                    string newServerPath = HttpContext.Current.Server.MapPath(string.Format("~/Bundles/app/img/news/{0}", news.Id));

                    if (!Directory.Exists(newServerPath))
                    {
                        Directory.CreateDirectory(newServerPath);
                    }

                    newServerPath = Path.Combine(newServerPath, fileName);

                    try
                    {
                        File.Move(serverPath, newServerPath);

                        this.logger.WriteInformation(string.Format("Файл успешно пермещён с {0} в {1}", serverPath, newServerPath));
                    }
                    catch (Exception ex)
                    {
                        this.logger.WriteError(ex, string.Format("Ошибка при перемещении файла по расположению {0} в {1}", serverPath, newServerPath));

                        result.Responce = new ControllerResult()
                        {
                            IsSucces = false,
                            Message  = "Ошибка на серевере. Сервер временно недоступен, приносим свои извинения."
                        };

                        result.ResultType = RepositoryResultType.Bad;

                        return(result);
                    }

                    string newUrl = string.Format("/Bundles/app/img/news/{0}/{1}", news.Id, fileName);

                    model.Content = model.Content.Replace(url, newUrl);

                    images.Add(new Image()
                    {
                        URL = newUrl
                    });
                }
                else if (url.Contains("http://") || url.Contains("https://"))
                {
                    string path = HttpContext.Current.Server.MapPath(string.Format("~/Bundles/app/img/news/{0}/", news.Id));

                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                    string fileName = string.Format("{0}_{1}", Guid.NewGuid(), Guid.NewGuid());
                    path = Path.Combine(path, fileName);

                    using (WebClient WC = new WebClient())
                    {
                        try
                        {
                            WC.DownloadFile(url, path);
                            this.logger.WriteInformation(string.Format("Загружен файл с внешнего ресурса по ссылке {0}.", url));
                        }
                        catch (Exception ex)
                        {
                            string error = string.Format("Ошибка при загрузке файла с внешнего ресурса по ссылке {0}.", url);
                            this.logger.WriteError(ex, error);

                            result.Responce = new ControllerResult()
                            {
                                IsSucces = false,
                                Message  = error
                            };

                            result.ResultType = RepositoryResultType.Bad;

                            return(result);
                        }
                    }

                    string newUrl = string.Format("/Bundles/app/img/news/{0}/{1}", news.Id, fileName);

                    model.Content = model.Content.Replace(url, newUrl);

                    images.Add(new Image()
                    {
                        URL = newUrl
                    });
                }
                else
                {
                    result.Responce = new ControllerResult()
                    {
                        IsSucces = false,
                        Message  = "Ошибка на серевере. Сервер временно недоступен, приносим свои извинения."
                    };

                    result.ResultType = RepositoryResultType.Bad;

                    return(result);
                }
            }

            news.Images = images;

            string userName = HttpContext.Current.User.Identity.Name;

            User user = context.GetAll <User>().FirstOrDefault(u => u.UserName == userName);

            news.User    = user;
            news.Content = model.Content;

            context.Add(news);

            await this.context.SaveChangesAsync();

            foreach (string url in urls)
            {
                string path = HttpContext.Current.Server.MapPath(url);

                try
                {
                    File.Delete(path);
                    this.logger.WriteInformation(string.Format("Удалён файл по расположению", path));
                }
                catch (Exception ex)
                {
                    this.logger.WriteError(ex, string.Format("Ошибка удаления файла по расположению", path));
                }
            }


            result.Responce = new ControllerResult()
            {
                IsSucces = true,
                Message  = string.Format("/#/News/{0}", news.Id)
            };

            result.Value = news;

            result.ResultType = RepositoryResultType.OK;

            return(result);
        }
Пример #6
0
        public async Task <RepositoryResult <ControllerResult> > RegistartionAsync(NotActiveUser user)
        {
            RepositoryResult <ControllerResult> result = new RepositoryResult <ControllerResult>();

            NotActiveUser isHaveUser       = context.GetAll <NotActiveUser>().FirstOrDefault((u) => u.Email == user.Email);
            User          isHaveActiveUser = context.GetAll <User>().FirstOrDefault((u) => u.Email == user.Email);

            if (isHaveUser != null || isHaveActiveUser != null)
            {
                result.ResultType = RepositoryResultType.Bad;

                result.Responce = new ControllerResult()
                {
                    IsSucces = false,
                    Message  = string.Format("Почта {0} уже занята.", user.Email)
                };

                return(result);
            }

            try
            {
                string href = string.Format("{0}/api/User/Activation?id={1}", DNS, user.Id);

                base.SendMessage(
                    user.Email,
                    "Solo-grupp подтверждение аккаунта",
                    string.Format("<a href=\"{0}\">{0}</a>", href),
                    true);

                this.logger.WriteInformation(string.Format("Зарегестрировался новый пользователь id = {0}. Письмо подтверждения отправлено на {1}.", user.Id, user.Email));

                result.ResultType = RepositoryResultType.OK;

                result.Responce = new ControllerResult()
                {
                    IsSucces = true,
                    Message  = string.Format("Письмо с подтверждением отправлено на {0}.", user.Email)
                };

                context.Add(user);

                int changes = await context.SaveChangesAsync();

                if (changes == 0)
                {
                    result.ResultType = RepositoryResultType.Bad;

                    result.Responce = new ControllerResult()
                    {
                        IsSucces = false,
                        Message  = "Ошибка на серевере. Сервер временно недоступен, приносим свои извинения."
                    };

                    return(result);
                }
            }
            catch (Exception ex)
            {
                this.logger.WriteError(ex, string.Format("Ошибка при отправке сообщения на {0}.", user.Email));

                result.ResultType = RepositoryResultType.Bad;

                result.Responce = new ControllerResult()
                {
                    IsSucces = false,
                    Message  = string.Format("Не удалось отправить письмо на {0}.", user.Email)
                };
            }

            return(result);
        }
Пример #7
0
        public async Task <RepositoryResult <ControllerResult> > Replace(string email)
        {
            User user = this.context.GetAll <User>().FirstOrDefault(u => u.Email == email);

            RepositoryResult <ControllerResult> result = new RepositoryResult <ControllerResult>();

            if (user == null)
            {
                result.ResultType = RepositoryResultType.Bad;
                result.Responce   = new ControllerResult()
                {
                    IsSucces = false,
                    Message  = string.Format("Пользователь с почтой {0} не найден.", email)
                };
            }
            else
            {
                Guid replaceCode = Guid.NewGuid();

                user.ReplaceCode = replaceCode;

                this.context.Update(user);

                int changes = await this.context.SaveChangesAsync();

                if (changes == 0)
                {
                    result.ResultType = RepositoryResultType.Bad;
                    result.Responce   = new ControllerResult()
                    {
                        IsSucces = false,
                        Message  = "Ошибка на серевере. Сервер временно недоступен, приносим свои извинения."
                    };

                    logger.WriteError("Данные не были сохранены.");

                    return(result);
                }

                try
                {
                    base.SendMessage(
                        user.Email,
                        "Solo-grupp смена пароля.",

                        string.Format("<span>Ваш код подтверждения: {0}</span><br/><span>Если вы не запрашивали смены пароля, перейдите по ссылке : <a href=\"{1}\">{1}</a></span>",
                                      replaceCode,
                                      string.Format("{0}/api/user/cancelReplace?replaceCode={1}", DNS, replaceCode)),

                        true
                        );
                }
                catch (Exception ex)
                {
                    logger.WriteError(ex, string.Format("Не удалось отправить сообщение с кодом подтверждения на {0}.", email));

                    result.ResultType = RepositoryResultType.Bad;
                    result.Responce   = new ControllerResult()
                    {
                        IsSucces = false,
                        Message  = "Ошибка на серевере. Сервер временно недоступен, приносим свои извинения."
                    };
                }


                result.ResultType = RepositoryResultType.OK;
                result.Responce   = new ControllerResult()
                {
                    IsSucces = true,
                    Message  = string.Format("На вашу почту {0} отправлено письмо с кодом подтверждения.")
                };
            }

            logger.WriteInformation(string.Format("Отправлено письмо с кодом подтверждения на {0}", email));

            return(result);
        }