public static MqttConnectionSettings FromEnvVars()

in dotnet/src/Azure.Iot.Operations.Protocol/Connection/MqttConnectionSettings.cs [98:155]


        public static MqttConnectionSettings FromEnvVars()
        {
            string? hostname = Environment.GetEnvironmentVariable("AIO_BROKER_HOSTNAME");

            if (string.IsNullOrEmpty(hostname))
            {
                throw AkriMqttException.GetConfigurationInvalidException(
                    "AIO_BROKER_HOSTNAME",
                    string.Empty,
                    "Invalid settings in provided Environment Variables: 'AIO_BROKER_HOSTNAME' is missing.");
            }

            string? tcpPort = Environment.GetEnvironmentVariable("AIO_BROKER_TCP_PORT");

            string? clientId = Environment.GetEnvironmentVariable("AIO_MQTT_CLIENT_ID");
            if (string.IsNullOrEmpty(clientId))
            {
                throw AkriMqttException.GetConfigurationInvalidException(
                    "AIO_MQTT_CLIENT_ID",
                    string.Empty,
                    "Invalid settings in provided Environment Variables: 'AIO_MQTT_CLIENT_ID' is missing.");
            }

            string? certFile = Environment.GetEnvironmentVariable("AIO_TLS_CERT_FILE");
            string? keyFile = Environment.GetEnvironmentVariable("AIO_TLS_KEY_FILE");
            string? username = Environment.GetEnvironmentVariable("AIO_MQTT_USERNAME");
            string? passwordFile = Environment.GetEnvironmentVariable("AIO_MQTT_PASSWORD_FILE");
            string? keepAlive = Environment.GetEnvironmentVariable("AIO_MQTT_KEEP_ALIVE");
            string? sessionExpiry = Environment.GetEnvironmentVariable("AIO_MQTT_SESSION_EXPIRY");
            string? cleanStart = Environment.GetEnvironmentVariable("AIO_MQTT_CLEAN_START");
            string? useTls = Environment.GetEnvironmentVariable("AIO_MQTT_USE_TLS");
            string? caFile = Environment.GetEnvironmentVariable("AIO_TLS_CA_FILE");
            string? keyPasswordFile = Environment.GetEnvironmentVariable("AIO_TLS_KEY_PASSWORD_FILE");
            string? satAuthFile = Environment.GetEnvironmentVariable("AIO_SAT_FILE");

            try
            {
                return new MqttConnectionSettings(hostname, clientId)
                {
                    CertFile = certFile,
                    KeyFile = keyFile,
                    Username = username,
                    PasswordFile = passwordFile,
                    KeepAlive = string.IsNullOrEmpty(keepAlive) ? s_defaultKeepAlive : TimeSpan.FromSeconds(int.Parse(keepAlive, CultureInfo.InvariantCulture)),
                    SessionExpiry = string.IsNullOrEmpty(sessionExpiry) ? s_defaultSessionExpiry : TimeSpan.FromSeconds(int.Parse(sessionExpiry, CultureInfo.InvariantCulture)),
                    CleanStart = string.IsNullOrEmpty(cleanStart) || CheckForValidBooleanInput(nameof(CleanStart), cleanStart),
                    TcpPort = string.IsNullOrEmpty(tcpPort) ? DefaultTcpPort : CheckForValidIntegerInput(nameof(TcpPort), tcpPort),
                    UseTls = string.IsNullOrEmpty(useTls) || CheckForValidBooleanInput(nameof(UseTls), useTls),
                    CaFile = caFile,
                    KeyPasswordFile = string.IsNullOrEmpty(keyPasswordFile) ? null : File.ReadAllText(keyPasswordFile).Trim(),
                    SatAuthFile = satAuthFile
                };
            }
            catch (ArgumentException ex)
            {
                throw AkriMqttException.GetConfigurationInvalidException(ex.ParamName!, string.Empty, "Invalid settings in provided Environment Variables: " + ex.Message, ex);
            }
        }