diff options
author | Marius Halden <marius.h@lden.org> | 2017-10-24 21:10:02 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2017-10-24 21:10:02 +0200 |
commit | 7d3a199e5084831fe08aae7e67f562d9fb3fa07b (patch) | |
tree | c2d1eb73ef18d89c0207b4c3629ac859cf39e191 /facebook/facebook.c | |
parent | f5a6c8e103d06d949c6ef292cbfc0af2a6fe42e0 (diff) | |
parent | 553593d07170d6d1563d0079dbedd481dcec5b00 (diff) | |
download | bitlbee-facebook-7d3a199e5084831fe08aae7e67f562d9fb3fa07b.tar.gz bitlbee-facebook-7d3a199e5084831fe08aae7e67f562d9fb3fa07b.tar.bz2 bitlbee-facebook-7d3a199e5084831fe08aae7e67f562d9fb3fa07b.tar.xz |
Merge branch 'master' into track-messagestrack-messages
Diffstat (limited to 'facebook/facebook.c')
-rw-r--r-- | facebook/facebook.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/facebook/facebook.c b/facebook/facebook.c index 63250d9..a6753ef 100644 --- a/facebook/facebook.c +++ b/facebook/facebook.c @@ -26,6 +26,8 @@ #define OPT_SELFMESSAGE 0 #endif +#define FB_SSO_HANDLE "facebook_sso_auth" + typedef struct { struct { gint new_buddy : 1, @@ -141,6 +143,9 @@ fb_cb_api_auth(FbApi *api, gpointer data) ic = fb_data_get_connection(fata); + /* likely a no-op if not authing with SSO */ + imcb_remove_buddy(ic, FB_SSO_HANDLE, NULL); + imcb_log(ic, "Fetching contacts"); fb_data_save(fata); fb_api_contacts(api); @@ -720,6 +725,31 @@ fb_cb_api_typing(FbApi *api, FbApiTyping *typg, gpointer data) imcb_buddy_typing(ic, uid, flags); } +static void +fb_cb_api_work_sso_login(FbApi *api, gpointer data) +{ + FbData *fata = data; + struct im_connection *ic; + gchar *url; + + ic = fb_data_get_connection(fata); + + url = fb_api_work_gen_sso_url(api, ic->acc->user); + imcb_add_buddy(ic, FB_SSO_HANDLE, NULL); + + imcb_buddy_msg(ic, FB_SSO_HANDLE, "Open this URL in your browser to authenticate:", 0, 0); + imcb_buddy_msg(ic, FB_SSO_HANDLE, url, 0, 0); + imcb_buddy_msg(ic, FB_SSO_HANDLE, + "Respond to this message with the URL starting with 'fb-workchat-sso://' that it attempts to redirect to.", + 0, 0); + imcb_buddy_msg(ic, FB_SSO_HANDLE, + "If your browser says 'Address not understood' (like firefox), copy it from the address bar. " + "Otherwise you might have to right click -> view source in the last page and find it there. Good luck!", + 0, 0); + + g_free(url); +} + static char * fb_eval_open(struct set *set, char *value) { @@ -771,6 +801,7 @@ fb_init(account_t *acct) set_add(&acct->set, "mark_read_reply", "false", set_eval_bool, acct); set_add(&acct->set, "show_unread", "false", set_eval_bool, acct); set_add(&acct->set, "sync_interval", "5", set_eval_int, acct); + set_add(&acct->set, "work", "false", set_eval_bool, acct); } static void @@ -841,10 +872,18 @@ fb_login(account_t *acc) "typing", G_CALLBACK(fb_cb_api_typing), fata); + g_signal_connect(api, + "work-sso-login", + G_CALLBACK(fb_cb_api_work_sso_login), + fata); if (!fb_data_load(fata)) { imcb_log(ic, "Authenticating"); - fb_api_auth(api, acc->user, acc->pass); + if (set_getbool(&acc->set, "work")) { + fb_api_work_login(api, acc->user, acc->pass); + } else { + fb_api_auth(api, acc->user, acc->pass, NULL); + } return; } @@ -876,6 +915,12 @@ fb_buddy_msg(struct im_connection *ic, char *to, char *message, int flags) FbId uid; api = fb_data_get_api(fata); + + if (g_strcmp0(to, FB_SSO_HANDLE) == 0 && !(ic->flags & OPT_LOGGED_IN)) { + fb_api_work_got_nonce(api, message); + return 0; + } + uid = FB_ID_FROM_STR(to); bu = bee_user_by_handle(ic->bee, ic, to); |