Fix infinite sub expire date (#334)

* Fix infinite sub expire date

* fix expire

* fix build

* refactor

* make it better readable

* Fix infinite sub

* Add test for infinite sub

---------

Co-authored-by: Hiddify <114227601+hiddify-com@users.noreply.github.com>
Co-authored-by: problematicconsumer <problematicconsumer@protonmail.com>
This commit is contained in:
Pavel Volkov
2024-01-15 19:49:59 +03:00
committed by GitHub
parent e0a02d4209
commit 46107f2b5f
2 changed files with 38 additions and 6 deletions

View File

@@ -14,6 +14,9 @@ import 'package:uuid/uuid.dart';
/// - url filename extension (example: `https://example.com/config.json`) -> name=`config` /// - url filename extension (example: `https://example.com/config.json`) -> name=`config`
/// - if none of these methods return a non-blank string, fallback to `Remote Profile` /// - if none of these methods return a non-blank string, fallback to `Remote Profile`
abstract class ProfileParser { abstract class ProfileParser {
static const infiniteTrafficThreshold = 9223372036854775807;
static const infiniteTimeThreshold = 92233720368;
static RemoteProfileEntity parse( static RemoteProfileEntity parse(
String url, String url,
Map<String, List<String>> headers, Map<String, List<String>> headers,
@@ -89,16 +92,15 @@ abstract class ProfileParser {
"upload": final upload?, "upload": final upload?,
"download": final download?, "download": final download?,
"total": var total, "total": var total,
"expire": final expire "expire": var expire
}) { }) {
total = total ?? 0; total = (total == null || total == 0) ? infiniteTrafficThreshold : total;
expire = (expire == null || expire == 0) ? infiniteTimeThreshold : expire;
return SubscriptionInfo( return SubscriptionInfo(
upload: upload, upload: upload,
download: download, download: download,
total: total == 0 ? 9223372036854775807 : total, total: total,
expire: DateTime.fromMillisecondsSinceEpoch( expire: DateTime.fromMillisecondsSinceEpoch(expire * 1000),
(expire ?? 92233720368) * 1000,
),
); );
} }
return null; return null;

View File

@@ -70,6 +70,36 @@ void main() {
); );
}, },
); );
test(
"with infinite traffic and time",
() {
final headers = <String, List<String>>{
"profile-title": ["title"],
"profile-update-interval": ["1"],
"subscription-userinfo": [
"upload=0;download=1024;total=0;expire=0",
],
"profile-web-page-url": [validBaseUrl],
"support-url": [validSupportUrl],
};
final profile = ProfileParser.parse(validExtendedUrl, headers);
expect(profile.subInfo, isNotNull);
expect(
profile.subInfo!.total,
equals(ProfileParser.infiniteTrafficThreshold),
);
expect(
profile.subInfo!.expire,
equals(
DateTime.fromMillisecondsSinceEpoch(
ProfileParser.infiniteTimeThreshold * 1000,
),
),
);
},
);
}, },
); );
} }