PassWebService use punycode converted webServiceURL + test

This commit is contained in:
Thea Tischbein 2025-05-02 12:04:24 +02:00
parent 7578dc7352
commit f283e4251a
No known key found for this signature in database
3 changed files with 29 additions and 1 deletions

View file

@ -1,3 +1,5 @@
import 'package:punycode_converter/punycode_converter.dart';
/// Metadata required for Pass Web Service
///
/// https://developer.apple.com/library/archive/documentation/PassKit/Reference/PassKit_WebService/WebService.html#//apple_ref/doc/uid/TP40011988
@ -29,7 +31,8 @@ class PassWebService {
if (uri == null || uri.scheme != 'https') return null;
return PassWebService(
authenticationToken: authenticationToken,
webServiceURL: uri,
// URLs due to IDNA2008
webServiceURL: uri.punyEncoded,
);
}
}

View file

@ -17,6 +17,7 @@ dependencies:
crypto: ^3.0.3
http: ^1.0.0
intl: ">=0.17.0 <1.0.0"
punycode_converter: ^0.2.1
topics:
- wallet

View file

@ -126,4 +126,28 @@ void main() {
expect(scaled, 'logo@4x.png');
});
});
test('Check Punyc encoding of Domain in Webservice', () {
// per default Uri.parse does not punycode!
final url = "https://my-äöü-domain.com/endpoint/1234/";
final token = "0000000000000000";
final webService =
PassWebService.maybe(webServiceURL: url, authenticationToken: token);
expect(
webService!.webServiceURL,
Uri.parse("https://xn--my--domain-s5a0tyc.com/endpoint/1234"),
);
});
test('Double Check Domain not needed Puny encoding in Webservice', () {
final url = "https://my-domain.com/endpoint/1234/";
final token = "0000000000000000";
final webService =
PassWebService.maybe(webServiceURL: url, authenticationToken: token);
expect(
webService!.webServiceURL,
Uri.parse("https://my-domain.com/endpoint/1234"),
);
});
}