UNPKG

eppface

Version:

epp api

618 lines (580 loc) 25.7 kB
var cmd = require('epp/CMD'); var Value= require('nml/Value'); var pdns = require('pdns-mysql'); function users(epp, cookie, posts) { this.login = function(clID, pass, cb) { epp.debug(cmd.login(clID, pass), function(data, code) { switch(code) { case '1001': cb('1000', 'admin'); break; case '1000': cb('1000', 'user'); break; default: cb(code); } }, cookie); }; this.passwd = function(newPW, cb) { epp.debug(cmd.login(cookie.clID, cookie.pass, newPW), function(data, code) { if(code==='1000') cookie.pass = newPW; cb(code); }); }; this.check = function(obj, name, cb) { if(typeof(cmd[obj])==='function') { epp.debug(name.phase ? cmd[obj]('check', {name: [].concat(name.name), phase: name.phase}, name.type) : cmd[obj]('check', {name: [].concat(name)}), cb); } else cb(); }; this.info = function(obj, name, cb) { if(typeof(cmd[obj])==='function') { epp.debug(typeof(name)==='object' ? cmd[obj]('info', name, "true") : cmd[obj]('info',{name: obj==='domain' ? new Value({hosts: "all"}, name) : name}), cb, cookie); } else cb(); }; this.delete = function(obj, name, cb) { if(typeof(cmd[obj])==='function') { epp.debug(typeof(name)==='object' ? cmd[obj]("delete", name) : cmd[obj]("delete",{name: name}), cb, cookie); } else cb(); }; this.renew = function(name, y, cb) { epp.query("select DATE_FORMAT(ex_date,'%Y-%m-%d') as curExpDate from domain where name=?", [name], function(err, rows) { if(!err && rows.length) { epp.query("update autorenew_domain set ack='yes' where name=? and user=? and ack is null", [name, cookie.user]); epp.debug(cmd.domain("renew", { name: name, curExpDate: rows[0].curExpDate, y: y }), cb, cookie); } else cb(); }); }; this.autorenew = function(id, ack, cb) { switch(ack) { case 'no': epp.query("select name from autorenew_domain where id=? and user=?", [id, cookie.user], function(err, rows) { if(!err && rows.length) { epp.debug(cmd.domain("delete_autorenew", {name: rows[0].name}), function(data, code) { cb(code, data); }, cookie); } else cb(); }); break; default: epp.query("update autorenew_domain set ack='yes' where id=? and user=?", [id, cookie.user], function(err) { err ? cb() : cb('1000'); }); } }; this.transfer_request = function(json, cb) { function _do(obj, name, pw) { if(typeof(cmd[obj])==='function') { epp.debug(cmd[obj]("transfer", {name: name, pw: pw}, "request"), cb, cookie); } else cb(); } _do(json.obj, json.name, json.pw); }; this.transfer_cancel = function(id, cb) { function _do(obj, name, pw) { if(typeof(cmd[obj])==='function') { epp.debug(cmd[obj]("transfer", {name: name, pw: pw}, "cancel"), cb, cookie); } else cb(); } epp.query("select obj,name,password from transfer where id=? and re_id=?", [id, cookie.user], function(err, rows) { (!err && rows.length) ? _do(rows[0].obj, rows[0].name, rows[0].password) : cb(); }); }; this.transfer_approve = function(id, cb) { function _do(obj, name) { if(typeof(cmd[obj])==='function') { epp.debug(cmd[obj]("transfer", {name: name}, "approve"), cb, cookie); } else cb(); } epp.query("select obj,name from transfer where id=? and ac_id=?", [id, cookie.user], function(err, rows) { (!err && rows.length) ? _do(rows[0].obj, rows[0].name) : cb(); }); }; this.transfer_reject = function(id, cb) { function _do(obj, name) { if(typeof(cmd[obj])==='function') { epp.debug(cmd[obj]("transfer", {name: name}, "reject"), cb, cookie); } else cb(); } epp.query("select obj,name from transfer where id=? and ac_id=?", [id, cookie.user], function(err, rows) { (!err && rows.length) ? _do(rows[0].obj, rows[0].name) : cb(); }); }; this.create_domain = function(params, cb) { var type = { sunrise : "application", landrush: "application", claims : "registration", open : "registration", custom : "application" }; params.phase ? epp.debug(cmd.domain("create", params, type[params.phase]), cb, cookie) : epp.debug(cmd.domain("create", params), cb, cookie); }; this.create_host = function(params, cb) { epp.debug(cmd.host("create", params), cb, cookie); }; this.create_contact = function(params, cb) { epp.debug(cmd.contact("create", params), cb, cookie); }; this.update_domain = function(params, cb) { function cb_db(err, rows) { if(!err && rows.length) { var data = JSON.parse(rows[0].json); if(!data.ns) data.ns = []; if(!data.s) data.s = []; var add = {}, rem = {}, chg = {}; var ns = []; for(var i in params.ns) { if(data.ns.indexOf(params.ns[i])<0) ns.push(params.ns[i]); } if(!Value.isEmpty(ns)) add.ns = ns; var ns = []; for(var i in data.ns) { if(params.ns.indexOf(data.ns[i])<0) ns.push(data.ns[i]); } if(!Value.isEmpty(ns)) rem.ns = ns; if(params.admin !== data.admin) { add.admin = params.admin; rem.admin = data.admin; } if(params.billing !== data.billing) { add.billing = params.billing; rem.billing = data.billing; } if(params.tech !== data.tech) { add.tech = params.tech; rem.tech = data.tech; } var s = []; for(var i in params.s) { if(data.s.indexOf(params.s[i])<0) s.push(params.s[i]); } if(!Value.isEmpty(s)) add.s = s; var s = []; for(var i in data.s) { if(data.s[i].slice(0,6)!=='client') continue; if(params.s.indexOf(data.s[i])<0) s.push(data.s[i]); } if(!Value.isEmpty(s)) rem.s = s; if(params.registrant !== data.registrant) chg.registrant = params.registrant; if(params.pw !== data.pw) chg.pw = params.pw; var secDNS = data.secDNS; if(secDNS) { var dsData = [].concat(secDNS.dsData)[0]; if(Value.isEmpty(params.dsData)) rem.dsData = dsData; else if(!Value.compare(dsData, params.dsData)) { rem.dsData = dsData; add.dsData = params.dsData; } } else { if(!Value.isEmpty(params.dsData)) add.dsData = params.dsData; } epp.debug(cmd.domain("update", { name: params.name, add: add, rem: rem, chg: chg, phase: params.phase, applicationID: params.applicationID}), cb, cookie); } else cb(); } params.applicationID ? epp.query("select json from launch_domain where user=? and ap_id=?", [cookie.user, params.applicationID], cb_db) : epp.query("select json from domain where user=? and name=?", [cookie.user, params.name], cb_db); }; this.update_host = function(params, cb) { function cb_db(err, rows) { if(!err && rows.length) { var data = JSON.parse(rows[0].json); if(!data.ip) data.ip = []; if(!data.s) data.s = []; var add = {ip: [], s: []}; var rem = {ip: [], s: []}; var chg = (params.name === params.new_name) ? {} : {name: params.new_name}; for(var i in params.ip) { if(data.ip.indexOf(params.ip[i])<0) add.ip.push(params.ip[i]); } for(var i in params.s) { if(data.s.indexOf(params.s[i])<0) add.s.push(params.s[i]); } for(var i in data.ip) { if(params.ip.indexOf(data.ip[i])<0) rem.ip.push(data.ip[i]); } for(var i in data.s) { if(data.s[i].slice(0,6)!=='client') continue; if(params.s.indexOf(data.s[i])<0) rem.s.push(data.s[i]); } epp.debug(cmd.host("update", {name: params.name, add: add, rem: rem, chg: chg}), cb, cookie); } else cb(); } epp.query("select json from host where user=? and name=?", [cookie.user, params.name], cb_db); }; this.update_contact = function(params, cb) { function postal(p, d) { var c = {}; if(p.name!==d.name) c.name = p.name; if(p.org!==d.org) c.org = p.org; if(!Value.compare(p.addr, d.addr)) c.addr = p.addr; return c; } function cb_db(err, rows) { if(!err && rows.length) { var data = JSON.parse(rows[0].json); if(!data.s) data.s = []; var add = {s: []}; var rem = {s: []}; var chg = {}; for(var i in params.s) { if(data.s.indexOf(params.s[i])<0) add.s.push(params.s[i]); } for(var i in data.s) { if(data.s[i].slice(0,6)!=='client') continue; if(params.s.indexOf(data.s[i])<0) rem.s.push(data.s[i]); } if(params.int) { if(data.int) { var cint = postal(params.int, data.int); if(!Value.isEmpty(cint)) chg.int = cint; } else chg.int = params.int; } if(params.loc) { if(data.loc) { var cloc = postal(params.loc, data.loc); if(!Value.isEmpty(cloc)) chg.loc = cloc; } else chg.loc = params.loc; } if(params.voice !== data.voice) chg.voice = params.voice; if(params.fax !== data.fax) chg.fax = params.fax; if(params.email !== data.email) chg.email = params.email; if(params.pw !== data.pw) chg.pw = params.pw; if(!Value.compare(params["0"], data["0"])) chg["0"] = params["0"]; if(!Value.compare(params["1"], data["1"])) chg["1"] = params["1"]; epp.debug(cmd.contact("update", {name: params.name, add: add, rem: rem, chg: chg}), cb, cookie); } else cb(); } epp.query("select json from contact where user=? and name=?", [cookie.user, params.name], cb_db); }; this.restore_request = function(id, cb) { function cb_db(err, rows) { if(!err && rows.length) { epp.debug(cmd.domain("update", {name: rows[0].name, restore: ""}), cb, cookie); } else cb(); } epp.query("select name from delete_domain where id=? and user=? and rgp in ('autoRenewPeriod','renewPeriod','transferPeriod','redemptionPeriod')", [id, cookie.user], cb_db); }; this.restore_report = function(params, cb) { epp.debug(cmd.domain("update", {name: params.name, restore: params}), cb, cookie); }; this.show_domain = function(name, cb) { function cb_db(err, rows) { (!err && rows.length) ? cb('1000', JSON.parse(rows[0].json)) : cb(); } epp.query("select json from domain where user=? and name=?", [cookie.user, name], cb_db); }; this.show_host = function(name, cb) { function cb_db(err, rows) { (!err && rows.length) ? cb('1000', JSON.parse(rows[0].json)) : cb(); } epp.query("select json from host where user=? and name=?", [cookie.user, name], cb_db); }; this.show_contact = function(name, cb) { function cb_db(err, rows) { (!err && rows.length) ? cb('1000', JSON.parse(rows[0].json)) : cb(); } epp.query("select json from contact where user=? and name=?", [cookie.user, name], cb_db); }; this.show_launch = function(ap_id, cb) { function cb_db(err, rows) { if(!err && rows.length) { var data = JSON.parse(rows[0].json); data.name = rows[0].name; data.phase = rows[0].phase; cb('1000', data); } else cb(); } epp.query("select name,json,phase from launch_domain where user=? and ap_id=?", [cookie.user, ap_id], cb_db); }; this.show_report = function(id, cb) { function _data(rows) { var _rows = {}; for(var n in rows) _rows[n] = (rows[n] instanceof Date) ? rows[n].toISOString() : rows[n]; return _rows; } epp.query("select * from delete_domain where id=? and user=? and rgp='pendingRestore'", [id, cookie.user], function(err, rows) { (!err && rows.length) ? cb('1000', _data(rows[0])) : cb(); }); }; this.list_domain = function(page, cb, where) { var and = ''; if(where.name) and += epp.format(" and name like concat(?,'%')", where.name); if(where.days) and += epp.format(" and DATE_SUB(ex_date,INTERVAL ? DAY)<now()", where.days); function _data(rows) { var _rows = []; for(var i=0; i<rows.length; i++) { var json = JSON.parse(rows[i].json); _rows.push({ id : rows[i].name, registrant: json.registrant, ns : [].concat(json.ns).join(' '), ex_date : rows[i].ex_date.toISOString(), pw : json.pw }); } return _rows; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT name,json,ex_date FROM domain" + " WHERE user=?" + and + " ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: _data(rows)}); }); } epp.query("select count(*) AS total from domain" + " where user=?" + and, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_host = function(page, cb) { function _data(rows) { var _rows = []; for(var i=0; i<rows.length; i++) { var ip = JSON.parse(rows[i].json).ip; _rows.push({ id: rows[i].name, ip: ip ? ip.join(' ') : '' }); } return _rows; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT name,json FROM host WHERE user=? ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: _data(rows)}); }); } epp.query("select count(*) AS total from host where user=?", [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_contact = function(page, cb, where) { var and = ''; if(where.contactId) and += epp.format(" and contactId like concat(?,'%')", where.contactId); if(where.email) and += epp.format(" and email like concat(?,'%')", where.email); if(where.emailOk !== undefined) and += epp.format(" and emailOk=? and dirty in (0,2)", where.emailOk); if(where.uniIdOk !== undefined) and += epp.format(" and uniIdOk=? and dirty in (0)", where.uniIdOk); function _data(rows) { var _rows = []; for(var i=0; i<rows.length; i++) { var json = JSON.parse(rows[i].json); _rows.push({ id : rows[i].name, name : json.int.name, org : json.int.org, voice : json.voice, email : json.email, pw : json.pw, emailOk: rows[i].dirty&1 ? null : rows[i].emailOk, uniIdOk: rows[i].dirty&3 ? null : rows[i].uniIdOk }); } return _rows; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT name,json,dirty,emailOk,uniIdOk FROM contact" + " LEFT JOIN payment.audits ON name=contactId" + " WHERE user=?" + and + " ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: _data(rows)}); }); } epp.query("SELECT count(*) AS total FROM contact" + " LEFT JOIN payment.audits ON name=contactId" + " WHERE user=?" + and, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_launch = function(page, cb) { var from_launch_domain = "from launch_domain where user=? and status!='allocated' AND status!='rejected'"; function _data(rows) { var _rows = []; for(var i=0; i<rows.length; i++) { var json = JSON.parse(rows[i].json); _rows.push({ id : rows[i].ap_id, name : rows[i].name, registrant: json.registrant, ex_date : rows[i].ex_date.toISOString(), pw : json.pw, phase : rows[i].phase }); } return _rows; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT * "+from_launch_domain+" ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: _data(rows)}); }); } epp.query("select count(*) AS total "+from_launch_domain, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_autorenew = function(page, cb) { var from_autorenew_domain = "FROM autorenew_domain WHERE user=? AND ack is null AND DATE_ADD(cr_date,INTERVAL 30 DAY)>now()"; function _data(r) { r.cr_date = r.cr_date.toISOString(); r.ex_date = r.ex_date.toISOString(); return r; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT * "+from_autorenew_domain+" ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: rows.map(_data)}); }); } epp.query("select count(*) AS total "+from_autorenew_domain, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_transfer = function(page, cb, target) { var from_transfer = { "in" : "FROM transfer WHERE re_id=? and status='pending'", "out": "FROM transfer WHERE ac_id=? and status='pending'" }[target.io]; switch(target.obj) { case 'domain': from_transfer += " and obj='domain'"; break; case 'contact': from_transfer += " and obj='contact'"; break; } function _data(r) { r.re_date = r.re_date.toISOString(); r.ac_date = r.ac_date.toISOString(); if(r.obj==='domain') r.ex_date = r.ex_date.toISOString(); return r; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT * "+from_transfer+" ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: rows.map(_data)}); }); } epp.query("SELECT count(*) AS total "+from_transfer, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_restore = function(page, cb) { var from_delete_domain = "FROM delete_domain WHERE user=? and rgp in ('autoRenewPeriod','renewPeriod','transferPeriod','redemptionPeriod','pendingRestore')"; function _data(r) { r.ex_date = r.ex_date.toISOString(); r.rm_date = r.rm_date.toISOString(); return r; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT * "+from_delete_domain+" ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: rows.map(_data)}); }); } epp.query("select count(*) AS total "+from_delete_domain, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.list_bills = function(page, cb) { var from_bills = "FROM bills WHERE user=?"; function _data(r) { r.opName = r.op; delete r.op; r.opDate = r.opDate.toISOString(); r.exDate = r.exDate.toISOString(); return r; } function lists(count) { var pages = Math.floor((count+posts-1)/posts); if(page > pages) page = pages; if(page < 1) page = 1; epp.query("SELECT * "+from_bills+" ORDER BY id DESC LIMIT ?,?", [cookie.user, (page-1)*posts, posts], function(err, rows) { err ? cb() : cb('1000', {page: page, pages: pages, rows: rows.map(_data)}); }); } epp.query("select count(*) AS total "+from_bills, [cookie.user], function(err, rows) { err ? cb() : rows[0].total ? lists(rows[0].total) : cb('1000', {page: 1, pages: 0, rows: []}); }); }; this.pdns_records = function(action, domain, record, cb) { function cb_db(err, rows) { if(!err && rows.length) { var primary = pdns.domains.belong(JSON.parse(rows[0].json).ns || []); if(primary) cb('2004', primary); else { pdns.records[action](domain, record, function(err, rows) { err ? cb() : cb('1000', rows); }); } } else cb(); } epp.query("select json from domain where user=? and name=?", [cookie.user, domain], cb_db); }; } module.exports = users;