UNPKG

eppgate

Version:

Domain Registrar

174 lines (163 loc) 6.46 kB
var mysql = require('mysql'); var Run = require('epp/Run'); var cmd = require('epp/CMD'); var e2u = require('epp/e2u'); var Value = require('nml/Value'); var pay = require('./payment.js'); var crypto= require('crypto'); function RunDB(option) { var dbh; function nocb(err, rows) {} function connect_mysql() { dbh = mysql.createConnection(option.mysql); dbh.connect(); pay.init(option.epp.clID+'@'+option.epp.host, dbh, option.pay); dbh.on('error', connect_mysql); } connect_mysql(); var epp = new Run(option.epp/*, function() { dbh.end(); process.exit(); }*/); setInterval(infoname, 24*3600*1000); function infoname() { function _info1(row) { epp.submit(cmd.domain('info', {name: row.name}), function(_req, _res) { var r = _res.epp.value.response; var code = r.result.attrs.code; if(code!=='1000') return; var rgp = e2u.rgpStatus(r); dbh.query("update delete_domain set rs_date=now(),rgp=? where id=?", [rgp, row.id], nocb); if(rgp==='pendingDelete') { dbh.query("delete from domain where name=?", [row.name], nocb); dbh.query("delete from host where name=? or name like ?", [row.name, '%.'+row.name], nocb); } }); } function _info3(row) { epp.submit(cmd.domain('info', {name: row.name}), function(_req, _res) { var r = _res.epp.value.response; var code = r.result.attrs.code; if(code!=='1000') return; var v = e2u.create( r.resData["domain:infData"] instanceof Value ? r.resData["domain:infData"].value : r.resData["domain:infData"] ); switch(e2u.rgpStatus(r)) { case 'autoRenewPeriod': pay.cando(row.user, 'autorenew', row.name, 1, function(price) { dbh.query("insert into autorenew_domain values (0,?,?,?,now(),?,null)", [row.name, row.user, price, v.exDate], function(err, result) { if(err) return; dbh.query("update domain set ex_date=? where name=?", [v.exDate, row.name], nocb); pay.done({ user: row.user, op: 'autorenew', domain: row.name, appID: '', registrant: JSON.parse(row.json).registrant, opDate: (new Date()).toISOString(), price: price, period: 1, exDate: v.exDate, oldID: '', uniID: 'autorenew-'+result.insertId }); }); }, nocb); } }); } dbh.query("select * from delete_domain where rgp in ('autoRenewPeriod','renewPeriod','transferPeriod','redemptionPeriod')", function(err, rows) { if(err || !rows.length) return; for(var i in rows) _info1(rows[i]); }); dbh.query("select * from domain where now()>ex_date", function(err, rows) { if(err || !rows.length) return; for(var i in rows) _info3(rows[i]); }); } function MD5(json) { var hash = crypto.createHash('md5'); hash.update(json.name || ''); hash.update(json.org || ''); hash.update(json.email || ''); return hash.digest('hex'); } function loadjson(obj, name, reID, cb) { var _name = name; if(reID) { switch(obj) { case 'domain': dbh.query("replace into domain values (0,?,'',?,now())", [name, reID], nocb); _name = new Value({hosts: "all"}, name); break; default: dbh.query("replace into ?? values (0,?,'',?)", [obj, name, reID], nocb); } } epp.submit(cmd[obj]('info', {name: _name}), function(_req, _res) { var r = _res.epp.value.response; var code = r.result.attrs.code; if(code!=='1000') return; var v = e2u.create( r.resData[obj+":infData"] instanceof Value ? r.resData[obj+":infData"].value : r.resData[obj+":infData"] ); var e = r.extension; if(e && e["secDNS:infData"]) { v.secDNS = e2u.create_secDNS( e["secDNS:infData"] instanceof Value ? e["secDNS:infData"].value : e["secDNS:infData"] ); } var json = JSON.stringify(v); switch(obj) { case 'domain': dbh.query("update domain set json=?,ex_date=? where name=?", [json, v.exDate, name], function(err, result) { cb && cb(json, v.exDate); }); for(var i in v.host) loadjson('host', v.host[i], reID); break; case 'contact': dbh.query("delete from payment.audits where contactId=? and uniId!=?", [ name, MD5({ name : v.int.name, org : v.int.org, email: v.email }) ], nocb); default: dbh.query("update ?? set json=? where name=?", [obj, json, name], nocb); } }); } this.deny = function(tlds, domain) { try { return tlds.indexOf(domain.split('.').pop())>=0; } catch(e) { return true; } }; this.payment = pay; this.format = function(s, a) { return dbh.format(s, a); }; this.query = function(s, a, cb) { dbh.query(s, a, cb || nocb); }; this.submit = function(req, cb, acc) { epp.submit(req, cb, acc); }; this.MD5 = MD5; this.loadjson= loadjson; } module.exports = RunDB;