resolveAndSanitizeRedirectWithResolver function
Future<String?>
resolveAndSanitizeRedirectWithResolver(
- Map<
String, dynamic> payload, - Map<
String, String> queryParameters, { - required Uri requestUri,
- required FutureOr<
String?> resolveRedirect(- String? candidate
- String? fallbackHost,
- String? fallbackScheme,
- String payloadCallbackKey = 'callbackUrl',
- String payloadRedirectKey = 'redirect',
- String queryCallbackKey = 'callbackUrl',
Resolves and sanitizes redirect values using callback precedence plus an optional external resolver.
The flow is:
- Resolve candidate from payload/query via resolveRedirectCandidate.
- Sanitize candidate for same-origin safety.
- Invoke
resolveRedirectwith sanitized candidate. - Sanitize resolved value again (or fallback to candidate when null).
Implementation
Future<String?> resolveAndSanitizeRedirectWithResolver(
Map<String, dynamic> payload,
Map<String, String> queryParameters, {
required Uri requestUri,
required FutureOr<String?> Function(String? candidate) resolveRedirect,
String? fallbackHost,
String? fallbackScheme,
String payloadCallbackKey = 'callbackUrl',
String payloadRedirectKey = 'redirect',
String queryCallbackKey = 'callbackUrl',
}) async {
final candidate = resolveAndSanitizeRedirectCandidate(
payload,
queryParameters,
requestUri: requestUri,
fallbackHost: fallbackHost,
fallbackScheme: fallbackScheme,
payloadCallbackKey: payloadCallbackKey,
payloadRedirectKey: payloadRedirectKey,
queryCallbackKey: queryCallbackKey,
);
final resolved = await Future<String?>.value(resolveRedirect(candidate));
return sanitizeRedirectUrl(
resolved ?? candidate,
requestUri: requestUri,
fallbackHost: fallbackHost,
fallbackScheme: fallbackScheme,
);
}