This repository was archived by the owner on Feb 5, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnuve.js
More file actions
34 lines (34 loc) · 12.4 KB
/
nuve.js
File metadata and controls
34 lines (34 loc) · 12.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
*/
/*
MIT
*/
var Url=require("url"),spawn=require("child_process").spawn,fs=require("fs"),XMLHttpRequest=function(){var b=this,o=require("http"),p=require("https"),j,c,e={},n={"User-Agent":"node.js",Accept:"*/*"},h=!1,l=!1,m=n;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;this.open=function(a,b,f,c,g){e={method:a,url:b.toString(),async:"boolean"!==typeof f?
!0:f,user:c||null,password:g||null};this.abort();i(this.OPENED)};this.setRequestHeader=function(a,b){if(this.readyState!=this.OPENED)throw"INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN";if(h)throw"INVALID_STATE_ERR: send flag is true";m[a]=b};this.getResponseHeader=function(a){return this.readyState>this.OPENED&&c.headers[a]&&!l?c.headers[a]:null};this.getAllResponseHeaders=function(){if(this.readyState<this.HEADERS_RECEIVED||l)return"";var a="",b;for(b in c.headers)a+=
b+": "+c.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(h)throw"INVALID_STATE_ERR: send has already been called";var k=!1,f=Url.parse(e.url);switch(f.protocol){case "https:":k=!0;case "http:":var d=f.hostname;break;case void 0:case "":d="localhost";break;default:throw"Protocol not supported.";}var g=f.port||(k?443:80),f=f.pathname+(f.search?f.search:"");this.setRequestHeader("Host",
d);if(e.user){"undefined"==typeof e.password&&(e.password="");var n=new Buffer(e.user+":"+e.password);m.Authorization="Basic "+n.toString("base64")}"GET"==e.method||"HEAD"==e.method?a=null:a&&(this.setRequestHeader("Content-Length",Buffer.byteLength(a)),m["Content-Type"]||this.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));d={host:d,port:g,path:f,method:e.method,headers:m};l=!1;if(!e.hasOwnProperty("async")||e.async){k=k?p.request:o.request;h=!0;if("function"===typeof b.onreadystatechange)b.onreadystatechange();
j=k(d,function(a){c=a;c.setEncoding("utf8");i(b.HEADERS_RECEIVED);b.status=c.statusCode;c.on("data",function(a){if(a)b.responseText=b.responseText+a;h&&i(b.LOADING)});c.on("end",function(){if(h){i(b.DONE);h=false}});c.on("error",function(a){b.handleError(a)})}).on("error",function(a){b.handleError(a)});a&&j.write(a);j.end()}else{g=".node-xmlhttprequest-sync-"+process.pid;fs.writeFileSync(g,"","utf8");a="var http = require('http'), https = require('https'), fs = require('fs');var doRequest = http"+
(k?"s":"")+".request;var options = "+JSON.stringify(d)+";var responseText = '';var req = doRequest(options, function(response) {response.setEncoding('utf8');response.on('data', function(chunk) {responseText += chunk;});response.on('end', function() {fs.writeFileSync('"+g+"', 'NODE-XMLHTTPREQUEST-STATUS:' + response.statusCode + ',' + responseText, 'utf8');});response.on('error', function(error) {fs.writeFileSync('"+g+"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');});}).on('error', function(error) {fs.writeFileSync('"+
g+"', '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(g,"utf8")););syncProc.stdin.end();fs.unlinkSync(g);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"),i(b.DONE))}};this.handleError=function(a){this.status=503;this.statusText=a;this.responseText=a.stack;l=!0;i(this.DONE)};this.abort=function(){j&&(j.abort(),j=null);m=n;this.responseXML=this.responseText="";l=!0;if(this.readyState!==this.UNSENT&&(this.readyState!==this.OPENED||h)&&this.readyState!==this.DONE)h=!1,i(this.DONE);this.readyState=this.UNSENT};var d={};this.addEventListener=function(a,b){a in d||(d[a]=[]);d[a].push(b)};var i=function(a){b.readyState=a;if("function"===typeof b.onreadystatechange)b.onreadystatechange();
if("readystatechange"in d)for(var a=d.readystatechange.length,c=0;c<a;c++)d.readystatechange[c].call(b)}};
var CryptoJS=CryptoJS||function(e,h){var d={},a=d.lib={},c=a.Base=function(){function j(){}return{extend:function(b){j.prototype=this;var a=new j;b&&a.mixIn(b);a.$super=this;return a},create:function(){var j=this.extend();j.init.apply(j,arguments);return j},init:function(){},mixIn:function(j){for(var b in j)j.hasOwnProperty(b)&&(this[b]=j[b]);j.hasOwnProperty("toString")&&(this.toString=j.toString)},clone:function(){return this.$super.extend(this)}}}(),m=a.WordArray=c.extend({init:function(j,b){j=
this.words=j||[];this.sigBytes=b!=h?b:4*j.length},toString:function(j){return(j||g).stringify(this)},concat:function(j){var b=this.words,a=j.words,c=this.sigBytes,j=j.sigBytes;this.clamp();if(c%4)for(var f=0;f<j;f++)b[c+f>>>2]|=(a[f>>>2]>>>24-8*(f%4)&255)<<24-8*((c+f)%4);else if(65535<a.length)for(f=0;f<j;f+=4)b[c+f>>>2]=a[f>>>2];else b.push.apply(b,a);this.sigBytes+=j;return this},clamp:function(){var j=this.words,b=this.sigBytes;j[b>>>2]&=4294967295<<32-8*(b%4);j.length=e.ceil(b/4)},clone:function(){var j=
c.clone.call(this);j.words=this.words.slice(0);return j},random:function(j){for(var b=[],a=0;a<j;a+=4)b.push(4294967296*e.random()|0);return m.create(b,j)}}),l=d.enc={},g=l.Hex={stringify:function(b){for(var a=b.words,b=b.sigBytes,f=[],c=0;c<b;c++){var m=a[c>>>2]>>>24-8*(c%4)&255;f.push((m>>>4).toString(16));f.push((m&15).toString(16))}return f.join("")},parse:function(b){for(var a=b.length,f=[],c=0;c<a;c+=2)f[c>>>3]|=parseInt(b.substr(c,2),16)<<24-4*(c%8);return m.create(f,a/2)}},k=l.Latin1={stringify:function(b){for(var a=
b.words,b=b.sigBytes,f=[],c=0;c<b;c++)f.push(String.fromCharCode(a[c>>>2]>>>24-8*(c%4)&255));return f.join("")},parse:function(b){for(var a=b.length,c=[],f=0;f<a;f++)c[f>>>2]|=(b.charCodeAt(f)&255)<<24-8*(f%4);return m.create(c,a)}},b=l.Utf8={stringify:function(b){try{return decodeURIComponent(escape(k.stringify(b)))}catch(a){throw Error("Malformed UTF-8 data");}},parse:function(b){return k.parse(unescape(encodeURIComponent(b)))}},f=a.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=m.create();
this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=b.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(b){var a=this._data,f=a.words,c=a.sigBytes,g=this.blockSize,l=c/(4*g),l=b?e.ceil(l):e.max((l|0)-this._minBufferSize,0),b=l*g,c=e.min(4*b,c);if(b){for(var k=0;k<b;k+=g)this._doProcessBlock(f,k);k=f.splice(0,b);a.sigBytes-=c}return m.create(k,c)},clone:function(){var b=c.clone.call(this);b._data=this._data.clone();return b},_minBufferSize:0});a.Hasher=f.extend({init:function(){this.reset()},
reset:function(){f.reset.call(this);this._doReset()},update:function(b){this._append(b);this._process();return this},finalize:function(b){b&&this._append(b);this._doFinalize();return this._hash},clone:function(){var b=f.clone.call(this);b._hash=this._hash.clone();return b},blockSize:16,_createHelper:function(b){return function(a,c){return b.create(c).finalize(a)}},_createHmacHelper:function(b){return function(a,c){return p.HMAC.create(b,c).finalize(a)}}});var p=d.algo={};return d}(Math);
(function(){var e=CryptoJS,h=e.lib,d=h.WordArray,h=h.Hasher,a=[],c=e.algo.SHA1=h.extend({_doReset:function(){this._hash=d.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(c,l){for(var g=this._hash.words,k=g[0],b=g[1],f=g[2],e=g[3],j=g[4],d=0;80>d;d++){if(16>d)a[d]=c[l+d]|0;else{var h=a[d-3]^a[d-8]^a[d-14]^a[d-16];a[d]=h<<1|h>>>31}h=(k<<5|k>>>27)+j+a[d];h=20>d?h+((b&f|~b&e)+1518500249):40>d?h+((b^f^e)+1859775393):60>d?h+((b&f|b&e|f&e)-1894007588):h+((b^f^e)-
899497514);j=e;e=f;f=b<<30|b>>>2;b=k;k=h}g[0]=g[0]+k|0;g[1]=g[1]+b|0;g[2]=g[2]+f|0;g[3]=g[3]+e|0;g[4]=g[4]+j|0},_doFinalize:function(){var a=this._data,c=a.words,g=8*this._nDataBytes,d=8*a.sigBytes;c[d>>>5]|=128<<24-d%32;c[(d+64>>>9<<4)+15]=g;a.sigBytes=4*c.length;this._process()}});e.SHA1=h._createHelper(c);e.HmacSHA1=h._createHmacHelper(c)})();
(function(){var e=CryptoJS,h=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(d,a){d=this._hasher=d.create();"string"==typeof a&&(a=h.parse(a));var c=d.blockSize,m=4*c;a.sigBytes>m&&(a=d.finalize(a));for(var l=this._oKey=a.clone(),g=this._iKey=a.clone(),e=l.words,b=g.words,f=0;f<c;f++)e[f]^=1549556828,b[f]^=909522486;l.sigBytes=g.sigBytes=m;this.reset()},reset:function(){var d=this._hasher;d.reset();d.update(this._iKey)},update:function(d){this._hasher.update(d);return this},finalize:function(d){var a=
this._hasher,d=a.finalize(d);a.reset();return a.finalize(this._oKey.clone().concat(d))}})})();var N=N||{};N.authors=["aalonsog@dit.upm.es","prodriguez@dit.upm.es","jcervino@dit.upm.es"];N.version=0.1;N=N||{};
N.Base64=function(){var e,h,d,a,c,m,l,g,k;e="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/".split(",");h=[];for(c=0;c<e.length;c+=1)h[e[c]]=c;m=function(b){d=b;a=0};l=function(){var b;if(!d||a>=d.length)return-1;b=d.charCodeAt(a)&255;a+=1;return b};g=function(){if(!d)return-1;for(;;){if(a>=d.length)return-1;var b=d.charAt(a);a+=1;if(h[b])return h[b];if("A"===b)return 0}};k=function(b){b=b.toString(16);1===b.length&&(b=
"0"+b);return unescape("%"+b)};return{encodeBase64:function(b){var a,c,d;m(b);b="";a=Array(3);c=0;for(d=!1;!d&&-1!==(a[0]=l());)if(a[1]=l(),a[2]=l(),b+=e[a[0]>>2],-1!==a[1]?(b+=e[a[0]<<4&48|a[1]>>4],-1!==a[2]?(b+=e[a[1]<<2&60|a[2]>>6],b+=e[a[2]&63]):(b+=e[a[1]<<2&60],b+="=",d=!0)):(b+=e[a[0]<<4&48],b+="=",b+="=",d=!0),c+=4,76<=c)b+="\n",c=0;return b},decodeBase64:function(b){var a,c;m(b);b="";a=Array(4);for(c=!1;!c&&-1!==(a[0]=g())&&-1!==(a[1]=g());)a[2]=g(),a[3]=g(),b+=k(a[0]<<2&255|a[1]>>4),-1!==
a[2]?(b+=k(a[1]<<4&255|a[2]>>2),-1!==a[3]?b+=k(a[2]<<6&255|a[3]):c=!0):c=!0;return b}}}(N);N=N||{};
N.API=function(e){var h,d;h=function(a,c,m,l,g,h,b,f){var p,j,r,q,o,n;void 0===h?(p=e.API.params.service,j=e.API.params.key,g=e.API.params.url+g):(p=h.service,j=h.key,g=h.url+g);""===p||""===j?console.log("ServiceID and Key are required!!"):(h=(new Date).getTime(),r=Math.floor(99999*Math.random()),q=h+","+r,o="MAuth realm=http://marte3.dit.upm.es,mauth_signature_method=HMAC_SHA1",b&&f&&(b=formatString(b),o=o+",mauth_username="+b+",mauth_role="+f,q+=","+b+","+f),b=d(q,j),o=o+",mauth_serviceid="+p+
",mauth_cnonce="+r+",mauth_timestamp="+h+",mauth_signature="+b,n=new XMLHttpRequest,n.onreadystatechange=function(){if(n.readyState===4)switch(n.status){case 100:case 200:case 201:case 202:case 203:case 204:case 205:a(n.responseText);break;case 400:c!==void 0&&c("400 Bad Request");break;case 401:c!==void 0&&c("401 Unauthorized");break;case 403:c!==void 0&&c("403 Forbidden");break;default:c!==void 0&&c(n.status+" Error"+n.responseText)}},n.open(m,g,!0),n.setRequestHeader("Authorization",o),void 0!==
l)?(n.setRequestHeader("Content-Type","application/json"),n.send(JSON.stringify(l))):n.send()};d=function(a,c){var d;d=CryptoJS.HmacSHA1(a,c).toString(CryptoJS.enc.Hex);return e.Base64.encodeBase64(d)};formatString=function(a){a=a.toLowerCase();non_asciis={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]"};
for(i in non_asciis)a=a.replace(RegExp(non_asciis[i],"g"),i);return a};return{params:{service:void 0,key:void 0,url:void 0},init:function(a,c,d){e.API.params.service=a;e.API.params.key=c;e.API.params.url=d},createRoom:function(a,c,d,e,g){e||(e={});h(function(a){a=JSON.parse(a);c(a)},d,"POST",{name:a,options:e},"rooms",g)},getRooms:function(a,c,d){h(a,c,"GET",void 0,"rooms",d)},getRoom:function(a,c,d,e){h(c,d,"GET",void 0,"rooms/"+a,e)},deleteRoom:function(a,c,d,e){h(c,d,"DELETE",void 0,"rooms/"+a,
e)},createToken:function(a,c,d,e,g,k){h(e,g,"POST",void 0,"rooms/"+a+"/tokens",k,c,d)},createService:function(a,c,d,e,g){h(d,e,"POST",{name:a,key:c},"services/",g)},getServices:function(a,c,d){h(a,c,"GET",void 0,"services/",d)},getService:function(a,c,d,e){h(c,d,"GET",void 0,"services/"+a,e)},deleteService:function(a,c,d,e){h(c,d,"DELETE",void 0,"services/"+a,e)},getUsers:function(a,c,d,e){h(c,d,"GET",void 0,"rooms/"+a+"/users/",e)},getUser:function(a,c,d,e,g){h(d,e,"GET",void 0,"rooms/"+a+"/users/"+
c,g)},deleteUser:function(a,c,d,e,g){h(d,e,"DELETE",void 0,"rooms/"+a+"/users/"+c,g)}}}(N);
module.exports = N;