35
36:- module(config_auth_google, []). 37:- use_module(swish(lib/oauth2)). 38:- use_module(swish(lib/plugin/login)). 39:- use_module(library(http/http_dispatch)). 40:- use_module(library(http/http_session)). 41:- use_module(library(http/http_json)). 42:- use_module(library(http/http_path)). 43:- use_module(library(debug)).
67:- multifile
68 oauth2:login/3,
69 oauth2:server_attribute/3,
70 swish_config:login_item/2, 71 swish_config:login/2, 72 swish_config:user_info/2. 73
74:- http_set_session_options([create(noauto)]). 75
76:- http_handler(swish(logout), google_logout, []). 77
78swish_config:login_item(google, 10-Item) :-
79 http_absolute_location(icons('social_google_box.png'), Img, []),
80 Item = img([ src(Img),
81 class('login-with'),
82 'data-server'(google),
83 'data-frame'(popup),
84 title('Login with Google')
85 ]).
86
87swish_config:login(google, Request) :-
88 oauth2_login(Request, [server(google)]).
89
90oauth2:login(_Request, google, TokenInfo) :-
91 token_info_to_user_info(TokenInfo, UserInfo),
92 debug(oauth, 'UserInfo: ~p', [UserInfo]),
93 http_open_session(_SessionID, []),
94 http_session_assert(oauth2(google, TokenInfo)),
95 reply_logged_in([ identity_provider('Google'),
96 97 name(UserInfo.email),
98 user_info(UserInfo)
99 ]).
105google_logout(_Request) :-
106 catch(http_session_retractall(oauth2(_,_)), _, true),
107 reply_logged_out([]).
113swish_config:user_info(_Request, google, UserInfo) :-
114 http_in_session(_SessionID),
115 http_session_data(oauth2(google, TokenInfo)),
116 token_info_to_user_info(TokenInfo, UserInfo).
117
118token_info_to_user_info(TokenInfo, UserInfo) :-
119 oauth2_claim(TokenInfo, Claim),
120 map_user_info(Claim, Claim1),
121 http_link_to_id(google_logout, [], LogoutURL),
122 UserInfo = Claim1.put(_{ auth_method:oauth2,
123 logout_url:LogoutURL,
124 identity_provider:google
125 }).
131map_user_info(Dict, Dict) :-
132 debug(oauth, 'Got: ~p', [Dict]).
142
143oauth2:server_attribute(google, url,
144 'https://accounts.google.com').
145oauth2:server_attribute(google, redirect_uri,
146 'http://demo.logicalcontracts.com/oauth2/google/reply').
147oauth2:server_attribute(google, client_id,
148 '243112776181-v3j5l45j9qqvatemj7bm4a7g9178km1b.apps.googleusercontent.com').
149oauth2:server_attribute(google, client_secret,
150 'u3XAKeyvxG-qQSGgS5W6Fv1n').
151oauth2:server_attribute(google, scope,
153 email).
Enable login with Google
This module allows for configures login with Google. To enable this module:
config-enabled
*/