/// <inheritdoc /> public Task <ConnectionStringResult> GetConnectionString() { var value = Environment.GetEnvironmentVariable(_connectionStringVariableName); return(Task.FromResult(value == null ? ConnectionStringResult.CreateFailure( $"Expected connection string environment variable not defined: [{_connectionStringVariableName}]'") : ConnectionStringResult.CreateSuccess(value))); }
public Task <ConnectionStringResult> GetConnectionString() { return(Task.Run(() => { try { _logger.Debug("Deserializing secret for CB with secret name {0}.", _secretKeyName); var secret = _host.GetSecretStoreValue(_secretKeyName); return ConnectionStringResult.CreateSuccess(secret); } catch (Exception ex) { return ConnectionStringResult.CreateFailure(ex); } })); }
private ConnectionStringResult Execute(CancellationToken cancellationToken) { try { var stdOut = new StringBuilder(); var stdError = new StringBuilder(); string argumentString = $"-intent \"{_redisConnectionIntent}\""; string environmentVariable = Environment.GetEnvironmentVariable(CredentialProviderVariableName); if (string.IsNullOrEmpty(environmentVariable)) { return (ConnectionStringResult.CreateFailure( $"Credential provider environment variable {CredentialProviderVariableName} not set.")); } var startInfo = new ProcessStartInfo { FileName = environmentVariable, Arguments = argumentString, WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, StandardOutputEncoding = Encoding.UTF8, StandardErrorEncoding = Encoding.UTF8, ErrorDialog = false }; var process = Process.Start(startInfo); if (process == null) { return(ConnectionStringResult.CreateFailure($"Failed to start credential provider process {environmentVariable}.")); } process.OutputDataReceived += (o, e) => { stdOut.Append(e.Data); }; process.ErrorDataReceived += (o, e) => { stdError.Append(e.Data); }; process.BeginOutputReadLine(); process.BeginErrorReadLine(); using (cancellationToken.Register(() => Kill(process))) { if (!process.WaitForExit((int)_credentialProviderTimeout.TotalMilliseconds)) { Kill(process); return (ConnectionStringResult.CreateFailure( $"Credential provider took longer {_credentialProviderTimeout.TotalSeconds} secs.")); } // Give time for the Async event handlers to finish by calling WaitForExit again. // if the first one succeeded // Note: Read remarks from https://msdn.microsoft.com/en-us/library/ty0d8k56(v=vs.110).aspx // for reason. process.WaitForExit(); } process.CancelErrorRead(); process.CancelOutputRead(); if (process.ExitCode != 0) { return(ConnectionStringResult.CreateFailure( $"Credential provider execution failed with exit code {process.ExitCode}", $"StdOut: \n{stdOut}\nStdErr: \n{stdError}\n")); } return(ConnectionStringResult.CreateSuccess(stdOut.ToString())); } catch (Exception e) { return(ConnectionStringResult.CreateFailure(e)); } }
/// <inheritdoc /> public Task <ConnectionStringResult> GetConnectionString() => Task.FromResult(ConnectionStringResult.CreateSuccess(_connectionString));
public Task <ConnectionStringResult> GetConnectionString() { return(Task.FromResult(ConnectionStringResult.CreateFailure(_errorMessage))); }