public async Task LeavesTrashAloneAsync() { var dir = Common.GetWorkDir(); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } var res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); var legalDir = Assert.Single(Directory.GetDirectories(dir)); // Leaves one trash alone. var trash1 = File.Create(Path.Combine(legalDir, "foo")); await trash1.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.Single(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); // Leaves 3 trash alone. var trash2 = File.Create(Path.Combine(legalDir, "foo.txt")); var trash3 = File.Create(Path.Combine(legalDir, "foo2")); await trash2.DisposeAsync(); await trash3.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.Equal(3, Directory.GetFiles(legalDir).Length); Assert.Empty(Directory.GetDirectories(legalDir)); }
public async Task <IActionResult> Edit(int id, [Bind("LegalDocId,LivingWill,LivingWillDateSigned,LivingWillLastUpdated,LivingWillCopyOnFile,FamilyAwareOfInstructions,MedicalPowerOfAttorney,MedPowerOfAttorneyName,MedPowerOfAttorneyDateSigned,MedPowerOfAttorneyDateLastUpdated,MedPowerOfAttorneyCopyOnFile,HealthCareProxy,HealthCareProxyName,HealthCareProxyDateSigned,HealtchCareProxyDateLastUpdated,DoNotResuscitateOrder,DnrDateSigned,DnrDateLastUpdated,OrganDonorDocument,OrganDonorDateSigned,OrganDonorLastUpdate,DocumentsLocation,DocumentContactsFirstName,DocumentContactsLastName,DocumentContactsPhone,AttorneyFirstName,AttorneyLastName,AttorneyPhone,Comments")] LegalDocuments legalDocuments) { if (id != legalDocuments.LegalDocId) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(legalDocuments); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!LegalDocumentsExists(legalDocuments.LegalDocId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(legalDocuments)); }
public LegalDocumentsViewModel(string content = null, LegalDocuments legalDoc = null) : base() { FilePath = legalDoc?.FilePath; Content = content; LegalDoc = legalDoc; IsAgreed = content is null; // If content wasn't provided, then the filepath must had been provided. If the file exists, then it's agreed. AgreeClicked = ReactiveCommand.CreateFromTask(async() => { IsAgreed = true; await LegalDoc.ToFileAsync(Content); Locator.Current.GetService <Global>().LegalDocuments = LegalDoc; Close(); }); AgreeClicked .ThrownExceptions .ObserveOn(RxApp.TaskpoolScheduler) .Subscribe(ex => { Logging.Logger.LogError(ex); NotificationHelpers.Error(ex.ToUserFriendlyString()); }); this.WhenAnyValue(x => x.Text) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(text => EmptyContent = string.IsNullOrEmpty(text)); }
public async Task CanSerializeFileAsync() { var dir = Common.GetWorkDir(); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } string filePath = Path.Combine(dir, "1.1.txt"); var legal = new LegalDocuments(filePath); Assert.False(File.Exists(filePath)); await legal.ToFileAsync("bar"); Assert.True(File.Exists(filePath)); string filePath2 = Path.Combine(dir, "1.2.txt"); var legal2 = new LegalDocuments(filePath2); Assert.True(File.Exists(filePath)); Assert.False(File.Exists(filePath2)); await legal2.ToFileAsync("bar"); Assert.False(File.Exists(filePath)); Assert.True(File.Exists(filePath2)); }
public async Task CanSerializeFileAsync() { var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName()); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } string filePath = Path.Combine(dir, "1.1.txt"); var legal = new LegalDocuments(filePath); Assert.False(File.Exists(filePath)); await legal.ToFileAsync("bar"); Assert.True(File.Exists(filePath)); string filePath2 = Path.Combine(dir, "1.2.txt"); var legal2 = new LegalDocuments(filePath2); Assert.True(File.Exists(filePath)); Assert.False(File.Exists(filePath2)); await legal2.ToFileAsync("bar"); Assert.False(File.Exists(filePath)); Assert.True(File.Exists(filePath2)); }
public Global() { using (BenchmarkLogger.Measure()) { StoppingCts = new CancellationTokenSource(); DataDir = EnvironmentHelpers.GetDataDir(Path.Combine("MustardWalletLTC", "Client")); TorLogsFile = Path.Combine(DataDir, "TorLogs.txt"); Directory.CreateDirectory(DataDir); Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt")); UiConfig = new UiConfig(Path.Combine(DataDir, "UiConfig.json")); UiConfig.LoadOrCreateDefaultFile(); Config = new Config(Path.Combine(DataDir, "Config.json")); Config.LoadOrCreateDefaultFile(); HostedServices = new HostedServices(); WalletManager = new WalletManager(Network, new WalletDirectories(DataDir)); LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir); WalletManager.OnDequeue += WalletManager_OnDequeue; WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed; } }
public async Task LeavesTrashAloneAsync() { var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName()); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } var res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); var legalDir = Assert.Single(Directory.GetDirectories(dir)); // Leaves one trash alone. var trash1 = File.Create(Path.Combine(legalDir, "foo")); await trash1.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.Single(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); // Leaves 3 trash alone. var trash2 = File.Create(Path.Combine(legalDir, "foo.txt")); var trash3 = File.Create(Path.Combine(legalDir, "foo2")); await trash2.DisposeAsync(); await trash3.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.Equal(3, Directory.GetFiles(legalDir).Length); Assert.Empty(Directory.GetDirectories(legalDir)); }
public async Task CanLoadLegalDocsAsync() { var legalDir = Common.GetWorkDir(); if (Directory.Exists(legalDir)) { await IoHelpers.TryDeleteDirectoryAsync(legalDir); } Directory.CreateDirectory(legalDir); var res = await LegalDocuments.LoadAgreedAsync(legalDir); Assert.Null(res); var version = new Version(1, 1); // Deletes them if multiple legal docs found. var candidate = File.Create(Path.Combine(legalDir, $"{version}.txt")); await candidate.DisposeAsync(); res = await LegalDocuments.LoadAgreedAsync(legalDir); Assert.NotNull(res); Assert.Single(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); Assert.Equal(version, res?.Version); }
public Global(string dataDir, string torLogsFile, Config config, UiConfig uiConfig, WalletManager walletManager) { using (BenchmarkLogger.Measure()) { CrashReporter = new CrashReporter(); StoppingCts = new CancellationTokenSource(); DataDir = dataDir; Config = config; UiConfig = uiConfig; TorLogsFile = torLogsFile; Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt")); HostedServices = new HostedServices(); WalletManager = walletManager; LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir); WalletManager.OnDequeue += WalletManager_OnDequeue; WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed; var indexStore = new IndexStore(Network, new SmartHeaderChain()); BitcoinStore = new BitcoinStore( Path.Combine(DataDir, "BitcoinStore"), Network, indexStore, new AllTransactionStore(), new MempoolService() ); SingleInstanceChecker = new SingleInstanceChecker(Network); } }
public async Task Legal(IDialogContext context, LuisResult result) { context.SendTypingAcitivity(); LegalDocuments.RetrieveLegalDocuments(); context.SendTypingAcitivity(); var itms = LegalDocuments.Legaldocuments; itms = itms.Where(cc => cc.OnPreservationHold).ToList(); var res = "There are " + itms.Count() + " documents are on preservation hold"; var attch = ResultCard.GetThumbnailCard( "Legal Cases", res, "Click below link to go the Sharepoint portal for Legal Cases", new CardImage(url: "http://technoinfotech.com/images/legal-hold-technoarchive.png"), new CardAction(ActionTypes.OpenUrl, "Learn More", value: "https://m365x844754.sharepoint.com/sites/ChrevronBot/Shared%20Documents/Forms/AllItems.aspx")); IMessageActivity msg = context.MakeMessage(); msg.Attachments.Add(attch); await context.PostAsync(msg); msg = context.MakeMessage(); ResultCard card = new ResultCard(); card.RenderLegalDocuments(msg, itms); await context.PostAsync(msg); context.Wait(this.MessageReceived); }
public async Task CanLoadLegalDocsAsync() { var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName()); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } var res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); var legalDir = Assert.Single(Directory.GetDirectories(dir)); var version = new Version(1, 1); // Deletes them if multiple legal docs found. var candidate = File.Create(Path.Combine(legalDir, $"{version}.txt")); await candidate.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.NotNull(res); Assert.Single(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); Assert.Equal(version, res.Version); Assert.Equal(Path.Combine(legalDir, $"{version}.txt"), res.FilePath); }
public Global(string dataDir, string torLogsFile, Config config, UiConfig uiConfig, WalletManager walletManager) { using (BenchmarkLogger.Measure()) { StoppingCts = new CancellationTokenSource(); DataDir = dataDir; Config = config; UiConfig = uiConfig; TorSettings = new TorSettings(DataDir, torLogsFile, distributionFolderPath: EnvironmentHelpers.GetFullBaseDirectory()); Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt")); HostedServices = new HostedServices(); WalletManager = walletManager; LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir); WalletManager.OnDequeue += WalletManager_OnDequeue; WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed; var networkWorkFolderPath = Path.Combine(DataDir, "BitcoinStore", Network.ToString()); var transactionStore = new AllTransactionStore(networkWorkFolderPath, Network); var indexStore = new IndexStore(Path.Combine(networkWorkFolderPath, "IndexStore"), Network, new SmartHeaderChain()); var mempoolService = new MempoolService(); var blocks = new FileSystemBlockRepository(Path.Combine(networkWorkFolderPath, "Blocks"), Network); BitcoinStore = new BitcoinStore(indexStore, transactionStore, mempoolService, blocks); WasabiClientFactory wasabiClientFactory = Config.UseTor ? new WasabiClientFactory(Config.TorSocks5EndPoint, backendUriGetter: () => Config.GetCurrentBackendUri()) : new WasabiClientFactory(torEndPoint: null, backendUriGetter: () => Config.GetFallbackBackendUri()); Synchronizer = new WasabiSynchronizer(Network, BitcoinStore, wasabiClientFactory); } }
public void CanCreateLegalDocuments() { var version = new Version(1, 1); var legal = new LegalDocuments($"{version}.txt"); Assert.Equal("1.1.txt", legal.FilePath); Assert.Equal(version, legal.Version); }
public AddWalletPageViewModel( LegalDocuments legalDocuments, WalletManager walletManager, BitcoinStore store, Network network) { Title = "Add Wallet"; SelectionMode = NavBarItemSelectionMode.Button; _legalDocuments = legalDocuments; this.WhenAnyValue(x => x.WalletName) .ObserveOn(RxApp.MainThreadScheduler) .Select(x => !string.IsNullOrWhiteSpace(x)) .Subscribe(x => OptionsEnabled = x && !Validations.Any); RecoverWalletCommand = ReactiveCommand.Create( () => { Navigate().To(new RecoverWalletViewModel(WalletName, network, walletManager)); }); ImportWalletCommand = ReactiveCommand.Create(() => new ImportWalletViewModel(WalletName, walletManager)); ConnectHardwareWalletCommand = ReactiveCommand.Create(() => { Navigate().To(new ConnectHardwareWalletViewModel(WalletName, network, walletManager)); }); CreateWalletCommand = ReactiveCommand.CreateFromTask( async() => { var result = await NavigateDialog( new EnterPasswordViewModel("Type the password of the wallet and click Continue.")); if (result is { } password) { IsBusy = true; var(km, mnemonic) = await Task.Run( () => { var walletGenerator = new WalletGenerator( walletManager.WalletDirectories.WalletsDir, network) { TipHeight = store.SmartHeaderChain.TipHeight }; return(walletGenerator.GenerateWallet(WalletName, password)); }); Navigate().To(new RecoveryWordsViewModel(km, mnemonic, walletManager), NavigationMode.Clear); IsBusy = false; } }); this.ValidateProperty(x => x.WalletName, errors => ValidateWalletName(errors, walletManager, WalletName)); }
public async Task <IActionResult> Create([Bind("LegalDocId,LivingWill,LivingWillDateSigned,LivingWillLastUpdated,LivingWillCopyOnFile,FamilyAwareOfInstructions,MedicalPowerOfAttorney,MedPowerOfAttorneyName,MedPowerOfAttorneyDateSigned,MedPowerOfAttorneyDateLastUpdated,MedPowerOfAttorneyCopyOnFile,HealthCareProxy,HealthCareProxyName,HealthCareProxyDateSigned,HealtchCareProxyDateLastUpdated,DoNotResuscitateOrder,DnrDateSigned,DnrDateLastUpdated,OrganDonorDocument,OrganDonorDateSigned,OrganDonorLastUpdate,DocumentsLocation,DocumentContactsFirstName,DocumentContactsLastName,DocumentContactsPhone,AttorneyFirstName,AttorneyLastName,AttorneyPhone,Comments")] LegalDocuments legalDocuments) { if (ModelState.IsValid) { _context.Add(legalDocuments); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(legalDocuments)); }
public async Task ResolvesConflictsAsync() { var legalDir = Common.GetWorkDir(); if (Directory.Exists(legalDir)) { await IoHelpers.TryDeleteDirectoryAsync(legalDir); } Directory.CreateDirectory(legalDir); var res = await LegalDocuments.LoadAgreedAsync(legalDir); Assert.Null(res); // Deletes them if multiple legal docs found. var candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt")); var candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt")); await candidate1.DisposeAsync(); await candidate2.DisposeAsync(); res = await LegalDocuments.LoadAgreedAsync(legalDir); Assert.Null(res); Assert.Empty(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); // Only the candidates are deleted. var trash = File.Create(Path.Combine(legalDir, "1.txt")); candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt")); candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt")); await trash.DisposeAsync(); await candidate1.DisposeAsync(); await candidate2.DisposeAsync(); res = await LegalDocuments.LoadAgreedAsync(legalDir); Assert.Null(res); Assert.Single(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); }
public TermsAndConditionsViewModel(LegalDocuments legalDocuments, RoutableViewModel next) { Title = "Welcome to Wasabi Wallet"; ViewTermsCommand = ReactiveCommand.CreateFromTask( async() => { var content = await File.ReadAllTextAsync(legalDocuments.FilePath); var legalDocs = new LegalDocumentsViewModel(content); Navigate().To(legalDocs); }); NextCommand = ReactiveCommand.Create( () => Navigate().BackTo(next), this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler)); }
public void CantLoadNotAgreed() { var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName()); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } var res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.True(Directory.Exists(dir)); Assert.Empty(Directory.GetFiles(dir)); var legalDir = Assert.Single(Directory.GetDirectories(dir)); Assert.Empty(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); }
public void CantLoadNotAgreed() { var dir = Common.GetWorkDir(); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } var res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.True(Directory.Exists(dir)); Assert.Empty(Directory.GetFiles(dir)); var legalDir = Assert.Single(Directory.GetDirectories(dir)); Assert.Empty(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); }
public async Task ResolvesConflictsAsync() { var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName()); if (Directory.Exists(dir)) { Directory.Delete(dir, true); } var res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); var legalDir = Assert.Single(Directory.GetDirectories(dir)); // Deletes them if multiple legal docs found. var candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt")); var candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt")); await candidate1.DisposeAsync(); await candidate2.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.Empty(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); // Only the candidates are deleted. var trash = File.Create(Path.Combine(legalDir, "1.txt")); candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt")); candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt")); await trash.DisposeAsync(); await candidate1.DisposeAsync(); await candidate2.DisposeAsync(); res = LegalDocuments.TryLoadAgreed(dir); Assert.Null(res); Assert.Single(Directory.GetFiles(legalDir)); Assert.Empty(Directory.GetDirectories(legalDir)); }
public TermsAndConditionsViewModel(NavigationStateViewModel navigationState, LegalDocuments legalDocuments, RoutableViewModel next) : base(navigationState) { ViewTermsCommand = ReactiveCommand.CreateFromTask( async() => { var content = await File.ReadAllTextAsync(legalDocuments.FilePath); var legalDocs = new LegalDocumentsViewModel( navigationState, content); legalDocs.NavigateToSelf(CurrentTarget); }); NextCommand = ReactiveCommand.Create( () => { NavigateTo(next); }, this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler)); }
public Global(string dataDir, string torLogsFile, Config config, UiConfig uiConfig, WalletManager walletManager) { using (BenchmarkLogger.Measure()) { CrashReporter = new CrashReporter(); StoppingCts = new CancellationTokenSource(); DataDir = dataDir; Config = config; UiConfig = uiConfig; TorLogsFile = torLogsFile; Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt")); HostedServices = new HostedServices(); WalletManager = walletManager; LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir); WalletManager.OnDequeue += WalletManager_OnDequeue; WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed; var networkWorkFolderPath = Path.Combine(DataDir, "BitcoinStore", Network.ToString()); var transactionStore = new AllTransactionStore(networkWorkFolderPath, Network); var indexStore = new IndexStore(Path.Combine(networkWorkFolderPath, "IndexStore"), Network, new SmartHeaderChain()); var mempoolService = new MempoolService(); BitcoinStore = new BitcoinStore(indexStore, transactionStore, mempoolService); SingleInstanceChecker = new SingleInstanceChecker(Network); if (Config.UseTor) { Synchronizer = new WasabiSynchronizer(Network, BitcoinStore, () => Config.GetCurrentBackendUri(), Config.TorSocks5EndPoint); } else { Synchronizer = new WasabiSynchronizer(Network, BitcoinStore, Config.GetFallbackBackendUri(), null); } } }
public AddWalletPageViewModel( LegalDocuments legalDocuments, WalletManager walletManager, BitcoinStore store, Network network) { Title = "Add Wallet"; SelectionMode = NavBarItemSelectionMode.Button; _legalDocuments = legalDocuments; var enableBack = default(IDisposable); this.WhenAnyValue(x => x.CurrentTarget) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => { enableBack?.Dispose(); enableBack = Navigate() .WhenAnyValue(y => y.CanNavigateBack) .Subscribe(y => EnableBack = y); }); this.WhenAnyValue(x => x.WalletName) .ObserveOn(RxApp.MainThreadScheduler) .Select(x => !string.IsNullOrWhiteSpace(x)) .Subscribe(x => OptionsEnabled = x && !Validations.Any); RecoverWalletCommand = ReactiveCommand.Create( () => Navigate().To(new RecoverWalletViewModel(WalletName, network, walletManager))); ImportWalletCommand = ReactiveCommand.CreateFromTask(async() => { try { var filePath = await FileDialogHelper.ShowOpenFileDialogAsync("Import wallet file", new[] { "json" }); if (filePath is null) { return; } var keyManager = await ImportWalletHelper.ImportWalletAsync(walletManager, WalletName, filePath); // TODO: get the type from the wallet file Navigate().To(new AddedWalletPageViewModel(walletManager, keyManager)); } catch (Exception ex) { Logger.LogError(ex); await ShowErrorAsync(ex.ToUserFriendlyString(), "The wallet file was not valid or compatible with Wasabi."); } }); ConnectHardwareWalletCommand = ReactiveCommand.Create(() => Navigate().To(new ConnectHardwareWalletViewModel(WalletName, network, walletManager))); CreateWalletCommand = ReactiveCommand.CreateFromTask( async() => { var dialogResult = await NavigateDialog( new EnterPasswordViewModel("Type the password of the wallet and click Continue.")); if (dialogResult.Result is { } password) { IsBusy = true; var(km, mnemonic) = await Task.Run( () => { var walletGenerator = new WalletGenerator( walletManager.WalletDirectories.WalletsDir, network) { TipHeight = store.SmartHeaderChain.TipHeight }; return(walletGenerator.GenerateWallet(WalletName, password)); }); Navigate().To(new RecoveryWordsViewModel(km, mnemonic, walletManager)); IsBusy = false; } }); this.ValidateProperty(x => x.WalletName, errors => ValidateWalletName(errors, walletManager, WalletName)); }
public void LegalDocumentsCreationFixesPath() { var legal = new LegalDocuments($" 1.1.txt "); Assert.Equal("1.1.txt", legal.FilePath); }