diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f976aec..bfcd56ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -262,10 +262,9 @@ jobs: files: ./out/* - name: Create service_account.json - if: matrix.platform == 'android-aab' && github.ref_type=='tag' run: echo '${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}' > service_account.json - - name: Deploy to Internal Testers + - name: Deploy to Google Play Internal Testers uses: r0adkll/upload-google-play@v1 with: serviceAccountJson: service_account.json diff --git a/lib/data/repository/profiles_repository_impl.dart b/lib/data/repository/profiles_repository_impl.dart index 8ad0c83e..df9ef111 100644 --- a/lib/data/repository/profiles_repository_impl.dart +++ b/lib/data/repository/profiles_repository_impl.dart @@ -188,12 +188,46 @@ class ProfilesRepositoryImpl loggy.warning("error parsing config: $l"); return left(ProfileFailure.invalidConfig(l.msg)); }, - (_) { - final profile = Profile.fromResponse(url, response.headers.map); + (_) async { + final responseString = await File(path).readAsString(); + final headers = addHeadersFromBody(response.headers.map, responseString); + final profile = Profile.fromResponse(url, headers); return right(profile); }, ); }, ); } + + Map> addHeadersFromBody( + Map> headers, + String responseString, + ) { + final allowedHeaders = [ + 'profile-title', + 'content-disposition', + 'subscription-userinfo', + 'profile-update-interval', + 'support-url', + 'profile-web-page-url' + ]; + for (final text in responseString.split("\n")) { + if (text.startsWith("#") || text.startsWith("//")) { + final index = text.indexOf(':'); + if (index == -1) continue; + final headerTitle = text + .substring(0, index) + .replaceFirst(RegExp("^#|//"), "") + .trim() + .toLowerCase(); + final headerValue = text.substring(index + 1).trim(); + if (!headers.keys.contains(headerTitle) && + allowedHeaders.contains(headerTitle) && + headerValue.isNotEmpty) { + headers[headerTitle] = [headerValue]; + } + } + } + return headers; + } } diff --git a/lib/domain/profiles/profile.dart b/lib/domain/profiles/profile.dart index 7dbc55ff..0bba1fe6 100644 --- a/lib/domain/profiles/profile.dart +++ b/lib/domain/profiles/profile.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:io'; import 'package:dartx/dartx.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; @@ -25,11 +26,9 @@ class Profile with _$Profile { ProfileExtra? extra, }) = _Profile; - factory Profile.fromResponse( - String url, - Map> headers, - ) { + factory Profile.fromResponse(String url, Map> headers) { _loggy.debug("Profile Headers: $headers"); + final titleHeader = headers['profile-title']?.single; var title = ''; if (titleHeader != null) {