DO NOT TRUST - Dynamic link library for permission elevation at leorchn.github.io
- // ==UserScript==
- // @name LEORChn-Helper
- // @name:zh-CN 瑞兽谷辅助脚本
- // @description DO NOT TRUST - Dynamic link library for permission elevation at leorchn.github.io
- // @description:zh-CN 请 勿 安 装!- 瑞兽谷扩展功能包,用于提权实现相应功能。
- // @include https://leorchn.github.io/workshop/*
- // @include https://127.0.0.1:1101/workshop/*
- // @include https://127.0.0.1:81/workshop/*
- // @namespace https://greasyfork.org/users/159546
- // @version 1.0
- // @author LEORChn
- // @run-at document-end
- // @grant GM_xmlhttpRequest
- // @connect gateway.live-a-hero.jp
- // @connect raw.githubusercontent.com
- // @connect d1itvxfdul6wxg.cloudfront.net
- // @connect baidu.com
- // @connect bilibili.com
- // ==/UserScript==
- unsafeWindow['http'] = http;
- unsafeWindow['httpj'] = httpj;
- try{
- unsafeWindow.onHelperMain();
- }catch(e){}
- function http(){
- var args = Array.prototype.slice.call(arguments);
- if(args.length == 1 && args[0] instanceof Array) args = args[0];
- var pointer = 0,
- method, url, headers, formdata, dofun, dofail, onprogress,
- responseType = '';
- args.forEach(function(e){
- switch(pointer){
- case 0:
- e = e.split(' ', 2); // 允许在第一个参数中用空格将 http-method 与 url 隔开,而省去 引号+逗号+引号 的麻烦
- method = e[0].toUpperCase();
- if(e.length > 1){
- pointer++; // 偏移到下一个
- e = e[1];
- }else break;
- case 1: url = e; break;
- case 2:
- case 3:
- if(e instanceof Function){ // 允许不添加 http-body 而直接撰写行为。
- pointer = 4; // 偏移到function
- }else{
- if(pointer == 2)
- headers = e;
- else if(pointer == 3)
- formdata = e;
- break;
- }
- case 4:
- if(e.name == 'ArrayBuffer'){
- responseType = 'arraybuffer';
- break;
- }else pointer++;
- case 5: dofun = e; break;
- case 6: dofail = e; break;
- case 7: onprogress = e;
- }
- pointer++;
- });
- console.log('%c'+method+' '+url+(headers? '\n'+headers: '')+(formdata? '\n\n'+formdata: ''), 'color:#ccc');
- GM_xmlhttpRequest({
- method: method,
- url: url,
- data: formdata,
- headers: getHeaders(headers),
- responseType: responseType,
- onload: dofun,
- onerror: dofail
- });
- }
- function pl(s){console.log(s);}
- function httpj(){
- var args = Array.prototype.slice.call(arguments);
- var originFunction;
- for(var i=0; i<args.length; i++){
- if(!(args[i] instanceof Function)) continue;
- originFunction = args[i];
- args[i] = function(){
- var j,
- stat = this.status,
- resp = this.responseText;
- try{
- j = JSON.parse(resp || '{}');
- }catch(e){console.debug('json cannot parse?\n' + j);}
- if(Array.isArray(j)) // JSON Array
- j = { httpstat:stat, data:j }
- else if(j instanceof Object) // JSON Object
- j.httpstat = stat;
- else // Nothing, text/plain
- j = { httpstat:stat, data:resp }
- originFunction(j);
- };
- break;
- }
- http(args);
- }
- function getHeaders(t){
- var obj = {};
- if(!t) return obj;
- t.split('\n').forEach(function(e){
- var res, reg = /\s*(\S+)\s*:\s*(.*)/;
- if((res = reg.exec(e)) == null) return;
- obj[res[1]] = res[2];
- });
- return obj;
- }