Refresh CSRF token and retry API call

This commit is contained in:
kilowatt 2020-10-24 00:00:37 +03:00
parent df3b7d3d63
commit a77bfc6277
3 changed files with 11 additions and 5 deletions

1
.gitignore vendored
View file

@ -35,6 +35,7 @@ android/local.properties
.pub-cache/ .pub-cache/
.pub/ .pub/
/build/ /build/
.gradle
# Web related # Web related
lib/generated_plugin_registrant.dart lib/generated_plugin_registrant.dart

View file

@ -47,6 +47,7 @@ class DeezerAPI {
}); });
//Post //Post
http.Response res = await http.post(uri, headers: headers, body: jsonEncode(params)); http.Response res = await http.post(uri, headers: headers, body: jsonEncode(params));
dynamic body = jsonDecode(res.body);
//Grab SID //Grab SID
if (method == 'deezer.getUserData') { if (method == 'deezer.getUserData') {
for (String cookieHeader in res.headers['set-cookie'].split(';')) { for (String cookieHeader in res.headers['set-cookie'].split(';')) {
@ -55,8 +56,11 @@ class DeezerAPI {
} }
} }
} }
// In case of error "Invalid CSRF token" retrieve new one and retry the same call
return jsonDecode(res.body); if (body['error'].isNotEmpty && body['error'].containsKey('VALID_TOKEN_REQUIRED') && await rawAuthorize()) {
return callApi(method, params: params, gatewayInput: gatewayInput);
}
return body;
} }
Future<Map<dynamic, dynamic>> callPublicApi(String path) async { Future<Map<dynamic, dynamic>> callPublicApi(String path) async {

View file

@ -752,14 +752,15 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
if (playlist.tracks.length == 0) { if (playlist.tracks.length == 0) {
//Get correct metadata //Get correct metadata
deezerAPI.playlist(playlist.id) deezerAPI.playlist(playlist.id)
.catchError((e) => setState(() => _error = true))
.then((Playlist p) { .then((Playlist p) {
if (p == null) return;
setState(() { setState(() {
playlist = p; playlist = p;
}); });
//Load tracks //Load tracks
_load(); _load();
})
.catchError((e) {
setState(() => _error = true);
}); });
} }
@ -805,7 +806,7 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
), ),
Container(height: 4.0), Container(height: 4.0),
Text( Text(
playlist.user.name, playlist.user.name??'',
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
maxLines: 2, maxLines: 2,
textAlign: TextAlign.center, textAlign: TextAlign.center,