Skip to content

Commit 0611aab

Browse files
committed
code: refactor util.c: factor out appinfo.c and file.c
Signed-off-by: Hans Zandbelt <[email protected]>
1 parent c784a3e commit 0611aab

File tree

20 files changed

+564
-477
lines changed

20 files changed

+564
-477
lines changed

Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ libauth_openidc_la_SOURCES = \
4343
src/proto/state.c \
4444
src/proto/token.c \
4545
src/proto/userinfo.c \
46+
src/util/appinfo.c \
4647
src/util/base64.c \
4748
src/util/expr.c \
49+
src/util/file.c \
4850
src/util/html.c \
4951
src/util/jq.c \
5052
src/util/json.c \

src/handle/authz.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
#include "http_protocol.h"
4646
#include "metrics.h"
4747
#include "mod_auth_openidc.h"
48-
#include "util/pcre_subst.h"
4948
#include "proto/proto.h"
49+
#include "util/pcre_subst.h"
5050
#include "util/util.h"
5151

5252
static apr_byte_t oidc_authz_match_json_string(request_rec *r, const char *spec, json_t *val, const char *key) {

src/handle/response.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static int oidc_response_redirect_parent_window_to_logout(request_rec *r, oidc_c
5959
" <script type=\"text/javascript\">\n"
6060
" window.top.location.href = '%s?session=logout';\n"
6161
" </script>\n",
62-
oidc_util_javascript_escape(r->pool, oidc_util_url_redirect_uri(r, c)));
62+
oidc_util_html_javascript_escape(r->pool, oidc_util_url_redirect_uri(r, c)));
6363

6464
return oidc_util_html_content_prep(r, OIDC_REQUEST_STATE_KEY_HTML, "Redirecting...", java_script, NULL, NULL);
6565
}
@@ -159,8 +159,9 @@ apr_byte_t oidc_response_post_preserve_javascript(request_rec *r, const char *lo
159159
" }\n"
160160
" </script>\n",
161161
jmethod, json,
162-
location ? apr_psprintf(r->pool, "window.location='%s';\n", oidc_util_javascript_escape(r->pool, location))
163-
: "");
162+
location
163+
? apr_psprintf(r->pool, "window.location='%s';\n", oidc_util_html_javascript_escape(r->pool, location))
164+
: "");
164165

165166
if (javascript_method)
166167
*javascript_method = apr_pstrdup(r->pool, jmethod);
@@ -204,7 +205,7 @@ static int oidc_response_post_preserved_restore(request_rec *r, const char *orig
204205
" document.forms[0].submit();\n"
205206
" }\n"
206207
" </script>\n",
207-
method, oidc_util_javascript_escape(r->pool, original_url));
208+
method, oidc_util_html_javascript_escape(r->pool, original_url));
208209

209210
const char *body = " <p>Restoring...</p>\n"
210211
" <form method=\"post\"></form>\n";
@@ -562,8 +563,7 @@ static int oidc_response_process(request_rec *r, oidc_cfg_t *c, oidc_session_t *
562563
"invalid authorization response state; a default SSO URL is set, sending the user "
563564
"there: %s",
564565
oidc_cfg_default_sso_url_get(c));
565-
oidc_http_hdr_out_location_set(r,
566-
oidc_util_url_abs(r, c, oidc_cfg_default_sso_url_get(c)));
566+
oidc_http_hdr_out_location_set(r, oidc_util_url_abs(r, c, oidc_cfg_default_sso_url_get(c)));
567567
OIDC_METRICS_COUNTER_INC(r, c, OM_AUTHN_RESPONSE_ERROR_STATE_MISMATCH);
568568
return HTTP_MOVED_TEMPORARILY;
569569
}

src/handle/session_management.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ int oidc_session_management(request_rec *r, oidc_cfg_t *c, oidc_session_t *sessi
203203
* session now?
204204
*/
205205
return oidc_request_authenticate_user(
206-
r, c, provider, apr_psprintf(r->pool, "%s?session=iframe_rp", oidc_util_url_redirect_uri(r, c)), NULL,
207-
id_token_hint, "none", oidc_cfg_dir_path_auth_request_params_get(r),
206+
r, c, provider, apr_psprintf(r->pool, "%s?session=iframe_rp", oidc_util_url_redirect_uri(r, c)),
207+
NULL, id_token_hint, "none", oidc_cfg_dir_path_auth_request_params_get(r),
208208
oidc_cfg_dir_path_scope_get(r));
209209
}
210210

