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/
/build/
.gradle
# Web related
lib/generated_plugin_registrant.dart

View File

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

View File

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