From dd0be1e9690361e7086901b9f59378e1c74b3fce Mon Sep 17 00:00:00 2001 From: Trevi Awater Date: Tue, 11 Jan 2022 00:22:50 +0100 Subject: [PATCH] Fixed error handling --- .../Xamarin.Neo4j/Services/Neo4jService.cs | 32 ++++++++++++----- .../ViewModels/AddConnectionViewModel.cs | 36 ++++--------------- 2 files changed, 30 insertions(+), 38 deletions(-) diff --git a/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/Services/Neo4jService.cs b/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/Services/Neo4jService.cs index ea4a0ef..365cbfc 100644 --- a/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/Services/Neo4jService.cs +++ b/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/Services/Neo4jService.cs @@ -25,25 +25,39 @@ namespace Xamarin.Neo4j.Services public async Task EstablishConnection(Neo4jConnectionString connectionString) { - var boltUri = $"bolt://{connectionString.Host}:{connectionString.Port}"; - - var driver = GraphDatabase.Driver(boltUri, AuthTokens.Basic(connectionString.Username, connectionString.Password), builder => - { - builder.WithEncryptionLevel(connectionString.Encrypted ? EncryptionLevel.Encrypted : EncryptionLevel.None); - }); - - GraphClient = new BoltGraphClient(driver); - try { + var boltUri = $"bolt://{connectionString.Host}:{connectionString.Port}"; + + var driver = GraphDatabase.Driver(boltUri, + AuthTokens.Basic(connectionString.Username, connectionString.Password), + builder => + { + builder.WithEncryptionLevel(connectionString.Encrypted + ? EncryptionLevel.Encrypted + : EncryptionLevel.None); + }); + + GraphClient = new BoltGraphClient(driver); + await GraphClient.ConnectAsync(); } + catch (ServiceUnavailableException) + { + return false; + } + catch (AuthenticationException) { return false; } + catch (UriFormatException) + { + return false; + } + return true; } diff --git a/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/ViewModels/AddConnectionViewModel.cs b/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/ViewModels/AddConnectionViewModel.cs index a75fc29..62758f9 100644 --- a/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/ViewModels/AddConnectionViewModel.cs +++ b/Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j/ViewModels/AddConnectionViewModel.cs @@ -43,8 +43,6 @@ namespace Xamarin.Neo4j.ViewModels Commands.Add("Test", new Command(async () => { - if (!ValidateInput()) return; - var connectionString = BuildConnectionString(); var couldConnect = await _neo4jService.EstablishConnection(connectionString); @@ -54,8 +52,6 @@ namespace Xamarin.Neo4j.ViewModels Commands.Add("Save", new Command(async () => { - if (!ValidateInput()) return; - var connectionString = BuildConnectionString(); var namePromptResult = await UserDialogs.Instance.PromptAsync("How do you want to name this connection?", "Save Connection", "Save", "Cancel"); @@ -72,11 +68,15 @@ namespace Xamarin.Neo4j.ViewModels Commands.Add("Connect", new Command(async () => { - if (!ValidateInput()) return; - var connectionString = BuildConnectionString(); - await Navigation.PushAsync(new SessionPage(connectionString)); + var couldConnect = await _neo4jService.EstablishConnection(connectionString); + + if (couldConnect) + await Navigation.PushAsync(new SessionPage(connectionString)); + + else + await UserDialogs.Instance.AlertAsync( "Connection failed."); })); } @@ -105,28 +105,6 @@ namespace Xamarin.Neo4j.ViewModels }; } - private bool ValidateInput() - { - // Username and Password not checked because username- and passwordless connections are allowed - - var ipRegex = new Regex(@"\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b"); - var portRegex = new Regex(@"^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$"); - - if (!ipRegex.IsMatch(Host)) - { - UserDialogs.Instance.AlertAsync("Incorrect host format"); - return false; - } - - if (!portRegex.IsMatch(Port.ToString())) - { - UserDialogs.Instance.AlertAsync("Incorrect port format"); - return false; - } - - return true; - } - #region Bindable Properties public bool Encrypted