public async Task <IActionResult> PostTokens([FromBody] LoginToken token) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } DateTime time = DateTime.UtcNow; if (!TokensExists(token.TokenName, out Tokens dbtoken)) { return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change."))); } if (!IsTokenValid(token, dbtoken, time)) { return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change."))); } if (!dbtoken.IsTimeValid(time)) { _context.Tokens.Remove(dbtoken); return(BadRequest(new DataError("tokenErr", "Relogin is required. Autologin has timedout."))); } UserToken usertoken = Security.GenerateUsersToken(dbtoken.UserName, this._context); dbtoken.UpdateToken(time); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { return(BadRequest(new DataError("tokenErr", "Failed to remember login."))); } PernamentTokenResult result = new PernamentTokenResult() { Token = dbtoken.HashedToken, TokenName = dbtoken.TokenName, ExpireDate = dbtoken.ExpireDate, }; UserTokenResult userResult = new UserTokenResult() { Token = usertoken.HashedToken, UserName = usertoken.UserName, }; var h = _context.Heros.Join(_context.UsersHeros.Where(e => e.UserName == dbtoken.UserName), e => e.HeroId, e => e.HeroId, (a, b) => new HeroBrief() { Name = a.Name, Nickname = a.Nickname, Level = a.Lvl, Orders = a.Orders, }); return(Ok(new { success = true, usertoken = userResult, logintoken = result, user = new UserBrief() { Username = dbtoken.UserName, Characters = h.ToArray() } })); }
public async Task <IActionResult> PostUsers([FromBody] LoginUser user) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (UsersExists(user.Name) && PasswordMatches(user.Name, user.Password)) { UserToken usertoken = Security.GenerateUsersToken(user.Name, this._context); Tokens token = null; if (user.isRemembered) { token = GenerateUsersPernamentToken(user); } try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { return(BadRequest(new DataError("tokenErr", "Failed to remember login."))); } PernamentTokenResult result = null; if (user.isRemembered) { result = new PernamentTokenResult() { Token = token.HashedToken, TokenName = token.TokenName, ExpireDate = token.ExpireDate, }; } UserTokenResult userResult = new UserTokenResult() { Token = usertoken.HashedToken, UserName = usertoken.UserName, }; var h = _context.Heros.Join(_context.UsersHeros.Where(e => e.UserName == user.Name), e => e.HeroId, e => e.HeroId, (a, b) => new HeroBrief() { Name = a.Name, Nickname = a.Nickname, Level = a.Lvl, Orders = a.Orders, }); if (user.isRemembered) { return(Ok(new { success = true, usertoken = userResult, logintoken = result, user = new UserBrief() { Username = user.Name, Characters = h.ToArray() } })); } else { return(Ok(new { success = true, usertoken = userResult, user = new UserBrief() { Username = user.Name, Characters = h.ToArray() } })); } } else { return(BadRequest(new DataError("loginErr", "Invalid login or password."))); } }