Ejemplo n.º 1
0
        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()
                            } }));
        }
Ejemplo n.º 2
0
        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.")));
            }
        }