| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- <?php
- use Illuminate\Database\Capsule\Manager as Capsule;
- add_hook('ClientAreaPage', 1, function ($vars) {
- global $whmcs;
- if (!class_exists('Net_EPP_Protocol')) {
- if (file_exists(__DIR__ . "/Net/EPP/Client.php"))
- require_once __DIR__ . "/Net/EPP/Client.php";
- }
-
- function getSwitchEPP_settinghook($id)
- {
- #select table domain data
- $domain_select_data = Capsule::table('tbldomains')->where('id', $id)->first();
- #select registrar data
- foreach (Capsule::table('tblregistrars')->where('registrar', $domain_select_data->registrar)->get() as $registrar_data) {
- $data[$registrar_data->setting] = decrypt($registrar_data->value);
- }
- return $data;
- }
- #*********************Create Epp Connection**************************#
- function switchepp_clientloginepp_hook($params)
- {
- try {
- $certFile = __DIR__ . '/cert/cert.pem';
- $client = new Net_EPP_Client();
- $use_ssl = true;
- if (file_exists($certFile)) {
- $context = stream_context_create();
- stream_context_set_option($context, 'ssl', 'verify_peer', false);
- stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
- stream_context_set_option($context, 'ssl', 'local_cert', $certFile);
- stream_context_set_option($context, 'ssl', 'passphrase', $params['passphrase']);
- $client->connect($params['eppurl'], $params['eppport'], 300, $use_ssl, $context) or die("Not connected with epp server");
- } else {
- $context = false;
- $client->connect($params['eppurl'], $params['eppport'], 300, $use_ssl, $context) or die("Not connected with epp server");
- }
- } catch (Exception $e) {
- $port = $params['eppport'];
- throw new exception("Connection Error: " . $e->getMessage());
- }
- return $client;
- }
- #*********************Epp client login**************************#
- function switchepp_loggedinepp_hook($client, $params)
- {
- $xml = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
- <command>
- <login>
- <clID>' . $params['registrar_id'] . '</clID>
- <pw>' . $params['registrar_password'] . '</pw>
- <options>
- <version>1.0</version>
- <lang>en</lang>
- </options>
- <svcs>
- <objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
- <objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
- <objURI>urn:ietf:params:xml:ns:host-1.0</objURI>
- <svcExtension>
- <extURI>urn:ietf:params:xml:ns:secDNS-1.1</extURI>
- <extURI>urn:ietf:params:xml:ns:rgp-1.0</extURI>
- <extURI>urn:ietf:params:xml:ns:changePoll-1.0</extURI>
- <extURI>https://www.nic.ch/epp/balance-1.0</extURI>
- <extURI>urn:ietf:params:xml:ns:epp:unhandled-namespaces-1.0</extURI>
- </svcExtension>
- </svcs>
- </login>
- <clTRID>' . rand(9999999, 100000) . '</clTRID>
- </command>
- </epp>';
- $response = $client->request($xml);
- logModuleCall('SWITCH EPP', 'login', $xml, $response);
- $result = new SimpleXMLElement($response);
- if ($result->response->result->attributes()->code >= 2000) {
- throw new exception($result->response->result->msg . '. ' . $result->response->result->extValue->reason);
- }
- return $result;
- }
- function switchepp_write_xml_hook($client, $xml, $action, $extra = NULL)
- {
- $response = $client->request($xml);
- if (empty($extra)) {
- logModuleCall('SWITCH EPP hook', 'domain update extension(DNSSEC)', $xml, $response);
- $result = new SimpleXMLElement($response);
- if ($result->response->result->attributes()->code >= 2000) {
- throw new exception($result->response->result->msg . '. ' . $result->response->result->extValue->reason);
- }
- return $result;
- }
- }
- function switchepp_logoutepp_hook($client, $params)
- {
- $xml = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
- <epp:command xmlns:epp="urn:ietf:params:xml:ns:epp-1.0">
- <epp:logout />
- <epp:clTRID>' . $params['registrar_id'] . '</epp:clTRID>
- </epp:command>
- </epp>';
- $response = $client->request($xml);
- logModuleCall('SWITCH EPP', 'logout', $xml, $response);
- }
- function switchepp_generateDigestRandomString_hook($length = 15)
- {
- $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- $charactersLength = strlen($characters);
- $randomString = '';
- for ($i = 0; $i < $length; $i++) {
- $randomString .= $characters[rand(0, $charactersLength - 1)];
- }
- return $randomString;
- }
- if (isset($_POST['updatednsdata']) && isset($_POST['dnscheck']) && !empty($whmcs->get_req_var('id'))) {
- $params = [];
- $dnscheck = $whmcs->get_req_var('dnscheck');
- $domain_zoneid = $whmcs->get_req_var('id');
- $domaindata = Capsule::table('dns_manager2_zone')->where('id', $domain_zoneid)->first();
- $domainname = $domaindata->name;
- $domaindetail = Capsule::table('tbldomains')->where('domain', $domainname)->first();
- $settingArr = getSwitchEPP_settinghook($domaindetail->id);
- $params = array_merge($params, $settingArr);
- $client = switchepp_clientloginepp_hook($params); #Epp Connection
- $login = switchepp_loggedinepp_hook($client, $params);
- /*$digestType = $params['digest_type'];
- if (empty($digestType))
- $digestType = 1;
- if ($digestType == 1) {
- $string = switchepp_generateDigestRandomString_hook(40);
- $digest = strtoupper(bin2hex($string));
- $digest = substr($digest, 0, 40);
- } elseif ($digestType == 2) {
- $string = switchepp_generateDigestRandomString_hook(64);
- $digest = strtoupper(bin2hex($string));
- $digest = substr($digest, 0, 64);
- } elseif ($digestType == 3 || $digestType == 4) {
- $string = switchepp_generateDigestRandomString_hook(96);
- $digest = strtoupper(bin2hex($string));
- $digest = substr($digest, 0, 96);
- }*/
- //$params['algorithm'] = (!empty($params['algorithm'])) ? $params['algorithm'] : '5';
- //$params['algorithm'] = 13;
- $algorithm = $whmcs->get_req_var('algotype');
- $digestType = $whmcs->get_req_var('digesttype');
- $digest = $whmcs->get_req_var('digest');
- $keytag = $whmcs->get_req_var('keytag');
- if ($dnscheck == 'disableDnssec') {
- $dnssec = '<extension>
- <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
- <secDNS:rem>
- <secDNS:all>true</secDNS:all>
- </secDNS:rem>
- </secDNS:update>
- </extension>';
- }
- if ($dnscheck == 'enableDnssec') {
- $dnssec = '<extension>
- <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
- <secDNS:add>
- <secDNS:dsData>
- <secDNS:keyTag>' . $keytag . '</secDNS:keyTag>
- <secDNS:alg>' . $algorithm . '</secDNS:alg>
- <secDNS:digestType>' . $digestType . '</secDNS:digestType>
- <secDNS:digest>' . $digest . '</secDNS:digest>
- </secDNS:dsData>
- </secDNS:add>
- </secDNS:update>
- </extension>';
- }
- try {
- $xmlUpdate = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
- <command>
- <update>
- <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
- <domain:name>' . $domainname . '</domain:name>
- </domain:update>
- </update>
- ' . $dnssec . '
- <clTRID>clientref-' . rand(1000, 9999) . '</clTRID>
- </command>
- </epp>';
- $update_domain = switchepp_write_xml_hook($client, $xmlUpdate, __FUNCTION__ . ' (Domain update)');
- } catch (Exception $ex) {
- $error = $ex->getMessage();
- }
- switchepp_logoutepp_hook($client, $params);
- }
- });
- function hook_changedns($vars)
- {
- global $whmcs;
- if ($whmcs->get_req_var('m') == 'DNSManager3' && $whmcs->get_req_var('mg-action') == 'dnssec' && !empty($whmcs->get_req_var('id'))) {
- $domaindata = Capsule::table('dns_manager2_zone')->where('id', $_GET['id'])->first();
- $domaindetail = Capsule::table('tbldomains')->where('domain', $domaindata->name)->first();
- $check = end(explode('.', $domaindata->name));
- if ($domaindetail->registrar == 'switchepp') {
- return <<<HTML
- <script type="text/javascript">
- jQuery(document).ready(function () {
-
- var checkdns = "";
- jQuery(".customNav").next('div').find('a').each(function(){
- if(jQuery(this).data("id") == "enableDNSSecButton"){
- if(jQuery(this).hasClass('lu-d-none'))
- checkdns = "disableDnssec";
- }else if(jQuery(this).data("id") == "disableDNSSecButton"){
- if(jQuery(this).hasClass('lu-d-none'))
- checkdns = "enableDnssec";
- }
- });
- dnsmanage(checkdns);
- });
- function dnsmanage(checkdns){
- var intervalcheck = setInterval(function(){
- if(jQuery(".toast-message").html()){
- jQuery("body").append("<input type='hidden' id='customdnssec' value='yes'>");
- cleartimedcheck();
- }
- });
- function cleartimedcheck(){
- clearInterval(intervalcheck);
- }
- var intervalId = setInterval(function(){
-
- var tbody = jQuery("#delegationSignerRecordsDataTable table tbody");
- console.log(tbody.children().length);
- console.log(jQuery("#customdnssec").val());
- console.log(checkdns);
- if (tbody.children().length != 0 && jQuery("#customdnssec").val() == "yes" && checkdns == "enableDnssec") {
- cleartime();
- var getkeytagtd = jQuery('#delegationSignerRecordsDataTable table tbody tr').eq(1).find('td').eq(0).text();
- var getsecondtd = jQuery('#delegationSignerRecordsDataTable table tbody tr').eq(1).find('td').eq(1).text();
- var getthirdtd = jQuery('#delegationSignerRecordsDataTable table tbody tr').eq(1).find('td').eq(2).text();
- var digest = jQuery('#delegationSignerRecordsDataTable table tbody tr').eq(1).find('td').eq(3).find('input').val();
- var algo = getsecondtd.split(" - ")[0];
- var digesttype = getthirdtd.split(" - ")[0];
-
- jQuery.ajax({
- "url": "",
- "type": "post",
- "data": "updatednsdata=true&dnscheck="+checkdns+"&algotype="+algo+"&digesttype="+digesttype+"&digest="+digest+"&keytag="+getkeytagtd,
- "success": function (response) {
- setTimeout(function(){
- jQuery(".customNav").next('div').find('a').each(function(){
- if(jQuery(this).data("id") == "enableDNSSecButton"){
- jQuery(this).attr('onClick','dnsmanage("enableDnssec")');
- }else if(jQuery(this).data("id") == "disableDNSSecButton"){
- jQuery(this).attr('onClick','dnsmanage("disableDnssec")');
- }
- });
- }, 3000);
- }
- });
-
- }else if(tbody.children().length == 0 && jQuery("#customdnssec").val() == "yes" && checkdns == "disableDnssec"){
- cleartime();
- jQuery.ajax({
- "url": "",
- "type": "post",
- "data": "updatednsdata=true&dnscheck="+checkdns,
- "success": function (response) {
- setTimeout(function(){
- jQuery(".customNav").next('div').find('a').each(function(){
- if(jQuery(this).data("id") == "enableDNSSecButton"){
- jQuery(this).attr('onClick','dnsmanage("enableDnssec")');
- }else if(jQuery(this).data("id") == "disableDNSSecButton"){
- jQuery(this).attr('onClick','dnsmanage("disableDnssec")');
- }
- });
- }, 3000);
- }
- });
- }
-
- }, 3000);
- function cleartime(){
- clearInterval(intervalId);
- jQuery("#customdnssec").remove();
- var checkdns = "";
- jQuery(".customNav").next('div').find('a').each(function(){
- if(jQuery(this).data("id") == "enableDNSSecButton"){
- if(jQuery(this).hasClass('lu-d-none'))
- checkdns = "disableDnssec";
- }else if(jQuery(this).data("id") == "disableDNSSecButton"){
- if(jQuery(this).hasClass('lu-d-none'))
- checkdns = "enableDnssec";
- }
- });
- dnsmanage(checkdns);
- }
- }
- </script>
- HTML;
- }
- }
- }
- add_hook('ClientAreaHeadOutput', 1, 'hook_changedns');
|