Skip to content

Commit fdf5d95

Browse files
committed
oauth: auto refresh at the target client
1 parent e7b0087 commit fdf5d95

3 files changed

Lines changed: 30 additions & 2 deletions

File tree

include/libwebsockets/lws-jwt-auth.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ lws_jwt_auth_get_sub(struct lws_jwt_auth *ja);
7878
LWS_VISIBLE LWS_EXTERN uint32_t
7979
lws_jwt_auth_get_uid(struct lws_jwt_auth *ja);
8080

81+
/**
82+
* lws_jwt_auth_get_exp() - Extract the expiration timestamp
83+
*
84+
* \param ja: The opaque helper object
85+
*
86+
* \return the uint64_t expiration unix timestamp, or 0 if missing.
87+
*/
88+
LWS_VISIBLE LWS_EXTERN uint64_t
89+
lws_jwt_auth_get_exp(struct lws_jwt_auth *ja);
90+
8191
/**
8292
* lws_jwt_auth_count_grants() - Return the scalar count of active parsed grants
8393
*

lib/jose/jws/jwt-auth.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,14 @@ lws_jwt_auth_get_uid(struct lws_jwt_auth *ja)
275275
return ja->uid;
276276
}
277277

278+
uint64_t
279+
lws_jwt_auth_get_exp(struct lws_jwt_auth *ja)
280+
{
281+
if (!ja)
282+
return 0;
283+
return ja->exp;
284+
}
285+
278286
uint32_t
279287
lws_jwt_auth_count_grants(struct lws_jwt_auth *ja)
280288
{

plugins/protocol_lws_login/protocol_lws_login.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,16 @@ static const char * const canned_js =
135135
"c+='<strong class=\"lws-login-identity\">'+st.identity+'</strong><br>';"
136136
"c+=a+' <a class=\"lws-login-link lws-login-logout\" href=\"'+u+'\">Logout</a>';"
137137
"if(!st.has_grant&&!st.is_admin)c+='<div class=\"lws-login-err\">login lacks grant</div><br>';"
138+
"if(st.exp){"
139+
"var n=Date.now()/1000;"
140+
"var m=st.exp-n;"
141+
"if(m>0&&m<86400){"
142+
"setTimeout(function(){"
143+
"var s=st.login_url.split('redirect_uri=')[0]+'redirect_uri='+encodeURIComponent(window.location.href);"
144+
"window.location.href=s;"
145+
"},(m-60)*1000);"
146+
"}"
147+
"}"
138148
"}else{"
139149
"var s=st.login_url.split('redirect_uri=')[0]+'redirect_uri='+encodeURIComponent(window.location.href);"
140150
"c+='<div class=\"lws-login-mb\">Not logged in</div>';"
@@ -984,8 +994,8 @@ callback_lws_login(struct lws *wsi, enum lws_callback_reasons reason,
984994
const char *sub = lws_jwt_auth_get_sub(pss->ja);
985995
int is_admin = lws_jwt_auth_query_grant(pss->ja, "*") >= 1;
986996
int has_grant = lws_jwt_auth_query_grant(pss->ja, service_name) >= vhd->min_grant_level;
987-
lws_snprintf(pl, sizeof(pl), "{\"logged_in\":1,\"has_grant\":%d,\"identity\":\"%s\",\"auth_server_url\":\"%s\",\"login_url\":\"%s\",\"is_admin\":%d}",
988-
has_grant, sub ? sub : "Unknown", vhd->auth_server_url, dest, is_admin);
997+
lws_snprintf(pl, sizeof(pl), "{\"logged_in\":1,\"exp\":%llu,\"has_grant\":%d,\"identity\":\"%s\",\"auth_server_url\":\"%s\",\"login_url\":\"%s\",\"is_admin\":%d}",
998+
(unsigned long long)lws_jwt_auth_get_exp(pss->ja), has_grant, sub ? sub : "Unknown", vhd->auth_server_url, dest, is_admin);
989999
} else
9901000
lws_snprintf(pl, sizeof(pl), "{\"logged_in\":0,\"login_url\":\"%s\"}", dest);
9911001

0 commit comments

Comments
 (0)