From d22277878254cf33fd63ca1bf12b215f4e030a27 Mon Sep 17 00:00:00 2001 From: Marius Burkard <m.burkard@pixcept.de> Date: Mon, 04 Jan 2016 05:12:49 -0500 Subject: [PATCH] - merged different fixes and updates from foreign branches --- interface/lib/classes/functions.inc.php | 335 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 332 insertions(+), 3 deletions(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 43eec67..92f6f17 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -186,7 +186,8 @@ global $app; if($type == 'IPv4'){ - $regex = "/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/"; +// $regex = "/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/"; + $regex = "/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/"; } else { // IPv6 $regex = "/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i"; @@ -301,7 +302,7 @@ if($encode == true) { if(function_exists('idn_to_ascii')) { - $domain = idn_to_ascii($domain); + $domain = idn_to_ascii($domain, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46); } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) { /* use idna class: * @author Matthias Sommerfeld <mso@phlylabs.de> @@ -318,7 +319,7 @@ } } else { if(function_exists('idn_to_utf8')) { - $domain = idn_to_utf8($domain); + $domain = idn_to_utf8($domain, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46); } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) { /* use idna class: * @author Matthias Sommerfeld <mso@phlylabs.de> @@ -389,6 +390,334 @@ return getimagesizefromstring($string); } } + + public function password($minLength = 10, $special = false){ + global $app; + + $iteration = 0; + $password = ""; + $maxLength = $minLength + 5; + $length = $this->getRandomInt($minLength, $maxLength); + + while($iteration < $length){ + $randomNumber = (floor(((mt_rand() / mt_getrandmax()) * 100)) % 94) + 33; + if(!$special){ + if (($randomNumber >=33) && ($randomNumber <=47)) { continue; } + if (($randomNumber >=58) && ($randomNumber <=64)) { continue; } + if (($randomNumber >=91) && ($randomNumber <=96)) { continue; } + if (($randomNumber >=123) && ($randomNumber <=126)) { continue; } + } + $iteration++; + $password .= chr($randomNumber); + } + $app->uses('validate_password'); + if($app->validate_password->password_check('', $password, '') !== false) $password = $this->password($minLength, $special); + return $password; + } + + public function getRandomInt($min, $max){ + return floor((mt_rand() / mt_getrandmax()) * ($max - $min + 1)) + $min; + } + + public function generate_customer_no(){ + global $app; + // generate customer no. + $customer_no = mt_rand(100000, 999999); + while($app->db->queryOneRecord("SELECT client_id FROM client WHERE customer_no = '".$customer_no."'")){ + $customer_no = mt_rand(100000, 999999); + } + + return $customer_no; + } + + public function generate_activation_code(){ + + $activation_code = str_pad(mt_rand(0, 99999999), 8, '0', STR_PAD_LEFT); + + return $activation_code; + } + + public function client_activate($client_id){ + global $app, $conf; + + if(!is_file(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php')) return false; + include(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php'); + + $context = stream_context_create(array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + ) + )); + + $soap_client = new SoapClient(null, array('location' => $robot_conf['soap']['soap_location'], + 'uri' => $robot_conf['soap']['soap_uri'], + 'trace' => 1, + 'exceptions' => 1, + 'stream_context' => $context)); + + + try { + if($session_id = $soap_client->login($robot_conf['soap']['username'] , $robot_conf['soap']['password'])) { + //echo 'Logged successfull. Session ID:'.$session_id.'<br />'; + } + $error = ''; + $client_record = $soap_client->client_get($session_id, $client_id); + + $client_record['password'] = $this->password(); + if(trim($client_record['customer_no']) == '') $client_record['customer_no'] = $this->generate_customer_no(); + $client_record['username'] = 'c'.$client_record['customer_no']; + //die($client_record['customer_no']); + //$client_record['locked'] = 'n'; + $client_record['canceled'] = 'n'; + $soap_client->client_update($session_id, $client_id, 0, $client_record); + + $app->db->query("UPDATE client SET validation_status = 'accept', activation_code = '' WHERE client_id = ".$client_id); + + $activation_letter_filename = ISPC_ROOT_PATH.'/pdf/activation_letters/c'.$client_id.'-'.$client_record['activation_code'].'.pdf'; + if(is_file($activation_letter_filename)) unlink($activation_letter_filename); + + $webdetails['ispconfiguser'] = $client_record['username']; + $webdetails['ispconfigpassword'] = $client_record['password']; + $webdetails['customer_no'] = $client_record['customer_no']; + $webdetails['contact'] = ($client_record['contact_firstname'] != ''? $client_record['contact_firstname'].' ' : '').$client_record['contact_name']; + $webdetails['salutation_de'] = ($client_record['gender'] == 'f'? 'Frau' : 'Herr'); + $webdetails['salutation_en'] = ($client_record['gender'] == 'f'? 'Mrs.' : 'Mr.'); + $webdetails['ispconfigurl'] = 'http'.($_SERVER['HTTPS'] == 'on'? 's' : '').'://'.$_SERVER['HTTP_HOST']; + $webdetails['signature_de'] = $robot_conf['textbaustein']['emailfooter']; + $webdetails['signature_en'] = $robot_conf['textbaustein_en']['emailfooter']; + + if($error == ''){ + // send email with login details + $invoice_client_settings = $app->db->queryOneRecord("SELECT * FROM invoice_client_settings WHERE client_id = ".intval($client_id)); + $company = $app->db->queryOneRecord("SELECT * FROM invoice_company WHERE invoice_company_id = ".$invoice_client_settings['invoice_company_id']); + + $subject = '['.$company['company_name_short'].'] Zugangsdaten zu unserem Kundeninterface / Login details for our customer interface'; + + $app->uses('tpl'); + $tpl = new tpl; + $tpl->newTemplate(ISPC_WEB_PATH."/client/templates/ispconfig_login.master"); + $tpl->setVar($webdetails); + $message = $tpl->grab(); + + if($robot_conf['production_mode']){ + $app->functions->mail(trim($client_record['email']), $subject, $message, 'support@timmehosting.de', '', 'application/pdf', '', '', 'f.timme@timmehosting.de,hetzner@timmehosting.de', 'TimmeHosting.de Support'); + + $app->db->query("INSERT INTO `th_robot_message` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `client_id`, `subject`, `message`, `message_sent_date`, `message_sent_tstamp`, `email_from`, `email_to`, `email_to_bcc`) VALUES(1, 1, 'riud', 'riud', '', ".intval($client_id).", '".$app->db->quote($subject)."', '".$app->db->quote($message)."', '".date('Y-m-d')."', ".time().", 'support@timmehosting.de', '".trim($client_record['email'])."', 'f.timme@timmehosting.de,hetzner@timmehosting.de')"); + } + } + + if($soap_client->logout($session_id)) { + //echo 'Logged out.<br />'; + } + + } catch (SoapFault $e) { + //$error .= $client->__getLastResponse(); + $error .= 'SOAP Error: '.$e->getMessage(); + } + } + + public function client_activation_failed($client){ + global $app, $conf; + + if(!is_file(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php')) return false; + include(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php'); + + $client_id = intval($client['client_id']); + $webdetails['contact'] = ($client['contact_firstname'] != ''? $client['contact_firstname'].' ' : '').$client['contact_name']; + $webdetails['salutation_de'] = ($client['gender'] == 'f'? 'Frau' : 'Herr'); + $webdetails['salutation_en'] = ($client['gender'] == 'f'? 'Mrs.' : 'Mr.'); + $webdetails['signature_de'] = $robot_conf['textbaustein']['emailfooter']; + $webdetails['signature_en'] = $robot_conf['textbaustein_en']['emailfooter']; + + + // send email with login details + $invoice_client_settings = $app->db->queryOneRecord("SELECT * FROM invoice_client_settings WHERE client_id = ".intval($client_id)); + $company = $app->db->queryOneRecord("SELECT * FROM invoice_company WHERE invoice_company_id = ".$invoice_client_settings['invoice_company_id']); + $subject = '['.$company['company_name_short'].'] Aktivierung Ihres Kundenaccounts fehlgeschlagen / Activation of your customer account failed'; + + $app->uses('tpl'); + $tpl = new tpl; + $tpl->newTemplate(ISPC_WEB_PATH."/client/templates/ispconfig_client_activation_failed.master"); + $tpl->setVar($webdetails); + $message = $tpl->grab(); + + if($robot_conf['production_mode']){ + $app->functions->mail(trim($client['email']), $subject, $message, 'support@timmehosting.de', '', 'application/pdf', '', '', 'f.timme@timmehosting.de,hetzner@timmehosting.de', 'TimmeHosting.de Support'); + + $app->db->query("INSERT INTO `th_robot_message` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `client_id`, `subject`, `message`, `message_sent_date`, `message_sent_tstamp`, `email_from`, `email_to`, `email_to_bcc`) VALUES(1, 1, 'riud', 'riud', '', ".intval($client_id).", '".$app->db->quote($subject)."', '".$app->db->quote($message)."', '".date('Y-m-d')."', ".time().", 'support@timmehosting.de', '".trim($client['email'])."', 'f.timme@timmehosting.de,hetzner@timmehosting.de')"); + } + } + + public function client_review($client_id){ + global $app, $conf; + + if(!is_file(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php')) return false; + include(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php'); + + $context = stream_context_create(array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + ) + )); + + $soap_client = new SoapClient(null, array('location' => $robot_conf['soap']['soap_location'], + 'uri' => $robot_conf['soap']['soap_uri'], + 'trace' => 1, + 'exceptions' => 1, + 'stream_context' => $context)); + + try { + if($session_id = $soap_client->login($robot_conf['soap']['username'] , $robot_conf['soap']['password'])) { + //echo 'Logged successfull. Session ID:'.$session_id.'<br />'; + } + $error = ''; + $client_record = $soap_client->client_get($session_id, $client_id); + + if(trim($client_record['customer_no']) == ''){ + $client_record['customer_no'] = $this->generate_customer_no(); + $soap_client->client_update($session_id, $client_id, 0, $client_record); + } + + $activation_code = $this->generate_activation_code(); + $app->db->query("UPDATE client SET activation_code = '".$activation_code."'".($client_record['validation_status'] != 'review'? ", validation_status = 'review'" : "")." WHERE client_id = ".$client_id); + + $webdetails['customer_no'] = $client_record['customer_no']; + $webdetails['contact'] = ($client_record['contact_firstname'] != ''? $client_record['contact_firstname'].' ' : '').$client_record['contact_name']; + $webdetails['salutation_de'] = ($client_record['gender'] == 'f'? 'Frau' : 'Herr'); + $webdetails['salutation_en'] = ($client_record['gender'] == 'f'? 'Mrs.' : 'Mr.'); + $webdetails['signature_de'] = $robot_conf['textbaustein']['emailfooter']; + $webdetails['signature_en'] = $robot_conf['textbaustein_en']['emailfooter']; + $webdetails['email'] = $client_record['email']; + include ISPC_LIB_PATH.'/lang/'.strtolower($client_record['language']).'.lng'; + $webdetails['latest_activation_date'] = date($wb['conf_format_dateshort'], $client_record['created_at'] + 14 * 86400); + + if($error == ''){ + // send email with login details + $invoice_client_settings = $app->db->queryOneRecord("SELECT * FROM invoice_client_settings WHERE client_id = ".intval($client_id)); + $company = $app->db->queryOneRecord("SELECT * FROM invoice_company WHERE invoice_company_id = ".$invoice_client_settings['invoice_company_id']); + + $subject = '['.$company['company_name_short'].'] Aktivierung Ihres Kundenkontos / Activation of your customer account'; + $webdetails['company_name_short'] = $company['company_name_short']; + + $app->uses('tpl'); + $tpl = new tpl; + $tpl->newTemplate(ISPC_WEB_PATH."/client/templates/ispconfig_client_activation_email.master"); + $tpl->setVar($webdetails); + $message = $tpl->grab(); + + if($robot_conf['production_mode']){ + $app->functions->mail(trim($client_record['email']), $subject, $message, 'support@timmehosting.de', '', 'application/pdf', '', '', 'f.timme@timmehosting.de,hetzner@timmehosting.de', 'TimmeHosting.de Support'); + + $app->db->query("INSERT INTO `th_robot_message` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `client_id`, `subject`, `message`, `message_sent_date`, `message_sent_tstamp`, `email_from`, `email_to`, `email_to_bcc`) VALUES(1, 1, 'riud', 'riud', '', ".intval($client_id).", '".$app->db->quote($subject)."', '".$app->db->quote($message)."', '".date('Y-m-d')."', ".time().", 'support@timmehosting.de', '".trim($client_record['email'])."', 'f.timme@timmehosting.de,hetzner@timmehosting.de')"); + } + } + + // create activation letter pdf + $app->uses('pdf'); + $app->pdf->AliasNbPages(); + $app->pdf->createActivationLetter($client_id); + + $pdf_content = $app->pdf->Output('doc.pdf', 'S'); + + $activation_letter_filename = ISPC_ROOT_PATH.'/pdf/activation_letters/c'.$client_id.'-'.$activation_code.'.pdf'; + file_put_contents($activation_letter_filename, $pdf_content); + + if(is_file($activation_letter_filename)){ + include(ISPC_WEB_PATH.'/billing/lib/onlinebrief24/Net/SFTP.php'); + $sftp = new Net_SFTP('api.letterei-onlinebrief.de'); + if (!$sftp->login($company['onlinebrief24_user'], $company['onlinebrief24_password'])) { + $error_msg = $app->lng('onlinebrief24_login_failed_txt'); + $app->error($error_msg); + } + $upload_filename = ($company['onlinebrief24_print'] == 'coloured'? '1' : '0').'00'.($client_record['country'] == 'DE'? '1' : '0').'000000000-c'.$client_id.'-'.$activation_code.'.pdf'; + //die($upload_filename); + $sftp->chdir('upload/api'); + $sftp->put($upload_filename, $activation_letter_filename, NET_SFTP_LOCAL_FILE); + } + + if($soap_client->logout($session_id)) { + //echo 'Logged out.<br />'; + } + + } catch (SoapFault $e) { + //$error .= $client->__getLastResponse(); + $error .= 'SOAP Error: '.$e->getMessage(); + } + } + + public function client_reject($client_id){ + global $app, $conf; + + if(!is_file(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php')) return false; + include(ISPC_WEB_PATH.'/robot/lib/robot_config.inc.php'); + + $context = stream_context_create(array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + ) + )); + + $soap_client = new SoapClient(null, array('location' => $robot_conf['soap']['soap_location'], + 'uri' => $robot_conf['soap']['soap_uri'], + 'trace' => 1, + 'exceptions' => 1, + 'stream_context' => $context)); + + try { + if($session_id = $soap_client->login($robot_conf['soap']['username'] , $robot_conf['soap']['password'])) { + //echo 'Logged successfull. Session ID:'.$session_id.'<br />'; + } + $error = ''; + $client_record = $soap_client->client_get($session_id, $client_id); + + $client_record['locked'] = 'y'; + $client_record['canceled'] = 'y'; + $soap_client->client_update($session_id, $client_id, 0, $client_record); + + $app->db->query("UPDATE client SET validation_status = 'reject', activation_code = '' WHERE client_id = ".$client_id); + $app->db->query("DELETE FROM th_order WHERE client_id = ".$client_id); + + $activation_letter_filename = ISPC_ROOT_PATH.'/pdf/activation_letters/c'.$client_id.'-'.$client_record['activation_code'].'.pdf'; + if(is_file($activation_letter_filename)) unlink($activation_letter_filename); + + $webdetails['contact'] = ($client_record['contact_firstname'] != ''? $client_record['contact_firstname'].' ' : '').$client_record['contact_name']; + $webdetails['salutation_de'] = ($client_record['gender'] == 'f'? 'Frau' : 'Herr'); + $webdetails['salutation_en'] = ($client_record['gender'] == 'f'? 'Mrs.' : 'Mr.'); + $webdetails['signature_de'] = $robot_conf['textbaustein']['emailfooter']; + $webdetails['signature_en'] = $robot_conf['textbaustein_en']['emailfooter']; + + if($error == ''){ + // send email with login details + $invoice_client_settings = $app->db->queryOneRecord("SELECT * FROM invoice_client_settings WHERE client_id = ".intval($client_id)); + $company = $app->db->queryOneRecord("SELECT * FROM invoice_company WHERE invoice_company_id = ".$invoice_client_settings['invoice_company_id']); + + $subject = '['.$company['company_name_short'].'] Sperrung Ihres Kundenaccounts / Suspension of your customer account'; + + $app->uses('tpl'); + $tpl = new tpl; + $tpl->newTemplate(ISPC_WEB_PATH."/client/templates/ispconfig_client_rejection.master"); + $tpl->setVar($webdetails); + $message = $tpl->grab(); + + if($robot_conf['production_mode']){ + $app->functions->mail(trim($client_record['email']), $subject, $message, 'support@timmehosting.de', '', 'application/pdf', '', '', 'f.timme@timmehosting.de,hetzner@timmehosting.de', 'TimmeHosting.de Support'); + + $app->db->query("INSERT INTO `th_robot_message` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `client_id`, `subject`, `message`, `message_sent_date`, `message_sent_tstamp`, `email_from`, `email_to`, `email_to_bcc`) VALUES(1, 1, 'riud', 'riud', '', ".intval($client_id).", '".$app->db->quote($subject)."', '".$app->db->quote($message)."', '".date('Y-m-d')."', ".time().", 'support@timmehosting.de', '".trim($client_record['email'])."', 'f.timme@timmehosting.de,hetzner@timmehosting.de')"); + } + } + + if($soap_client->logout($session_id)) { + //echo 'Logged out.<br />'; + } + + } catch (SoapFault $e) { + //$error .= $client->__getLastResponse(); + $error .= 'SOAP Error: '.$e->getMessage(); + } + } } -- Gitblit v1.9.1