public IActionResult Post(string username, string password)
        {
            var auth = new AuhtenticationManager();

            if (auth.CheckUser(username, password))
            {
                var token = AuhtenticationManager.GenerateToken(username, 30);
                return(Json(token));
            }
            return(BadRequest("Wrong Username or Password"));
        }
        public IActionResult ValidateJwt(string jwt)
        {
            if (Request.Headers["X-Requested-With"] != "XMLHttpRequest")
            {
                return(BadRequest("Invalid Request"));
            }

            if (AuhtenticationManager.ValidateToken(jwt))
            {
                HttpContext.Session.SetString(sessionKey, jwt);
                return(Ok("valid JWT"));
            }
            return(BadRequest("Invalid JWT"));
        }
        public IActionResult Login(LoginViewModel model)
        {
            var auth   = new AuhtenticationManager();
            var result = auth.CheckUser(model.Username, model.Password);

            if (result)
            {
                var token = AuhtenticationManager.GenerateToken(model.Username, 30);
                HttpContext.Session.SetString(sessionKey, token.Token);

                return(RedirectToAction("Profile", "User"));
            }
            return(View(model));
        }
        public async Task <IActionResult> Post([FromBody] GraphQLQuery query, [FromHeader] string Authorization)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            var validUsername = AuhtenticationManager.ValidateToken(Authorization);

            if (Authorization == null || validUsername == null)
            {
                return(Unauthorized());
            }
            var userContext = new GraphQLUserContext();

            userContext.User = AuhtenticationManager.GetPrincipal(Authorization);

            var complexityConfiguration = new ComplexityConfiguration {
                // MaxDepth = 1,
                MaxComplexity = 85,
                FieldImpact   = 5.0
            };

            var executionOptions = new ExecutionOptions {
                Schema                  = _schema,
                Query                   = query.Query,
                OperationName           = query.OperationName,
                Inputs                  = query.Variables.ToInputs(),
                ComplexityConfiguration = complexityConfiguration,
                UserContext             = userContext,
                ValidationRules         = _validationRules,
                ExposeExceptions        = true
            };

            try
            {
                var result = await _documentExecuter.ExecuteAsync(executionOptions).ConfigureAwait(false);

                if (result.Errors?.Count > 0)
                {
                    return(BadRequest(result));
                }

                return(Ok(result));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
        public IActionResult Validate(string token, string username)
        {
            bool exists = new UserRepository().GetUser(username) != null;

            if (!exists)
            {
                return(NotFound("Wrong Username or Password"));
            }

            string tokenUsername = AuhtenticationManager.ValidateToken(token);

            if (username.Equals(tokenUsername))
            {
                return(Ok("Username is valid"));
            }

            return(BadRequest("Invalid Data"));
        }
        public IActionResult Profile(ProfileViewModel model)
        {
            try {
                var token = HttpContext.Session.GetString(sessionKey);
                if (!string.IsNullOrEmpty(token))
                {
                    var user = AuhtenticationManager.GetTokenData(token);
                    model.FirstName = user.FirstName;
                    model.LastName  = user.LastName;
                    model.Email     = user.Email;
                    model.Username  = user.Username;
                    model.Token     = token;

                    ViewData["loggedin"] = true;
                    return(View(model));
                }
            } catch (Exception ex) {
                return(RedirectToAction("Login", "User"));
            }
            return(RedirectToAction("Login", "User"));
        }