Automatically refresh revoked sessions and prompt for a new code

This commit is contained in:
mjentsch 2016-01-20 23:00:31 +01:00
parent 6a8760d5d3
commit 1808ca4984
2 changed files with 23 additions and 1 deletions

View file

@ -34,6 +34,7 @@ static void update_marked_read (struct tgl_state *TLS, int num, struct tgl_messa
static void update_on_logged_in (struct tgl_state *TLS);
static void update_on_ready (struct tgl_state *TLS);
static void on_user_get_info (struct tgl_state *TLS, void *info_data, int success, struct tgl_user *U);
static void update_on_failed_login (struct tgl_state *TLS);
const char *config_dir = "telegram-purple";
const char *user_pk_filename = "server.tglpub";
@ -56,7 +57,8 @@ struct tgl_update_callback tgp_callback = {
.secret_chat_update = update_secret_chat_handler,
.type_notification = update_user_typing,
.marked_read = update_marked_read,
.create_print_name = tgp_blist_create_print_name
.create_print_name = tgp_blist_create_print_name,
.on_failed_login = update_on_failed_login
};
static void _update_buddy (struct tgl_state *TLS, tgl_peer_t *user, unsigned flags) {
@ -521,6 +523,18 @@ static void update_on_ready (struct tgl_state *TLS) {
tgl_do_update_contact_list (TLS, 0, 0);
}
static void update_on_failed_login (struct tgl_state *TLS) {
info ("update_on_failed_login(): Login to telegram failed.");
// 401: SESSION_REVOKED is called when the session is cancelled during runtime
// 401: AUTH_KEY_UNREGISTERED is called when logging into a revoked session
if (strstr (TLS->error, "SESSION_REVOKED") ||
strstr (TLS->error, "AUTH_KEY_UNREGISTERED")) {
purple_account_set_bool (tls_get_pa (TLS), TGP_KEY_RESET_AUTH, TRUE);
}
purple_connection_error (tls_get_conn (TLS), TLS->error);
}
static void tgprpl_login (PurpleAccount * acct) {
info ("tgprpl_login(): Purple is telling the prpl to connect the account");
@ -597,6 +611,12 @@ static void tgprpl_login (PurpleAccount * acct) {
read_auth_file (TLS);
read_state_file (TLS);
if (purple_account_get_bool (acct, TGP_KEY_RESET_AUTH, FALSE)) {
info ("last login attempt failed, resetting authorization ...");
purple_account_set_bool (tls_get_pa (TLS), TGP_KEY_RESET_AUTH, FALSE);
bl_do_reset_authorization (TLS);
}
purple_connection_set_state (conn->gc, PURPLE_CONNECTING);
tgl_login (TLS);
}

View file

@ -87,6 +87,8 @@
#define TGP_DEFAULT_SEND_READ_NOTIFICATIONS TRUE
#define TGP_KEY_SEND_READ_NOTIFICATIONS "send-read-notifications"
#define TGP_KEY_RESET_AUTH "reset-authorization"
extern const char *pk_path;
extern const char *user_pk_filename;
extern const char *config_dir;