1
0
mirror of https://github.com/bitwarden/directory-connector synced 2025-12-05 23:53:21 +00:00
Files
directory-connector/src/Core/Services/SettingsService.cs
2017-05-15 22:43:44 -04:00

237 lines
6.0 KiB
C#

using Bit.Core.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security;
using System.Text;
using System.Threading.Tasks;
namespace Bit.Core.Services
{
public class SettingsService
{
private static SettingsService _instance;
private static object _locker = new object();
private static string _baseStoragePath = string.Concat(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"\\bitwarden\\DirectoryConnector");
private SettingsModel _settings;
private SettingsService() { }
public static SettingsService Instance
{
get
{
if(_instance == null)
{
_instance = new SettingsService();
}
return _instance;
}
}
private SettingsModel Settings
{
get
{
var filePath = $"{_baseStoragePath}\\settings.json";
if(_settings == null && File.Exists(filePath))
{
var serializer = new JsonSerializer();
using(var s = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
using(var sr = new StreamReader(s, Encoding.UTF8))
using(var jsonTextReader = new JsonTextReader(sr))
{
_settings = serializer.Deserialize<SettingsModel>(jsonTextReader);
}
}
return _settings == null ? new SettingsModel() : _settings;
}
}
private void SaveSettings()
{
lock(_locker)
{
if(!Directory.Exists(_baseStoragePath))
{
Directory.CreateDirectory(_baseStoragePath);
}
_settings = Settings;
var filePath = $"{_baseStoragePath}\\settings.json";
using(var s = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Read))
using(var sw = new StreamWriter(s, Encoding.UTF8))
{
var json = JsonConvert.SerializeObject(_settings, Formatting.Indented);
sw.Write(json);
}
}
}
public string ApiBaseUrl
{
get
{
return Settings.ApiBaseUrl;
}
set
{
Settings.ApiBaseUrl = value;
SaveSettings();
}
}
public string IdentityBaseUrl
{
get
{
return Settings.IdentityBaseUrl;
}
set
{
Settings.IdentityBaseUrl = value;
SaveSettings();
}
}
public EncryptedData AccessToken
{
get
{
return Settings.AccessToken;
}
set
{
Settings.AccessToken = value;
SaveSettings();
}
}
public EncryptedData RefreshToken
{
get
{
return Settings.RefreshToken;
}
set
{
Settings.RefreshToken = value;
SaveSettings();
}
}
public Organization Organization
{
get
{
return Settings.Organization;
}
set
{
Settings.Organization = value;
SaveSettings();
}
}
public ServerConfiguration Server
{
get
{
return Settings.Server;
}
set
{
Settings.Server = value;
SaveSettings();
}
}
public SyncConfiguration Sync
{
get
{
return Settings.Sync;
}
set
{
Settings.Sync = value;
SaveSettings();
}
}
public DateTime? LastGroupSyncDate
{
get
{
return Settings.LastGroupSyncDate;
}
set
{
Settings.LastGroupSyncDate = value;
SaveSettings();
}
}
public DateTime? LastUserSyncDate
{
get
{
return Settings.LastUserSyncDate;
}
set
{
Settings.LastUserSyncDate = value;
SaveSettings();
}
}
public string GroupDeltaToken
{
get
{
return Settings.GroupDeltaToken;
}
set
{
Settings.GroupDeltaToken = value;
SaveSettings();
}
}
public string UserDeltaToken
{
get
{
return Settings.UserDeltaToken;
}
set
{
Settings.UserDeltaToken = value;
SaveSettings();
}
}
public class SettingsModel
{
public string ApiBaseUrl { get; set; }
public string IdentityBaseUrl { get; set; }
public EncryptedData AccessToken { get; set; }
public EncryptedData RefreshToken { get; set; }
public ServerConfiguration Server { get; set; }
public SyncConfiguration Sync { get; set; }
public Organization Organization { get; set; }
public DateTime? LastGroupSyncDate { get; set; }
public DateTime? LastUserSyncDate { get; set; }
public string GroupDeltaToken { get; set; }
public string UserDeltaToken { get; set; }
}
}
}