Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-07-23 23:08:59 +08:00
parent 418a1e8d39
commit c89a39cf5c
7 changed files with 86 additions and 34 deletions

View File

@@ -1,3 +1,4 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/models/common/account_type.dart';
import 'package:PiliPlus/utils/accounts.dart';
import 'package:PiliPlus/utils/id_utils.dart';
@@ -48,9 +49,11 @@ class LoginAccount implements Account {
@override
late final Map<String, String> headers = {
...Constants.baseHeaders,
'x-bili-mid': _midStr,
'x-bili-aurora-eid': IdUtils.genAuroraEid(mid),
};
@override
late String csrf =
cookieJar.domainCookies['bilibili.com']!['/']!['bili_jct']!.cookie.value;
@@ -120,7 +123,7 @@ class AnonymousAccount implements Account {
@override
String csrf = '';
@override
final Map<String, String> headers = const {};
final Map<String, String> headers = Constants.baseHeaders;
@override
bool activited = false;
@@ -204,3 +207,53 @@ extension BiliCookieJar on DefaultCookieJar {
},
};
}
class NoAccount implements Account {
@override
String? accessKey;
@override
bool activited = false;
@override
DefaultCookieJar cookieJar = DefaultCookieJar();
@override
String csrf = '';
@override
String? refresh;
@override
Set<AccountType> type = const {};
@override
Future<void> delete() {
return Future.value();
}
@override
final Map<String, String> headers = const {};
@override
bool isLogin = false;
@override
int mid = 0;
@override
Future<void> onChange() {
return Future.value();
}
@override
Map<String, dynamic>? toJson() {
return null;
}
NoAccount._();
static final _instance = NoAccount._();
factory NoAccount() => _instance;
}

View File

@@ -95,19 +95,19 @@ class AccountManager extends Interceptor {
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
final path = options.path;
if (_skipCookie(path)) return handler.next(options);
late final Account account = options.extra['account'] ?? _findAccount(path);
final Account account = options.extra['account'] ?? _findAccount(path);
if (_skipCookie(path) || account is NoAccount) return handler.next(options);
if (account.isLogin) {
options.headers.addAll(account.headers);
} else if (path == Api.heartBeat) {
if (!account.isLogin && path == Api.heartBeat) {
return handler.reject(
DioException.requestCancelled(requestOptions: options, reason: null),
false,
);
}
options.headers.addAll(account.headers);
// app端不需要管理cookie
if (path.startsWith(HttpString.appBaseUrl)) {
// if (kDebugMode) debugPrint('is app: ${options.path}');
@@ -130,11 +130,6 @@ class AccountManager extends Interceptor {
}
return handler.next(options);
} else {
if (account is AnonymousAccount && options.extra['checkReply'] == true) {
options.headers[HttpHeaders.cookieHeader] = '';
handler.next(options);
return;
}
account.cookieJar
.loadForRequest(options.uri)
.then((cookies) {