google.erl 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. -module(google).
  2. -author('Andrii Zadorozhnii').
  3. -include_lib("avz/include/avz.hrl").
  4. -include_lib("nitro/include/nitro.hrl").
  5. -include_lib("n2o/include/wf.hrl").
  6. -include_lib("kvs/include/user.hrl").
  7. -compile(export_all).
  8. -export(?API).
  9. -define(G_CLIENT_ID, application:get_env(avz, g_client_id, [])).
  10. -define(G_COOKIE_POLICY, application:get_env(avz, g_cookiepolicy, [])).
  11. -define(G_BTN_ID, application:get_env(avz, g_btn_id, "gloginbtn")).
  12. -define(G_BTN_HEIGHT, application:get_env(avz, g_btn_height, 50)).
  13. -define(G_BTN_WIDTH, application:get_env(avz, g_btn_width, 240)).
  14. -define(G_BTN_THEME, application:get_env(avz, g_btn_theme, "light")).
  15. -define(G_BTN_LONGTITLE, application:get_env(avz, g_btn_longtitle, true)).
  16. -define(ATTS, #{email => <<"U3">>, name => <<"ig">>, id => <<"Eea">>, image => <<"Paa">>}).
  17. api_event(gLogin, Args, _) -> {JSArgs} = ?AVZ_JSON:decode(list_to_binary(Args)), avz:login(google, JSArgs);
  18. api_event(gLoginFail, Args, _) -> wf:info(?MODULE, "Login failed ~p~n", [Args]).
  19. registration_data(Props, google, Ori)->
  20. Id = proplists:get_value(maps:get(id,?ATTS), Props),
  21. Name = proplists:get_value(maps:get(name, ?ATTS), Props),
  22. Image = proplists:get_value(maps:get(image,?ATTS), Props),
  23. GivenName = proplists:get_value(<<"ofa">>, Props),
  24. FamilyName = proplists:get_value(<<"wea">>, Props),
  25. Email = email_prop(Props,google),
  26. Ori#user{ display_name = Name,
  27. images = avz:update({google_avatar,Image},Ori#user.images),
  28. email = Email,
  29. names = GivenName,
  30. surnames = FamilyName,
  31. tokens = avz:update({google,Id},Ori#user.tokens),
  32. register_date = os:timestamp(),
  33. % sex = proplists:get_value(<<"gender">>, Props),
  34. status = ok }.
  35. index(K) -> maps:get(K, ?ATTS, K).
  36. email_prop(Props, _) -> proplists:get_value(maps:get(email,?ATTS), Props).
  37. login_button()-> #panel{id=?G_BTN_ID}.
  38. event(_) -> ok.
  39. callback() -> ok.
  40. sdk() ->
  41. wf:wire(#api{name=gLogin, tag=plus}),
  42. wf:wire(#api{name=gLoginFail, tag=plus}),
  43. #dtl{bind_script=false, file="google_sdk", ext="dtl", folder="priv/static/js",
  44. bindings=[{loginbtnid, ?G_BTN_ID},
  45. {clientid, ?G_CLIENT_ID},
  46. {cookiepolicy,?G_COOKIE_POLICY},
  47. {height, ?G_BTN_HEIGHT},
  48. {width, ?G_BTN_WIDTH},
  49. {theme, ?G_BTN_THEME},
  50. {longtitle, ?G_BTN_LONGTITLE} ]}.