Changeset 9b02bab
- Timestamp:
- 2015-12-05T01:52:48Z (9 years ago)
- Branches:
- master
- Children:
- ac68733a
- Parents:
- 48b5fef
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/user-guide/commands.xml
r48b5fef r9b02bab 1174 1174 <description> 1175 1175 <para> 1176 By default, BitlBee generates a nickname for every contact by taking its handle and chopping off everything after the @. In some cases, this gives very inconvenient nicknames. The Facebook XMPP server is a good example, as all Facebook XMPP handles are numeric.1176 By default, BitlBee generates a nickname for every contact by taking its handle and chopping off everything after the @. In some cases, this gives very inconvenient nicknames. Some servers use internal identifiers, which are often just numbers. 1177 1177 </para> 1178 1178 … … 1188 1188 <description> 1189 1189 <para> 1190 This enables OAuth authentication for an IM account; right now the Twitter (working for Twitter only) and Jabber (for Google Talk , Facebook and MSN Messenger) module support it.1190 This enables OAuth authentication for an IM account; right now the Twitter (working for Twitter only) and Jabber (for Google Talk only) module support it. 1191 1191 </para> 1192 1192 -
protocols/account.c
r48b5fef r9b02bab 88 88 strstr(a->user, "@googlemail.com")) { 89 89 strcpy(tag, "gtalk"); 90 } else if (strstr(a->user, "@chat.facebook.com")) {91 strcpy(tag, "fb");92 90 } 93 91 } -
protocols/jabber/jabber.c
r48b5fef r9b02bab 151 151 } 152 152 153 if (strstr(jd->server, ".facebook.com")) { 154 imcb_error(ic, "Facebook's XMPP service is gone. Try this instead: https://wiki.bitlbee.org/HowtoFacebookMQTT"); 155 imc_logout(ic, FALSE); 156 return; 157 } 158 153 159 if ((s = strchr(jd->server, '/'))) { 154 160 *s = 0; … … 170 176 jd->fd = jd->r_inpa = jd->w_inpa = -1; 171 177 172 if (strstr(jd->server, ".facebook.com")) { 173 jd->oauth2_service = &oauth2_service_facebook; 174 } else { 175 jd->oauth2_service = &oauth2_service_google; 176 } 178 /* There are no other options atm, so assume google for everything 179 Facebook and MSN XMPP used to be here. RIP. */ 180 jd->oauth2_service = &oauth2_service_google; 177 181 178 182 oauth_params_parse(&p_in, ic->acc->pass); -
protocols/jabber/jabber.h
r48b5fef r9b02bab 50 50 JFLAG_GTALK = 0x100000, /* Is Google Talk, as confirmed by iq discovery */ 51 51 JFLAG_HIPCHAT = 0x200000, /* Is hipchat, because prpl->name says so */ 52 53 JFLAG_SASL_FB = 0x10000, /* Trying Facebook authentication. */54 52 } jabber_flags_t; 55 53 … … 342 340 343 341 extern const struct oauth2_service oauth2_service_google; 344 extern const struct oauth2_service oauth2_service_facebook;345 342 346 343 /* conference.c */ -
protocols/jabber/sasl.c
r48b5fef r9b02bab 38 38 "6C-Zgf7Tr7gEQTPlBhMUgo7R", 39 39 }; 40 const struct oauth2_service oauth2_service_facebook =41 {42 "https://www.facebook.com/dialog/oauth",43 "https://graph.facebook.com/oauth/access_token",44 "https://www.bitlbee.org/main.php/Facebook/oauth2.html",45 "offline_access,xmpp_login",46 "126828914005625",47 "4b100f0f244d620bf3f15f8b217d4c32",48 };49 40 50 41 xt_status sasl_pkt_mechanisms(struct xt_node *node, gpointer data) … … 54 45 struct xt_node *c, *reply; 55 46 char *s; 56 int sup_plain = 0, sup_digest = 0, sup_gtalk = 0, sup_ fb = 0, sup_anonymous = 0;47 int sup_plain = 0, sup_digest = 0, sup_gtalk = 0, sup_anonymous = 0; 57 48 int want_oauth = FALSE, want_hipchat = FALSE, want_anonymous = FALSE; 58 49 GString *mechs; … … 89 80 } else if (c->text && g_strcasecmp(c->text, "X-OAUTH2") == 0) { 90 81 sup_gtalk = 1; 91 } else if (c->text && g_strcasecmp(c->text, "X-FACEBOOK-PLATFORM") == 0) {92 sup_fb = 1;93 82 } 94 83 … … 101 90 102 91 if (!want_oauth && !sup_plain && !sup_digest) { 103 if (!sup_gtalk && !sup_fb) {92 if (!sup_gtalk) { 104 93 imcb_error(ic, "This server requires OAuth " 105 94 "(supported schemes:%s)", mechs->str); … … 137 126 reply->text_len = strlen(reply->text); 138 127 g_free(s); 139 } else if (sup_fb && want_oauth) {140 xt_add_attr(reply, "mechanism", "X-FACEBOOK-PLATFORM");141 jd->flags |= JFLAG_SASL_FB;142 128 } else if (want_oauth) { 143 129 imcb_error(ic, "OAuth requested, but not supported by server"); … … 299 285 dec = frombase64(node->text); 300 286 301 if (jd->flags & JFLAG_SASL_FB) { 302 /* New-style Facebook OAauth2 support. Instead of sending a refresh 303 token, they just send an access token that should never expire. */ 304 GSList *p_in = NULL, *p_out = NULL; 305 char time[33]; 306 307 oauth_params_parse(&p_in, dec); 308 oauth_params_add(&p_out, "nonce", oauth_params_get(&p_in, "nonce")); 309 oauth_params_add(&p_out, "method", oauth_params_get(&p_in, "method")); 310 oauth_params_free(&p_in); 311 312 g_snprintf(time, sizeof(time), "%lld", (long long) (gettime() * 1000)); 313 oauth_params_add(&p_out, "call_id", time); 314 oauth_params_add(&p_out, "api_key", oauth2_service_facebook.consumer_key); 315 oauth_params_add(&p_out, "v", "1.0"); 316 oauth_params_add(&p_out, "format", "XML"); 317 oauth_params_add(&p_out, "access_token", jd->oauth2_access_token); 318 319 reply = oauth_params_string(p_out); 320 oauth_params_free(&p_out); 321 } else if (!(s = sasl_get_part(dec, "rspauth"))) { 287 if (!(s = sasl_get_part(dec, "rspauth"))) { 322 288 /* See RFC 2831 for for information. */ 323 289 md5_state_t A1, A2, H;
Note: See TracChangeset
for help on using the changeset viewer.