/// <summary>
        /// Initializes this <see cref="ClientAccountFileStorage"/> and reads all <see cref="ClientAccountJson"/> from the home directory as well as the current <see cref="IdCounter"/>.
        /// </summary>
        /// <param name="homeDirectory">home directory path</param>
        public void Initialize(string homeDirectory)
        {
            _homeDirectory = homeDirectory;

            if (!Directory.Exists(homeDirectory))
            {
                Directory.CreateDirectory(homeDirectory);
                File.WriteAllText(_homeDirectory + "ID.config", 0 + "");
            }

            _clientAccounts = new List <IClientAccount>();

            //load all client accounts:
            foreach (string file in Directory.EnumerateFiles(_homeDirectory, "*.json"))
            {
                string            json = File.ReadAllText(file);
                ClientAccountJson caj  = JsonSerializer.DeserializeJson <ClientAccountJson>(json);
                if (caj != null)
                {
                    _clientAccounts.Add(caj);
                }
            }

            //load ID counter
            string id = File.ReadAllText(_homeDirectory + "ID.config");

            _idCounter = Int32.Parse(id);
        }
        public static ClientAccountJson CreateInstance(IClientAccount ca)
        {
            ClientAccountJson client = new ClientAccountJson();

            client.ClientId = ca.ClientId;
            client.AccessTokenExpiryInSeconds = ca.AccessTokenExpiryInSeconds;
            client.ClientSecret = ca.ClientSecret;
            client.Description  = ca.Description;
            client.FriendlyName = ca.FriendlyName;
            client.HasUser      = ca.HasUser;
            client.IsBlocked    = ca.IsBlocked;
            client.IsClientIdRequiredForRefreshToken      = ca.IsClientIdRequiredForRefreshToken;
            client.IsClientSecretRequiredForPasswordGrant = ca.IsClientSecretRequiredForPasswordGrant;
            client.IsClientSecretRequiredForRefreshToken  = ca.IsClientSecretRequiredForRefreshToken;
            client.IsUserIdRequiredForRefreshToken        = ca.IsUserIdRequiredForRefreshToken;
            client.IsUserPasswordRequiredForRefreshToken  = ca.IsUserPasswordRequiredForRefreshToken;
            client.RefreshTokenExpiryInSeconds            = ca.RefreshTokenExpiryInSeconds;
            client.Scope = ca.Scope;
            return(client);
        }
        /// <summary>
        /// Saves the passed <see cref="IClientAccount"/> to disk.
        /// </summary>
        /// <param name="data">data to be saved</param>
        private void SaveToDisk(IClientAccount data)
        {
            ClientAccountJson caj = ClientAccountJson.CreateInstance(data);

            File.WriteAllText(_homeDirectory + data.ClientId + ".json", JsonSerializer.SerializeJson(caj));
        }