TF-3985 Prefer to use domain from platform rather than from email

This commit is contained in:
dab246
2025-09-10 14:30:52 +07:00
committed by Dat H. Pham
parent f117f37a92
commit fa2d304c8d
4 changed files with 49 additions and 1 deletions
@@ -4,6 +4,7 @@ import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.
import 'package:tmail_ui_user/features/paywall/domain/usecases/get_paywall_url_interactor.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
extension ValidateSaasPremiumAvailableExtension on MailboxDashBoardController {
@@ -43,6 +44,7 @@ extension ValidateSaasPremiumAvailableExtension on MailboxDashBoardController {
final qualifiedPaywall = paywallUrlPattern!.getQualifiedUrl(
ownerEmail: ownEmailAddress.value,
domainName: RouteUtils.getRootDomain(),
);
AppUtils.launchLink(qualifiedPaywall);
@@ -14,7 +14,7 @@ class PaywallUrlPattern with EquatableMixin {
return PaywallUtils.buildPaywallUrlFromTemplate(
template: pattern,
localPart: mailAddress?.localPart,
domainName: mailAddress?.domain.domainName,
domainName: domainName ?? mailAddress?.domain.domainName,
);
}
+16
View File
@@ -264,4 +264,20 @@ abstract class RouteUtils {
static String generateMailtoLink(String mailAddress) {
return '$baseOriginUrl/$mailtoPrefix/?uri=$mailtoPrefix:$mailAddress';
}
static String? getRootDomain({String? hostname}) {
final host = hostname ?? html.window.location.hostname;
if (host == null || host.isEmpty) {
return null;
}
final parts = host.split('.');
if (parts.length >= 2) {
return '${parts[parts.length - 2]}.${parts.last}';
}
return host;
}
}
+30
View File
@@ -253,4 +253,34 @@ void main() {
expect(result[RouteUtils.paramBody], equals(body));
});
});
group('getRootDomain', () {
test('should return null when hostname is empty', () {
expect(RouteUtils.getRootDomain(hostname: ''), isNull);
});
test('should return null when hostname is empty', () {
expect(RouteUtils.getRootDomain(hostname: ''), isNull);
});
test('should return root domain for simple domain', () {
expect(RouteUtils.getRootDomain(hostname: 'example.com'), 'example.com');
});
test('should return root domain and remove subdomains', () {
expect(RouteUtils.getRootDomain(hostname: 'mail.dev.example.com'), 'example.com');
});
test('should return root domain and remove www subdomain', () {
expect(RouteUtils.getRootDomain(hostname: 'www.google.com'), 'google.com');
});
test('should return localhost as is', () {
expect(RouteUtils.getRootDomain(hostname: 'localhost'), 'localhost');
});
test('should handle multi-level tld like co.uk (not fully accurate)', () {
expect(RouteUtils.getRootDomain(hostname: 'service.example.co.uk'), 'co.uk');
});
});
}