mirror of
https://github.com/bitwarden/directory-connector
synced 2025-12-05 23:53:21 +00:00
237 lines
6.0 KiB
C#
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; }
|
|
}
|
|
}
|
|
}
|