1: -module(auth_methods_for_c2s_SUITE). 2: 3: -compile([export_all, nowarn_export_all]). 4: 5: -include_lib("common_test/include/ct.hrl"). 6: -include_lib("eunit/include/eunit.hrl"). 7: -include_lib("exml/include/exml.hrl"). 8: 9: -import(distributed_helper, [mim/0, rpc/4]). 10: 11: all() -> 12: [{group, two_methods_enabled}]. 13: 14: groups() -> 15: [{two_methods_enabled, [parallel], 16: [can_login_with_allowed_method, 17: cannot_login_with_not_allowed_method, 18: can_login_to_another_listener]}]. 19: 20: init_per_suite(Config) -> 21: Config0 = escalus:init_per_suite(Config), 22: Config1 = ejabberd_node_utils:init(Config0), 23: ejabberd_node_utils:backup_config_file(Config1), 24: Config1. 25: 26: end_per_suite(Config) -> 27: ejabberd_node_utils:restore_config_file(Config), 28: ejabberd_node_utils:restart_application(mongooseim), 29: escalus:end_per_suite(Config). 30: 31: init_per_group(_, Config) -> 32: modify_config_and_restart(Config), 33: escalus_cleaner:start(Config). 34: 35: end_per_group(_, _Config) -> 36: escalus_fresh:clean(). 37: 38: init_per_testcase(TC, Config) -> 39: Spec = escalus_fresh:freshen_spec(Config, alice), 40: Clean = register_internal_user(Spec), 41: [{clean_fn, Clean}, {spec, Spec}|escalus:init_per_testcase(TC, Config)]. 42: 43: end_per_testcase(TC, Config) -> 44: Clean = proplists:get_value(clean_fn, Config), 45: Clean(), 46: escalus:end_per_testcase(TC, Config). 47: 48: modify_config_and_restart(Config) -> 49: NewConfigValues = [{auth_method, "internal]\n [auth.dummy"}, 50: {auth_method_opts, false}, 51: {allowed_auth_methods, "\"internal\""}], 52: ejabberd_node_utils:modify_config_file(NewConfigValues, Config), 53: ejabberd_node_utils:restart_application(mongooseim). 54: 55: can_login_with_allowed_method(Config) -> 56: Spec = proplists:get_value(spec, Config), 57: {ok, _, _} = escalus_connection:start(Spec). 58: 59: cannot_login_with_not_allowed_method(Config) -> 60: Spec = proplists:get_value(spec, Config), 61: {error, _} = escalus_connection:start([{password, <<"wrong">>}|Spec]). 62: 63: can_login_to_another_listener(Config) -> 64: Spec = proplists:get_value(spec, Config), 65: Spec2 = [{port, ct:get_config({hosts, mim, c2s_tls_port})}, 66: {password, <<"wrong">>}|Spec], 67: {ok, _, _} = escalus_connection:start(Spec2). 68: 69: %% Helpers 70: 71: %% If dummy backend is enabled, it is not possible to create new users 72: %% (we check if an user does exist before registering the user). 73: register_internal_user(Spec) -> 74: #{username := User, server := Server, 75: password := Password} = maps:from_list(Spec), 76: LUser = jid:nodeprep(User), 77: LServer = escalus_utils:jid_to_lower(Server), 78: HostType = domain_helper:host_type(), 79: rpc(mim(), ejabberd_auth_internal, try_register, 80: [HostType, LUser, LServer, Password]), 81: fun() -> rpc(mim(), ejabberd_auth_internal, remove_user, 82: [HostType, LUser, LServer]) end.