private async Task CheckSession()
        {
            if (!File.Exists("Config/hirezapi.json"))
            {
                await CreateSession();
            }
            string json = File.ReadAllText("Config/hirezapi.json");

            sessionResult = JsonConvert.DeserializeObject <ApiSessionResult>(json);

            if (sessionResult.sessionTime != null)
            {
                DateTime parsedSessionTime = DateTime.Parse(sessionResult.sessionTime, CultureInfo.InvariantCulture);

                //also check if sessionID is not empty, it is sometimes empty for some reason
                if ((DateTime.UtcNow - parsedSessionTime).TotalMinutes >= 15 || sessionResult.sessionID == "")
                {
                    await CreateSession();
                }
            }
            else
            {
                await CreateSession();
            }
        }
        public void TerminateApiSession(HttpContext httpContext)
        {
            string           authToken     = httpContext.Request.Headers["AuthToken"].ToString();
            ApiSessionResult sessionResult = ApiSessionProcessor
                                             .FindByField("authToken", authToken)
                                             .SingleOrDefault();

            ApiSessionProcessor.Erase(sessionResult.Id);
        }
        public ApiSessionResult CreateApiSession(UserResult userResult, string hashedAuthToken)
        {
            ApiSessionParam sessionParam = new ApiSessionParam()
            {
                Code        = userResult.UserName + $"{System.DateTime.Now.TimeOfDay}",
                Name        = userResult.StatusName,
                Description = $"This is {userResult.UserName}'s api session. Created on {System.DateTime.Now}",
                Active      = userResult.Active,
                UserId      = userResult.Id,
                AuthToken   = hashedAuthToken
            };

            ApiSessionResult apiSession = ApiSessionProcessor.Create(sessionParam);

            return(apiSession);
        }
        public string GetAuthToken(HttpContext httpContext)
        {
            var userId = httpContext.User.FindFirst
                             (claim => claim.Type == ClaimTypes.NameIdentifier)
                         .Value;

            byte[] salt            = Salt.GenerateSalt();
            string authToken       = System.Guid.NewGuid().ToString("N");
            string hashedAuthToken = Hash.Compute(authToken, salt);

            hashedAuthToken = TrimToken(hashedAuthToken);

            UserResult       userResult    = UserProcessor.FindByField("id", userId).SingleOrDefault();
            ApiSessionResult sessionResult = CreateApiSession(userResult, hashedAuthToken);

            return(sessionResult.AuthToken);
        }