src/handle/userinfo.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,8 @@ void oidc_userinfo_pass_as(request_rec *r, oidc_cfg_t *cfg, oidc_session_t *sess
380380

381381
case OIDC_PASS_USERINFO_AS_JSON_OBJECT:
382382
/* pass the userinfo JSON object to the app in a header or environment variable */
383-
oidc_util_set_app_info(r, p->name ? p->name : OIDC_APP_INFO_USERINFO_JSON, s_claims,
384-
p->name ? "" : OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
383+
oidc_util_appinfo_set(r, p->name ? p->name : OIDC_APP_INFO_USERINFO_JSON, s_claims,
384+
p->name ? "" : OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
385385
break;
386386

387387
case OIDC_PASS_USERINFO_AS_JWT:
@@ -391,9 +391,9 @@ void oidc_userinfo_pass_as(request_rec *r, oidc_cfg_t *cfg, oidc_session_t *sess
391391
if (s_userinfo_jwt != NULL) {
392392
/* pass the compact serialized JWT to the app in a header or environment
393393
* variable */
394-
oidc_util_set_app_info(
395-
r, p->name ? p->name : OIDC_APP_INFO_USERINFO_JWT, s_userinfo_jwt,
396-
p->name ? "" : OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
394+
oidc_util_appinfo_set(r, p->name ? p->name : OIDC_APP_INFO_USERINFO_JWT,
395+
s_userinfo_jwt, p->name ? "" : OIDC_DEFAULT_HEADER_PREFIX,
396+
pass_in, encoding);
397397
} else {
398398
oidc_debug(
399399
r,
@@ -409,8 +409,8 @@ void oidc_userinfo_pass_as(request_rec *r, oidc_cfg_t *cfg, oidc_session_t *sess
409409
case OIDC_PASS_USERINFO_AS_SIGNED_JWT:
410410

411411
if (oidc_userinfo_create_signed_jwt(r, cfg, session, s_claims, &cser) == TRUE) {
412-
oidc_util_set_app_info(r, p->name ? p->name : OIDC_APP_INFO_SIGNED_JWT, cser,
413-
p->name ? "" : OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
412+
oidc_util_appinfo_set(r, p->name ? p->name : OIDC_APP_INFO_SIGNED_JWT, cser,
413+
p->name ? "" : OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
414414
}
415415
break;
416416

src/metadata.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -581,9 +581,8 @@ static apr_byte_t oidc_metadata_client_register(request_rec *r, oidc_cfg_t *cfg,
581581
OIDC_REDIRECT_URI_REQUEST_LOGOUT, OIDC_BACKCHANNEL_STYLE_LOGOUT_PARAM_VALUE)));
582582

583583
if (oidc_cfg_default_slo_url_get(cfg) != NULL) {
584-
json_object_set_new(
585-
data, OIDC_METADATA_POST_LOGOUT_REDIRECT_URIS,
586-
json_pack("[s]", oidc_util_url_abs(r, cfg, oidc_cfg_default_slo_url_get(cfg))));
584+
json_object_set_new(data, OIDC_METADATA_POST_LOGOUT_REDIRECT_URIS,
585+
json_pack("[s]", oidc_util_url_abs(r, cfg, oidc_cfg_default_slo_url_get(cfg))));
587586
}
588587

589588
/* add any custom JSON in to the registration request */

src/mod_auth_openidc.c

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,9 @@ apr_byte_t oidc_set_app_claims(request_rec *r, oidc_cfg_t *cfg, const char *s_cl
407407

408408
/* set the resolved claims a HTTP headers for the application */
409409
if (j_claims != NULL) {
410-
oidc_util_set_app_infos(r, j_claims, oidc_cfg_claim_prefix_get(cfg), oidc_cfg_claim_delimiter_get(cfg),
411-
pass_in, oidc_cfg_dir_pass_info_encoding_get(r));
410+
oidc_util_appinfo_set_all(r, j_claims, oidc_cfg_claim_prefix_get(cfg),
411+
oidc_cfg_claim_delimiter_get(cfg), pass_in,
412+
oidc_cfg_dir_pass_info_encoding_get(r));
412413

413414
/* release resources */
414415
json_decref(j_claims);
@@ -613,39 +614,39 @@ apr_byte_t oidc_session_pass_tokens(request_rec *r, oidc_cfg_t *cfg, oidc_sessio
613614
const char *refresh_token = oidc_session_get_refresh_token(r, session);
614615
if ((oidc_cfg_dir_pass_refresh_token_get(r) != 0) && (refresh_token != NULL)) {
615616
/* pass it to the app in a header or environment variable */
616-
oidc_util_set_app_info(r, OIDC_APP_INFO_REFRESH_TOKEN, refresh_token, OIDC_DEFAULT_HEADER_PREFIX,
617-
pass_in, encoding);
617+
oidc_util_appinfo_set(r, OIDC_APP_INFO_REFRESH_TOKEN, refresh_token, OIDC_DEFAULT_HEADER_PREFIX,
618+
pass_in, encoding);
618619
}
619620

620621
/* set the access_token in the app headers/variables */
621622
const char *access_token = oidc_session_get_access_token(r, session);
622623
if ((oidc_cfg_dir_pass_access_token_get(r) != 0) && access_token != NULL) {
623624
/* pass it to the app in a header or environment variable */
624-
oidc_util_set_app_info(r, OIDC_APP_INFO_ACCESS_TOKEN, access_token, OIDC_DEFAULT_HEADER_PREFIX, pass_in,
625-
encoding);
625+
oidc_util_appinfo_set(r, OIDC_APP_INFO_ACCESS_TOKEN, access_token, OIDC_DEFAULT_HEADER_PREFIX, pass_in,
626+
encoding);
626627
}
627628

628629
/* set the access_token type in the app headers/variables */
629630
const char *access_token_type = oidc_session_get_access_token_type(r, session);
630631
if ((oidc_cfg_dir_pass_access_token_get(r) != 0) && access_token_type != NULL) {
631632
/* pass it to the app in a header or environment variable */
632-
oidc_util_set_app_info(r, OIDC_APP_INFO_ACCESS_TOKEN_TYPE, access_token_type,
633-
OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
633+
oidc_util_appinfo_set(r, OIDC_APP_INFO_ACCESS_TOKEN_TYPE, access_token_type, OIDC_DEFAULT_HEADER_PREFIX,
634+
pass_in, encoding);
634635
}
635636

636637
/* set the expiry timestamp in the app headers/variables */
637638
const char *access_token_expires = oidc_session_get_access_token_expires2str(r, session);
638639
if ((oidc_cfg_dir_pass_access_token_get(r) != 0) && access_token_expires != NULL) {
639640
/* pass it to the app in a header or environment variable */
640-
oidc_util_set_app_info(r, OIDC_APP_INFO_ACCESS_TOKEN_EXP, access_token_expires,
641-
OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
641+
oidc_util_appinfo_set(r, OIDC_APP_INFO_ACCESS_TOKEN_EXP, access_token_expires,
642+
OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
642643
}
643644

644645
/* set the scope in the app headers/variables alongside of the access token, if enabled */
645646
const char *scope = oidc_session_get_scope(r, session);
646647
if ((oidc_cfg_dir_pass_access_token_get(r) != 0) && scope != NULL) {
647648
/* pass it to the app in a header or environment variable */
648-
oidc_util_set_app_info(r, OIDC_APP_INFO_SCOPE, scope, OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
649+
oidc_util_appinfo_set(r, OIDC_APP_INFO_SCOPE, scope, OIDC_DEFAULT_HEADER_PREFIX, pass_in, encoding);
649650
}
650651

651652
if (extend_session) {
@@ -740,9 +741,9 @@ static int oidc_handle_existing_session(request_rec *r, oidc_cfg_t *cfg, oidc_se
740741
oidc_debug(r, "dir_action_on_error_refresh: %d", oidc_cfg_dir_action_on_error_refresh_get(r));
741742
OIDC_METRICS_COUNTER_INC(r, cfg, OM_SESSION_ERROR_REFRESH_ACCESS_TOKEN);
742743
if (oidc_cfg_dir_action_on_error_refresh_get(r) == OIDC_ON_ERROR_LOGOUT) {
743-
return oidc_logout_request(
744-
r, cfg, session, oidc_util_url_abs(r, cfg, oidc_cfg_default_slo_url_get(cfg)),
745-
FALSE);
744+
return oidc_logout_request(r, cfg, session,
745+
oidc_util_url_abs(r, cfg, oidc_cfg_default_slo_url_get(cfg)),
746+
FALSE);
746747
}
747748
if (oidc_cfg_dir_action_on_error_refresh_get(r) == OIDC_ON_ERROR_AUTH) {
748749
oidc_session_kill(r, session);
@@ -758,9 +759,9 @@ static int oidc_handle_existing_session(request_rec *r, oidc_cfg_t *cfg, oidc_se
758759
oidc_debug(r, "action_on_userinfo_error: %d", oidc_cfg_action_on_userinfo_error_get(cfg));
759760
OIDC_METRICS_COUNTER_INC(r, cfg, OM_SESSION_ERROR_REFRESH_USERINFO);
760761
if (oidc_cfg_action_on_userinfo_error_get(cfg) == OIDC_ON_ERROR_LOGOUT) {
761-
return oidc_logout_request(
762-
r, cfg, session, oidc_util_url_abs(r, cfg, oidc_cfg_default_slo_url_get(cfg)),
763-
FALSE);
762+
return oidc_logout_request(r, cfg, session,
763+
oidc_util_url_abs(r, cfg, oidc_cfg_default_slo_url_get(cfg)),
764+
FALSE);
764765
}
765766
if (oidc_cfg_action_on_userinfo_error_get(cfg) == OIDC_ON_ERROR_AUTH) {
766767
oidc_session_kill(r, session);
@@ -785,17 +786,17 @@ static int oidc_handle_existing_session(request_rec *r, oidc_cfg_t *cfg, oidc_se
785786

786787
if ((oidc_cfg_dir_pass_idtoken_as_get(r) & OIDC_PASS_IDTOKEN_AS_PAYLOAD)) {
787788
/* pass the id_token JSON object to the app in a header or environment variable */
788-
oidc_util_set_app_info(r, OIDC_APP_INFO_ID_TOKEN_PAYLOAD, s_id_token, OIDC_DEFAULT_HEADER_PREFIX,
789-
pass_in, encoding);
789+
oidc_util_appinfo_set(r, OIDC_APP_INFO_ID_TOKEN_PAYLOAD, s_id_token, OIDC_DEFAULT_HEADER_PREFIX,
790+
pass_in, encoding);
790791
}
791792

792793
if ((oidc_cfg_dir_pass_idtoken_as_get(r) & OIDC_PASS_IDTOKEN_AS_SERIALIZED)) {
793794
/* get the compact serialized JWT from the session */
794795
s_id_token = oidc_session_get_idtoken(r, session);
795796
if (s_id_token) {
796797
/* pass the compact serialized JWT to the app in a header or environment variable */
797-
oidc_util_set_app_info(r, OIDC_APP_INFO_ID_TOKEN, s_id_token, OIDC_DEFAULT_HEADER_PREFIX,
798-
pass_in, encoding);
798+
oidc_util_appinfo_set(r, OIDC_APP_INFO_ID_TOKEN, s_id_token, OIDC_DEFAULT_HEADER_PREFIX,
799+
pass_in, encoding);
799800
} else {
800801
oidc_warn(r, "id_token was not found in the session so it cannot be passed on");
801802
}

src/oauth.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -761,13 +761,13 @@ int oidc_oauth_check_userid(request_rec *r, oidc_cfg_t *c, const char *access_to
761761
oidc_http_hdr_in_set(r, authn_header, r->user);
762762

763763
/* set the resolved claims in the HTTP headers for the target application */
764-
oidc_util_set_app_infos(r, token, oidc_cfg_claim_prefix_get(c), oidc_cfg_claim_delimiter_get(c), pass_in,
765-
encoding);
764+
oidc_util_appinfo_set_all(r, token, oidc_cfg_claim_prefix_get(c), oidc_cfg_claim_delimiter_get(c), pass_in,
765+
encoding);
766766

767767
/* set the access_token in the app headers */
768768
if (access_token != NULL) {
769-
oidc_util_set_app_info(r, OIDC_APP_INFO_ACCESS_TOKEN, access_token, OIDC_DEFAULT_HEADER_PREFIX, pass_in,
770-
encoding);
769+
oidc_util_appinfo_set(r, OIDC_APP_INFO_ACCESS_TOKEN, access_token, OIDC_DEFAULT_HEADER_PREFIX, pass_in,
770+
encoding);
771771
}
772772

773773
/* free JSON resources */

0 commit comments

Comments
 (0)