protected override ExternalUnit OnCheckStatus(ExternalUnit externalUnit) { if (string.IsNullOrWhiteSpace(options.StoragePath)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "File storage path is required.")); } var directory = new DirectoryInfo(options.StoragePath); if (!directory.Exists) { return(externalUnit.SetStatus(UnitStatus.NotOk, "File storage path doesn't exist or is not accessible.")); } var accessControl = directory.GetAccessControl(); var accessRules = accessControl?.GetAccessRules(true, true, typeof(SecurityIdentifier)); var applicationIdentity = WindowsIdentity.GetCurrent(); if (options.RequireRead && !HasRights(accessRules, applicationIdentity, FileSystemRights.Read)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "File storage path doesn't have reading rights.")); } if (options.RequireWrite && !HasRights(accessRules, applicationIdentity, FileSystemRights.Write)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "File storage path doesn't have writing rights.")); } return(externalUnit.SetStatus(UnitStatus.Ok)); }
protected override ExternalUnit OnCheckStatus(ExternalUnit externalUnit) { if (string.IsNullOrWhiteSpace(options.ConnectionString)) { return(externalUnit.SetStatus(UnitStatus.NotOk, $"Database connection string is required.")); } if (connectionType == null) { return(externalUnit.SetStatus(UnitStatus.NotOk, $"Cannot load database connection type: {string.Join(", ", ConnectionTypeNames)}.")); } using var connection = CreateConnection(); connection.Open(); using var command = connection.CreateCommand(); command.CommandText = VersionQuery; externalUnit.ServerPlatform = new ServerPlatform { Name = PlatformName, Version = Convert.ToString(command.ExecuteScalar()) }; return(externalUnit.SetStatus(UnitStatus.Ok)); }
protected override async Task <ExternalUnit> OnCheckStatusAsync(ExternalUnit externalUnit, CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(options.Uri)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "Web service uri is required.")); } var request = (HttpWebRequest)WebRequest.Create(options.Uri); request.Method = "GET"; request.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; using var response = (HttpWebResponse) await request.GetResponseAsync(); return(response.StatusCode == HttpStatusCode.OK ? externalUnit.SetStatus(UnitStatus.Ok) : externalUnit.SetStatus(UnitStatus.NotOk, "Status check failed (code: {0}; description: `{1}`)", response.StatusCode, response.StatusDescription)); }
public virtual async Task <ExternalUnit> CheckStatusAsync(CancellationToken cancellationToken) { var externalUnit = new ExternalUnit { Name = Name }; try { externalUnit.Uri = string.IsNullOrWhiteSpace(options.DisplayUri) ? DisplayUri : options.DisplayUri; return(await OnCheckStatusAsync(externalUnit, cancellationToken)); } catch (Exception exception) { return(externalUnit.SetStatus(UnitStatus.NotOk, exception.Message)); } }
protected override async Task <ExternalUnit> OnCheckStatusAsync(ExternalUnit externalUnit, CancellationToken cancellationToken) { externalUnit.ServerPlatform = new ServerPlatform { Name = "X-Road" }; if (!IsValidProtocolVersion(options.ProtocolVersion)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "X-Road protocol version is required.")); } if (string.IsNullOrWhiteSpace(options.Uri)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "X-Road security server uri is required.")); } if (string.IsNullOrWhiteSpace(options.ProducerName)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "X-Road producer name is required.")); } if (string.IsNullOrWhiteSpace(options.Consumer)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "X-Road consumer is required.")); } if (string.IsNullOrWhiteSpace(options.UserId)) { return(externalUnit.SetStatus(UnitStatus.NotOk, "X-Road user id is required.")); } var statusCode = await GetStatusCodeAsync(); return(statusCode == 1 ? externalUnit.SetStatus(UnitStatus.Ok) : externalUnit.SetStatus(UnitStatus.NotOk, $"Status check returned {statusCode} as result.")); }