runtimejs / runtime

[not maintained] Lightweight JavaScript library operating system for the cloud
http://runtimejs.org
Apache License 2.0
1.93k stars 128 forks source link

Bind9 #123

Open RossComputerGuy opened 8 years ago

RossComputerGuy commented 8 years ago

Hey, I have been working on BasicOS. I thought to add in Bind9. Here is my code:

var runtime = require("runtimejs");
var SDK = require("/SDK/");

var Domains = require("/Config/Bind.json").Domains;

var RECORDS = {
 A: 0x0001,
 MX: 0x000f,
 NS: 0x0002,
 CNAME: 0x0005
};

function getRecord(zone) {
 switch(zone.type) {
  case RECORDS.A:
   return RECORDS.A;
  case RECORDS.MX:
   return RECORDS.MX;
  case RECORDS.NS:
   return RECORDS.NS;
  case RECORDS.CNAME:
   return RECORDS.CNAME;
 }
}

function getRDATA(data) {
 var rdata = "";
 switch(getRecord(data.zone)) {
  case RECORDS.A:
   rdata = data.zone.target;
   break;
  case RECORDS.CNAME:
   rdata = data.zone.name;
   break;
  case RECORDS.NS:
   rdata = data.zone.name;
   break;
  case RECORDS.MX:
   rdata = {
    "PREFERENCE": data.zone.priority
    "EXCHANGE": data.domain.name
   };
   break;
 }
 return rdata;
}

function Answer(data) {
 var h;
 h = {
  "NAME": data.name,
  "TYPE": getRecord(data.zone),
  "CLASS": 0x0001,
  "TTL": data.zone.ttl,
  "RDLENGTH": getRDATA(data).length,
  "RDATA": getRDATA(data)
 };
 return h;
}

function Question(headers) {
 var h;

 for(var i = 0;i < Domains.length;i++) {
  if(headers.get("QNAME") == Domains[i].name) {
   var Domain = Domains[i];
   for(var i = 0;i < Domain.Zones[i];i++) {
    if(headers.get("QTYPE") == Domain.Zones[i].type) {
     var zone = Domain.Zones[i];
     if(headers.get("QCLASS") == 0x0001) {
      h = Answer({
       domain: Domain,
       zone: zone
      });
     }
     break;
    }
   }
   break;
  }
 }

 return h;
}

var server = new SDK.Server(90);
server.onRequest(function(request) {
 console.log(request);
 var options = {};
 var headers = request._headers;
 var names = headers._names;
 var values = headers._values;
 var HEADERS = new Map();
 for(var i = 0;i < names.length;i++) {
  HEADERS.add(names[i],values[i]);
 }

 server.createResponse(200,{
 },Question(HEADERS));
});
server.open();

If it doesn't work, touch it up and send the new code to me. NOTE: You have to download my os and make a service. Links: