Created
November 22, 2022 20:28
-
-
Save aoirint/8fd07dd067a09fec47e6975028412f84 to your computer and use it in GitHub Desktop.
uguisu用の没コード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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