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); }
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); }
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; })); }
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); }
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); }
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); }
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); }