34 lines
943 B
Dart
34 lines
943 B
Dart
import 'package:dartx/dartx.dart';
|
|
import 'package:hiddify/utils/validators.dart';
|
|
|
|
typedef ProfileLink = ({String url, String name});
|
|
|
|
// TODO: test and improve
|
|
abstract class LinkParser {
|
|
static const protocols = ['clash', 'clashmeta'];
|
|
|
|
static ProfileLink? simple(String link) {
|
|
if (!isUrl(link)) return null;
|
|
final uri = Uri.parse(link);
|
|
final params = uri.queryParameters;
|
|
return (
|
|
url: uri
|
|
.replace(queryParameters: {})
|
|
.toString()
|
|
.removeSuffix('?')
|
|
.split('&')
|
|
.first,
|
|
name: params['name'] ?? '',
|
|
);
|
|
}
|
|
|
|
static ProfileLink? deep(String link) {
|
|
final uri = Uri.parse(link);
|
|
if (protocols.none((e) => uri.scheme == e)) return null;
|
|
if (uri.authority != 'install-config') return null;
|
|
final params = uri.queryParameters;
|
|
if (params['url'] == null) return null;
|
|
return (url: params['url']!, name: params['name'] ?? '');
|
|
}
|
|
}
|