swampAuthenticationFromEnvironment function

SwampAuthentication? swampAuthenticationFromEnvironment(
  1. Map<String, String> environment
)

Creates authentication configuration from Swamp environment variables.

SWAMP_AUTH_FILE and SWAMP_AUTH_URL accept comma-separated values. Static files are tried first in their listed order, followed by REST endpoints in their listed order.

Implementation

SwampAuthentication? swampAuthenticationFromEnvironment(
  Map<String, String> environment,
) {
  final sources = <AuthenticationSource>[
    for (final path in _environmentList(environment, 'SWAMP_AUTH_FILE'))
      StaticFileAuthenticationSource(path),
    for (final endpoint in _environmentList(environment, 'SWAMP_AUTH_URL'))
      RestApiAuthenticationSource(Uri.parse(endpoint)),
  ];
  if (sources.isEmpty) return null;

  final maximumText = environment['SWAMP_AUTH_MAX_CONNECTIONS_PER_USER'];
  final maximum = maximumText == null ? null : int.tryParse(maximumText);
  if (maximumText != null && (maximum == null || maximum <= 0)) {
    throw FormatException(
      'SWAMP_AUTH_MAX_CONNECTIONS_PER_USER must be a positive integer',
    );
  }

  return SwampAuthentication(
    sources: sources,
    policy: AuthenticationPolicy(
      requireForConnection: _environmentBool(
        environment,
        'SWAMP_AUTH_REQUIRE_CONNECTION',
        defaultValue: true,
      ),
      requireForRoomCreation: _environmentBool(
        environment,
        'SWAMP_AUTH_REQUIRE_CREATE',
        defaultValue: true,
      ),
      maxConnectionsPerUser: maximum,
    ),
  );
}