/// <summary> /// /// </summary> /// <param name="serviceRecord"></param> private void AddPlayerToIdentities(ServiceRecord serviceRecord) { using (var sqlStorage = new SqlStorage()) { var gamertag = serviceRecord.Gamertag; var gamertagSafe = GamerIdentity.EscapeGamerId(gamertag); var gamerIdentity = sqlStorage.GamerIdentities.FirstOrDefault(g => g.GamerIdSafe == gamertagSafe); if (gamerIdentity == null) { gamerIdentity = new GamerIdentity { GamerId = gamertag, GamerIdSafe = gamertagSafe, Type = IdentityType.XblGamertag }; sqlStorage.GamerIdentities.Add(gamerIdentity); sqlStorage.SaveChanges(); } var halo4Identity = sqlStorage.Halo4Identities.FirstOrDefault(h => h.GamerIdentity.Id == gamerIdentity.Id) ?? new Halo4Identity(); halo4Identity.GamerIdentity = gamerIdentity; halo4Identity.ServiceTag = serviceRecord.ServiceTag; halo4Identity.FavouriteWeapon = serviceRecord.FavoriteWeaponName; halo4Identity.KillDeathRatio = serviceRecord.GameModes.First(m => m.Id == GameMode.WarGames).KdRatio ?? 1.0; halo4Identity.PlayerModelUrl = GetPlayerModelUrl(gamertag, pose: "posed"); halo4Identity.TopCsr = serviceRecord.TopSkillRank != null ? serviceRecord.TopSkillRank.CompetitiveSkillRank ?? 0 : 0; halo4Identity.TotalKills = serviceRecord.GameModes.Sum(m => m.TotalKills); sqlStorage.Halo4Identities.AddOrUpdate(halo4Identity); sqlStorage.SaveChanges(); } }
/// <summary> /// /// </summary> /// <param name="serviceRecord"></param> private static void AddPlayerToIdentities(ServiceRecord serviceRecord) { using (var sqlStorage = new SqlStorage()) { var gamertag = serviceRecord.Player.Gamertag; var gamertagSafe = GamerIdentity.EscapeGamerId(gamertag); var gamerIdentity = sqlStorage.GamerIdentities.FirstOrDefault(g => g.GamerIdSafe == gamertagSafe); if (gamerIdentity == null) { gamerIdentity = new GamerIdentity { GamerId = gamertag, GamerIdSafe = gamertagSafe, Type = IdentityType.XblGamertag }; sqlStorage.GamerIdentities.Add(gamerIdentity); sqlStorage.SaveChanges(); } var reachIdentity = sqlStorage.ReachIdentities.FirstOrDefault(h => h.GamerIdentity.Id == gamerIdentity.Id) ?? new ReachIdentity(); reachIdentity.GamerIdentity = gamerIdentity; reachIdentity.ServiceTag = serviceRecord.Player.ServiceTag; reachIdentity.PlayerModelUrl = String.Format("https://spartans.svc.halowaypoint.com/players/{0}/Reach/spartans/fullbody", gamertag); reachIdentity.CompetitiveKills = serviceRecord.Player.MultiplayerKills; reachIdentity.Rank = serviceRecord.Player.CurrentRankName; reachIdentity.TotalGames = serviceRecord.Player.GamesTotal; if (serviceRecord.Player.MultiplayerDeaths > 0) { var ratio = (float)serviceRecord.Player.MultiplayerKills / serviceRecord.Player.MultiplayerDeaths; reachIdentity.KillDeathRatio = Math.Round(Convert.ToDouble(ratio), 2, MidpointRounding.AwayFromZero); } else { reachIdentity.KillDeathRatio = serviceRecord.Player.MultiplayerKills; } sqlStorage.ReachIdentities.AddOrUpdate(reachIdentity); try { sqlStorage.SaveChanges(); } catch (Exception e) { } } }
public ActionResult Index(CreateIdentityViewModel viewModel) { using (var sqlStorage = new SqlStorage()) { if (!ModelState.IsValid) { return(View(viewModel)); } // Trimmin' viewModel.Email = viewModel.Email.Trim(); viewModel.FullName = viewModel.FullName.Trim(); viewModel.Gamertag = viewModel.Gamertag.Trim(); viewModel.Username = viewModel.Username.Trim(); viewModel.InvitationCode = viewModel.InvitationCode.Trim(); // Validate uniqueness of Username and Email var user = sqlStorage.BranchIdentities .FirstOrDefault(i => i.Username.ToLower() == viewModel.Username.ToLower() || i.Email.ToLower() == viewModel.Email.ToLower()); if (user != null) { ModelState.AddModelError("Username", "Either this username has already been taken, or that email has already been used."); ModelState.AddModelError("Email", "Either this username has already been taken, or that email has already been used."); } // Validate Invite Code var invite = sqlStorage.BranchIdentityInvitations.FirstOrDefault( i => i.InvitationCode.ToLower() == viewModel.InvitationCode.ToLower() && !i.Used); if (invite == null) { ModelState.AddModelError("InvitationCode", "This invite code has either been used or isn't valid. Sorry bae."); } // Check Password is identical if (viewModel.Password != viewModel.PasswordConfirm) { ModelState.AddModelError("Password", "Your password and confirmation do not match."); } // Check Password Complexity var complexity = 0; if (Regex.IsMatch(viewModel.Password, @"\d+")) { complexity++; } if (Regex.IsMatch(viewModel.Password, @"[a-z]+")) { complexity++; } if (Regex.IsMatch(viewModel.Password, @"[A-Z]+")) { complexity++; } if (Regex.IsMatch(viewModel.Password, @"[^a-zA-Z\d]+")) { complexity++; } if (complexity < 2) { ModelState.AddModelError("Password", "Your password is not complex enough."); } if (!ModelState.IsValid) { viewModel.Password = viewModel.PasswordConfirm = ""; return(View(viewModel)); } // All gucci, create Branch Identity var password = Pbkdf2Crypto.ComputeHash(viewModel.Password, new Random().Next(1000, 1200)); var branchIdentity = new BranchIdentity { BranchRole = sqlStorage.BranchRoles.First(r => r.Type == RoleType.User), Email = viewModel.Email, FullName = viewModel.FullName, Username = viewModel.Username, PasswordHash = password.Hash, PasswordIterations = password.Iterations, PasswordSalt = password.Salt, BranchIdentityInvitation = invite }; // Set invite as used // ReSharper disable once PossibleNullReferenceException invite.Used = true; // Check gamer ids GlobalStorage.H4Manager.GetPlayerServiceRecord(viewModel.Gamertag, true); GlobalStorage.HReachManager.GetPlayerServiceRecord(viewModel.Gamertag, true); var gamerIdSafe = GamerIdentity.EscapeGamerId(viewModel.Gamertag); var gamerId = sqlStorage.GamerIdentities.FirstOrDefault(g => g.GamerIdSafe == gamerIdSafe); if (gamerId != null) { branchIdentity.GamerIdentity = gamerId; } sqlStorage.BranchIdentities.Add(branchIdentity); sqlStorage.SaveChanges(); var ipAddress = Request.ServerVariables.Get("HTTP_CF_CONNECTING_IP") ?? Request.UserHostAddress; var branchSession = BranchSession.Create(ipAddress, Request.UserAgent, branchIdentity, false); sqlStorage.BranchSessions.Add(branchSession); var cookie = new HttpCookie("SessionIdentifier", branchSession.Identifier.ToString()) { Expires = branchSession.ExpiresAt }; Response.SetCookie(cookie); sqlStorage.SaveChanges(); return(RedirectToRoute("BranchIdentityView", new { controller = "Home", action = "Index", slug = branchIdentity.Username })); } }