Skip to content

Instantly share code, notes, and snippets.

@aoirint
Created November 22, 2022 20:28
Show Gist options
  • Save aoirint/8fd07dd067a09fec47e6975028412f84 to your computer and use it in GitHub Desktop.
Save aoirint/8fd07dd067a09fec47e6975028412f84 to your computer and use it in GitHub Desktop.
uguisu用の没コード
import 'package:http/http.dart' as http;
import 'package:logging/logging.dart';
import 'package:sweet_cookie_jar/sweet_cookie_jar.dart';
class NiconicoAuthSignInMfaNotRequiredResponse {
String userSession;
String userSessionSecure;
NiconicoAuthSignInMfaNotRequiredResponse({
required this.userSession,
required this.userSessionSecure,
});
}
class NiconicoAuthSignInMfaRequiredResponse {
String mfaFormActionUri;
String mfaSession;
NiconicoAuthSignInMfaRequiredResponse({
required this.mfaFormActionUri,
required this.mfaSession,
});
}
class NiconicoAuthSignInResponse {
NiconicoAuthSignInMfaNotRequiredResponse? mfaNotRequiredResponse;
NiconicoAuthSignInMfaRequiredResponse? mfaRequiredResponse;
}
class NiconicoAuthSignInMfaResponse {
String userSession;
String userSessionSecure;
String? mfaTrustedDeviceToken;
NiconicoAuthSignInMfaResponse({
required this.userSession,
required this.userSessionSecure,
this.mfaTrustedDeviceToken,
});
}
abstract class NiconicoAuthBase {
Future<NiconicoAuthSignInResponse> signIn({
required String mailTel,
required String password,
});
Future<NiconicoAuthSignInMfaResponse> signInMfa({
required String otp,
required bool isMfaTrustedDevice,
required String deviceName,
});
Future<void> signOut({
String userSession,
String userSessionSecure,
});
Future<bool> validateTokenAlive({
String userSession,
String userSessionSecure,
});
}
class NiconicoAuth extends NiconicoAuthBase {
Future<NiconicoAuthSignInResponse> signIn({
required String mailTel,
required String password,
}) async {
final redirectedToUri = Uri.parse(location);
// if (redirectedToUri.origin != uri.origin) {
// throw Exception('URL origin must be the same between the redirection for security reason');
// }
if (redirectedToUri.path == '/mfa') {
// 確認コード
final mfaFormActionUri = redirectedToUri;
if (redirectedToUri.origin != mfaFormActionUri.origin) {
throw Exception('URL origin must be the same between the redirected uri and the mfa form action uri for security reason');
}
return NiconicoLoginResult(cookieJar: cookieJar, userId: null, mfaRequired: true, mfaFormActionUri: mfaFormActionUri);
}
if (redirectedToUri.path == '/') {
// ログイン成功
// x-niconico-id from /
final redirectedRequestHeaders = {'user-agent': userAgent};
redirectedRequestHeaders['cookie'] = formatCookieJarForRequestHeader(cookieJar);
final redirectedResponse = await http.get(redirectedToUri, headers: redirectedRequestHeaders);
if (redirectedResponse.statusCode != 200) {
throw Exception('Redirected request failed. Status ${redirectedResponse.statusCode}');
}
var userId = redirectedResponse.headers['x-niconico-id'];
if (userId == null) {
throw Exception('Redirected response does not contains x-niconico-id header');
}
return NiconicoLoginResult(cookieJar: cookieJar, userId: userId, mfaRequired: false);
}
throw Exception('Unexpected login response. Login failed.');
}
Future<NiconicoAuthSignInMfaResponse> signInMfa({
required String otp,
required bool isMfaTrustedDevice,
required String deviceName,
}) async {
}
Future<void> signOut({
String userSession,
String userSessionSecure,
}) async {
}
Future<bool> validateTokenAlive({
String userSession,
String userSessionSecure,
}) async {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment