From 3dd5471ea914ad29b1dd50e3942f2cc4f3a1188b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 20 Jul 2020 10:46:00 +0200 Subject: [PATCH] Added create_push_accounts --- conf/accounts.conf | 14 +++++++++ flexisip-account-manager.spec | 2 +- src/misc/utilities.php | 6 ++++ src/xmlrpc/accounts.php | 57 ++++++++++++++++++++++++++++++++++- 4 files changed, 77 insertions(+), 2 deletions(-) diff --git a/conf/accounts.conf b/conf/accounts.conf index 6238889..ea52a5a 100644 --- a/conf/accounts.conf +++ b/conf/accounts.conf @@ -36,6 +36,20 @@ define("GENERATED_PASSWORD_LENGTH", 8); */ define("DEFAULT_ALGORITHM", "MD5"); +/* + * A string with each character allowed in the username generation. + * + * Default value: abcdefghijklmnopqrstuvwxyz0123456789.-_ + */ +define("GENERATED_USERNAME_CHARACTERS", "abcdefghijklmnopqrstuvwxyz0123456789.-_"); + +/* + * The length of the username that will be generated. + * + * Default value: 12 + */ +define("GENERATED_USERNAME_LENGTH", 12); + /* * If set to True, a created account will automatically be activated and it's expiration date set to now + TRIAL_DURATION_DAYS, * otherwise expiration date for trial will be set when account is activated via a different xml rpc call. diff --git a/flexisip-account-manager.spec b/flexisip-account-manager.spec index 2874997..4f6e754 100644 --- a/flexisip-account-manager.spec +++ b/flexisip-account-manager.spec @@ -8,7 +8,7 @@ #%define _datadir %{_datarootdir} #%define _docdir %{_datadir}/doc -%define build_number 19 +%define build_number 20 %define var_dir /var/opt/belledonne-communications %define opt_dir /opt/belledonne-communications/share/flexisip-account-manager %define env_file "$RPM_BUILD_ROOT/etc/flexisip-account-manager/flexiapi.env" diff --git a/src/misc/utilities.php b/src/misc/utilities.php index d73a1e6..22f7c19 100644 --- a/src/misc/utilities.php +++ b/src/misc/utilities.php @@ -125,6 +125,12 @@ function hash_password($user, $password, $domain, $algo) return $hashed_password; } +function generate_username() +{ + $generated_username = substr(str_shuffle(GENERATED_USERNAME_CHARACTERS), 0, GENERATED_USERNAME_LENGTH); + return $generated_username; +} + function generate_password() { $generated_password = substr(str_shuffle(GENERATED_PASSWORD_CHARACTERS), 0, GENERATED_PASSWORD_LENGTH); diff --git a/src/xmlrpc/accounts.php b/src/xmlrpc/accounts.php index 0addc1d..4973394 100644 --- a/src/xmlrpc/accounts.php +++ b/src/xmlrpc/accounts.php @@ -173,13 +173,68 @@ function xmlrpc_get_accounts_count($method, $args) return $account->getCount(); } +// args = [user_agent, [domain], [algo]] +function xmlrpc_create_push_account($method, $args) +{ + $user_agent = $args[0]; + $domain = get_domain($args[1]); + $algo = get_algo($args[2]); + + Logger::getInstance()->message("[XMLRPC] xmlrpc_create_push_account(" . $domain . ", " . $algo . ")"); + + if ($algo == null) { + return ALGO_NOT_SUPPORTED; + } + + $database = new Database(); + $db = $database->getConnection(); + $account = new Account($db); + $account->domain = $domain; + + do { + $user = generate_username(); + $account->username = $user; + } while ($account->getOne()); + + Logger::getInstance()->message("[XMLRPC] Push account generated username is: " . $user); + + $hashed_password = hash_password($user, generate_password(), $domain, $algo); + + $account->user_agent = $user_agent; + $account->ip_address = getIp(); + $account->activated = "1"; + $account->create(); + + $password = new Password($db); + $password->account_id = $account->id; + $password->password = $hashed_password; + $password->algorithm = $algo; + $password->create(); + + if (CUSTOM_HOOKS) { + hook_on_account_created($account); + } + + $result = array( + "username" => $account->username, + "domain" => $account->domain, + "password" => $password->password, + "algorithm" => $password->algorithm + ); + + return $result; +} + + function xmlrpc_accounts_register_methods($server) { xmlrpc_server_register_method($server, 'is_account_used', 'xmlrpc_is_account_used');// args = [username, [domain]], return OK or NOK xmlrpc_server_register_method($server, 'is_account_activated', 'xmlrpc_is_account_activated');// args = [username, [domain]], return OK or NOK xmlrpc_server_register_method($server, 'recover_account_from_confirmation_key', 'xmlrpc_recover_account_from_confirmation_key');// args = [username, key, [domain], [algo]] - xmlrpc_server_register_method($server, 'get_accounts_count', 'xmlrpc_get_accounts_count');//args = [] + xmlrpc_server_register_method($server, 'get_accounts_count', 'xmlrpc_get_accounts_count');// args = [] + + xmlrpc_server_register_method($server, 'create_push_account', 'xmlrpc_create_push_account');// args = [user_agent, [domain], [algo]] xmlrpc_accounts_email_register_methods($server); xmlrpc_accounts_phone_register_methods($server);