public async Task<IActionResult> Login([FromBody] UserForm login)
        {
            if (!ModelState.IsValid)
            {
                return HttpResponseHelper.BadRequest(ModelState);
            }

            if (string.IsNullOrWhiteSpace(login.Username) && string.IsNullOrWhiteSpace(login.Email))
            {
                return HttpResponseHelper.BadRequest("Either Username or Email is required.");
            }

            if (string.IsNullOrWhiteSpace(login.Password))
            {
                return HttpResponseHelper.BadRequest("Password is required.");
            }

            IQueryable<Player> query = _context.Players;

            if (!string.IsNullOrWhiteSpace(login.Username))
            {
                query = query.Where(a => a.Username.Equals(login.Username));
            }

            if (!string.IsNullOrWhiteSpace(login.Email))
            {
                query = query.Where(a => a.Email.Equals(login.Email));
            }

            var player = await query.FirstOrDefaultAsync();

            if (player == null)
            {
                return HttpResponseHelper.NotFound("No such Player found.");
            }

            if (!PasswordHelper.ValidatePassword(login.Password, player.Password))
            {
                return HttpResponseHelper.Unauthorized("Invalid Login Details.");
            }

            var playerSession = new Session { Player = player };

            _context.Sessions.Add(playerSession);

            var error = await SaveChangesAsync();
            if (error != null)
            {
                return error;
            }

            return CreatedAtRoute("GetSession", new { id = playerSession.Id }, playerSession);
        }
예제 #2
0
 protected Session GetSession()
 {
     return _session ?? (_session = HttpContext.Session.GetObjectFromJson<Session>("__session"));
 }