public OperationResult RefreshAccessToken(string refreshToken, string clientID, string clientSecret)
        {
            //Check first if the registered application with specified clientid and clientsecret exists
            IFindRegisteredApplicationRepositoryExt registeredAppRepo = (IFindRegisteredApplicationRepositoryExt)RepositoryFactory.Create("Find.Tools.OAuthServerManager.RegisteredApplication");
            List <RegisteredApplication>            list = registeredAppRepo.FindByClientIDAndClientSecret(clientID, clientSecret);

            //If exists
            if (list != null && list.Count > 0)
            {
                //Check if the application has been authorized before by checking the access token previous existence
                IFindAccessTokenRepository accessTokenRepo = (IFindAccessTokenRepository)RepositoryFactory.Create("Find.Tools.OAuthServerManager.AccessToken");
                List <AccessToken>         accessTokenList = accessTokenRepo.FindByClientID(clientID);
                if (accessTokenList.Count == 0)
                {
                    return(new OperationResult(false, null, "Access token for client ID " + clientID + " does not exists. The application had never asked for authorization!"));
                }
                else
                {
                    AccessToken     newAccessToken = (AccessToken)CreateNewAccessToken(refreshToken, clientID, clientSecret).Data;
                    OperationResult result         = SaveNewccessToken(newAccessToken);
                    if (result.Result)
                    {
                        return(new OperationResult(true, newAccessToken, "New access token is created successfully!"));
                    }
                    else
                    {
                        return(result);
                    }
                }
            }
            else
            {
                return(new OperationResult(false, null, "Application for client ID " + clientID + " does not exists. Application is not registered!"));
            }
        }
        public OperationResult CheckAccessToken(string accessToken)
        {
            IFindAccessTokenRepository repo         = (IFindAccessTokenRepository)RepositoryFactory.Create("Find.Tools.OAuthServerManager.AccessToken");
            List <AccessToken>         accessTokens = repo.FindByAccessTokenString(accessToken);

            OperationResult result = new OperationResult();

            if (accessTokens.Count == 0)
            {
                result.Result  = false;
                result.Data    = null;
                result.Message = "Access token does not exists. Please request for authorization by requesting to this url: " + ConfigurationManager.AppSettings["REQUEST.AUTHORIZATION.URL"];
            }
            else
            {
                AccessToken acctoken = accessTokens[0];
                if (acctoken.ExpiredDate > DateTime.Now)
                {
                    result = new OperationResult(true, accessTokens[0]);
                }
                else
                {
                    result.Result  = false;
                    result.Data    = null;
                    result.Message = "Access token has expired. Please request for new access token by requesting to this url: " + ConfigurationManager.AppSettings["REQUEST.REFRESHACCESSTOKEN.URL"];
                }
            }

            return(result);
        }
        /// <summary>
        /// Finds all  Access Token data with client Secret containing specified keyword
        /// </summary>
        /// <param name="clientSecret"> Client Secret</param>
        /// <returns>The result of the operation</returns>
        public OperationResult FindByClientSecret(string clientSecret)
        {
            IFindAccessTokenRepository repository = (IFindAccessTokenRepository)RepositoryFactory.Create(Keywords.FindAccessToken);

            try
            {
                List <AccessToken> res = repository.FindByClientSecret(clientSecret);
                return(new OperationResult(true, res));
            }
            catch (Exception e)
            {
                return(new OperationResult(false, e));
            }
        }
        /// <summary>
        /// Finds all  Access Token data with expired Date1, expired Date2 containing specified keyword
        /// </summary>
        /// <param name="expiredDate1"> Expired Date</param>
        /// <param name="expiredDate2"> Expired Date</param>
        /// <returns>The result of the operation</returns>
        public OperationResult FindByExpiredDateBetween(DateTime expiredDate1, DateTime expiredDate2)
        {
            IFindAccessTokenRepository repository = (IFindAccessTokenRepository)RepositoryFactory.Create(Keywords.FindAccessToken);

            try
            {
                List <AccessToken> res = repository.FindByExpiredDateBetween(expiredDate1, expiredDate2);
                return(new OperationResult(true, res));
            }
            catch (Exception e)
            {
                return(new OperationResult(false, e));
            }
        }