diff --git a/accounts.phtml b/accounts.phtml index 04c56c2..d34ac47 100644 --- a/accounts.phtml +++ b/accounts.phtml @@ -1,473 +1,463 @@ "CDRTool_Session", "auth" => "CDRTool_Auth", "perm" => "CDRTool_Perm" ) ); $title = "Login accounts"; require 'login_accounts.php'; if (is_readable("/etc/cdrtool/local/header.phtml")) { include '/etc/cdrtool/local/header.phtml'; } else { include 'header.phtml'; } function log_accounts_action($action) { global $auth; $location = "Unknown"; $_loc = geoip_record_by_name($_SERVER['REMOTE_ADDR']); if ($_loc['country_name']) { $location = $_loc['country_name']; } $log = sprintf( "CDRTool login username=%s, IP=%s, location=%s, action=%s, script=%s", $auth->auth["uname"], $_SERVER['REMOTE_ADDR'], $location, $action, $_SERVER['PHP_SELF'] ); syslog(LOG_NOTICE, $log); } $loginname = $auth->auth["uname"]; $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; $next = isset($_REQUEST['next']) ? $_REQUEST['next'] : ''; $search_text = isset($_REQUEST['search_text']) ? $_REQUEST['search_text'] : ''; $username = isset($_REQUEST['username']) ? $_REQUEST['username'] : ''; $password = isset($_REQUEST['password']) ? $_REQUEST['password'] : ''; $name = isset($_REQUEST['name']) ? $_REQUEST['name'] : ''; $organization = isset($_REQUEST['organization']) ? $_REQUEST['organization'] : ''; $tel = isset($_REQUEST['tel']) ? $_REQUEST['tel'] : ''; $email = isset($_REQUEST['email']) ? $_REQUEST['email'] : ''; $expire = isset($_REQUEST['expire']) ? $_REQUEST['expire'] : ''; $gatewayFilter = isset($_REQUEST['gatewayFilter']) ? $_REQUEST['gatewayFilter'] : ''; $domainFilter = isset($_REQUEST['domainFilter']) ? $_REQUEST['domainFilter'] : ''; $serviceFilter = isset($_REQUEST['serviceFilter']) ? $_REQUEST['serviceFilter'] : ''; $compidFilter = isset($_REQUEST['compidFilter']) ? $_REQUEST['compidFilter'] : ''; $aNumberFilter = isset($_REQUEST['aNumberFilter']) ? $_REQUEST['aNumberFilter'] : ''; $cscodeFilter = isset($_REQUEST['cscodeFilter']) ? $_REQUEST['cscodeFilter'] : ''; $afterDateFilter = isset($_REQUEST['afterDateFilter']) ? $_REQUEST['afterDateFilter'] : ''; $aclFilter = isset($_REQUEST['aclFilter']) ? $_REQUEST['aclFilter'] : ''; $impersonate = isset($_REQUEST['impersonate']) ? $_REQUEST['impersonate'] : ''; $perms = isset($_REQUEST['perms']) ? $_REQUEST['perms'] : ''; $sources = isset($_REQUEST['sources']) ? $_REQUEST['sources'] : ''; $delete = isset($_REQUEST['delete']) ? $_REQUEST['delete'] : ''; $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : ''; $uid = isset($_REQUEST['uid']) ? $_REQUEST['uid'] : ''; $check = isset($_REQUEST['check']) ? $_REQUEST['check'] : ''; $mailsettings = isset($_REQUEST['mailsettings']) ? $_REQUEST['mailsettings'] : ''; -$otp_yubikey = isset($_REQUEST["yubikey"]) ? $_REQUEST["yubikey"] : ''; $auth_method = isset($_REQUEST["auth_method"]) ? $_REQUEST["auth_method"] : ''; $PHP_SELF = htmlentities($_SERVER['PHP_SELF']); $db = new DB_CDRTool; $layout = new pageLayoutLocal(); $layout->showTopMenu($title); if ($action == "edit" && $id) { print " "; $uid = $auth->auth["uid"]; if (!$perm->have_perm("admin")) { $id = $uid; } if ($check || $delete) { if ($err = $f->validate()) { print "
$err
"; $perms = implode($perms, ","); $sources = implode($sources, ","); showForm($id); } else { $perms_text = implode($perms, ","); $sources_text = implode($sources, ","); if ($delete && $perm->have_perm("admin")) { $query = "delete from auth_user"; } else { //print "

Updating user"; $query = sprintf( "update auth_user set username = '%s', name = '%s', organization = '%s', tel = '%s', email = '%s', - yubikey = '%s', auth_method = '%s' ", addslashes($username), addslashes($name), addslashes($organization), addslashes($tel), addslashes($email), - addslashes($otp_yubikey), addslashes($auth_method) ); if (strlen($password)) { if ($CDRTool['provider']['clear_text_passwords'] != 1) { $query .= sprintf( ", password = '', password_hashed = '%s'", addslashes(md5($password)) ); } else { $query .= sprintf( ", password = '%s', password_hashed = ''", addslashes($password) ); } } if ($perm->have_perm("admin")) { if (strlen($impersonate)) { if (!preg_match("/^[0-9]*\.[0-9]*$/", $impersonate)) { printf("

Warning! Impersonate must be formated as CustomerId.ResellerId
"); unset($impersonate); } } $query.= sprintf( ", perms = '%s', sources = '%s', expire = '%s', gatewayFilter = '%s', domainFilter = '%s', serviceFilter = '%s', compidFilter = '%s', aNumberFilter = '%s', cscodeFilter = '%s', afterDateFilter = '%s', aclFilter = '%s', impersonate = '%s' ", addslashes($perms_text), addslashes($sources_text), addslashes($expire), addslashes($gatewayFilter), addslashes($domainFilter), addslashes($serviceFilter), addslashes($compidFilter), addslashes($aNumberFilter), addslashes($cscodeFilter), addslashes($afterDateFilter), addslashes($aclFilter), addslashes($impersonate) ); } } $query .= sprintf(" where user_id = '%s'", addslashes($id)); // print $query; if (!$db->query($query)) { print "

Failed to update user $id"; print "The error is $db->Error"; } else { if ($delete) { log_accounts_action(sprintf("account %s deleted", $username)); print "

User $name deleted"; } else { log_accounts_action(sprintf("account %s updated", $username)); print "

User $name updated"; if ($mailsettings) { if ($_SERVER['HTTPS']=="on") { $protocolURL="https://"; } else { $protocolURL="http://"; } $body .= sprintf("The following login account for CDRTool has been created for you:\n\n"); $body .= sprintf("Username: %s\n", $username); $body .= sprintf("Password: %s\n", $password); $body .= sprintf("URL: %s%s%s\n\n", $protocolURL, $_SERVER['HTTP_HOST'], $CDRTool['tld']); $body .= sprintf("You may use your CDRTool account to access call detail records and \n"); $body .= sprintf("traces from OpenSIPs, MediaProxy and Asterisk servers.\n"); $from = sprintf("From: %s", $CDRTool['provider']['fromEmail']); mail($email, "CDRTool login account", $body, $from); } } accountList(); } } } else { $query = "select * from auth_user"; if (!$perm->have_perm("admin")) { $query .= sprintf(" where user_id = '%s'", addslashes($uid)); $id=$uid; } else { $query .= sprintf(" where user_id = '%s'", addslashes($id)); } dprint($query); $db->query($query); $db->next_record(); $username = $db->f('username'); $name = $db->f('name'); $email = $db->f('email'); $tel = $db->f('tel'); $password = $db->f('password'); $organization = $db->f('organization'); $perms = $db->f('perms'); $sources = $db->f('sources'); $expire = $db->f('expire'); $aNumberFilter = $db->f('aNumberFilter'); $gatewayFilter = $db->f('gatewayFilter'); $domainFilter = $db->f('domainFilter'); $serviceFilter = $db->f('serviceFilter'); $compidFilter = $db->f('compidFilter'); $cscodeFilter = $db->f('cscodeFilter'); $afterDateFilter = $db->f('afterDateFilter'); $aclFilter = $db->f('aclFilter'); $impersonate = $db->f('impersonate'); - $yubikey = $db->f('yubikey'); $auth_method = $db->f('auth_method'); showForm($id); } } elseif ($action=="insert" && $perm->have_perm("admin")) { print "

"; $uid = $auth->auth["uid"]; if (!$password) $password = random_passwd_gen(); if ($check) { if ($perms) $perms = implode($perms,","); if ($sources) $sources = implode($sources,","); if (strlen($impersonate)) { if (!preg_match("/^[0-9]*\.[0-9]*$/", $impersonate)) { printf("

Warning: Impersonate must be formated as CustomerId.ResellerId"); unset($impersonate); } } if ($err = $f->validate()) { print "

$err

"; showForm(); } else { //print "

Adding user"; $hash_secret = "ffdsdsd__ky..."; $user_id = md5(uniqid($hash_secret)); if ($CDRTool['provider']['clear_text_passwords']!=1) { $query = sprintf( "insert into auth_user ( user_id, username, password, password_hashed, name, organization, tel, email, perms, sources, expire, domainFilter, aNumberFilter, serviceFilter, compidFilter, cscodeFilter, gatewayFilter, afterDateFilter, aclFilter, impersonate, - yubikey, auth_method ) values ( '%s', '%s', '', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', - '%s', '%s' )", addslashes($user_id), addslashes($username), addslashes(md5($password)), addslashes($name), addslashes($organization), addslashes($tel), addslashes($email), addslashes($perms), addslashes($sources), addslashes($expire), addslashes($domainFilter), addslashes($aNumberFilter), addslashes($serviceFilter), addslashes($compidFilter), addslashes($cscodeFilter), addslashes($gatewayFilter), addslashes($afterDateFilter), addslashes($aclFilter), addslashes($impersonate), - addslashes($yubikey), addslashes($auth_method) ); } else { $query = sprintf( "insert into auth_user ( user_id, username, password, name, organization, tel, email, perms, sources, expire, domainFilter, aNumberFilter, serviceFilter, compidFilter, cscodeFilter, gatewayFilter, afterDateFilter, aclFilter, impersonate, - yubikey, auth_method ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', - '%s', '%s' )", addslashes($user_id), addslashes($username), addslashes($password), addslashes($name), addslashes($organization), addslashes($tel), addslashes($email), addslashes($perms), addslashes($sources), addslashes($expire), addslashes($domainFilter), addslashes($aNumberFilter), addslashes($serviceFilter), addslashes($compidFilter), addslashes($cscodeFilter), addslashes($gatewayFilter), addslashes($afterDateFilter), addslashes($aclFilter), addslashes($impersonate), - addslashes($yubikey), addslashes($auth_method) ); } dprint($query); if (!$db->query($query)) { printf("

Failed to add user: %s(%s) %s", $db->Error, $db->Errno, $query); } else { log_accounts_action(sprintf("account %s added", $username)); print "

User $name created"; if ($mailsettings) { if ($_SERVER['HTTPS']=="on") { $protocolURL="https://"; } else { $protocolURL="http://"; } $body .= sprintf("The following login account for CDRTool has been created for you:\n\n"); $body .= sprintf("Username: %s\n", $username); $body .= sprintf("Password: %s\n", $password); $body .= sprintf("URL: %s%s%s\n\n", $protocolURL, $_SERVER['HTTP_HOST'], $CDRTool['tld']); $body .= sprintf("You may use your CDRTool account to access call detail records and \n"); $body .= sprintf("traces from OpenSIPs, MediaProxy and Asterisk servers.\n"); $from = sprintf("From: %s", $CDRTool['provider']['fromEmail']); mail($email, "CDRTool login account", $body, $from); } } } } else { showForm(); } print ""; } else { print "

Account list

"; if ($perm->have_perm("admin")) { print "
Add account
"; } accountList(); } $layout->showFooter(); page_close(); ?> diff --git a/library/login_accounts.php b/library/login_accounts.php index 599fca7..2ddd239 100644 --- a/library/login_accounts.php +++ b/library/login_accounts.php @@ -1,621 +1,560 @@ add_element( array( "name"=>"username", "type"=>"text", "size"=>"25", "length_e"=>"2", "minlength"=>"2", "maxlength"=>"25", "valid_regex"=>"^[-a-zA-Z0-9@_\.]{2,}$", "valid_e"=>"Username required: - mininum 2 chars (letters, digits, _, -, @, .)" ) ); $f->add_element( array( "name"=>"password", "type"=>"text", "size"=>"25", "minlength"=>"5", "maxlength"=>"25", "pass"=>1, //"valid_regex"=>"^.{5,}", //"valid_e"=>"Password: Letters, digits _ - only - minim 5 characters", "value"=>"$password" ) ); $f->add_element( array( "name"=>"name", "type"=>"text", "length_e"=>"3", "minlength"=>"3", "maxlength"=>"100", "size"=>"30", "valid_regex"=>"^[-a-zA-Z0-9|_|\.|\s ]*$", "valid_e"=>"Name required - min 1 chars (letters, digits _ - . spaces only)", "icase"=>1 ) ); $f->add_element( array( "name"=>"organization", "type"=>"text", "length_e"=>"6", "maxlength"=>"100", "size"=>"30", "valid_regex"=>"^[-a-zA-Z0-9|_|\.|\s ]*$", "valid_e"=>"Organization required - min 6 chars (letters, digits _ - . spaces only)", "icase"=>1 ) ); $f->add_element( array( "name"=>"email", "type"=>"text", "length_e"=>6, "minlength"=>"6", "maxlength"=>"100", "size"=>"30", "valid_e"=>"Syntax error in E-Mail address.", "valid_regex"=>"^([-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+(\.[-a-zA-Z0-9_]+)+)*$" ) ); $f->add_element( array( "name"=>"aNumberFilter", "type"=>"text", "maxlength"=>"100", "size"=>"60" ) ); $f->add_element( array( "name"=>"domainFilter", "type"=>"text", "maxlength"=>"255", "size"=>"60" ) ); $f->add_element( array( "name"=>"impersonate", "type"=>"text", "maxlength"=>"255", "size"=>"11" ) ); $f->add_element( array( "name"=>"gatewayFilter", "type"=>"text", "maxlength"=>"255", "size"=>"60" ) ); $f->add_element( array( "name"=>"compidFilter", "type"=>"text", "maxlength"=>"255", "size"=>"60" ) ); $f->add_element( array( "name"=>"cscodeFilter", "type"=>"text", "maxlength"=>"255", "size"=>"60" ) ); $f->add_element( array( "name"=>"serviceFilter", "type"=>"text", "maxlength"=>"255", "size"=>"60" ) ); $f->add_element( array( "name"=>"afterDateFilter", "type"=>"text", "maxlength"=>"10", "size"=>"11" ) ); $f->add_element( array( "name"=>"aclFilter", "type"=>"text", "maxlength"=>"100", "size"=>"20" ) ); $f->add_element( array( "name"=>"tel", "type"=>"text", "size"=>"30" ) ); $f->add_element( array( "name"=>"expire", "type"=>"text", "size"=>"11" ) ); -$use_yubikey = 0; -if (stream_resolve_include_path('Auth/Yubico.php')) { - require_once 'Auth/Yubico.php'; - $use_yubikey = 1; -} - -if ($use_yubikey) { - $f->add_element( - array( - "name"=>"yubikey", - "type"=>"text", - "size"=>"12", - "minlength"=>"12", - "maxlength"=>"12", - "valid_regex"=>"^[a-zA-Z0-9|_|-]*$" - ) - ); -} - $blocked_els=array( array("label"=>"","value"=>"0"), array("label"=>gettext("Blocked"),"value"=>"1") ); $f->add_element( array( "type"=>"select", "name"=>"blocked", "options"=>$blocked_els, "size"=>1, "value"=>"" ) ); $f->add_element( array( "type"=>"submit", "name"=>"submit", "extrahtml"=>"class=btn", "value"=>"Submit" ) ); while (list($k,$v) = each($DATASOURCES)) { if ($k != "unknown") { $cdrSourcesEls[] = array( "label" => $v[name], "value" => $k ); } } $f->add_element( array( "type"=>"select", "name"=>"sources", "options"=>$cdrSourcesEls, "size"=>8, "multiple"=>"1", "value"=>"" ) ); -if ($use_yubikey) { - $f->add_element( - array( - "type"=>"select", - "name"=>"auth_method", - "options"=> array( - array("label"=>"Username+Password+Yubikey","value"=>"7"), - array("label"=>"Username+Yubikey","value"=>"5"), - array("label"=>"Yubikey","value"=>"4"), - ), - "multiple"=>"0", - "value"=>"" - ) - ); -} - function wrapFormElement($label, $element) { if (is_array($label)) { $label = implode('', $label); } if (is_array($element)) { $element = implode('', $element); } printf('
%s
', $label, $element ); } function showForm($id = "") { global $CDRTool, $verbose, $perm, $auth, $sess, $cdr, $f, $perms, $source, $sources, $action; $sources = explode(",", $sources); - $use_yubikey = 0; - if (stream_resolve_include_path('Auth/Yubico.php')) { - require_once 'Auth/Yubico.php'; - $use_yubikey = 1; - } - global $afterDateFilter; if (preg_match("/^0000-00-00$/", $afterDateFilter)) { $afterDateFilter = ""; } $f->load_defaults(); $f->start("", "GET", "", "", "", "form-horizontal"); print ""; print ""; if ($frzall) { $f->freeze(); } if (!$perm->have_perm("admin")) { $ff = array( "sources", "gatewayFilter", "domainFilter", "aNumberFilter", "serviceFilter", "compidFilter", "cscodeFilter", "afterDateFilter", "aclFilter", "impersonate" ); $f->freeze($ff); } print "

Contact details

"; print _("The fields marked with "); print " * "; print _("are mandatory"); print ":

"; $f->show_element("action", ""); if ($id) { $f->add_element( array( "type"=>"hidden", "name"=>"id", "value"=>"$id" ) ); } wrapFormElement( array( _("Name"), " *" ), array( "", $f->get_element("name", ""), "" ) ); wrapFormElement( _("Organization"), array( "", $f->get_element("organization", ""), "" ) ); wrapFormElement( array( _("E-mail"), " *" ), array( "", $f->get_element("email", ""), "" ) ); wrapFormElement( _("Telephone"), array( "", $f->get_element("tel", ""), "" ) ); wrapFormElement( array( _("Username"), "*" ), array( "", $f->get_element("username", ""), "" ) ); wrapFormElement( array( _("Password"), "*" ), array( "", $f->get_element("password", ""), "" ) ); - if ($use_yubikey) { - wrapFormElement( - _("Yubikey"), - array( - "", - $f->get_element("yubikey", ""), - "" - ) - ); - - wrapFormElement( - _("Yubikey usage"), - array( - "", - $f->get_element("auth_method", ""), - "" - ) - ); - } - wrapFormElement( array( "", "E-mail settings", "" ), array( "", "", "" ) ); if ($perm->have_perm("admin")) { print "
"; wrapFormElement( array( "", "Expire date", "" ), array( "", $f->get_element("expire", ""), "" ) ); wrapFormElement( array( "", "Impersonate", "" ), array( "", $f->get_element("impersonate", ""), "" ) ); wrapFormElement( array( "", "Delete", "" ), array( "", "", "" ) ); /* print " Lock "; $f->show_element("blocked",""); print " "; */ print "
"; } print "
"; print "
"; print "

Permissions

"; if ($perm->have_perm("admin")) { print "

Functions

"; print $perm->perm_sel("perms", $perms); print "
"; } print "

Data sources

"; $f->show_element("sources", ""); print "
"; print "

Filters

"; wrapFormElement("IP ACL", $f->get_element("aclFilter", "")); wrapFormElement("Trusted peers", $f->get_element("gatewayFilter", "")); wrapFormElement("Domains", $f->get_element("domainFilter", "")); wrapFormElement("Subscribers", $f->get_element("aNumberFilter", "")); wrapFormElement("After date", $f->get_element("afterDateFilter", "")); print "
"; if (!$frzall) { print "
"; $f->show_element("submit", "", "btn"); print "
"; } $f->finish(); // Finish form } function accountList() { global $auth, $perm, $verbose, $search_text, $PHP_SELF; $uid = $auth->auth["uid"]; $db = new DB_CDRTool; $query = "select * from auth_user"; if (!$perm->have_perm("admin")) { $query .= sprintf(" where user_id = '%s'", addslashes($uid)); } $query .= " order by name asc"; $db->query($query); dprint_sql($query); $rows = $db->num_rows(); print "

"; print " "; while ($db->next_record()) { $id_db = $db->f('user_id'); $name = $db->f('name'); $username = $db->f('username'); $email = $db->f('email'); $organization = $db->f('organization'); $password = $db->f('password'); $tel = $db->f('tel'); $domainFilter = $db->f('domainFilter'); $aNumberFilter = $db->f('aNumberFilter'); $expire = $db->f('expire'); $sources = preg_replace("/,/", ", ", $db->f('sources')); $bgcolor = ""; if (date('Y-m-d') > $expire) { $bgcolor = "error"; } print " "; } print "
"; print _("Name"); print ""; print _("Organization"); print ""; print _("Username"); print ""; print _("E-mail"); print ""; print _("Tel"); print ""; print _("Sources"); print ""; print _("Expire"); print "
$name $organization $username $email $tel $sources $expire
"; } ?>