-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnuve.js
22 lines (22 loc) · 7.01 KB
/
nuve.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
*/
/*
MIT
*/
var Url=require("url"),spawn=require("child_process").spawn,fs=require("fs"),XMLHttpRequest=function(){var b=this,r=require("http"),t=require("https"),c={},m,d,e={},q={"User-Agent":"node.js",Accept:"*/*"},k=!1,n=!1,p=q;this.UNSENT=0;this.OPENED=1;this.HEADERS_RECEIVED=2;this.LOADING=3;this.DONE=4;this.readyState=this.UNSENT;this.onreadystatechange=null;this.responseXML=this.responseText="";this.statusText=this.status=null;var l=function(a){b.readyState=a;if("function"===typeof b.onreadystatechange)b.onreadystatechange();
if("readystatechange"in c){a=c.readystatechange.length;for(var g=0;g<a;g++)c.readystatechange[g].call(b)}};this.open=function(a,b,f,d,h){e={method:a,url:b.toString(),async:"boolean"!==typeof f?!0:f,user:d||null,password:h||null};this.abort();l(this.OPENED)};this.setRequestHeader=function(a,b){if(this.readyState!==this.OPENED)throw"NVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN";if(k)throw"INVALID_STATE_ERR: send flag is true";p[a]=b};this.getResponseHeader=function(a){return this.readyState>
this.OPENED&&d.headers[a]&&!n?d.headers[a]:null};this.getAllResponseHeaders=function(){if(this.readyState<this.HEADERS_RECEIVED||n)return"";var a="",b;for(b in d.headers)a+=b+": "+d.headers[b]+"\r\n";return a.substr(0,a.length-2)};this.send=function(a){if(this.readyState!==this.OPENED)throw"INVALID_STATE_ERR: connection must be opened before send() is called";if(k)throw"INVALID_STATE_ERR: send has already been called";var g=!1,f=Url.parse(e.url);switch(f.protocol){case "https:":g=!0;case "http:":var c=
f.hostname;break;case void 0:case "":c="localhost";break;default:throw"Protocol not supported.";}var h=f.port||(g?443:80);f=f.pathname+(f.search?f.search:"");this.setRequestHeader("Host",c);if(e.user){"undefined"===typeof e.password&&(e.password="");var q=new Buffer(e.user+":"+e.password);p.Authorization="Basic "+q.toString("base64")}"GET"===e.method||"HEAD"===e.method?a=null:a&&(this.setRequestHeader("Content-Length",Buffer.byteLength(a)),p["Content-Type"]||this.setRequestHeader("Content-Type","text/plain;charset\x3dUTF-8"));
c={host:c,port:h,path:f,method:e.method,headers:p};n=!1;if(!e.hasOwnProperty("async")||e.async){g=g?t.request:r.request;k=!0;if("function"===typeof b.onreadystatechange)b.onreadystatechange();m=g(c,function(a){d=a;d.setEncoding("utf8");l(b.HEADERS_RECEIVED);b.status=d.statusCode;d.on("data",function(a){a&&(b.responseText+=a);k&&l(b.LOADING)});d.on("end",function(){k&&(l(b.DONE),k=!1)});d.on("error",function(a){b.handleError(a)})}).on("error",function(a){b.handleError(a)});a&&m.write(a);m.end()}else{h=
".node-xmlhttprequest-sync-"+process.pid;fs.writeFileSync(h,"","utf8");a="var http \x3d require('http'), https \x3d require('https'), fs \x3d require('fs');var doRequest \x3d http"+(g?"s":"")+".request;var options \x3d "+JSON.stringify(c)+";var responseText \x3d '';var req \x3d doRequest(options, function(response) {response.setEncoding('utf8');response.on('data', function(chunk) {responseText +\x3d chunk;});response.on('end', function() {fs.writeFileSync('"+h+"', 'NODE-XMLHTTPREQUEST-STATUS:' + response.statusCode + ',' + responseText, 'utf8');});response.on('error', function(error) {fs.writeFileSync('"+
h+"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');});}).on('error', function(error) {fs.writeFileSync('"+h+"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');});"+(a?"req.write('"+a.replace(/'/g,"\\'")+"');":"")+"req.end();";for(syncProc=spawn(process.argv[0],["-e",a]);""==(b.responseText=fs.readFileSync(h,"utf8")););syncProc.stdin.end();fs.unlinkSync(h);b.responseText.match(/^NODE-XMLHTTPREQUEST-ERROR:/)?(a=b.responseText.replace(/^NODE-XMLHTTPREQUEST-ERROR:/,""),
b.handleError(a)):(b.status=b.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:([0-9]*),.*/,"$1"),b.responseText=b.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:[0-9]*,(.*)/,"$1"),l(b.DONE))}};this.handleError=function(a){this.status=503;this.statusText=a;this.responseText=a.stack;n=!0;l(this.DONE)};this.abort=function(){m&&(m.abort(),m=null);p=q;this.responseXML=this.responseText="";n=!0;this.readyState===this.UNSENT||this.readyState===this.OPENED&&!k||this.readyState===this.DONE||(k=!1,l(this.DONE));
this.readyState=this.UNSENT};this.addEventListener=function(a,b){a in c||(c[a]=[]);c[a].push(b)}};
var N=N||{};N.authors=["aalonsog@dit.upm.es","prodriguez@dit.upm.es","jcervino@dit.upm.es"];N.version=.1;var crypto=require("crypto");N=N||{};
N.API=function(l){var e=function(a,b,c,d,f,g,e,m){if(void 0===g){var n=l.API.params.service;var p=l.API.params.key;f=l.API.params.url+f}else n=g.service,p=g.key,f=g.url+f;if(""===n||""===p)console.log("ServiceID and Key are required!!");else{g=(new Date).getTime();var q=Math.floor(99999*Math.random());var r=g+","+q;var k="MAuth realm\x3dhttp://marte3.dit.upm.es,mauth_signature_method\x3dHMAC_SHA1";e&&m&&(e=t(e),k=k+",mauth_username\x3d"+e+",mauth_role\x3d"+m,r+=","+e+","+m);e=u(r,p);k+=",mauth_serviceid\x3d";
k+=n;k+=",mauth_cnonce\x3d";k+=q;k+=",mauth_timestamp\x3d";k+=g;k+=",mauth_signature\x3d";k+=e;var h=new XMLHttpRequest;h.onreadystatechange=function(){if(4===h.readyState)switch(h.status){case 100:case 200:case 201:case 202:case 203:case 204:case 205:a(h.responseText);break;default:void 0!==b&&b(h.status+" Error"+h.responseText,h.status)}};h.open(c,f,!0);h.setRequestHeader("Authorization",k);void 0!==d?(h.setRequestHeader("Content-Type","application/json"),h.send(JSON.stringify(d))):h.send()}};var u=
function(a,b){a=crypto.createHmac("sha1",b).update(a).digest("hex");return Buffer.from(a).toString("base64")};var t=function(a){a=a.toLowerCase();var b={a:"[\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5]",ae:"\u00e6",c:"\u00e7",e:"[\u00e8\u00e9\u00ea\u00eb]",i:"[\u00ec\u00ed\u00ee\u00ef]",n:"\u00f1",o:"[\u00f2\u00f3\u00f4\u00f5\u00f6]",oe:"\u0153",u:"[\u00f9\u00fa\u00fb\u0171\u00fc]",y:"[\u00fd\u00ff]"},c;for(c in b)a=a.replace(new RegExp(b[c],"g"),c);return a};return{params:{service:void 0,key:void 0,url:void 0},
init:function(a,b,c){l.API.params.service=a;l.API.params.key=b;l.API.params.url=c},createRoom:function(a,b,c,d,f){d||(d={});e(function(a){a=JSON.parse(a);b(a)},c,"POST",{name:a,options:d},"rooms",f)},getRooms:function(a,b,c){e(a,b,"GET",void 0,"rooms",c)},getRoom:function(a,b,c,d){e(b,c,"GET",void 0,"rooms/"+a,d)},updateRoom:function(a,b,c,d,f,g){e(c,d,"PUT",{name:b,options:f},"rooms/"+a,g)},patchRoom:function(a,b,c,d,f,g){e(c,d,"PATCH",{name:b,options:f},"rooms/"+a,g)},deleteRoom:function(a,b,c,
d){e(b,c,"DELETE",void 0,"rooms/"+a,d)},createToken:function(a,b,c,d,f,g){e(d,f,"POST",void 0,"rooms/"+a+"/tokens",g,b,c)},createService:function(a,b,c,d,f){e(c,d,"POST",{name:a,key:b},"services/",f)},getServices:function(a,b,c){e(a,b,"GET",void 0,"services/",c)},getService:function(a,b,c,d){e(b,c,"GET",void 0,"services/"+a,d)},deleteService:function(a,b,c,d){e(b,c,"DELETE",void 0,"services/"+a,d)},getUsers:function(a,b,c,d){e(b,c,"GET",void 0,"rooms/"+a+"/users/",d)},getUser:function(a,b,c,d,f){e(c,
d,"GET",void 0,"rooms/"+a+"/users/"+b,f)},deleteUser:function(a,b,c,d,f){e(c,d,"DELETE",void 0,"rooms/"+a+"/users/"+b,f)}}}(N);
module.exports = N;