protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterAuth(); Database.SetInitializer<UnityContext>(new InitUnityDb()); //initialize now //это позволяет отлавливать ошибки с БД сразу же, а не потом. var context = new UnityContext(false); // опасный трай. если вдруг на сервере сработает -- вся база умрет. // наверное. // но без этого локальная не работает. // файл с бд отсутствует, а база данных почему-то есть. // ниже строчка с дропом должна быть всегда закомментирована в гите на всякий случай. // при необходимости запустить локально -- у себя локально раскомментировать. // это лучшее решение, которое я придумал try { context.UnityStatus.ToArray(); } catch (DataException) { //context.Database.Delete(); context = new UnityContext(false); context.UnityStatus.ToArray(); } }
public ActionResult Delete(int gameId) { var context = new UnityContext(); var game = context.GameResults.FirstOrDefault(r => r.Id == gameId); if (game == null) { ViewBag.Message = "игра не найдена"; return RedirectToAction("DeleteGame"); } context.GameResults.Remove(game); context.SaveChanges(); ViewBag.Message = "Игра удалена"; return RedirectToAction("DeleteGame"); }
public ActionResult CleanUp(FormCollection collection) { if (collection["UserName"] != User.Identity.Name) { ViewBag.Message = "Неверно введено ваше имя пользователя"; return View(); } var context = new UnityContext(); foreach (var value in context.GameResults) context.GameResults.Remove(value); context.SaveChanges(); ViewBag.Message = "Все результаты игр удалены."; return View(); }
public ActionResult PushResult(GameResultInfo result) { if (result.PushPassword != WebConstants.WebPassword) return new ContentResult { Content = "Password fail" }; var context = new UnityContext(); var users = context.UserProfiles.ToArray(); var tags = users.Select(u => u.CvarcTag).ToArray(); if (result.Players.Length == 2) { if (!tags.Contains(result.Players[0].CvarcTag) || !tags.Contains(result.Players[1].CvarcTag)) return new ContentResult {Content = "tag fail"}; context.GameResults.Add(new GameResults { Time = WebConstants.GetCurrentTime(), LeftPlayerUserName = users.First(u => u.CvarcTag == result.Players[0].CvarcTag).UserName, RightPlayerUserName = users.First(u => u.CvarcTag == result.Players[1].CvarcTag).UserName, LeftPlayerScores = result.Players[0].Score, RightPlayerScores = result.Players[1].Score, LogFileName = result.LogFileName, Type = result.Tag, Subtype = result.Subtag }); context.SaveChanges(); return new ContentResult {Content = "successful"}; } var player = result.Players[0]; if (!tags.Contains(player.CvarcTag)) return new ContentResult { Content = "tag fail" }; context.GameResults.Add(new GameResults { Time = WebConstants.GetCurrentTime(), LeftPlayerUserName = users.First(u => u.CvarcTag == player.CvarcTag).UserName, LeftPlayerScores = player.Score, LogFileName = result.LogFileName, Type = result.Tag, Subtype = result.Subtag }); context.SaveChanges(); return new ContentResult { Content = "successful" }; }
public ActionResult UnityStatus() { var context = new UnityContext(); var hourAgo = WebConstants.GetCurrentTime() - TimeSpan.FromHours(1); var lastHoursGames = context.GameResults.Where(r => r.Time > hourAgo); var gamesCount = lastHoursGames.Count(); var uniquePlayersCount = lastHoursGames.Select(r => r.LeftPlayerUserName) .Union(lastHoursGames.Select(r => r.RightPlayerUserName)) .Count(); var status = context.UnityStatus.First(); var model = new UnityStatistics { IsOnline = status.Online, GamePlayed = gamesCount, UniquePlayers = uniquePlayersCount, UpTime = status.Online ? status.UpTime : null }; return PartialView("_UnityStatusPartial", model); }
public ActionResult RegisterUser(RegisterModel model) { if (WebSecurity.UserExists(model.UserName)) { ViewBag.Message = "Такой пользователь уже есть!"; return View(model); } if (!RegisterModel.IsCorrectUserName(model.UserName)) { ViewBag.Message = "В имени пользователя допустимы только рус/англ буквы, точка, пробел, земля и дефис."; return View(model); } WebSecurity.CreateUserAndAccount(model.UserName, model.Password); var context = new UnityContext(); context.UserProfiles.First(z => z.UserName == model.UserName).CvarcTag = Guid.NewGuid().ToString(); context.SaveChanges(); ViewBag.Message = "Аккаунт создан успешно"; return View(); }
public ActionResult ForgotPassword(string email) { var user = new UnityContext().UserProfiles.FirstOrDefault(u => u.Email == email); if (user == null) { ViewBag.Message = "Пользователя с таким email не существует."; return View(); } var token = WebSecurity.GeneratePasswordResetToken(user.UserName); string body = "Hello! \nYour username: "******"\nYour token: " + token; ViewBag.Message = TrySendEmail(email, "Password recovery", body) ? "Письмо отправлено." : "Произошла ошибка отправки письма. Обратитесь к администратору :("; return View(); }
public ActionResult UploadSolution(SimpleFileView simpleFileView) { if (!Directory.Exists(WebConstants.BasePath + WebConstants.RelativeSolutionsPath)) Directory.CreateDirectory(WebConstants.BasePath + WebConstants.RelativeSolutionsPath); if (simpleFileView.UploadedFile == null) { ViewBag.Message = "Ошибка: Выберете файл для загрузки!"; return View(simpleFileView); } if (simpleFileView.UploadedFile.ContentLength > 7 * 512 * 1024) // 3.5 MB { ViewBag.Message = "Ошибка: Файл слишком большой! Максимальный размер 3.5 МБ. Попробуйте удалить все бинарные файлы из архива."; return View(simpleFileView); } var path = WebConstants.BasePath + WebConstants.RelativeSolutionsPath; var extention = simpleFileView.UploadedFile.FileName.Split('.').Last(); if (extention != "zip") { ViewBag.Message = "Ошибка: вы должны предоставить архив с решением в формате *.zip"; return View(simpleFileView); } var expectedFileName = User.Identity.Name + "." + extention; simpleFileView.UploadedFile.SaveAs(path + expectedFileName); var context = new UnityContext(); context.UserProfiles.First(u => u.UserName == User.Identity.Name).SolutionLoaded = WebConstants.GetCurrentTime(); context.SaveChanges(); ViewBag.Message = "Решение было загружено успешно!"; return View(simpleFileView); }
public ActionResult TournamentResult() { var collection = new UnityContext().GameResults.Where(r => r.Type == "tournament"); return View(new TournamentResults(collection.ToList(), WebConstants.CountOfPlayoffPlayers)); }
private string GetLink(string username) { var user = new UnityContext().UserProfiles.FirstOrDefault(u => u.UserName == username); return user == null ? null : user.SocialLink; }
public ActionResult SetAdditionalInfo(string email, string socialLink) { /*Смысл примерно такой: если пользователь указал что-то -- меняем всегда. Если не указал -- проверяем на то, что он уже не пустой. Если он уже пустой -- принудительно просим ввести еще раз. Если нет -- все норм*/ var context = new UnityContext(); var user = context.UserProfiles.First(u => u.UserName == User.Identity.Name); bool changed = false; if (!string.IsNullOrEmpty(email)) { user.Email = email; changed = true; } else if (string.IsNullOrEmpty(user.Email)) { ViewBag.Message = "Вам нужно указать email"; return View(user); } if (changed) context.SaveChanges(); if (!string.IsNullOrEmpty(socialLink)) { if (!socialLink.StartsWith("http")) socialLink = "http://" + socialLink; user.SocialLink = socialLink; changed = true; } else if (string.IsNullOrEmpty(user.SocialLink)) { ViewBag.Message = "Вам нужно указать ссылку на соц сеть"; return View(user); } if (changed) context.SaveChanges(); return RedirectToAction("Manage"); }
public ActionResult SetAdditionalInfo() { var user = new UnityContext().UserProfiles.First(u => u.UserName == User.Identity.Name); return View(user); }
public ActionResult Register(RegisterModel model) { if (!WebConstants.IsRegistrationAvailable) return View(); if (!ModelState.IsValid) return View(model); // Attempt to register the user try { if (!RegisterModel.IsCorrectUserName(model.UserName)) { ViewBag.Message = "В имени пользователя допустимы только рус/англ буквы, точка, пробел, земля и дефис."; return View(model); } WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new {Email = model.Email}); var context = new UnityContext(); context.UserProfiles.First(z => z.UserName == model.UserName).CvarcTag = Guid.NewGuid().ToString(); context.SaveChanges(); WebSecurity.Login(model.UserName, model.Password); return RedirectToAction("Index", "Home"); } catch (MembershipCreateUserException e) { ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); } // If we got this far, something failed, redisplay form return View(model); }
public ActionResult RecreateCvarcTag() { if (!WebConstants.IsRecreateTagAvailable) return RedirectToAction("Manage", new {Message = ManageMessageId.RecreateCvarcTagFail}); var context = new UnityContext(); context.UserProfiles.First(u => u.UserName == User.Identity.Name).CvarcTag = Guid.NewGuid().ToString(); context.SaveChanges(); return RedirectToAction("Manage", new {Message = ManageMessageId.RecreateCvarcTagSuccess}); }
// // GET: /Account/Manage public ActionResult Manage(ManageMessageId? message) { var context = new UnityContext(); var user = context.UserProfiles.FirstOrDefault(z => z.UserName == User.Identity.Name); if (!User.IsInRole("Admin") && !User.IsInRole("SuperAdmin") && (string.IsNullOrEmpty(user.Email) || string.IsNullOrEmpty(user.SocialLink))) { ViewBag.Message = "Нам необходима следующая информация о вас:"; return RedirectToAction("SetAdditionalInfo"); } ViewBag.CvarcTag = (user == null || string.IsNullOrEmpty(user.CvarcTag)) ? "У вас нет кварк тега и вы не можете играть. Возможно, что-то пошло не так." : user.CvarcTag; ViewBag.Email = user.Email; ViewBag.SocialLink = user.SocialLink; ViewBag.PlayedGames = context.GameResults .Where(r => r.LeftPlayerUserName == User.Identity.Name || r.RightPlayerUserName == User.Identity.Name) .ToArray(); ViewBag.SolutionLoadedTime = user.SolutionLoaded == null ? "неизвестно" : user.SolutionLoaded.ToString(); var baseFileName = WebConstants.BasePath + WebConstants.RelativeSolutionsPath + User.Identity.Name; ViewBag.SolutionExists = System.IO.File.Exists(baseFileName + ".zip") || System.IO.File.Exists(baseFileName + ".rar"); ViewBag.StatusMessage = message == ManageMessageId.ChangePasswordSuccess ? "Ваш пароль изменен." : message == ManageMessageId.SetPasswordSuccess ? "Ваш пароль установлен." : message == ManageMessageId.RemoveLoginSuccess ? "Дополнительный способ входа удален." : message == ManageMessageId.RecreateCvarcTagSuccess ? "Вам присвоен новый CvarcTag. Старый больше не активен." : message == ManageMessageId.RecreateCvarcTagFail ? "Вы не можете сейчас пересоздать свой CvarcTag. Вероятно, потому что турнир уже начался" : ""; ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); ViewBag.ReturnUrl = Url.Action("Manage"); return View(); }
public ActionResult DeleteGamesByFilter(FormCollection collection) { var gameContext = new UnityContext(); var contextChanged = false; double minutesToDelete; if (double.TryParse(collection["Time"], out minutesToDelete)) { var timeToDeleteFrom = WebConstants.GetCurrentTime() - TimeSpan.FromMinutes(minutesToDelete); var gamesToDeleteByTime = gameContext.GameResults.Where(r => r.Time > timeToDeleteFrom).ToArray(); contextChanged = gamesToDeleteByTime.Length > 0; foreach (var game in gamesToDeleteByTime) gameContext.GameResults.Remove(game); } string tag = collection["Tag"]; string subtag = collection["Subtag"]; var gamesToDelete = string.IsNullOrEmpty(subtag) ? gameContext.GameResults.Where(r => r.Type == tag).ToArray() : gameContext.GameResults.Where(r => r.Type == tag && r.Subtype == subtag).ToArray(); contextChanged = contextChanged || gamesToDelete.Length > 0; foreach (var game in gamesToDelete) gameContext.GameResults.Remove(game); if (contextChanged) gameContext.SaveChanges(); return View(); }
public ActionResult SoloResult() { var collection = new UnityContext().GameResults.Where(r => r.RightPlayerUserName == null).OrderByDescending(r => r.Time).ToArray(); return View(collection); }
public static string GetLinkForUser(string username) { var user = new UnityContext().UserProfiles.FirstOrDefault(u => u.UserName == username); return(user == null ? null : user.SocialLink); }
public ActionResult UploadSolution() { var baseFileName = WebConstants.BasePath + WebConstants.RelativeSolutionsPath + User.Identity.Name; var solutionExists = System.IO.File.Exists(baseFileName + ".zip"); if (solutionExists) { var time = new UnityContext().UserProfiles.First(u => u.UserName == User.Identity.Name).SolutionLoaded; string valueToDisplay = time == null ? "неизвестно" : time.ToString(); ViewBag.Message = "Ваше решение уже загружено. Время загрузки " + valueToDisplay + ". Вы можете его перезаписать. В этом случае, старое решение будет недоступно."; } return View(new SimpleFileView()); }
public ActionResult GetAllUsers() { var context = new UnityContext(); var users = context.UserProfiles.ToArray(); return View(users); }
public ActionResult GroupResults() { var collection = new UnityContext().GameResults.Where(r => r.Type == "group"); return View(new GroupResults(collection.ToList())); }
public ActionResult RegisterManyUsers(string users) { var splited = users.Split(new[] {'\n', '\r'}, StringSplitOptions.RemoveEmptyEntries) .Where(l => !string.IsNullOrEmpty(l)).Select(line => line.Split(';')).ToArray(); var uncorrect = splited.Where(s => s.Length < 2 || !RegisterModel.IsCorrectUserName(s[0]) || s[1].Length < 6 || WebSecurity.UserExists(s[0])) .ToArray(); if (uncorrect.Any()) { ViewBag.Message = "Что-то не так(пароль меньше 6 или не указан, в имени некорректные символы, пользователь уже сущ-вует) для пользователей: "; foreach (var value in uncorrect) ViewBag.Message += string.Join(";", value); return View(); } ViewBag.Message = ""; foreach (var value in splited) ViewBag.Message += WebSecurity.CreateUserAndAccount(value[0], value[1]); var userNames = splited.Select(s => s[0]); var context = new UnityContext(); foreach (var value in splited) { var name = value[0]; var user = context.UserProfiles.First(u => u.UserName == name); user.CvarcTag = Guid.NewGuid().ToString(); if (value.Length > 2) user.Email = value[2]; if (value.Length > 3) user.SocialLink = value[3]; } context.SaveChanges(); ViewBag.Message = "Пользователи успешно зарегистрированы"; return View(); }
public ActionResult SayStatus(string password, bool isOnline) { if (password != WebConstants.WebPassword) return new ContentResult {Content = "password fail"}; var context = new UnityContext(); var status = context.UnityStatus.First(); if (status.Online == isOnline) return new ContentResult {Content = "already know!"}; status.Online = isOnline; if (isOnline) status.UpTime = WebConstants.GetCurrentTime(); context.SaveChanges(); return new ContentResult {Content = "successful"}; }
public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl) { string provider = null; string providerUserId = null; if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId)) { return RedirectToAction("Manage"); } if (ModelState.IsValid) { // Insert a new user into the database using (UnityContext db = new UnityContext()) { UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower()); // Check if user already exists if (user == null) { // Insert name into the profile table db.UserProfiles.Add(new UserProfile { UserName = model.UserName }); db.SaveChanges(); OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName); OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false); return RedirectToLocal(returnUrl); } else { ModelState.AddModelError("UserName", "Такой пользователь уже существует. Выберете другое имя."); } } } ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return View(model); }