Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/pidgin-opensteamworks.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b>2014-01-14 09:02:57 +0400
committereionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b>2014-01-14 09:02:57 +0400
commite1412d0ae8cbf88867cff1bf0d1510c9fa01bafb (patch)
tree0acc87bcb32c73dcd826ba0713bca1adb3657763
parentf42cc3b7ed88ba488f8a8abda5c4b692842306e0 (diff)
Handle expired login access_token's with an error callback during login
-rw-r--r--steam-mobile/libsteam.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/steam-mobile/libsteam.c b/steam-mobile/libsteam.c
index c86613b..ff0bf37 100644
--- a/steam-mobile/libsteam.c
+++ b/steam-mobile/libsteam.c
@@ -148,6 +148,7 @@ steam_accountid_to_steamid(gint64 accountid)
static void steam_fetch_new_sessionid(SteamAccount *sa);
static void steam_get_friend_summaries(SteamAccount *sa, const gchar *who);
+static void steam_get_rsa_key(SteamAccount *sa);
static void
steam_friend_action(SteamAccount *sa, const gchar *who, const gchar *action)
@@ -919,14 +920,29 @@ steam_login_access_token_cb(SteamAccount *sa, JsonObject *obj, gpointer user_dat
}
static void
+steam_login_with_access_token_error_cb(SteamAccount *sa, const gchar *data, gssize data_len, gpointer user_data)
+{
+ if (g_strstr_len(data, data_len, "401 Unauthorized")) {
+ // Our access_token looks like it expired?
+ //Wipe it and try re-auth
+
+ steam_account_set_access_token(sa, NULL);
+ steam_get_rsa_key(sa);
+ }
+}
+
+static void
steam_login_with_access_token(SteamAccount *sa)
{
gchar *postdata;
+ SteamConnection *sconn;
postdata = g_strdup_printf("access_token=%s", purple_url_encode(steam_account_get_access_token(sa)));
//TODO, handle a 401 response from the server - trash the steamguard and access_token
- steam_post_or_get(sa, STEAM_METHOD_POST | STEAM_METHOD_SSL, NULL, "/ISteamWebUserPresenceOAuth/Logon/v0001", postdata, steam_login_access_token_cb, NULL, TRUE);
+ sconn = steam_post_or_get(sa, STEAM_METHOD_POST | STEAM_METHOD_SSL, NULL, "/ISteamWebUserPresenceOAuth/Logon/v0001", postdata, steam_login_access_token_cb, NULL, TRUE);
g_free(postdata);
+
+ sconn->error_callback = steam_login_with_access_token_error_cb;
}
static void
@@ -1035,6 +1051,16 @@ steam_login_got_rsakey(SteamAccount *sa, JsonObject *obj, gpointer user_data)
g_free(encrypted_password);
}
+static void
+steam_get_rsa_key(SteamAccount *sa)
+{
+ gchar *url;
+
+ url = g_strdup_printf("/mobilelogin/getrsakey?username=%s", purple_url_encode(sa->account->username));
+ steam_post_or_get(sa, STEAM_METHOD_GET | STEAM_METHOD_SSL, "steamcommunity.com", url, NULL, steam_login_got_rsakey, NULL, TRUE);
+ g_free(url);
+}
+
#ifdef G_OS_UNIX
static void
steam_keyring_got_password(GnomeKeyringResult res, const gchar* access_token, gpointer user_data) {
@@ -1047,9 +1073,7 @@ steam_keyring_got_password(GnomeKeyringResult res, const gchar* access_token, gp
steam_login_with_access_token(sa);
} else
{
- gchar *url = g_strdup_printf("/mobilelogin/getrsakey?username=%s", purple_url_encode(sa->account->username));
- steam_post_or_get(sa, STEAM_METHOD_GET | STEAM_METHOD_SSL, "steamcommunity.com", url, NULL, steam_login_got_rsakey, NULL, TRUE);
- g_free(url);
+ steam_get_rsa_key(sa);
}
}
#endif
@@ -1092,9 +1116,7 @@ steam_login(PurpleAccount *account)
steam_login_with_access_token(sa);
} else
{
- gchar *url = g_strdup_printf("/mobilelogin/getrsakey?username=%s", purple_url_encode(account->username));
- steam_post_or_get(sa, STEAM_METHOD_GET | STEAM_METHOD_SSL, "steamcommunity.com", url, NULL, steam_login_got_rsakey, NULL, TRUE);
- g_free(url);
+ steam_get_rsa_key(sa);
}
purple_connection_set_state(pc, PURPLE_CONNECTING);