public async Task <object> Ping() { AuthResults result = new AuthResults(); IEnumerable <Claim> claims = this.HttpContext.User.Claims; foreach (Claim claim in claims) { if (claim.Type == Types.BirdsNestAdminsClaim && claim.Value == TRUE_STRING) { result.IsAdmin = true; result.IsAuthenticated = true; result.IsAuthorized = true; result.Message = "OK"; break; } else if (claim.Type == Types.BirdsNestUsersClaim && claim.Value == TRUE_STRING) { result.IsAuthenticated = true; result.IsAuthorized = true; result.Message = "OK"; } else if (claim.Type == ClaimTypes.GivenName) { result.Name = claim.Value; } } if (result.IsAuthorized == false) { await Logout(); } result.IsProcessed = true; return(result); }
public async Task <object> Login([FromForm] AuthDetails details) { this._logger.LogInformation("Login requested: {0} - {1}", details.Username, details.Provider); AuthResults result = null; if (details.IsValid()) { result = await Auth(details); } else { result = new AuthResults(); result.Message = "Invalid login data"; } return(result); }
public async Task <object> Logout() { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); foreach (var cookie in HttpContext.Request.Cookies) { if (cookie.Key == ".AspNetCore.Cookies" || cookie.Key.StartsWith(".AspNetCore.Antiforgery.")) { HttpContext.Response.Cookies.Delete(cookie.Key); } } AuthResults result = new AuthResults(); result.Message = "Logged out"; result.IsProcessed = true; return(result); }
public static void HandleAuthResponse(AuthResults result, RealmSession session) { var authResponse = new Packet(ServerMessages.AuthResponse); var hasSuccessInfo = result == AuthResults.Ok; var hasWaitInfo = result == AuthResults.WaitQueue; authResponse.Write(result); authResponse.PutBit(hasSuccessInfo); authResponse.PutBit(hasWaitInfo); if (hasSuccessInfo) { } if (hasWaitInfo) { } session.Send(authResponse); }
public static void HandleAuthResponse(AuthResults result, RealmSession session) { var gameAccount = session.GameAccount; var realm = session.Realm; var authResponse = new Packet(ServerMessages.AuthResponse); var hasSuccessInfo = result == AuthResults.Ok; var hasWaitInfo = result == AuthResults.WaitQueue; authResponse.Write(result); authResponse.PutBit(hasSuccessInfo); authResponse.PutBit(hasWaitInfo); authResponse.Flush(); if (hasSuccessInfo) { var allowedRaces = Manager.GameAccountMgr.GetAvailableRaces(gameAccount, realm); var allowedClasses = Manager.GameAccountMgr.GetAvailableClasses(gameAccount, realm); var charTemplates = Manager.GameAccountMgr.GetAvailableCharacterTemplates(gameAccount, realm); authResponse.Write <uint>(0); authResponse.Write <uint>(0); authResponse.Write <uint>(0); authResponse.Write <uint>(0); authResponse.Write <uint>(0); authResponse.Write(gameAccount.BoxLevel); authResponse.Write(gameAccount.BoxLevel); authResponse.Write <uint>(0); authResponse.Write(allowedRaces.Count); authResponse.Write(allowedClasses.Count); authResponse.Write(charTemplates.Count); authResponse.Write <uint>(0); foreach (var r in allowedRaces) { authResponse.Write(r.Key); authResponse.Write(r.Value); } foreach (var c in allowedClasses) { authResponse.Write(c.Key); authResponse.Write(c.Value); } foreach (var set in charTemplates) { authResponse.Write(set.Id); authResponse.Write(set.CharacterTemplateClasses.Count); foreach (var c in set.CharacterTemplateClasses) { authResponse.Write((byte)c.ClassId); authResponse.Write(c.FactionGroup); } authResponse.PutBits(set.Name.Length, 7); authResponse.PutBits(set.Description.Length, 10); authResponse.Flush(); authResponse.Write(set.Name); authResponse.Write(set.Description); } authResponse.PutBit(0); authResponse.PutBit(0); authResponse.PutBit(0); authResponse.PutBit(0); authResponse.PutBit(0); authResponse.Flush(); } session.Send(authResponse); }
public static void HandleAuthResponse(AuthResults result, RealmSession session) { var gameAccount = session.GameAccount; var realm = session.Realm; var authResponse = new Packet(ServerMessages.AuthResponse); var hasSuccessInfo = result == AuthResults.Ok; var hasWaitInfo = result == AuthResults.WaitQueue; authResponse.Write(result); authResponse.PutBit(hasSuccessInfo); authResponse.PutBit(hasWaitInfo); authResponse.Flush(); if (hasSuccessInfo) { var allowedRaces = Manager.GameAccountMgr.GetAvailableRaces(gameAccount, realm); var allowedClasses = Manager.GameAccountMgr.GetAvailableClasses(gameAccount, realm); var charTemplates = Manager.GameAccountMgr.GetAvailableCharacterTemplates(gameAccount, realm); authResponse.Write<uint>(0); authResponse.Write<uint>(0); authResponse.Write<uint>(0); authResponse.Write<uint>(0); authResponse.Write<uint>(0); authResponse.Write(gameAccount.BoxLevel); authResponse.Write(gameAccount.BoxLevel); authResponse.Write<uint>(0); authResponse.Write(allowedRaces.Count); authResponse.Write(allowedClasses.Count); authResponse.Write(charTemplates.Count); authResponse.Write<uint>(0); foreach (var r in allowedRaces) { authResponse.Write(r.Key); authResponse.Write(r.Value); } foreach (var c in allowedClasses) { authResponse.Write(c.Key); authResponse.Write(c.Value); } foreach (var set in charTemplates) { authResponse.Write(set.Id); authResponse.Write(set.CharacterTemplateClasses.Count); foreach (var c in set.CharacterTemplateClasses) { authResponse.Write((byte)c.ClassId); authResponse.Write(c.FactionGroup); } authResponse.PutBits(set.Name.Length, 7); authResponse.PutBits(set.Description.Length, 10); authResponse.Flush(); authResponse.Write(set.Name); authResponse.Write(set.Description); } authResponse.PutBit(0); authResponse.PutBit(0); authResponse.PutBit(0); authResponse.PutBit(0); authResponse.PutBit(0); authResponse.Flush(); } session.Send(authResponse); }
private async Task <AuthResults> Auth(AuthDetails details) { AuthResults result = new AuthResults(); try { IAuthConfiguration conf = this._configlist.GetAuthConfiguration(details.Provider); if (conf == null) { throw new ArgumentException("Provider not found"); } ILogin login = conf.GetLogin(details.Username, details.Password); if (login.IsAuthenticated) { result.Name = login.GivenName; result.IsAuthenticated = true; if (login.IsAuthorised == false) { result.Message = "You are not authorised to use BirdsNest. Please contact your administrator"; this._logger.LogWarning("Login not authorised: {username}", details.Username); return(result); } var claims = new List <Claim> { new Claim(ClaimTypes.GivenName, login.GivenName, conf.Name), new Claim(ClaimTypes.Name, login.Name, conf.Name), new Claim(ClaimTypes.Surname, login.Surname, conf.Name), new Claim(ClaimTypes.Sid, login.ID, conf.Name) }; if (login.IsUser) { claims.Add(new Claim(Types.BirdsNestUsersClaim, TRUE_STRING, ClaimValueTypes.Boolean, conf.Name)); } if (login.IsAdmin) { result.IsAdmin = true; claims.Add(new Claim(Types.BirdsNestAdminsClaim, TRUE_STRING, ClaimValueTypes.Boolean, conf.Name)); } var userIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var userPrincipal = new ClaimsPrincipal(userIdentity); var authProperties = new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddSeconds(login.TimeoutSeconds), IsPersistent = false, AllowRefresh = true }; await this.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, authProperties); result.IsAuthorized = true; result.Message = "OK"; this._logger.LogInformation("Login successful: {username}", details.Username); } else { result.Message = "Login failed"; } result.IsProcessed = true; } catch (Exception e) { result.Message = "There was an error logging in: " + e.Message; this._logger.LogWarning("Login error: {username}. Error: {error}", details.Username, e.Message); this._logger.LogTrace(e, "Login error stacktrace"); } return(result); }