From 5cf67ab5edcd04fabe3056f59677b8bfbb8b158b Mon Sep 17 00:00:00 2001 From: Yury Proshchenko Date: Sat, 7 Sep 2013 17:27:48 +0400 Subject: [PATCH] Store FB response to "/me" in user's document --- src/xo_auth.erl | 14 ++++++++++---- src/xo_auth_fb.erl | 8 ++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/xo_auth.erl b/src/xo_auth.erl index 89b7fdc..8d60951 100644 --- a/src/xo_auth.erl +++ b/src/xo_auth.erl @@ -2,9 +2,10 @@ -export([generate_cookied_response_json/3]). -export([determine_username/4]). --export([update_service_details/3, - update_service_details/4, - update_service_details/5]). +-export([update_service_details/3, + update_service_details/4, + update_service_details/5, + update_service_details/6]). -export([extract_config_values/2]). -export([apply_username_restrictions/1]). @@ -15,6 +16,7 @@ -define(XREF_VIEW_NAME, <<"xrefbyid">>). -define(ACCESS_TOKEN, <<"access_token">>). -define(ACCESS_TOKEN_SECRET, <<"access_token_secret">>). +-define(EXTRA_INFO, <<"me">>). -define(replace(L, K, V), lists:keystore(K, 1, L, {K, V})). %% Exported functions @@ -147,6 +149,9 @@ update_service_details(Username, ServiceName, ServiceUserID, AccessToken) -> update_service_details(Username, ServiceName, ServiceUserID, AccessToken, []). update_service_details(Username, ServiceName, ServiceUserID, AccessToken, AccessTokenSecret) -> + update_service_details(Username, ServiceName, ServiceUserID, AccessToken, AccessTokenSecret, []). + +update_service_details(Username, ServiceName, ServiceUserID, AccessToken, AccessTokenSecret, ExtraInfo) -> Db = open_auth_db(), DocID = "org.couchdb.user:" ++ Username, @@ -166,7 +171,8 @@ update_service_details(Username, ServiceName, ServiceUserID, AccessToken, Access end, ServiceDetails, [{?ACCESS_TOKEN, ?l2b(AccessToken)}, - {?ACCESS_TOKEN_SECRET, ?l2b(AccessTokenSecret)}])}, + {?ACCESS_TOKEN_SECRET, ?l2b(AccessTokenSecret)}, + {?EXTRA_INFO, ExtraInfo}])}, NewDocBody = ?replace(DocBody, ?l2b(ServiceName), ServiceDetails1), ?LOG_DEBUG("Updated Body: ~p", [NewDocBody]), diff --git a/src/xo_auth_fb.erl b/src/xo_auth_fb.erl index 60d7fc9..ff99d99 100644 --- a/src/xo_auth_fb.erl +++ b/src/xo_auth_fb.erl @@ -60,16 +60,16 @@ handle_fb_code(Req, FBCode) -> couch_httpd:send_json(Req, 403, [], {[{error, <<"Could not get access token">>}]}) end. -create_or_update_user(Req, ClientID, ClientSecret, AccessToken, {ok, FacebookUserID, FBUsername}) -> +create_or_update_user(Req, ClientID, ClientSecret, AccessToken, {ok, FacebookUserID, FBUsername, FBInfo}) -> Username = xo_auth:determine_username(Req, "facebook", FacebookUserID, FBUsername), %% Extend the token if its will be stored ok = case couch_config:get("fb", "store_access_token", "false") of "true" -> {ok, NewToken} = request_access_token_extension(ClientID, ClientSecret, AccessToken), - xo_auth:update_service_details(Username, "facebook", FacebookUserID, NewToken); + xo_auth:update_service_details(Username, "facebook", FacebookUserID, NewToken, [], FBInfo); _ -> - xo_auth:update_service_details(Username, "facebook", FacebookUserID, []) + xo_auth:update_service_details(Username, "facebook", FacebookUserID, [], [], FBInfo) end, RedirectUri = couch_config:get("fb", "client_app_uri", nil), @@ -101,7 +101,7 @@ process_facebook_graphme_response(Resp) -> ?b2l(FBUsername) end, WithRestrictions = xo_auth:apply_username_restrictions(Username), - {ok, ID, WithRestrictions}; + {ok, ID, WithRestrictions, {FBInfo}}; _ -> throw(non_200_from_graphme) end.