Skip to content

Commit d0d9b2f

Browse files
authored
Merge pull request #4535 from sstrigler/no_redirect-url_if_preauth
set meta.pre-auth to skip redirect_url if token validated
2 parents 3b05cb0 + 785412b commit d0d9b2f

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

src/mod_invites_register.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ c2s_unauthenticated_packet(#{invite := Invite} = State,
7474
IQ1 = xmpp:set_els(IQ, [Register]),
7575
User = Invite#invite_token.account_name,
7676
IQ2 = xmpp:set_from_to(IQ1, jid:make(User, Server), jid:make(Server)),
77-
ResIQ = mod_register:process_iq(IQ2),
77+
Meta = xmpp:get_meta(IQ2),
78+
ResIQ = mod_register:process_iq(xmpp:set_meta(IQ2, Meta#{pre_auth => true})),
7879
ResIQ1 = xmpp:set_from_to(ResIQ, jid:make(Server), undefined),
7980
{stop, ejabberd_c2s:send(State, ResIQ1)}
8081
end);

src/mod_register.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,9 @@ process_iq(#iq{type = get, from = From, to = To, id = ID, lang = Lang} = IQ,
215215
Instr = translate:translate(
216216
Lang, ?T("Choose a username and password to register "
217217
"with this server")),
218+
IsPreAuth = maps:get(pre_auth, xmpp:get_meta(IQ), false) == true,
218219
URL = mod_register_opt:redirect_url(Server),
219-
if (URL /= undefined) and not IsRegistered ->
220+
if (URL /= undefined) and not IsRegistered and not IsPreAuth ->
220221
Desc = str:translate_and_format(Lang, ?T("To register, visit ~s"), [URL]),
221222
xmpp:make_iq_result(
222223
IQ, #register{instructions = Desc,

test/invites_tests.erl

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,14 +476,38 @@ ibr(Config0) ->
476476
send_get_iq_register(Config3)),
477477
?match(#iq{type = result}, send_iq_register(Config3, <<"some_self_chosen_name">>)),
478478

479+
RedirectUrl = <<"http://localhost">>,
480+
NewRegisterOpts2 = gen_mod:set_opt(redirect_url, RedirectUrl, NewRegisterOpts),
481+
update_module_opts(Server, mod_register, NewRegisterOpts2),
482+
Config4 = reconnect(Config3),
483+
%% check redirect_url works
484+
#iq{type = result, sub_els = [#register{sub_els = [SubEl]}]} =
485+
send_get_iq_register(Config4),
486+
?match(#oob_x{url = RedirectUrl}, xmpp:decode(SubEl)),
487+
#invite_token{token = Token4} = create_account_invite(Server, {<<>>, Server}),
488+
?match(#iq{type = result}, send_pars(Config4, Token4)),
489+
#iq{type = result, sub_els = [#register{sub_els = SubEls}]} =
490+
send_get_iq_register(Config4),
491+
%% check for absence of redirect_url
492+
?match([], lists:filter(fun(El) ->
493+
Decoded = xmpp:decode(El),
494+
case Decoded of
495+
#oob_x{url = RedirectUrl} -> true;
496+
_ -> false
497+
end
498+
end,
499+
SubEls)),
500+
?match(#iq{type = result}, send_iq_register(Config4, <<"yet_another_self_chosen_name">>)),
501+
479502
ejabberd_auth:remove_user(AccountName, Server),
503+
ejabberd_auth:remove_user(<<"yet_another_self_chosen_name">>, Server),
480504
ejabberd_auth:remove_user(<<"some_self_chosen_name">>, Server),
481505
ejabberd_auth:remove_user(<<"some_much_better_name">>, Server),
482506
update_module_opts(Server, mod_register, OldRegisterOpts),
483507
mod_invites:remove_user(<<"inviter">>, Server),
484508
mod_invites:expire_tokens(<<>>, Server),
485-
?match(3, mod_invites:cleanup_expired()),
486-
disconnect(Config3).
509+
?match(4, mod_invites:cleanup_expired()),
510+
disconnect(Config4).
487511

488512
ibr_reserved(Config0) ->
489513
Server = ?config(server, Config0),

0 commit comments

Comments
 (0)