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 name(UserInfo.name),
97 user_info(UserInfo)
98 ]).
104google_logout(_Request) :-
105 catch(http_session_retractall(oauth2(_,_)), _, true),
106 reply_logged_out([]).
112swish_config:user_info(_Request, google, UserInfo) :-
113 http_in_session(_SessionID),
114 http_session_data(oauth2(google, TokenInfo)),
115 token_info_to_user_info(TokenInfo, UserInfo).
116
117token_info_to_user_info(TokenInfo, UserInfo) :-
118 oauth2_claim(TokenInfo, Claim),
119 map_user_info(Claim, Claim1),
120 http_link_to_id(google_logout, [], LogoutURL),
121 UserInfo = Claim1.put(_{ auth_method:oauth2,
122 logout_url:LogoutURL,
123 identity_provider:google
124 }).
130map_user_info(Dict, Dict) :-
131 debug(oauth, 'Got: ~p', [Dict]).
141
142oauth2:server_attribute(google, url,
143 'https://accounts.google.com').
144oauth2:server_attribute(google, redirect_uri,
145 'https://cplint.eu/oauth2/google/reply').
146oauth2:server_attribute(google, client_id,
147 '341495177411-qh35i2n5fcki0nujb4hfp0q1s4d35l7l.apps.googleusercontent.com').
148oauth2:server_attribute(google, client_secret,
149 'rXLZg_FNoY45aE98q3VJQeOX').
150oauth2:server_attribute(google, scope,
151 profile)
Enable login with Google
This module allows for configures login with Google. To enable this module:
config-enabled
*/