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

github.com/EionRobb/skype4pidgin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEion Robb <eion@robbmob.com>2016-07-17 13:32:19 +0300
committerEion Robb <eion@robbmob.com>2016-07-17 13:32:19 +0300
commitcabcc1befee74ed6d4bbdc1cb2bcd4263c837c0c (patch)
treee744490d2a0a2a8ef71e6c49021ffee7eb4b01c3
parent11f0d001acd8dd806f62a93e5807dbe92a24c003 (diff)
Try to be a bit nicer if the registrationToken expires by not disconnecting the whole account
-rw-r--r--skypeweb/skypeweb_login.c38
-rw-r--r--skypeweb/skypeweb_login.h1
-rw-r--r--skypeweb/skypeweb_messages.c11
3 files changed, 41 insertions, 9 deletions
diff --git a/skypeweb/skypeweb_login.c b/skypeweb/skypeweb_login.c
index 0f25668..200429b 100644
--- a/skypeweb/skypeweb_login.c
+++ b/skypeweb/skypeweb_login.c
@@ -32,6 +32,7 @@ skypeweb_login_did_auth(PurpleUtilFetchUrlData *url_data, gpointer user_data, co
refresh_token = skypeweb_string_get_chunk(url_text, len, "=\"skypetoken\" value=\"", "\"");
if (refresh_token == NULL) {
+ purple_account_set_string(sa->account, "refresh-token", NULL);
if (g_strstr_len(url_text, len, "recaptcha_response_field")) {
purple_connection_error(sa->pc,
PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED,
@@ -49,6 +50,7 @@ skypeweb_login_did_auth(PurpleUtilFetchUrlData *url_data, gpointer user_data, co
sa->skype_token = refresh_token;
skypeweb_update_cookies(sa, url_text);
+ purple_account_set_string(sa->account, "refresh-token", g_hash_table_lookup(sa->cookie_table, "refresh-token"));
skypeweb_do_all_the_things(sa);
}
@@ -110,8 +112,8 @@ skypeweb_login_got_pie(PurpleUtilFetchUrlData *url_data, gpointer user_data, con
"BehaviorOverride: redirectAs404\r\n"
"Host: " SKYPEWEB_LOGIN_HOST "\r\n"
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n"
- "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%s",
- strlen(postdata->str), postdata->str);
+ "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%.*s\0",
+ postdata->len, postdata->len, postdata->str);
skypeweb_fetch_url_request(sa, login_url, TRUE, NULL, FALSE, request, TRUE, 524288, skypeweb_login_did_auth, sa);
@@ -189,8 +191,8 @@ skypeweb_login_got_t(PurpleUtilFetchUrlData *url_data, gpointer user_data, const
"BehaviorOverride: redirectAs404\r\n"
"Host: " SKYPEWEB_LOGIN_HOST "\r\n"
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n"
- "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%s",
- strlen(postdata->str), postdata->str);
+ "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%.*s\0",
+ postdata->len, postdata->len, postdata->str);
skypeweb_fetch_url_request(sa, login_url, TRUE, NULL, FALSE, request, TRUE, 524288, skypeweb_login_did_auth, sa);
@@ -249,8 +251,8 @@ skypeweb_login_got_ppft(PurpleUtilFetchUrlData *url_data, gpointer user_data, co
"Host: login.live.com\r\n"
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n"
"Cookie: MSPRequ=%s;MSPOK=%s;CkTst=%s;\r\n"
- "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%s",
- msprequ_cookie, mspok_cookie, cktst_cookie, strlen(postdata->str), postdata->str);
+ "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%.*s\0",
+ msprequ_cookie, mspok_cookie, cktst_cookie, postdata->len, postdata->len, postdata->str);
skypeweb_fetch_url_request(sa, live_login_url, TRUE, NULL, FALSE, request, FALSE, 524288, skypeweb_login_got_t, sa);
@@ -281,3 +283,27 @@ skypeweb_logout(SkypeWebAccount *sa)
{
skypeweb_post_or_get(sa, SKYPEWEB_METHOD_GET | SKYPEWEB_METHOD_SSL, SKYPEWEB_LOGIN_HOST, "/logout", NULL, NULL, NULL, TRUE);
}
+
+
+
+void
+skypeweb_refresh_token_login(SkypeWebAccount *sa)
+{
+ PurpleAccount *account = sa->account;
+ const gchar *login_url = "https://" SKYPEWEB_LOGIN_HOST;// "/login?client_id=578134&redirect_uri=https%3A%2F%2Fweb.skype.com";
+ gchar *request;
+
+ request = g_strdup_printf("GET /login?client_id=578134&redirect_uri=https%%3A%%2F%%2Fweb.skype.com HTTP/1.0\r\n"
+ "Connection: close\r\n"
+ "Accept: */*\r\n"
+ "BehaviorOverride: redirectAs404\r\n"
+ "Host: " SKYPEWEB_LOGIN_HOST "\r\n"
+ "Cookie: refresh-token=%s\r\n\r\n",
+ purple_account_get_string(account, "refresh-token", ""));
+
+ skypeweb_fetch_url_request(sa, login_url, TRUE, NULL, FALSE, request, TRUE, 524288, skypeweb_login_did_auth, sa);
+
+ g_free(request);
+
+ purple_connection_update_progress(sa->pc, _("Authenticating"), 2, 4);
+}
diff --git a/skypeweb/skypeweb_login.h b/skypeweb/skypeweb_login.h
index 2764417..d7a6291 100644
--- a/skypeweb/skypeweb_login.h
+++ b/skypeweb/skypeweb_login.h
@@ -27,5 +27,6 @@
void skypeweb_logout(SkypeWebAccount *sa);
void skypeweb_begin_web_login(SkypeWebAccount *sa);
void skypeweb_begin_oauth_login(SkypeWebAccount *sa);
+void skypeweb_refresh_token_login(SkypeWebAccount *sa);
#endif /* SKYPEWEB_LOGIN_H */
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c
index a1d58b8..40e22d4 100644
--- a/skypeweb/skypeweb_messages.c
+++ b/skypeweb/skypeweb_messages.c
@@ -20,6 +20,7 @@
#include "skypeweb_util.h"
#include "skypeweb_connection.h"
#include "skypeweb_contacts.h"
+#include "skypeweb_login.h"
static gboolean
skypeweb_is_user_self(SkypeWebAccount *sa, const gchar *username) {
@@ -1034,9 +1035,13 @@ skypeweb_got_registration_token(PurpleUtilFetchUrlData *url_data, gpointer user_
expires = skypeweb_string_get_chunk(url_text, len, "expires=", ";");
if (registration_token == NULL) {
- purple_connection_error (sa->pc,
- PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Failed getting Registration Token"));
+ if (purple_account_get_string(sa->account, "refresh-token", NULL)) {
+ skypeweb_refresh_token_login(sa);
+ } else {
+ purple_connection_error (sa->pc,
+ PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
+ _("Failed getting Registration Token"));
+ }
return;
}
//purple_debug_info("skypeweb", "New RegistrationToken is %s\n", registration_token);