UNPKG

@cocreate/domain

Version:

A simple domain component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.

218 lines (199 loc) 8.54 kB
'use strict' const resellerclub = require("./lib"); const api = require("@cocreate/api"); class CoCreateDomain { constructor(wsManager) { this.name = 'domain'; this.wsManager = wsManager; this.init(); } init() { if (this.wsManager) { this.wsManager.on('domain', (socket, data) => this.sendDomain(socket, data)); } } async sendDomain(socket, data) { let params = data['data']; let action = data['action']; let environment; // connect domain reseller api try { let org = await api.getOrganization(data, this.name); if (params.environment) { environment = params['environment']; delete params['environment']; } else { environment = org.apis[this.name].environment; } var apiUrl = org.apis[this.name][environment].apiUrl;//'https://httpapi.com' let keys = { 'clientID': org.apis[this.name][environment].clientID, 'clientSecret': org.apis[this.name][environment].clientSecret, apiUrl } resellerclub.connect(keys) .then(res => console.log(res)) .catch(err => console.log(err)); } catch (e) { console.log(this.name + " : Error Connecting to api Reseller", e) return false; } let isDelete = (action.indexOf('Delete') != -1); if (action.indexOf('Record') !== -1) action = action.substring(0, action.indexOf('Record')).toLowerCase(); let response; try { switch (action) { case 'executeAction': console.log("params ", params) break; case 'activateDns': response = await resellerclub.activateDns({ params, options: { apiUrl } }); break; case 'txt': case 'mx': case 'cname': case 'ipv4': case 'ipv6': case 'svr': case 'ns': response = await resellerclub.dnsRecord({ action, params, options: { apiUrl }, isDelete }); break; case "customer": if (!isDelete) { if (params['customer-id']) response = await resellerclub.editCustomer({ params, options: { apiUrl } }) else response = await resellerclub.createCustomer({ params, options: { apiUrl } }) } else { response = await resellerclub.deleteCustomer({ params, options: { apiUrl } }) } break; case "contact": if (!isDelete) { if (params['contact-id']) response = await resellerclub.editContact({ params, options: { apiUrl } }) else response = await resellerclub.createContact({ params, options: { apiUrl } }) } else { response = await resellerclub.deleteContact({ params, options: { apiUrl } }) } break; case "register": response = await resellerclub.register({ params, options: { apiUrl } }) break; case "searchDomain": response = await resellerclub.searchDomain({ params, options: { apiUrl } }) break; case "validateTransfer": response = await resellerclub.validateTransfer({ params, options: { apiUrl } }) break; case "transfer": response = await resellerclub.transfer({ params, options: { apiUrl } }) break; case 'checkAvailability': let tlds_list = ["company", "business", "com", "net", "biz", "tk", "org", "club", "site", "info", "online", "xyz"]; let domainName = params['domain-name'] let tlds = params['tlds'] params['tlds'] = validationForm((typeof tlds != 'undefined' && tlds.length > 0) ? tlds : tlds_list, domainName); var allPricing = await resellerclub.getResellerCostPricing({ params, options: { apiUrl } }); let res = await resellerclub.checkAvailability({ params }) response = await mergeDomains(allPricing, res, params['tlds'], domainName) break; } this.wsManager.send(socket, { method: this.name, action, response }) } catch (error) { this.handleError(socket, action, error) } } handleError(socket, action, error) { const response = { 'object': 'error', 'data': error || error.response || error.response.data || error.response.body || error.message || error, }; this.wsManager.send(socket, { method: this.name, action, response }) } } module.exports = CoCreateDomain; async function getElementFromArray($array, keyFind) { for (var key in $array) { for (var j in $array[key]) { if (keyFind == j) return $array[key]; } } return []; } async function getDomainsPrice($allPricing, $domains) { let $domainsWithPrice = []; let $classKey = ''; let num_domains = Object.keys($domains).length; if (num_domains > 0) { for (var key in $domains) { let domain = key; var row = {}; row[domain] = {}; row[domain]['status'] = ($domains[domain].hasOwnProperty('status') && typeof $domains[domain]['status'] != 'undefined') ? $domains[domain]['status'] : ''; if (row[domain]['status'] == 'available') { $classKey = $domains[domain]['classkey']; row[domain]['classKey'] = $classKey; let $prices = $allPricing[$classKey]['addnewdomain']; let $price = 0; for (var key_p in $prices) { $price = $prices[key_p]; } row[domain]['price'] = $price; } $domainsWithPrice.push(row); } } return $domainsWithPrice; } async function mergeDomains(allPricing, res_reseller, tlds, domainName) { let $data = await getDomainsPrice(allPricing, res_reseller) let $domains = [] for (var tld in tlds) { let $domain = {}; let $fulldomainname = domainName + "." + tlds[tld]; let row = await getElementFromArray($data, $fulldomainname); $domain['name'] = $fulldomainname; $domain['status'] = row[$fulldomainname]['status']; $domain['price'] = typeof row[$fulldomainname]['price'] != 'undefined' ? row[$fulldomainname]['price'] : null; $domain['test'] = { 'hey': { 'name': 'test with frankie pagan' } } $domains.push($domain); } let response = { result: true, data: $domains }; return response; } function validationForm(tlds, domainName) { let tlds_list = []; if (typeof tlds != 'undefined' && tlds.length > 0) tlds_list = tlds if (domainName != "") { let $arr = domainName.split('.'); let $checkStr = $arr[0]; let $extension = 0; let $pos = 0; if ($checkStr == "www") domainName = $arr[1]; if ($arr[0] != "www" && $arr.hasOwnProperty(1)) { domainName = $arr[0]; $extension = $arr[1]; $pos = tlds_list.indexOf($extension); if ($pos !== -1) { tlds_list.splice($pos, 1); } tlds_list.unshift($extension); } if ($arr[0] == "www" && $arr.hasOwnProperty(2)) { domainName = $arr[1]; $extension = $arr[2]; $pos = tlds_list.indexOf($extension); if ($pos !== -1) { tlds_list.splice($pos, 1); } tlds_list.unshift($extension); } } return tlds_list; }//end validationForm