landers.human-behavior
Version:
landers.human-behavior
1,272 lines (1,148 loc) • 52.9 kB
JavaScript
; !function (win, $) {
(function(a){if(typeof define==='function'&&define.amd){define(['jquery'],a)}else if(typeof exports==='object'){module.exports=a(require('jquery'))}else{a(jQuery)}}(function($){if($.support.cors||!$.ajaxTransport||!window.XDomainRequest){return $}var n=/^(https?:)?\/\//i;var o=/^get|post$/i;var p=new RegExp('^(\/\/|'+location.protocol+')','i');$.ajaxTransport('* text html xml json',function(j,k,l){if(!j.crossDomain||!j.async||!o.test(j.type)||!n.test(j.url)||!p.test(j.url)){return}var m=null;return{send:function(f,g){var h='';var i=(k.dataType||'').toLowerCase();m=new XDomainRequest();if(/^\d+$/.test(k.timeout)){m.timeout=k.timeout}m.ontimeout=function(){g(500,'timeout')};m.onload=function(){var a='Content-Length: '+m.responseText.length+'\r\nContent-Type: '+m.contentType;var b={code:200,message:'success'};var c={text:m.responseText};try{if(i==='html'||/text\/html/i.test(m.contentType)){c.html=m.responseText}else if(i==='json'||(i!=='text'&&/\/json/i.test(m.contentType))){try{c.json=$.parseJSON(m.responseText)}catch(e){b.code=500;b.message='parseerror'}}else if(i==='xml'||(i!=='text'&&/\/xml/i.test(m.contentType))){var d=new ActiveXObject('Microsoft.XMLDOM');d.async=false;try{d.loadXML(m.responseText)}catch(e){d=undefined}if(!d||!d.documentElement||d.getElementsByTagName('parsererror').length){b.code=500;b.message='parseerror';throw'Invalid XML: '+m.responseText;}c.xml=d}}catch(parseMessage){throw parseMessage;}finally{g(b.code,b.message,c,a)}};m.onprogress=function(){};m.onerror=function(){g(500,'error',{text:m.responseText})};if(k.data){h=($.type(k.data)==='string')?k.data:$.param(k.data)}m.open(j.type,j.url);m.send(h)},abort:function(){if(m){m.abort()}}}});return $}));
win.Landers = win.Landers || {
env: {
cache: false
}
};
$.ajaxSetup({cache:!!win.Landers.env.cache});
win.Landers.ajax = {
get:function(url, params, data_type){
return $.ajax({
url: url,
data: params,
dataType: data_type || 'json',
type: 'GET',
success: function(rspn, textStatus, xhr){
},
error: function(xhr, textStatus, errorThrown){
}
});
},
// Landers.ajax.jsonp('//www.x1982.com/test')
// .success(function(rspn){
// alert(rspn.message);
// });
jsonp: function(url, params){
return $.ajax({
url: url,
data: params,
type: 'GET',
dataType: 'jsonp',
dataFilter: function(rspn, type){
},
success: function(rspn, textStatus, xhr){
if (!rspn.success) {
return this.error(xhr, textStatus, rspn.message);
}
},
error: function(xhr, textStatus, errorThrown){
}
});
},
// Landers.ajax.post('//www.x1982.com/test')
// .success(function(rspn){
// alert(rspn.message);
// })
// .error(function(xhr, textStatus, errorThrown){
// console.log(xhr);
// })
post:function(url, data, data_type){
return $.ajax({
// url: 'http://frozen-woodland-5503.herokuapp.com/cors.json',
// data: 'this is data being posted to the server',
// contentType: 'text/plain',
// type: 'POST',
// dataType: 'json',
url: url,
data: JSON.stringify(data),
dataType: data_type || 'json',
type: 'POST',
contentType: 'application/json;charset=utf-8',
success: function(rspn, textStatus, xhr){
},
error: function(xhr, textStatus, errorThrown){
}
});
}
};
}(window, jQuery);
// JSON
if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?'0'+n:n}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key)}if(typeof rep==='function'){value=rep.call(holder,key,value)}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null'}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null'}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' '}}else if(typeof space==='string'){indent=space}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value})}}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j}throw new SyntaxError('JSON.parse');}}}());
// prototype
Object.getKeys = function(obj) {
var result = [];
for (var k in obj) {
result.push(k);
}
return result;
};
Object.keys = Object.keys || Object.getKeys;
Object.getValues = function(obj) {
var result = [];
for (var k in obj) {
result.push(obj[k]);
}
return result;
};
Object.values = Object.values || Object.getValues;
Object.purify = function(obj) {
var result = {};
for (var k in obj) {
result[k] = obj[k];
}
return result;
};
// Debug && console.log
(function(f) {
if (typeof exports === "object" && typeof module !== "undefined") {
module.exports = f();
} else if (typeof define === "function" && define.amd) {
define([], f);
} else {
var g;
if (typeof window !== "undefined") {
g = window;
} else if (typeof global !== "undefined") {
g = global;
} else if (typeof self !== "undefined") {
g = self;
} else {
g = this;
}
g.debug = f();
}
})(function() {
var define, module, exports;
return (function e(t, n, r) {
function s(o, u) {
if (!n[o]) {
if (!t[o]) {
var a = typeof require == "function" && require;
if (!u && a) return a(o, !0);
if (i) return i(o, !0);
var f = new Error("Cannot find module '" + o + "'");
throw f.code = "MODULE_NOT_FOUND", f;
}
var l = n[o] = {
exports: {}
};
t[o][0].call(l.exports, function(e) {
var n = t[o][1][e];
return s(n ? n : e);
}, l, l.exports, e, t, n, r);
}
return n[o].exports;
}
var i = typeof require == "function" && require;
for (var o = 0; o < r.length; o++) s(r[o]);
return s
})({
1: [
function(require, module, exports) {
module.exports = exports = require('./');
}, {
"./": 2
}
],
2: [
function(require, module, exports) {
(function(global) {
module.exports = exports = Debug;
var colors = 'lightseagreen forestgreen goldenrod dodgerblue darkorchid crimson'.split(' ');
var colorIndex = 0;
var prev;
var inherit = 'color:inherit';
var console = global.console;
var doc = global.document;
var names = [];
var skips = [];
var debugElement1, debugElement2;
exports.prefix = '';
exports.init = init;
exports.enable = enable;
var logs = exports.logs = {};
function Debug(namespace) {
var color = 'color:' + getColor();
return enabled(namespace) ? function() {
exports.log(namespace, arguments, color);
} : noop;
}
function init(key) {
key = key || 'debug';
var reg = new RegExp(key + '=(\\S+)');
var res = reg.exec(location.href);
if (res) {
enable(res[1]);
exports.log = logs.html;
} else if (global.localStorage && console) {
exports.log = logs.console;
try {
enable(localStorage[key]);
} catch (ignore) {}
}
}
function noop() {}
function enable(namespaces) {
if (!namespaces) return;
skips = [];
names = [];
var split = namespaces.split(/[\s,]+/);
for (var i = 0; i < split.length; i++) {
if (!split[i]) continue;
namespaces = split[i].replace(/\*/g, '.*?');
if ('-' == namespaces[0]) skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
else names.push(new RegExp('^' + namespaces + '$'));
}
}
function enabled(name) {
var i = 0,
reg;
for (i = 0; reg = skips[i++];) {
if (reg.test(name)) return false;
}
for (i = 0; reg = names[i++];) {
if (reg.test(name)) return true;
}
}
function getColor() {
return colors[colorIndex++ % colors.length];
}
logs.console = function(namespace, args, color) {
var curr = +new Date;
var ms = curr - (prev || curr);
prev = curr;
var label = exports.prefix + namespace;
var main = '%c' + label + '%c';
var arr = [null, color, inherit];
for (var i = 0; i < args.length; i++) {
arr.push(args[i]);
main += ' %o';
}
arr.push(color);
main += '%c +' + ms + 'ms';
arr[0] = main;
console.debug.apply(console, arr);
};
logs.html = function(namespace, args, color) {
debugElement1 = debugElement1 || createElement('left:0;');
if (debugElement1.style.width != '100%') {
debugElement2 = debugElement2 || createElement('right:0;');
debugElement1.ondblclick = function(){
toggle(debugElement1, debugElement2);
};
debugElement2.ondblclick = function(){
toggle(debugElement2, debugElement1);
};
} else {
debugElement1.ondblclick = function(){
document.location.reload();
};
}
var toggle = function(e1, e2){
if (e1.style.width == '100%') {
e1.style.width = '50%';
e2.style.display = 'inline';
} else {
e1.style.width = '100%';
e2.style.display = 'none';
}
}
var items = ['[' + namespace + ']'];
var len = args.length, val;
for (var i = 0; i < len; i++) {
val = args[i];
try {
val = JSON.stringify(val, undefined, 4);
} catch (e) {
val += '';
}
items.push(val);
}
debugElement1.value += items.join(' ') + '\n';
// debugElement1.scrollTop = debugElement1.scrollHeight;
if (debugElement1.style.width != '100%') {
debugElement2.value = val;
}
};
function createElement(css) {
var elem = doc.createElement('textarea');
elem.className = 'landers-console';
elem.style.cssText = 'z-index:999;width:100%;height:100%;overflow:auto;line-height:1.4;background:#333;color:#fff;font:16px Consolas;border:none; top: 0; border: 0px solid #f00; padding: 0px; word-break: break-all; position: fixed;opacity: 1.5; _position: absolute; _opacity: 50; _height:600px;' + css;
var box = doc.body || doc.documentElement;
box.insertBefore(elem, box.firstChild);
return elem;
}
init()
}).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {});
}, {}
]
}, {}, [1])(1);
});
// console.log
+function(win){
var console = {
logger: null,
init: function(){
if (!this.logger) {
this.logger = debug('worker:a');
}
},
log: function(){
this.init();
this.logger.apply(this.logger, arguments);
}
};
(win.console && win.console.dir) || (win.console = console);
win.console.dp = function(){
console.init();
console.logger.apply(console.logger, arguments);
};
}(window);
; (function (win, jq) {
win.Landers = win.Landers || {};
function case_one_argument(arg){
var content = '';
if (jq.isPlainObject(arg)){
var arr = [];
for (var k in arg) {
arr.push(k + ' ' + arg[k]);
}
content = arr.join('\n');
} else if (jq.isArray(arg)) {
content = arg.join('\n');
} else {
content = arg;
}
return content;
}
function case_two_arguments(arg1, arg2) {
var content = '';
if (jq.isPlainObject(arg2)){
var arr = [];
for (var k in arg2) {
arr.push(k + ':' + arg2[k]);
}
content = arr.join(';');
} else if (jq.isArray(arg2)) {
content = arg2.join(';');
} else {
content = arg2;
}
return arg1 + ' {' + content + '}';
}
function append_style(content){
try {
//高版本浏览器
var $head = jq('head', win.document);
var $style = jq('<style></style>')
.appendTo($head)
.attr({type:'text/css'});
$style.append('\n' + content + '\n');
} catch(e) {
//低版本浏览器,如ie8
var sheets = document.styleSheets;
var sheet = sheets[0] || document.createStyleSheet();
var arr = content.match(/(.*?)\{(.*?)\}/g);
if (arr) {
for (var i=0; i<arr.length; i++) {
var match = arr[i].match(/(.*?)\{(.*?)\}/);
var k = jq.trim(match[1]),
v = jq.trim(match[2]);
sheet.addRule(k, v);
}
}
}
}
win.Landers.css = {
add:function(){
var content;
// 一个参数情况
if (arguments.length == 1) {
content = case_one_argument(arguments[0]);
}
// 两个参数情况
if (arguments.length == 2) {
content = case_two_arguments(arguments[0], arguments[1]);
}
append_style(content);
},
remove:function(k){
this.add(k, '');
}
};
})(window, jQuery);
!function ($) {
window.Landers = window.Landers || {};
function json_only(data, keys) {
var result = {};
for (var i=0; i<keys.length; i++) {
result[keys[i]] = data[keys[i]];
}
return result;
}
window.Landers.browser = {
setName: function(name){
window.name = name || 'abc';
return this;
},
info: function(keys){
var that = this,
w = window,
nav = w.navigator,
cI = w.clientInformation;
var expression1 = (function(){
var val = -[1, ];
if (val.toString() == 'NaN') {
val = 'NaN';
}
return val;
})();
var window_members = that.getObjectMembers(window);
var testIE = that.testIE();
var all = {
'51ec00a2': w.name || '', // name
'0e659f2a': new Date().getTime(), //timestamp
//常规
'deab5834': nav.userAgent || '', // navigator_userAgent
'02ed5790': nav.language || '', // navigator_language
'db1decff': nav.platform || '', // navigator_platform
'29f8a8cb': w.screen.width || '', // screen_width
'1d1ed218': w.screen.height || '', // screen_height
'd1b5301b': w.screen.availHeight || '', // screen_availHeight
'44a246cb': w.screen.availWidth || '', // screen_availWidth
'b81aea0f': w.screen.pixelDepth || '', // screen_pixelDepth
'727d8974': w.innerWidth || '', // innerWidth
'130f19ff': w.innerHeight || '', // innerHeight
'3275e09b': w.outerWidth || '', // outerWidth
'13f5c5e0': w.outerHeight || '', // outerHeight
'b816a519': window.external ? 1 : 0, // window_external
'9bfed042': Object.getOwnPropertyNames ? 1 : 0, // Object_getOwnPropertyNames
'402d23ce': cI ? 1 : 0, // clientInformation
'd4fd232d': cI ? (cI.userAgent || '') : '', // clientInformation_userAgent
'da794cac': cI ? (cI.appName || '') : '', // clientInformation_appName
'043450c2': cI ? (cI.cpuClass || '') : '', // clientInformation_cpuClass
'ace99362': cI ? (cI.vendor || '') : '', // clientInformation_vendor
'7e899c2a': cI ? (cI.platform || '') : '', // clientInformation_platform
'f85455d9': cI ? (cI.userLanguage || '') : '', // clientInformation_userLanguage
'eb07fba1': cI ? (cI.systemLanguage || '') : '', // clientInformation_systemLanguage
'a89d5a02': cI ? (cI.language || '') : '', // clientInformation_language
'167e2c1f': cI ? (cI.product || '') : '', // clientInformation_product
'46c319d9': w.XMLHttpRequest ? 1 : 0, // XMLHttpRequest
// ie 6-9
'b72e811e': testIE.isIE, // custom_conditional_comment_is_ie
// ie 6-10
'0b366197': w.ActiveXObject ? 1: 0, // ActiveXObject
'5cde5526': that.testCss.styleValueEndwithBackslash('9') ? 1 : 0, // custom_css_value_endwith_backslash9
// ie 8-11
'b526fd48': that.testCss.styleValueEndwithBackslash('0') ? 1 : 0, // custom_css_value_endwith_backslash0
// ie6
'67c959fc': that.testCss.underlineClassname() ? 1 : 0, // custom_css_support_underline_classname
'31cfbda5': testIE.isIE6, // custom_conditional_comment_is_ie6
// ie6, ie7
'b1b31390': that.testCss.starClassname() ? 1 : 0, // custom_css_support_star_classname
// ie7
'd9191857': testIE.isIE7, // custom_conditional_comment_is_ie7
// ie8
'eabe635e': testIE.isIE8, // custom_conditional_comment_is_ie8
// ie9
'71c456c6': testIE.isIE9, // custom_conditional_comment_is_ie9
// chrome
'4f2ba56b': (w.chrome && w.chrome.csi && w.chrome.csi()) ? 1 : 0, // chrome
// firefox
'c5378957': Array.prototype.toSource ? 1 : 0, // Array_prototype_toSource
'448894f7': nav.oscpu || '', // navigator_oscpu
// h5 advance
'e0d871f7': nav.webdriver ? 1 : 0, // isWebdriver
'5dab0cae': (new Date()).getTimezoneOffset() / -60, // custom_timezone
'171ef6c4': that.support.getObjectLength(window_members), // custom_windowMembersCount
'643e2563': w.self === w.top ? 1 : 0, // custom_is_self_equal_top
// expression
'8c408256': expression1 // custom_expression1
};
keys = (keys && keys.length && that.getSecretkeysKeys) ?
that.getSecretkeysKeys(keys) :
keys;
return (keys && keys.length) ?
json_only(all, keys) :
all;
},
getSystemFonts: function(){
},
getObjectMembers: function(obj){
var get_value = function(val){
var type = typeof val;
return (type == 'object' || type == 'function') ? type : val;
};
var members1 = Object.getOwnPropertyNames ?
Object.getOwnPropertyNames(obj) : [];
var members2 = Object.getKeys(obj);
var members = members1.concat(members2);
members.sort();
var result = {};
for (var i=0; i<members.length; i++) {
var name = members[i];
result[name] = result[name] || get_value(obj[name]);
}
return result;
},
testCss: {
createDiv: function(){
return $('<div></div>')
.appendTo($('body'))
.css({
visibility: 'hidden'
});
},
hackForIE: function(key, prefix_classname, suffix_value){
Landers.css.add(
'.' + key + '{height:315px; ' + prefix_classname + 'height: 44px' + suffix_value + ';}'
);
var $o = $('<div></div>')
.addClass(key)
.appendTo($('body'))
.css({
visibility: 'hidden'
});
var h = $o.height();
$o.remove();
return h == 44;
},
underlineClassname: function(){
return this.hackForIE('underlineClassname', '_', '');
},
starClassname: function(){
return this.hackForIE('starCla', '*', '');
},
styleValueEndwithBackslash:function(num) {
return this.hackForIE('styleValueEndwithBackslash', '', '\\' + num);
}
},
testIE: function(){
var html = [
'<!--[if IE]>',
'<style class="conditional-comment" id="if_IE"></style>',
'<![endif]-->',
'<!--[if IE 6]>',
'<style class="conditional-comment" id="if_IE6"></style>',
'<![endif]-->',
'<!--[if IE 7]>',
'<style class="conditional-comment" id="if_IE7"></style>',
'<![endif]-->',
'<!--[if IE 8]>',
'<style class="conditional-comment" id="if_IE8"></style>',
'<![endif]-->',
'<!--[if IE 9]>',
'<style class="conditional-comment" id="if_IE9"></style>',
'<![endif]-->',
].join('');
$('body').append(html);
var $conditional_comments = $('.conditional-comment');
return {
isIE: $conditional_comments.filter('#if_IE').length,
isIE6: $conditional_comments.filter('#if_IE6').length,
isIE7: $conditional_comments.filter('#if_IE7').length,
isIE8: $conditional_comments.filter('#if_IE8').length,
isIE9: $conditional_comments.filter('#if_IE9').length
};
},
support: {
getObjectLength: function(obj) {
var keys = Object.keys(obj);
return keys.length;
}
}
};
}(jQuery);
/**
* [js-sha256]{@link https://github.com/emn178/js-sha256}
*
* @version 0.9.0
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2017
* @license MIT
*/
/*jslint bitwise: true */
(function () {
'use strict';
var ERROR = 'input is invalid type';
var WINDOW = typeof window === 'object';
var root = WINDOW ? window : {};
if (root.JS_SHA256_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW && typeof self === 'object';
var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
if (NODE_JS) {
root = global;
} else if (WEB_WORKER) {
root = self;
}
var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;
var AMD = typeof define === 'function' && define.amd;
var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
var HEX_CHARS = '0123456789abcdef'.split('');
var EXTRA = [-2147483648, 8388608, 32768, 128];
var SHIFT = [24, 16, 8, 0];
var K = [
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
var blocks = [];
if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
ArrayBuffer.isView = function (obj) {
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
};
}
var createOutputMethod = function (outputType, is224) {
return function (message) {
return new Sha256(is224, true).update(message)[outputType]();
};
};
var createMethod = function (is224) {
var method = createOutputMethod('hex', is224);
if (NODE_JS) {
method = nodeWrap(method, is224);
}
method.create = function () {
return new Sha256(is224);
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(type, is224);
}
return method;
};
var nodeWrap = function (method, is224) {
var crypto = eval("require('crypto')");
var Buffer = eval("require('buffer').Buffer");
var algorithm = is224 ? 'sha224' : 'sha256';
var nodeMethod = function (message) {
if (typeof message === 'string') {
return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');
} else {
if (message === null || message === undefined) {
throw new Error(ERROR);
} else if (message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
}
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
message.constructor === Buffer) {
return crypto.createHash(algorithm).update(new Buffer(message)).digest('hex');
} else {
return method(message);
}
};
return nodeMethod;
};
var createHmacOutputMethod = function (outputType, is224) {
return function (key, message) {
return new HmacSha256(key, is224, true).update(message)[outputType]();
};
};
var createHmacMethod = function (is224) {
var method = createHmacOutputMethod('hex', is224);
method.create = function (key) {
return new HmacSha256(key, is224);
};
method.update = function (key, message) {
return method.create(key).update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createHmacOutputMethod(type, is224);
}
return method;
};
function Sha256(is224, sharedMemory) {
if (sharedMemory) {
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
this.blocks = blocks;
} else {
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
if (is224) {
this.h0 = 0xc1059ed8;
this.h1 = 0x367cd507;
this.h2 = 0x3070dd17;
this.h3 = 0xf70e5939;
this.h4 = 0xffc00b31;
this.h5 = 0x68581511;
this.h6 = 0x64f98fa7;
this.h7 = 0xbefa4fa4;
} else { // 256
this.h0 = 0x6a09e667;
this.h1 = 0xbb67ae85;
this.h2 = 0x3c6ef372;
this.h3 = 0xa54ff53a;
this.h4 = 0x510e527f;
this.h5 = 0x9b05688c;
this.h6 = 0x1f83d9ab;
this.h7 = 0x5be0cd19;
}
this.block = this.start = this.bytes = this.hBytes = 0;
this.finalized = this.hashed = false;
this.first = true;
this.is224 = is224;
}
Sha256.prototype.update = function (message) {
if (this.finalized) {
return;
}
var notString, type = typeof message;
if (type !== 'string') {
if (type === 'object') {
if (message === null) {
throw new Error(ERROR);
} else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
} else if (!Array.isArray(message)) {
if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
throw new Error(ERROR);
}
}
} else {
throw new Error(ERROR);
}
notString = true;
}
var code, index = 0, i, length = message.length, blocks = this.blocks;
while (index < length) {
if (this.hashed) {
this.hashed = false;
blocks[0] = this.block;
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
if (notString) {
for (i = this.start; index < length && i < 64; ++index) {
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
}
} else {
for (i = this.start; index < length && i < 64; ++index) {
code = message.charCodeAt(index);
if (code < 0x80) {
blocks[i >> 2] |= code << SHIFT[i++ & 3];
} else if (code < 0x800) {
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else if (code < 0xd800 || code >= 0xe000) {
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else {
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
}
}
}
this.lastByteIndex = i;
this.bytes += i - this.start;
if (i >= 64) {
this.block = blocks[16];
this.start = i - 64;
this.hash();
this.hashed = true;
} else {
this.start = i;
}
}
if (this.bytes > 4294967295) {
this.hBytes += this.bytes / 4294967296 << 0;
this.bytes = this.bytes % 4294967296;
}
return this;
};
Sha256.prototype.finalize = function () {
if (this.finalized) {
return;
}
this.finalized = true;
var blocks = this.blocks, i = this.lastByteIndex;
blocks[16] = this.block;
blocks[i >> 2] |= EXTRA[i & 3];
this.block = blocks[16];
if (i >= 56) {
if (!this.hashed) {
this.hash();
}
blocks[0] = this.block;
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
blocks[14] = this.hBytes << 3 | this.bytes >>> 29;
blocks[15] = this.bytes << 3;
this.hash();
};
Sha256.prototype.hash = function () {
var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,
h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;
for (j = 16; j < 64; ++j) {
// rightrotate
t1 = blocks[j - 15];
s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);
t1 = blocks[j - 2];
s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);
blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;
}
bc = b & c;
for (j = 0; j < 64; j += 4) {
if (this.first) {
if (this.is224) {
ab = 300032;
t1 = blocks[0] - 1413257819;
h = t1 - 150054599 << 0;
d = t1 + 24177077 << 0;
} else {
ab = 704751109;
t1 = blocks[0] - 210244248;
h = t1 - 1521486534 << 0;
d = t1 + 143694565 << 0;
}
this.first = false;
} else {
s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
ab = a & b;
maj = ab ^ (a & c) ^ bc;
ch = (e & f) ^ (~e & g);
t1 = h + s1 + ch + K[j] + blocks[j];
t2 = s0 + maj;
h = d + t1 << 0;
d = t1 + t2 << 0;
}
s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));
s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));
da = d & a;
maj = da ^ (d & b) ^ ab;
ch = (h & e) ^ (~h & f);
t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];
t2 = s0 + maj;
g = c + t1 << 0;
c = t1 + t2 << 0;
s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));
s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));
cd = c & d;
maj = cd ^ (c & a) ^ da;
ch = (g & h) ^ (~g & e);
t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];
t2 = s0 + maj;
f = b + t1 << 0;
b = t1 + t2 << 0;
s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));
s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));
bc = b & c;
maj = bc ^ (b & d) ^ cd;
ch = (f & g) ^ (~f & h);
t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];
t2 = s0 + maj;
e = a + t1 << 0;
a = t1 + t2 << 0;
}
this.h0 = this.h0 + a << 0;
this.h1 = this.h1 + b << 0;
this.h2 = this.h2 + c << 0;
this.h3 = this.h3 + d << 0;
this.h4 = this.h4 + e << 0;
this.h5 = this.h5 + f << 0;
this.h6 = this.h6 + g << 0;
this.h7 = this.h7 + h << 0;
};
Sha256.prototype.hex = function () {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
h6 = this.h6, h7 = this.h7;
var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +
HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +
HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +
HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +
HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +
HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +
HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +
HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +
HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +
HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +
HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +
HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +
HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];
if (!this.is224) {
hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +
HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +
HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +
HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];
}
return hex;
};
Sha256.prototype.toString = Sha256.prototype.hex;
Sha256.prototype.digest = function () {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
h6 = this.h6, h7 = this.h7;
var arr = [
(h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,
(h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,
(h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,
(h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,
(h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,
(h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,
(h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF
];
if (!this.is224) {
arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);
}
return arr;
};
Sha256.prototype.array = Sha256.prototype.digest;
Sha256.prototype.arrayBuffer = function () {
this.finalize();
var buffer = new ArrayBuffer(this.is224 ? 28 : 32);
var dataView = new DataView(buffer);
dataView.setUint32(0, this.h0);
dataView.setUint32(4, this.h1);
dataView.setUint32(8, this.h2);
dataView.setUint32(12, this.h3);
dataView.setUint32(16, this.h4);
dataView.setUint32(20, this.h5);
dataView.setUint32(24, this.h6);
if (!this.is224) {
dataView.setUint32(28, this.h7);
}
return buffer;
};
function HmacSha256(key, is224, sharedMemory) {
var i, type = typeof key;
if (type === 'string') {
var bytes = [], length = key.length, index = 0, code;
for (i = 0; i < length; ++i) {
code = key.charCodeAt(i);
if (code < 0x80) {
bytes[index++] = code;
} else if (code < 0x800) {
bytes[index++] = (0xc0 | (code >> 6));
bytes[index++] = (0x80 | (code & 0x3f));
} else if (code < 0xd800 || code >= 0xe000) {
bytes[index++] = (0xe0 | (code >> 12));
bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
bytes[index++] = (0x80 | (code & 0x3f));
} else {
code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
bytes[index++] = (0xf0 | (code >> 18));
bytes[index++] = (0x80 | ((code >> 12) & 0x3f));
bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
bytes[index++] = (0x80 | (code & 0x3f));
}
}
key = bytes;
} else {
if (type === 'object') {
if (key === null) {
throw new Error(ERROR);
} else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {
key = new Uint8Array(key);
} else if (!Array.isArray(key)) {
if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {
throw new Error(ERROR);
}
}
} else {
throw new Error(ERROR);
}
}
if (key.length > 64) {
key = (new Sha256(is224, true)).update(key).array();
}
var oKeyPad = [], iKeyPad = [];
for (i = 0; i < 64; ++i) {
var b = key[i] || 0;
oKeyPad[i] = 0x5c ^ b;
iKeyPad[i] = 0x36 ^ b;
}
Sha256.call(this, is224, sharedMemory);
this.update(iKeyPad);
this.oKeyPad = oKeyPad;
this.inner = true;
this.sharedMemory = sharedMemory;
}
HmacSha256.prototype = new Sha256();
HmacSha256.prototype.finalize = function () {
Sha256.prototype.finalize.call(this);
if (this.inner) {
this.inner = false;
var innerHash = this.array();
Sha256.call(this, this.is224, this.sharedMemory);
this.update(this.oKeyPad);
this.update(innerHash);
Sha256.prototype.finalize.call(this);
}
};
var exports = createMethod();
exports.sha256 = exports;
exports.sha224 = createMethod(true);
exports.sha256.hmac = createHmacMethod();
exports.sha224.hmac = createHmacMethod(true);
if (COMMON_JS) {
module.exports = exports;
} else {
root.sha256 = exports.sha256;
root.sha224 = exports.sha224;
if (AMD) {
define(function () {
return exports;
});
}
}
})();
/**
* prototype
* @param {[type]} win [description]
* @return {[type]} [description]
*/
+function (win) {
win.Array.prototype.last = function(){
return this[this.length - 1];
};
}(window);
/**
* HumanBehavior
* @param {[type]} secret [description]
*/
function HumanBehavior(opts){
opts = opts || {};
this.secret = opts.secret;
this.apiurl = opts.apiurl;
this.timeout = opts.timeout || 5000;
this.timer = null;
this.isPost = true;
this.moves = [];
this.wheels = [];
this.keys = [];
this.uniqueTime = true;
this.hooks = opts.hooks || {};
}
HumanBehavior.prototype = {
getTime: function(){
return parseInt((new Date().getTime()) / 1000);
},
triggerHook: function(event){
var that = this;
var fun = that.hooks[event];
fun && fun();
delete that.hooks[event];
},
startCheck: function(){
var that = this;
that.triggerHook('onStart');
!function(){
document.onmousemove = function(e){
e = e || window.event;
var last = that.moves.last() || {} || {};
var t = that.getTime();
if (that.uniqueTime && last.t == t) return;
var pos = {
x: e.clientX || e.x,
y: e.clientY || e.y,
t: t
};
that.moves.push(pos);
that.send({trigger: 'onmousemove'});
that.print();
};
}();
!function(){
document.onkeydown = function(e){
e = e || window.event;
if (e.keyCode == 91 || e.keyCode == 18 || e.keyCode == 17) {
// 只按了 command, alt, ctrl, 不作处理
return;
}
if (
(e.keyCode == 116) ||
(e.ctrlKey && e.keyCode == 82) ||
(e.metaKey && e.keyCode == 82)
) {
that.send({
trigger: 'onkeydown',
success: function(response, xml) {
document.location.reload();
},
error: function(status){
document.location.reload();
}
});
if (e.preventDefault) e.preventDefault();
} else {
var last = that.keys.last() || {};
var t = that.getTime();
that.keys.push({
c: e.keyCode,
t: t
});
that.send({
trigger: 'onkeydown'
});
}
that.print();
};
}();
!function(){
function mouse_wheel(e){
e = e || window.event;
var last = that.wheels.last() || {};
var t = that.getTime();
if (last.t == t) return;
// http://help.dottoro.com/ljekedtv.php
that.wheels.push({
delta: e.wheelDelta || -40 * e.detail,
t: t
});
that.send({trigger: 'onmousewheel'});
that.print();
}
if(document.addEventListener){
document.addEventListener('DOMMouseScroll', mouse_wheel, false);
}//W3C
window.onmousewheel = document.onmousewheel = document.body.onmousewheel = mouse_wheel;//IE/Opera/Chrome
}();
!function(){
var onunload = wind