authing-js-api
Version:
jsapi for authing
1 lines • 34 kB
JavaScript
(function(root,factory){"use strict";if(typeof define==="function"&&define.amd){define("authing",factory)}else if(typeof exports==="object"){exports=module.exports=factory()}else{root.authing=factory()}})(this,function(){"use strict";var VERSION="0.0.13";var _window={};var WXAPPID=null;if(typeof window==="object"){_window=window;try{if(window&&window.authing&&window.authing.testuas()){return window.authing}}catch(e){}}var iswx=false;var isNode=!!(typeof process!=="undefined"&&process.version);try{if(wx.request)iswx=true;if(wx.authing&&wx.authing.testuas()){return wx.authing}}catch(e){}function wxreq_(url,method,data,callback){var param={};param.url=url;param.method=method;param.dataType="json";param.data=data;if(method==="POST"){param.header={"content-type":"application/json"}}param.success=function(res){callback(res.data)};param.fail=function(res){callback({code:-1,data:res})};wx.request(param)}function wxreq(){var url=null;var method="GET";var postData=null;return{get:function(u){url=u;return this},post:function(u,data){url=u;method="POST";postData=data;return this},then:function(callback){wxreq_(url,method,postData,callback)}}}var xhqState={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4};function ajax(options){var methods=["get","post","put","delete"];options=options||{};options.baseUrl=options.baseUrl||"";if(options.method&&options.url){return xhrConnection(options.method,options.baseUrl+options.url,maybeData(options.data),options)}return methods.reduce(function(acc,method){acc[method]=function(url,data){return xhrConnection(method,options.baseUrl+url,maybeData(data),options)};return acc},{})}function maybeData(data){return data||null}function xhrConnection(type,url,data,options){var returnMethods=["then","catch","always"];var promiseMethods=returnMethods.reduce(function(promise,method){promise[method]=function(callback){promise[method]=callback;return promise};return promise},{});var xhr=new XMLHttpRequest;var featuredUrl=getUrlWithData(url,data,type);xhr.open(type,featuredUrl,true);xhr.withCredentials=options.hasOwnProperty("withCredentials");setHeaders(xhr,options.headers,data);xhr.addEventListener("readystatechange",ready(promiseMethods,xhr),false);xhr.send(isObject(data)?JSON.stringify(data):data);promiseMethods.abort=function(){return xhr.abort()};return promiseMethods}function getUrlWithData(url,data,type){if(type.toLowerCase()!=="get"||!data){return url}var dataAsQueryString=objectToQueryString(data);var queryStringSeparator=url.indexOf("?")>-1?"&":"?";return url+queryStringSeparator+dataAsQueryString}function setHeaders(xhr,headers,data){headers=headers||{};if(!hasContentType(headers)){headers["Content-Type"]=isObject(data)?"application/json":"application/x-www-form-urlencoded"}Object.keys(headers).forEach(function(name){headers[name]&&xhr.setRequestHeader(name,headers[name])})}function hasContentType(headers){return Object.keys(headers).some(function(name){return name.toLowerCase()==="content-type"})}function ready(promiseMethods,xhr){return function handleReady(){if(xhr.readyState===xhqState.DONE){xhr.removeEventListener("readystatechange",handleReady,false);promiseMethods.always.apply(promiseMethods,parseResponse(xhr));if(xhr.status>=200&&xhr.status<300){promiseMethods.then.apply(promiseMethods,parseResponse(xhr))}else{promiseMethods.catch.apply(promiseMethods,parseResponse(xhr))}}}}function parseResponse(xhr){var result;try{result=JSON.parse(xhr.responseText)}catch(e){result=xhr.responseText}return[result,xhr]}function objectToQueryString(data){return isObject(data)?getQueryString(data):data}function isObject(data){return Object.prototype.toString.call(data)==="[object Object]"}function getQueryString(obj,prefix){return Object.keys(obj).map(function(key){if(obj.hasOwnProperty(key)&&undefined!==obj[key]){var val=obj[key];key=prefix?prefix+"["+key+"]":key;return val!==null&&typeof val==="object"?getQueryString(val,key):encode(key)+"="+encode(val)}}).filter(Boolean).join("&")}function encode(value){return encodeURIComponent(value)}function jsonp_(url,callback){var script=document.createElement("script");var cb="uas_cb_"+guid();if(url.indexOf("?")>-1){url+="&jsonp="+cb}else{url+="?jsonp="+cb}var timer=setInterval(function(){clearInterval(timer);callback({msg:"jp:timeout",code:-3})},6e3);window[cb]=function(data){clearInterval(timer);callback(data);try{window[cb]=null;script.parentNode.removeChild(script)}catch(e){}};script.src=url;document.body.insertBefore(script,document.body.firstChild)}function jsonp(){var url=null;return{get:function(u){url=u;return this},then:function(callback){jsonp_(url,callback)}}}var hexarra="0123456789abcdef";function writeShort(v){var b=[];b.push(v>>>8&255);b.push(v>>>0&255);return b}function writeInt(v){var b=[];b.push(v>>>24&255);b.push(v>>>16&255);b.push(v>>>8&255);b.push(v>>>0&255);return b}function len(i){if(i<15){return hexarra.charAt(i)}var b=writeShort(i);var hex=[];hex.push("e");hex.push(hexarra.charAt(b[0]>>>4));hex.push(hexarra.charAt(b[0]&15));hex.push(hexarra.charAt(b[1]>>>4));hex.push(hexarra.charAt(b[1]&15));return hex.join("")}function token(ar){var th=[];var tb=[];th.push(hexarra.charAt(ar.length));for(var i=0;i<ar.length;i++){th.push(len(ar[i].length));tb.push(ar[i])}th.push(tb.join(""));return th.join("")}function facB64(map){var base64={};base64.map=map||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";base64.decode=function(s){return byteToString(base64.decodeBytes(s))};base64.decodeBytes=function(s){s+="";var len=s.length;var padchar=base64.map.charAt(64);if(len===0){return s}if(len%4!==0){if(len%4==3){s+=padchar}else if(len%4==2){s+=padchar+padchar}else{return""}}len=s.length;var pads=0;if(s.charAt(len-1)===padchar){pads++;if(s.charAt(len-2)===padchar){pads++}len-=4}var i,b,map=base64.map,x=[];var bs=new Array;for(i=0;i<len;i+=4){b=map.indexOf(s.charAt(i))<<18|map.indexOf(s.charAt(i+1))<<12|map.indexOf(s.charAt(i+2))<<6|map.indexOf(s.charAt(i+3));bs.push(b>>16);bs.push(b>>8&255);bs.push(b&255)}switch(pads){case 1:b=map.indexOf(s.charAt(i))<<18|map.indexOf(s.charAt(i+1))<<12|map.indexOf(s.charAt(i+2))<<6;bs.push(b>>16);bs.push(b>>8&255);break;case 2:b=map.indexOf(s.charAt(i))<<18|map.indexOf(s.charAt(i+1))<<12;bs.push(b>>16);break}return bs};base64.encode=function(s){if(!s){return}if(s.length===0){return s}var i,b,x=[],map=base64.map;var padchar=map.charAt(64);var bs=null;if(typeof s=="string"){bs=stringToByte(s)}else{bs=s}var len=bs.length-bs.length%3;for(i=0;i<len;i+=3){b=bs[i]<<16|(bs[i+1]<<8|bs[i+2]);x.push(map.charAt(b>>18));x.push(map.charAt(b>>12&63));x.push(map.charAt(b>>6&63));x.push(map.charAt(b&63))}switch(bs.length-len){case 1:b=bs[i]<<16;x.push(map.charAt(b>>18)+map.charAt(b>>12&63));break;case 2:b=bs[i]<<16|bs[i+1]<<8;x.push(map.charAt(b>>18)+map.charAt(b>>12&63)+map.charAt(b>>6&63));break}return x.join("")};return base64}var b64=facB64();var url64=facB64("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=");function genJWT(head,payload,key){if(!head){head={}}head.alg="HS256";head.typ="JWT";var h=url64.encode(JSON.stringify(head));var p=url64.encode(JSON.stringify(payload));var sign=hmac_sha256_b64(key,[h,p].join("."));return[h,p,sign].join(".")}function parseJWT(jwt,key){var parts=jwt.split(".");var h=JSON.parse(url64.decode(parts[0]));var p=JSON.parse(url64.decode(parts[1]));var s1=parts[2];var vaild=false;var s2=null;if(key){var s2=hmac_sha256_b64(key,[parts[0],parts[1]].join("."));vaild=s1===s2}return{head:h,payload:p,sign:s1,vaild:vaild}}function Sha256(){function rotateRight(n,x){return x>>>n|x<<32-n}function choice(x,y,z){return x&y^~x&z}function majority(x,y,z){return x&y^x&z^y&z}function sha256_Sigma0(x){return rotateRight(2,x)^rotateRight(13,x)^rotateRight(22,x)}function sha256_Sigma1(x){return rotateRight(6,x)^rotateRight(11,x)^rotateRight(25,x)}function sha256_sigma0(x){return rotateRight(7,x)^rotateRight(18,x)^x>>>3}function sha256_sigma1(x){return rotateRight(17,x)^rotateRight(19,x)^x>>>10}function sha256_expand(W,j){return W[j&15]+=sha256_sigma1(W[j+14&15])+W[j+9&15]+sha256_sigma0(W[j+1&15])}var K256=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298);var ihash,count,buffer;var sha256_hex_digits="0123456789abcdef";function safe_add(x,y){var lsw=(x&65535)+(y&65535);var msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}function sha256_init(){ihash=new Array(8);count=new Array(2);buffer=new Array(64);count[0]=count[1]=0;ihash[0]=1779033703;ihash[1]=3144134277;ihash[2]=1013904242;ihash[3]=2773480762;ihash[4]=1359893119;ihash[5]=2600822924;ihash[6]=528734635;ihash[7]=1541459225}function sha256_transform(){var a,b,c,d,e,f,g,h,T1,T2;var W=new Array(16);a=ihash[0];b=ihash[1];c=ihash[2];d=ihash[3];e=ihash[4];f=ihash[5];g=ihash[6];h=ihash[7];for(var i=0;i<16;i++)W[i]=buffer[(i<<2)+3]|buffer[(i<<2)+2]<<8|buffer[(i<<2)+1]<<16|buffer[i<<2]<<24;for(var j=0;j<64;j++){T1=h+sha256_Sigma1(e)+choice(e,f,g)+K256[j];if(j<16)T1+=W[j];else T1+=sha256_expand(W,j);T2=sha256_Sigma0(a)+majority(a,b,c);h=g;g=f;f=e;e=safe_add(d,T1);d=c;c=b;b=a;a=safe_add(T1,T2)}ihash[0]+=a;ihash[1]+=b;ihash[2]+=c;ihash[3]+=d;ihash[4]+=e;ihash[5]+=f;ihash[6]+=g;ihash[7]+=h}function sha256_update(data,inputLen){var i,index,curpos=0;index=count[0]>>3&63;var remainder=inputLen&63;if((count[0]+=inputLen<<3)<inputLen<<3)count[1]++;count[1]+=inputLen>>29;for(i=0;i+63<inputLen;i+=64){for(var j=index;j<64;j++)buffer[j]=data.charCodeAt(curpos++);sha256_transform();index=0}for(var j=0;j<remainder;j++)buffer[j]=data.charCodeAt(curpos++)}function updateBytes(data,inputLen){var i,index,curpos=0;index=count[0]>>3&63;var remainder=inputLen&63;if((count[0]+=inputLen<<3)<inputLen<<3)count[1]++;count[1]+=inputLen>>29;for(i=0;i+63<inputLen;i+=64){for(var j=index;j<64;j++)buffer[j]=data[curpos++];sha256_transform();index=0}for(var j=0;j<remainder;j++)buffer[j]=data[curpos++]}function sha256_final(){var index=count[0]>>3&63;buffer[index++]=128;if(index<=56){for(var i=index;i<56;i++)buffer[i]=0}else{for(var i=index;i<64;i++)buffer[i]=0;sha256_transform();for(var i=0;i<56;i++)buffer[i]=0}buffer[56]=count[1]>>>24&255;buffer[57]=count[1]>>>16&255;buffer[58]=count[1]>>>8&255;buffer[59]=count[1]&255;buffer[60]=count[0]>>>24&255;buffer[61]=count[0]>>>16&255;buffer[62]=count[0]>>>8&255;buffer[63]=count[0]&255;sha256_transform()}function sha256_encode_bytes(){var j=0;var output=new Array(32);for(var i=0;i<8;i++){output[j++]=ihash[i]>>>24&255;output[j++]=ihash[i]>>>16&255;output[j++]=ihash[i]>>>8&255;output[j++]=ihash[i]&255}return output}function sha256_encode_hex(){var output=new String;for(var i=0;i<8;i++){for(var j=28;j>=0;j-=4)output+=sha256_hex_digits.charAt(ihash[i]>>>j&15)}return output}var inited=false;function write(data){if(!isArray(data))return;if(!inited){sha256_init();inited=true}updateBytes(data,data.length)}return{digest:function(data){sha256_init();sha256_update(data,data.length);sha256_final();return sha256_encode_hex()},write:write,sum:function(data){if(data!=null&&data.length>0){write(data)}sha256_final();return sha256_encode_bytes()},blockSize:function(){return 64},size:function(){return 32}}}var $1=function(data){return Sha256().digest(data)};function hmac(key,hash){var hf=hash;var inner=hash();var outer=hash();var blocksize=inner.blockSize();var size=inner.size();var ipad=new Array;var opad=new Array;if(key.length>blocksize){outer.write(key);key=outer.sum()}for(var i=0;i<blocksize;i++){ipad[i]=0;opad[i]=0}for(var i=0;i<key.length;i++){ipad[i]=key[i];opad[i]=key[i]}for(var i=0;i<ipad.length;i++){ipad[i]^=54;opad[i]^=92}inner.write(ipad);var h={};h.write=function(b){inner.write(b)};h.sum=function(b){var in1=inner.sum(b);outer=hf();outer.write(opad);outer.write(in1);return outer.sum()};return h}function hmac_sha256(key,data){var mac=hmac(stringToByte(key),Sha256);return bytesToHex(mac.sum(stringToByte(data)))}function hmac_sha256_b64(key,data){var mac=hmac(stringToByte(key),Sha256);return url64.encode(mac.sum(stringToByte(data)))}function https(){return iswx?wxreq():ajax()}function ypromise(){this.msg=null;this.value=null;this.func=null;this.ch=null;this.finish=false;this.fired=false;this.fire=function(val){this.finish=true;if(this.func!=null&&typeof this.func==="function"){this.value=val;this.func(val)}else{this.value=val}};this.error=function(err){this.finish=true;if(this.ch!=null&&typeof this.ch==="function"){this.msg=err;this.ch(err)}else{this.msg=err}};this.then=function(f){this.func=f;this.tryFire();return this};this.Catch=function(f){this.ch=f;this.tryFire();return this};this.tryFire=function(){if(this.fired)return;if(this.finish){this.fired=true;if(this.msg!=null){this.error(this.msg)}else{this.fire(this.value)}}}}ypromise.prototype.catch=function(f){this.Catch(f);return this};function uc(uc_key){var UC_Sbox_Inv=null;var UC_ShiftRowTab_Inv=null;var UC_xtime=null;var UC_ShiftRowTab=new Array(0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11);function UC_Init(){UC_Sbox_Inv=new Array(256);for(var i=0;i<256;i++)UC_Sbox_Inv[UC_Sbox[i]]=i;UC_ShiftRowTab_Inv=new Array(16);for(var i=0;i<16;i++)UC_ShiftRowTab_Inv[UC_ShiftRowTab[i]]=i;UC_xtime=new Array(256);for(var i=0;i<128;i++){UC_xtime[i]=i<<1;UC_xtime[128+i]=i<<1^27}}function UC_Done(){}function UC_ExpandKey(key){var kl=key.length,ks,Rcon=1;switch(kl){case 16:ks=16*(10+1);break;case 24:ks=16*(12+1);break;case 32:ks=16*(14+1);break;default:alert("UC_ExpandKey: Only key lengths of 16, 24 or 32 bytes allowed!")}for(var i=kl;i<ks;i+=4){var temp=key.slice(i-4,i);if(i%kl==0){temp=new Array(UC_Sbox[temp[1]]^Rcon,UC_Sbox[temp[2]],UC_Sbox[temp[3]],UC_Sbox[temp[0]]);if((Rcon<<=1)>=256)Rcon^=283}else if(kl>24&&i%kl==16)temp=new Array(UC_Sbox[temp[0]],UC_Sbox[temp[1]],UC_Sbox[temp[2]],UC_Sbox[temp[3]]);for(var j=0;j<4;j++)key[i+j]=key[i+j-kl]^temp[j]}}function UC_Encrypt(block,key){var l=key.length;UC_AddRoundKey(block,key.slice(0,16));for(var i=16;i<l-16;i+=16){UC_SubBytes(block,UC_Sbox);UC_ShiftRows(block,UC_ShiftRowTab);UC_MixColumns(block);UC_AddRoundKey(block,key.slice(i,i+16))}UC_SubBytes(block,UC_Sbox);UC_ShiftRows(block,UC_ShiftRowTab);UC_AddRoundKey(block,key.slice(i,l))}function UC_Decrypt(block,key){var l=key.length;UC_AddRoundKey(block,key.slice(l-16,l));UC_ShiftRows(block,UC_ShiftRowTab_Inv);UC_SubBytes(block,UC_Sbox_Inv);for(var i=l-32;i>=16;i-=16){UC_AddRoundKey(block,key.slice(i,i+16));UC_MixColumns_Inv(block);UC_ShiftRows(block,UC_ShiftRowTab_Inv);UC_SubBytes(block,UC_Sbox_Inv)}UC_AddRoundKey(block,key.slice(0,16))}var UC_Sbox=new Array(99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22);function UC_SubBytes(state,sbox){for(var i=0;i<16;i++)state[i]=sbox[state[i]]}function UC_AddRoundKey(state,rkey){for(var i=0;i<16;i++)state[i]^=rkey[i]}function UC_ShiftRows(state,shifttab){var h=(new Array).concat(state);for(var i=0;i<16;i++)state[i]=h[shifttab[i]]}function UC_MixColumns(state){for(var i=0;i<16;i+=4){var s0=state[i+0],s1=state[i+1];var s2=state[i+2],s3=state[i+3];var h=s0^s1^s2^s3;state[i+0]^=h^UC_xtime[s0^s1];state[i+1]^=h^UC_xtime[s1^s2];state[i+2]^=h^UC_xtime[s2^s3];state[i+3]^=h^UC_xtime[s3^s0]}}function UC_MixColumns_Inv(state){for(var i=0;i<16;i+=4){var s0=state[i+0],s1=state[i+1];var s2=state[i+2],s3=state[i+3];var h=s0^s1^s2^s3;var xh=UC_xtime[h];var h1=UC_xtime[UC_xtime[xh^s0^s2]]^h;var h2=UC_xtime[UC_xtime[xh^s1^s3]]^h;state[i+0]^=h1^UC_xtime[s0^s1];state[i+1]^=h2^UC_xtime[s1^s2];state[i+2]^=h1^UC_xtime[s2^s3];state[i+3]^=h2^UC_xtime[s3^s0]}}function padding(data){if(data&&data.length){var len=data.length;if(len%16>0){for(var i=0;i<16-len%16;i++){data.push(0)}}}return data}function escPadding(data){if(data&&data.length){var len=data.length;var di=-1;for(var i=len-1;i>=0;i--){if(data[i]!=0){di=i;break}}if(di>=0){return data.slice(0,di+1)}}return data}function Encrypt(data){data=padding(data);var rest=new Array;for(var i=0;i<data.length;i+=16){var block=data.slice(i,i+16);UC_Encrypt(block,uc_key);rest=rest.concat(block)}return rest}function Decrypt(data){var rest=new Array;for(var i=0;i<data.length;i+=16){var block=data.slice(i,i+16);UC_Decrypt(block,uc_key);rest=rest.concat(block)}return escPadding(rest)}UC_Init();if(typeof uc_key==="string"){uc_key=hexToBytes(uc_key)}uc_key=fiexdSlice(uc_key,16);UC_ExpandKey(uc_key);function toEncryptHex(str){var b=stringToByte(str);var data=Encrypt(b);return bytesToHex(data)}function toEncryptB64(str){var b=stringToByte(str);var data=Encrypt(b);return b64.encode(data)}function toDecryptStr(hex){var b=hexToBytes(hex);var data=Decrypt(b);return byteToString(escPadding(data))}function fromB64(data){var b=b64.decodeBytes(data);var data=Decrypt(b);return byteToString(escPadding(data))}function fiexdSlice(b,len){if(!isArray(b))return null;var l=b.length;if(l==len){return b}if(l<len){for(var i=0;i<len-l;i++){b.push(0)}return b}return b.slice(0,len)}return{encrypt:Encrypt,decrypt:Decrypt,close:function(){UC_Done()},toHex:toEncryptHex,toB64:toEncryptB64,toStr:toDecryptStr,fromB64:fromB64}}function stringToByte(str){var bytes=new Array;var len,c;len=str.length;for(var i=0;i<len;i++){c=str.charCodeAt(i);if(c>=65536&&c<=1114111){bytes.push(c>>18&7|240);bytes.push(c>>12&63|128);bytes.push(c>>6&63|128);bytes.push(c&63|128)}else if(c>=2048&&c<=65535){bytes.push(c>>12&15|224);bytes.push(c>>6&63|128);bytes.push(c&63|128)}else if(c>=128&&c<=2047){bytes.push(c>>6&31|192);bytes.push(c&63|128)}else{bytes.push(c&255)}}return bytes}function byteToString(arr){if(typeof arr==="string"){return arr}var str="",_arr=arr;for(var i=0;i<_arr.length;i++){var one=_arr[i].toString(2),v=one.match(/^1+?(?=0)/);if(v&&one.length==8){var bytesLength=v[0].length;var store=_arr[i].toString(2).slice(7-bytesLength);for(var st=1;st<bytesLength;st++){store+=_arr[st+i].toString(2).slice(2)}str+=String.fromCharCode(parseInt(store,2));i+=bytesLength-1}else{str+=String.fromCharCode(_arr[i])}}return str}function hexToBytes(hex){hex=hex.toString();for(var bytes=[],c=0;c<hex.length;c+=2)bytes.push(parseInt(hex.substr(c,2),16));return bytes}function bytesToHex(bytes){for(var hex=[],i=0;i<bytes.length;i++){var current=bytes[i]<0?bytes[i]+256:bytes[i];hex.push((current>>>4).toString(16));hex.push((current&15).toString(16))}return hex.join("")}function deepClone(origin,target){var target=target||{},toStr=Object.prototype.toString,arrStr="[object Array]";for(var prop in origin){if(origin.hasOwnProperty(prop)){if(origin[prop]!=="null"&&typeof origin[prop]=="object"){target[prop]=toStr.call(origin[prop])==arrStr?[]:{};deepClone(origin[prop],target[prop])}else{target[prop]=origin[prop]}}}return target}function S4(){return((1+Math.random())*65536|0).toString(16).substring(1)}function guid(){var id=[];for(var i=0;i<8;i++){id.push(S4())}return id.join("")}function s1(){try{var canvas=document.createElement("canvas");if(!canvas.getContext)return"g:not-modern";var gl=canvas.getContext("experimental-webgl");if(!gl)return"g:classic";var debugInfo=null;if(!debugInfo)return"g:classic1";return gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)}catch(e){return"g:classic3"+e}}function s5(h){var a=["userAgent","hardwareConcurrency","connection.effectiveType","languages","appVersion","buildID","platform"];var rest=[];if(_window){for(var i=0;i<a.length;i++){rest.push(s3(_window,"navigator."+a[i]))}}rest.push(s1());rest.push(s2());return h(rest.join("|"))}function s3(nav,key,def){try{var ks=key.split(".");var v=nav;for(var i in ks){if(!v)break;var v=v[ks[i]]}return v?v:def?def:"----"}catch(e){return def?def:"----"}}function s2(){if(_window)try{return _window.navigator.plugins.length}catch(e){return"np"}return"node"}function isArray(b){return b.push&&b.join&&typeof b.push==="function"&&typeof b.join==="function"}var gcode=function(val){return $1(clientid()+val)};var lastCheck=(new Date).getTime();function check(){if((new Date).getTime()-lastCheck>6e5){lastCheck=(new Date).getTime();return false}else{return true}}function getParamter(url,name){var off=url.indexOf("?")+1;if(off<=0)return null;var b=url.substr(off,url.length-off);var kvs=b.split("&");var p=null;for(var i=0;i<kvs.length;i++){var kv=kvs[i];if(kv.indexOf("=")<1)continue;var ar=kv.split("=");if(ar.length<2)continue;if(ar[0]===name)p=ar[1]}if(p==null)return null;if(p.indexOf("/")>-1){p=p.substring(0,p.indexOf("/"))}if(p.indexOf("#")>-1){p=p.substring(0,p.indexOf("#"))}return p}function removeParamter(url,p){if(url.indexOf("?")<0){return url}var off=url.indexOf("?")+1;var urls=[];var prefix=url.substr(0,off-1);var b=url.substr(off,url.length-off);var kvs=b.split("&");for(var i=0;i<kvs.length;i++){var kv=kvs[i];if(kv.indexOf("=")<1)continue;var ar=kv.split("=");if(ar.length<2)continue;if(ar[0]===p){}else{urls.push(kv)}}if(urls.length>0){return prefix+"?"+urls.join("&")}else{return prefix}}var uasDomain=null;var duration=null;var captcha=false;var capHash="dovdok09dcxjJNDSDFkjhsfsfqwF32dsf";function version(){return VERSION}function testuas(){return true}function f1(v,t,e){return function(o){return e(v,t(o))}}function t1(o){return JSON.stringify(o)}function prosFilter(origin,f){if(typeof origin==="string"){return f(origin)}for(var prop in origin){if(origin.hasOwnProperty(prop)){if(origin[prop]!=="null"&&typeof origin[prop]==="object"){if(isArray(origin[prop])){for(var i=0;i<origin[prop].length;i++){origin[prop][i]=prosFilter(origin[prop][i],f)}}else{origin[prop]=prosFilter(origin[prop],f)}}else if(typeof origin[prop]==="string"){origin[prop]=f(origin[prop])}}}return origin}function stripBOM(content){if(content.charCodeAt(0)===65279){content=content.slice(1)}return content}function wstore(){return{get:function(k){return wx.getStorageSync(k)},set:function(k,v){wx.setStorageSync(k,v)},clear:function(){wx.clearStorage()},remove:function(k){wx.removeStorageSync(k)}}}function xstore(){var st=_window.sessionStorage;return{get:function(k){return st.getItem(k)},set:function(k,v){st.setItem(k,v)},clear:function(){st.clear()},remove:function(k){st.removeItem(k)}}}function defaultstore(){return{get:function(k){return null},set:function(k,v){},clear:function(){},remove:function(k){}}}var $100=function(k,v){return uc(k).toHex(v)};var $101=function(k,v){return uc(k).toStr(v)};var $103=function(k){var kt=k;return function(v){return"$"+$100(kt,v)}};var $104=function(k){var kt=k;return function(v){return v.charAt(0)==="$"?$101(kt,v.substr(1)):v}};var $105=function(k){var h1=$103(k);var h2=$104(k);return{doit:function(v){prosFilter(v,h1);return v},revert:function(v){prosFilter(v,h2);return v}}};var $106=function(k){var kt=k;return function(v){return $100(kt,v)}};var $107=function(k){var kt=k;return function(v){return $101(kt,v)}};var $108=function(k){var h1=$106(k);var h2=$107(k);return{set:function(v){return v==null?null:h1(v)},get:function(v){return v==null?null:h2(v)}}};var $109=function(k,v){return uc(Sha256().sum(stringToByte(k))).toB64(v)};var vcc=function(f){return function(param){if(!param.vcc)return param;var k=clientTg()+param.vcc;param.client=clientid();param.account=f(k,param.account);param.password=f(k,param.password);return param}}($109);function clientTg(val){if(!val)return store.get("chash");store.set("chash",val);return null}var cid=s5($1);function clientid(){return cid}function getUTCSecond(){return Math.round((new Date).getTime()/1e3)}Array.prototype.joinAll=function(ar){if(!isArray(ar))return;for(var i=0;i<ar.length;i++)this.push(ar[i])};function ranInt(){return 1+Math.random()*1e6|0}function intFromBytes(x){var val=0;for(var i=0;i<x.length;++i){val+=x[i];if(i<x.length-1){val=val<<8}}return val}var bluetooth=function(){var head=[14,208,46,0];var tail=[204,255];function genKey(card,salt){var c=writeInt(card);var s=writeInt(salt);return{key:function(){var t=writeInt(getUTCSecond());var r=writeInt(ranInt());return genToken(c,t,r,s)},keyHex:function(){var t=writeInt(getUTCSecond());var r=writeInt(ranInt());return bytesToHex(genToken(c,t,r,s))}}}function getKey(card,salt){return genKey(card,salt)}function genToken(card,time,ran,salt){var tk=[];var s=sign(card,time,ran,salt);tk.joinAll(head);tk.joinAll(card);tk.joinAll(time);tk.joinAll(ran);tk.joinAll(s);tk.joinAll(tail);return tk}function sign(card,time,ran,salt){var bs=[];bs.joinAll(card);bs.joinAll(time);bs.joinAll(ran);bs.joinAll(salt);return Sha256().sum(bs)}return{testToken:genToken,getKey:getKey}}();var store=function(){var $109=$108(clientid());var raw=null;if(iswx){raw=wstore()}else if(isNode){raw=defaultstore()}else{raw=xstore()}return{get:function(k){return $109.get(raw.get($109.set(k)))},set:function(k,v){raw.set($109.set(k),$109.set(v))},clear:function(){raw.clear()},remove:function(k){raw.remove($109.set(k))}}}();var v={};v.f1=f1;var authingBase=null;var captchaProvider=null;var api={login:"/authing/public/login",ticketverify:"/authing/public/ticketverify",user:"/authing/public/oauth/user",sendsms:"/authing/public/sendSmsLoginCode",loginByPhone:"/authing/public/loginByPhone",captchaImg:"/authing/captcha",captchaCheck:"/authing/captcha/vaildate",captchaToken:"/authing/captcha/token",prelogin:"/authing/public/prelogin",loginFromWx:"/authing/public/loginFromWx",ubind:"/authing/public/ubind"};function server(url){authingBase=url;if(!captchaProvider)captchaServer(url)}function captchaServer(url){captchaProvider=url}var user={};var profile={duration:0};var duration=0;var tid=null;var platform=null;var loginTime=0;function isLogined(){return user&&user.id}function toNumber(num){if(num==null)return 0;if(typeof num==="number")return num;if(typeof num==="string")return Number(num);return 0}function doLocal(){try{var tgc=$13();if(_window)_window.name=tgc;store.set("tgclocal",$14())}catch(e){}}function setLogoutTag(){if(_window)_window.name="logouted"}function cleanLogutTag(){if(_window)_window.name=""}function checkLogoutTag(){if(_window&&_window.name=="logouted"){cleanLocal();return true}return false}function cleanLocal(){try{if(_window)_window.name="";store.remove("tgclocal")}catch(e){}}function doLogin(res,pr){try{if(res.code==0&&res.data!=null){var tk=res.data.token;var jwt=parseJWT(tk);profile.hash=jwt.payload.sub;profile.iat=jwt.payload.iat;profile.jti=jwt.payload.jti;profile.iss=jwt.payload.iss;if(jwt.payload.wxi){WXAPPID=jwt.payload.wxi}if(jwt.payload.opi){user.openId=jwt.payload.opi;profile.openId=jwt.payload.opi}user.id=profile.jti;user.name=res.data.name;if(res.data.openId){user.openId=res.data.openId;profile.openId=res.data.openId}profile.duration=(new Date).getTime()-toNumber(jwt.payload.iat);profile.cid=gcode(profile.jti);loginTime=(new Date).getTime();doLocal();pr.fire(user)}else if(res.code!=0){pr.error(res)}}catch(e){pr.error({code:-100,message:e})}}function login(account,password,code){var pr=new ypromise;cleanLogutTag();var param={account:account,password:password,captchToken:captchaToken,vcc:guid()};if(profile.openId)param.openId=profile.openId+"@"+WXAPPID;preLogin().then(res1=>{vcc(param);https().post(authingBase+api.login,param).then(res=>{doLogin(res,pr)})});captchaToken=null;return pr}function preLogin(){var pr=new ypromise;if(!!clientTg()){pr.fire(clientTg())}else{https().get(authingBase+api.prelogin+"?uid="+clientid()).then(res=>{clientTg(res.data);pr.fire(res.data)})}return pr}function loginByPhone(phone,code,smsToken){var pr=new ypromise;cleanLogutTag();var param={phone:phone,smsCode:code,smsToken:smsToken};if(profile.openId)param.openId=profile.openId+"@"+WXAPPID;https().post(authingBase+api.loginByPhone,param).then(res=>{doLogin(res,pr)});captchaToken=null;return pr}function unbind(){var pr=new ypromise;https().get(authingBase+api.ubind+"?openId="+profile.openId+"@"+WXAPPID+"&token="+getToken()).then(res=>{pr.fire(res.data)});return pr}function sendLoginSms(phone){var pr=new ypromise;var param={phone:phone,captchToken:captchaToken};https().post(authingBase+api.sendsms,param).then(res=>{pr.fire(res)});captchaToken=null;return pr}var $11=function(){if(!profile.hash)return null;var iat=(new Date).getTime()-profile.duration;var payload={sub:user.name,iss:profile.iss,jti:profile.jti,iat:iat,ran:guid(),cid:profile.cid};if(!!platform)payload.pf=platform;if(!!profile.openId)payload.opi=profile.openId;if(!!WXAPPID)payload.wxi=WXAPPID;if(!!tid)payload.tid=tid;return payload};var $12=function(){if(!profile.hash)return null;var payload=$11();if(!!tid)payload.tid=tid;payload.cla="T1";if(!!platform)payload.pf=platform;return genJWT({},payload,profile.hash)};function getToken(){return $12()}var $13=function(){if(!profile.hash)return null;var payload=$11();if(!!tid)payload.tid=tid;payload.cla="TGC";payload.cli=clientid();return genJWT({},payload,profile.hash)};var $14=function(){if(!profile.hash)return null;var payload=$11();if(!!tid)payload.tid=tid;payload.cla="TGC.1";payload.cli=clientid();return genJWT({},payload,profile.hash)};function getServiceToken(){var tgc=$13();if(_window)_window.name=tgc;return tgc}function loginByToken(token){var yp=new ypromise;cleanLogutTag();https().get(authingBase+api.ticketverify+"?token="+token).then(res=>{try{var tk=parseJWT(token,"");if(tk&&tk.payload&&tk.payload.tid){tid=tk.payload.tid}}catch(e){}doLogin(res,yp)});return yp}function preCheck(tgc){try{if(tgc==null||tgc.length<1||"logouted"==tgc)return false;var jwt=parseJWT(tgc);var dt=Math.abs(jwt.payload.iat-(new Date).getTime());if(jwt.payload.cla=="TGC"&&dt>3e3){return false}return jwt.payload.cli===clientid()}catch(e){}}function getURLTocken(){if(!_window)return null;var st=getParamter(_window.location.href,"accesstoken");if(st==null)st=getParamter(_window.location.href,"accessToken");return st}function getTGC(){var st=getURLTocken();if(preCheck(st))return st;st=_window.name;if(checkLogoutTag())return null;if(preCheck(st))return st;st=store.get("tgclocal");if(preCheck(st))return st;return st}function checkLogin(){var yp=new ypromise;if(isLogined()){yp.fire(user);return yp}if(iswx)return tryWxLogin();var accessToken=getTGC();if(accessToken==null){yp.fire({errcode:1,errmsg:"not login yet!"})}else{loginByToken(accessToken).then(res=>{if(res||res.id){yp.fire(res)}else{yp.fire({errcode:-1,errmsg:"not login yet!"})}}).catch(res=>yp.error(res))}return yp}function loginFromWx(appId,code){var iat=(new Date).getTime();var token=genJWT({},{sub:code,app:appId,iat:iat,ran:guid()},code);var pr=new ypromise;https().get(authingBase+api.loginFromWx+"?token="+token).then(res=>{doLogin(res,pr)});captchaToken=null;return pr}function getUser(){return user}function logout(){user={};profile={};var yp=new ypromise;cleanLocal();setLogoutTag();yp.fire("logouted!");return yp}var captchaId=guid();var captchaToken=null;function getImage(){return captchaProvider+api.captchaImg+"?vid="+captchaId+"&ran="+guid()}function doCaptcha(code){var pr=new ypromise;var param={vid:captchaId,code:code};https().get(captchaProvider+api.captchaCheck,param).then(res=>{if(res.code==0){captchaToken=res.token}pr.fire({code:res.code,msg:res.msg})});return pr}function testCaptcha(){console.log("=========测试验证码是否通过========");var param={token:captchaToken};https().get(captchaProvider+api.captchaToken,param).then(res=>{console.log(res)})}var captcha={getImage:getImage,doCaptcha:doCaptcha,test:testCaptcha};String.prototype.replaceAll=function(s1,s2){return this.replace(new RegExp(s1,"gm"),s2)};function escChars(str){if(str==null)return null;if(typeof str!="string")return null;try{return str.replaceAll(" ","").replaceAll("[\r\n]","")}catch(e){}return null}function switchPlatform(pf){platform=escChars(pf);return this}function switchTenant(tenant){tid=escChars(tenant);doLocal();return this}function setWxAppId(appid){WXAPPID=appid}function tryWxLogin(){var pr=new ypromise;if(!iswx){pr.fire({code:-2,msg:"not wechat client!"});return pr}if(WXAPPID){wx.login({success:function(res){loginFromWx(WXAPPID,res.code).then(function(res){pr.fire(res)})}})}else{pr.fire({msg:"miss wxappid",code:-1})}return pr}var tools={hmac_sha256:hmac_sha256,b64:b64,url64:url64,v:v,sha256:Sha256,bytesToHex:bytesToHex,stringToByte:stringToByte,genJWT:genJWT,parseJWT:parseJWT,uc:uc,store:store,ajax:ajax,pros:$105,cid:function(){return s5($1)}};var auth={login:login,getToken:getToken,getServiceToken:getServiceToken,loginByToken:loginByToken,getUser:getUser,logout:logout,sendLoginSms:sendLoginSms,loginByPhone:loginByPhone,loginFromWx:loginFromWx,checkLogin:checkLogin,unbind:unbind};var client={test:function(){return version()},auth:auth,tools:tools,captcha:captcha,server:server,setWxAppId:setWxAppId,tryWxLogin:tryWxLogin,captchaServer:captchaServer,switchPlatform:switchPlatform,switchTenant:switchTenant,bluetooth:bluetooth,debug:function(){return{duration:profile.duration,tid:tid}}};try{if(iswx){wx.authing=client}if(_window){_window.authing=client}}catch(e){}return client});