1307 lines
28 KiB
JavaScript
1307 lines
28 KiB
JavaScript
var fs = require('fs');
|
|
|
|
var exec = require('child_process').exec;
|
|
var express = require("express");
|
|
var app = express();
|
|
var bodyParser = require("body-parser");
|
|
var https = require('https');
|
|
var path = require('path');
|
|
const fileUpload = require('express-fileupload');
|
|
const cors = require('cors');
|
|
const morgan = require('morgan');
|
|
const _ = require('lodash');
|
|
|
|
//------------------------------------------------------
|
|
var vmessListString='';
|
|
var bak='';
|
|
|
|
var isRun=false;
|
|
|
|
var freeVersionString="";
|
|
var fullVersionString="";
|
|
//-----------------------------------------------------
|
|
//var execProcess = require("./exec_process.js");
|
|
|
|
var execProcess = function(command, cb){
|
|
var child = exec(command, function(err, stdout, stderr){
|
|
if(err != null){
|
|
return cb(new Error(err), null);
|
|
}else if(typeof(stderr) != "string"){
|
|
return cb(new Error(stderr), null);
|
|
}else{
|
|
return cb(null, stdout);
|
|
}
|
|
});
|
|
}
|
|
|
|
//----------------------------------------------------
|
|
var optionsArray = [];
|
|
var options0 = {
|
|
index:0,
|
|
host : 'github.com',
|
|
port : 443,
|
|
path : '/Alvin9999/new-pac/wiki/v2ray%E5%85%8D%E8%B4%B9%E8%B4%A6%E5%8F%B7',
|
|
method : 'GET',
|
|
timeout: 8000
|
|
}
|
|
var options1 = {
|
|
index :1,
|
|
host : 'awesomeopensource.com',
|
|
port : 443,
|
|
path : '/project/iwxf/free-v2ray?categoryPage=11',///project/iwxf/free-v2ray?categoryPage=11',
|
|
method : 'GET',
|
|
timeout: 8000
|
|
}
|
|
var options2 = {
|
|
index :2,
|
|
host : 'github.com',
|
|
port : 443,
|
|
path : '/iwxf/free-v2ray',///project/iwxf/free-v2ray?categoryPage=11',
|
|
method : 'GET',
|
|
timeout: 8000
|
|
}
|
|
var options3 = {
|
|
index :3,
|
|
host : 'github.com',
|
|
port : 443,
|
|
path : '/selierlin/Share-SSR-V2ray/blob/master/1-share-ssr-v2ray.md',///project/iwxf/free-v2ray?categoryPage=11',
|
|
method : 'GET',
|
|
timeout: 8000
|
|
}
|
|
|
|
|
|
|
|
var originalAmountArray=[];
|
|
var actualAmountArray=[];
|
|
var vmessStringArray=[];
|
|
var bakVmessStringArray=[];
|
|
|
|
var vmessSecretStringArray=[];
|
|
var bakST="";
|
|
|
|
//----------------------------------------------------
|
|
optionsArray.push(options0);
|
|
optionsArray.push(options1);
|
|
optionsArray.push(options2);
|
|
optionsArray.push(options3);
|
|
|
|
var valueArray=[9,5,3,8,0,2,7,4,1,6];
|
|
//var wordStringMaxStandard="f%D#gs*SvW)$KPaQ8u:X;'z9>?ZbM1dh3jlR6E(nIpBrVt|w0A25<eC7~!y@oJ4qTU={L}[iG]xkmYHc&^_FO+`-N,./";
|
|
//var wordStringMaxOriginal="*SvW)$KPaQ8u:X;'z9>?ZbM1dh3jlR6E(nIpBrVt|w0A25<eC7~!y@of%D#gsJ4qTU={L}[iG]xkmYHc&^_FO+`-N,./";
|
|
var wordStringMaxStandard="\\\"f%D#gs*SvW)$KPaQ8u:X;'z9>?ZbM1dh3jlR6E(nIpBrVt|w0A25<eC7~!y@oJ4qTU={L}[iG]xkmYHc&^_FO+`-N,./";
|
|
var wordStringMaxOriginal="\\\"*SvW)$KPaQ8u:X;'z9>?ZbM1dh3jlR6E(nIpBrVt|w0A25<eC7~!y@of%D#gsJ4qTU={L}[iG]xkmYHc&^_FO+`-N,./";
|
|
|
|
function decodeASCKeyWithOffset(key,offset){
|
|
var offset1=key.length-offset;
|
|
var s1=key.substring(0,offset1*2);
|
|
var s2=key.substring(offset1*2,key.length);
|
|
|
|
return s2+s1;
|
|
}
|
|
function encodeASCKeyWithOffset(key,offset){
|
|
|
|
var s1=key.substring(0,offset*2);
|
|
var s2=key.substring(offset*2,key.length);
|
|
|
|
return s2+s1;
|
|
}
|
|
|
|
function getRandomWordStringMax(s){
|
|
var h='';
|
|
var t=s;
|
|
for (var i=0;i<s.length;i++){
|
|
v= Math.floor((Math.random()*t.length));
|
|
h=h+t[v];
|
|
t=t.substring(0,v)+t.substring(v+1,t.length);
|
|
}
|
|
|
|
return h;
|
|
|
|
}
|
|
function getASCStringFromWordStringMax(s){
|
|
var h='';
|
|
var c='';
|
|
var numberString='';
|
|
var n=-1;
|
|
for (var i=0;i<s.length;i++){
|
|
c=s[i];
|
|
n = wordStringMaxStandard.indexOf(c);
|
|
if(n>9)
|
|
numberString=n.toString();
|
|
else
|
|
numberString='0'+n.toString();
|
|
h=h+numberString;
|
|
|
|
}
|
|
return h;
|
|
|
|
}
|
|
function encodeString(wordStringMax,s){
|
|
|
|
var valueArray=[9,5,3,8,0,2,7,4,1,6];
|
|
var returnString="";
|
|
var t="";
|
|
var t1="";
|
|
var step=0;
|
|
var ttt="";
|
|
for(var i=0;i<s.length;i++){
|
|
|
|
var c=s[i];
|
|
if(c=='\r'){
|
|
i=i+1;
|
|
c=s[i];
|
|
if(c=='\n'){
|
|
|
|
returnString=returnString+t+"\r\n";
|
|
if(step==7){
|
|
|
|
}
|
|
if(step==8){
|
|
|
|
}
|
|
step=step+1;
|
|
|
|
if(step==7){
|
|
|
|
}
|
|
if(step==8){
|
|
|
|
}
|
|
ttt="";
|
|
t="";
|
|
t1="";
|
|
}
|
|
|
|
}else if(c=='\n'){
|
|
|
|
returnString=returnString+t+"\n";
|
|
step=step+1;
|
|
|
|
if(step==7){
|
|
|
|
}
|
|
if(step==8){
|
|
|
|
}
|
|
t="";
|
|
|
|
}else{
|
|
|
|
var n = wordStringMax.indexOf(c);
|
|
var k=step % 10;
|
|
var m=valueArray[k] ;
|
|
var p=n+m +i ;
|
|
|
|
p=p % wordStringMax.length;
|
|
t=t+wordStringMax[p];
|
|
t1=t1+c;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return returnString;// t;
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
var newString=getRandomWordStringMax(wordStringMaxStandard);
|
|
console.log(newString);
|
|
var s=encodeString(newString,"123==\r\n");
|
|
console.log(s);
|
|
|
|
var keyString0=getASCStringFromWordStringMax(newString);
|
|
console.log(keyString0);
|
|
var keyString=encodeASCKeyWithOffset(keyString0,10);
|
|
console.log(keyString);
|
|
|
|
*/
|
|
|
|
//var wordStringMaxOriginal="*SvW)$KPaQ8u:X;'z9>?ZbM1dh3jlR6E(nIpBrVt|w0A25<eC7~!y@of%D#gsJ4qTU={L}[iG]xkmYHc&^_FO+`-N,./";
|
|
//var wordStringMaxOriginal="UGWgnEYMiErDTIUPHnnAhiRQSZmBeWhkddSicrCXNDRlDjRnDhBmcumKlBDbwMdogsbKInDncmyioAeEkzkcECwOPxBn";
|
|
|
|
var wordStringMaxFull="";
|
|
var globalStep=0;
|
|
var d=0;
|
|
|
|
var aaa="888\r\n9999";
|
|
|
|
function getASCWordStringMax(s){
|
|
var h='';
|
|
var c='';
|
|
var numberString='';
|
|
var n=-1;
|
|
for (var i=0;i<s.length;i++){
|
|
c=s[i];
|
|
n = wordStringMaxStandard.indexOf(c);
|
|
if(n>9)
|
|
numberString=n.toString();
|
|
else
|
|
numberString='0'+n.toString();
|
|
h=h+numberString;
|
|
|
|
}
|
|
return h;
|
|
|
|
|
|
}
|
|
|
|
function encodeString(wordStringMax,s){
|
|
|
|
var returnString="";
|
|
|
|
|
|
|
|
var t="";
|
|
var t1="";
|
|
var step=0;
|
|
|
|
var ttt="";
|
|
|
|
for(var i=0;i<s.length;i++){
|
|
|
|
var c=s[i];
|
|
if(c=='\r'){
|
|
i=i+1;
|
|
c=s[i];
|
|
if(c=='\n'){
|
|
|
|
returnString=returnString+t+"\r\n";
|
|
if(step==7){
|
|
|
|
}
|
|
if(step==8){
|
|
|
|
}
|
|
step=step+1;
|
|
|
|
if(step==7){
|
|
|
|
}
|
|
if(step==8){
|
|
|
|
}
|
|
ttt="";
|
|
t="";
|
|
t1="";
|
|
}
|
|
|
|
}else if(c=='\n'){
|
|
|
|
returnString=returnString+t+"\n";
|
|
step=step+1;
|
|
|
|
if(step==7){
|
|
|
|
}
|
|
if(step==8){
|
|
|
|
}
|
|
t="";
|
|
|
|
}else{
|
|
|
|
var n = wordStringMax.indexOf(c);
|
|
var k=step % 10;
|
|
var m=valueArray[k] ;
|
|
var p=n+m +i ;
|
|
|
|
p=p % wordStringMax.length;
|
|
t=t+wordStringMax[p];
|
|
t1=t1+c;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return returnString;// t;
|
|
|
|
}
|
|
function encodeString00(wordStringMax,s){
|
|
var valueArray=[9,5,3,8,0,2,7,4,1,6];
|
|
var returnString="";
|
|
var t="";
|
|
var t1="";
|
|
var step=0;
|
|
var ttt="";
|
|
|
|
for(var i=0;i<s.length;i++){
|
|
|
|
var c=s[i];
|
|
var n = wordStringMax.indexOf(c);
|
|
var k=step % 10;
|
|
var m=valueArray[k] ;
|
|
var p=n+m +i ;
|
|
|
|
p=p % wordStringMax.length;
|
|
t=t+wordStringMax[p];
|
|
t1=t1+c;
|
|
|
|
}
|
|
returnString=returnString+t ;
|
|
return returnString;
|
|
|
|
}
|
|
function encodeString0(wordStringMax,s){
|
|
|
|
var returnString="";
|
|
var t="";
|
|
var t1="";
|
|
var step=0;
|
|
var ttt="";
|
|
|
|
for(var i=0;i<s.length;i++){
|
|
|
|
var c=s[i];
|
|
var n = wordStringMax.indexOf(c);
|
|
var k=step % 10;
|
|
var m=valueArray[k] ;
|
|
var p=n+m +i ;
|
|
|
|
p=p % wordStringMax.length;
|
|
t=t+wordStringMax[p];
|
|
t1=t1+c;
|
|
|
|
}
|
|
returnString=returnString+t +"\n";
|
|
return returnString;
|
|
|
|
}
|
|
|
|
|
|
function decodeS(wordStringMax,s){
|
|
|
|
var returnString="";
|
|
var t="";
|
|
var t1="";
|
|
var step=0;
|
|
|
|
var ttt="";
|
|
|
|
for(var i=0;i<s.length;i++){
|
|
|
|
var c=s[i];
|
|
|
|
if(c=='\r'){
|
|
|
|
i=i+1;
|
|
c=s[i];
|
|
if(c=='\n'){
|
|
|
|
returnString=returnString+t+"\r\n";
|
|
step=step+1;
|
|
t="";
|
|
ttt="";
|
|
|
|
}
|
|
|
|
}else if(c=='\n'){
|
|
|
|
returnString=returnString+t+"\n";
|
|
step=step+1;
|
|
t="";
|
|
ttt="";
|
|
|
|
}else{
|
|
|
|
var p = wordStringMax.indexOf(c);
|
|
var k = step % 10;
|
|
var m = valueArray[k];
|
|
var v = 0;
|
|
while ((v+p) < (m + i ))
|
|
{
|
|
v=v+ wordStringMax.length;
|
|
}
|
|
var n =p+v - m - i;
|
|
if (n == wordStringMax.length) n = 0;
|
|
t = t + wordStringMax[n];
|
|
|
|
}
|
|
}
|
|
|
|
return returnString;// t;
|
|
|
|
}
|
|
|
|
function decodeHTML(index, htmlString){
|
|
|
|
|
|
switch(index){
|
|
case 0:{//host : 'github.com',
|
|
//port : 443,
|
|
//path : '/Alvin9999/new-pac/wiki/v2ray%E5%85%8D%E8%B4%B9%E8%B4%A6%E5%8F%B7',
|
|
var tems='';
|
|
var s=htmlString;
|
|
var exitNumber=false;
|
|
var errorNumber=false;
|
|
|
|
var tStringArray=[];
|
|
do{
|
|
var x=s.indexOf('vmess://');
|
|
if (x==-1){
|
|
exitNumber=true;
|
|
break;
|
|
}
|
|
var l=s.length;
|
|
var sub=s.substring(x,l);//l-1 correct
|
|
|
|
var l1=sub.length;
|
|
var x1=sub.indexOf('</p');
|
|
|
|
if(x1==-1){
|
|
//errorNumber=true;
|
|
break;
|
|
}
|
|
var ts=sub.substring(0,x1) ;//x1-1 correct
|
|
tems=tems+ts +'\r\n';
|
|
tStringArray.push(ts +'\r\n');
|
|
s=sub.substring( x1, l1);// l1-1 correct
|
|
|
|
}while (exitNumber==false);
|
|
|
|
if(errorNumber==false){
|
|
|
|
vmessListString=vmessListString + tems;
|
|
vmessStringArray.push(tStringArray);
|
|
globalStep=globalStep+1;
|
|
|
|
}
|
|
break;
|
|
}
|
|
case 1:{
|
|
|
|
var tems='';
|
|
var s=htmlString;
|
|
var exitNumber=false;
|
|
var errorNumber=false;
|
|
|
|
var tStringArray=[];
|
|
var n=0;
|
|
do{
|
|
var x=s.indexOf('vmess://');
|
|
if (x==-1){
|
|
exitNumber=true;
|
|
break;
|
|
}
|
|
var l=s.length;
|
|
var sub=s.substring(x,l-1 );//l correct
|
|
var x1=sub.indexOf('</code>');
|
|
if(x1==-1){
|
|
errorNumber=true;
|
|
break;
|
|
}
|
|
var tems=sub.substring(0,x1-1) ;//x1 correct
|
|
break;
|
|
|
|
}while (exitNumber==false);
|
|
var h='';
|
|
var ts="";
|
|
for(var i=0;i<tems.length;i++){
|
|
|
|
h=tems[i];
|
|
if(h=='\n'){
|
|
|
|
tems=tems+ts +'\r\n';
|
|
tStringArray.push(ts +'\r\n');
|
|
ts="";
|
|
|
|
}else{
|
|
|
|
ts =ts+h;
|
|
|
|
}
|
|
|
|
}
|
|
if(errorNumber==false){
|
|
|
|
vmessListString=vmessListString+tems;
|
|
vmessStringArray.push(tStringArray);
|
|
globalStep=globalStep+1;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case 2:{
|
|
|
|
var tems='';
|
|
var s=htmlString;
|
|
var exitNumber=false;
|
|
var errorNumber=false;
|
|
|
|
var tStringArray=[];
|
|
var n=0;
|
|
do{
|
|
var x=s.indexOf('vmess://');
|
|
if (x==-1){
|
|
exitNumber=true;
|
|
break;
|
|
}
|
|
var l=s.length;
|
|
var sub=s.substring(x,l-1 );//l correct
|
|
var x1=sub.indexOf('</code>');
|
|
if(x1==-1){
|
|
errorNumber=true;
|
|
break;
|
|
}
|
|
var tems=sub.substring(0,x1-1) ;//x1 correct
|
|
|
|
break;
|
|
|
|
}while (exitNumber==false);
|
|
if(errorNumber==false){
|
|
|
|
vmessListString=vmessListString+tems;
|
|
globalStep=globalStep+1;
|
|
vmessStringArray.push(tStringArray);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case 3:{
|
|
|
|
var tems='';
|
|
var s=htmlString;
|
|
var exitNumber=false;
|
|
var errorNumber=false;
|
|
|
|
var tStringArray=[];
|
|
do{
|
|
var x=s.indexOf('vmess://');
|
|
if (x==-1){
|
|
|
|
exitNumber=true;
|
|
|
|
break;
|
|
}
|
|
var l=s.length;
|
|
var sub=s.substring(x,l-1);//l correct
|
|
|
|
var l1=sub.length;
|
|
var x1=sub.indexOf('</p>');
|
|
|
|
if(x1==-1){
|
|
errorNumber=true;
|
|
break;
|
|
}
|
|
|
|
var ts=sub.substring(0,x1-1) ;//x1 correct
|
|
|
|
tems=tems+ts +'\r\n';
|
|
tStringArray.push(ts + '\r\n');
|
|
s=sub.substring( x1, l1-1 );//l1-x1 correct
|
|
|
|
}while (exitNumber==false);
|
|
|
|
if(errorNumber==false){
|
|
|
|
vmessListString=vmessListString+tems;
|
|
globalStep=globalStep+1;
|
|
vmessStringArray.push(tStringArray);
|
|
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
function getFormatTwoDigitalString(s){
|
|
if(s.length==1){
|
|
return "0"+s;
|
|
}else{
|
|
return s;
|
|
}
|
|
}
|
|
function getFormatFourDigitalString(s){
|
|
if(s.length==1){
|
|
return "000"+s;
|
|
}else if(s.length==2){
|
|
return "00"+s;
|
|
}else if(s.length==3){
|
|
return "0"+s;
|
|
}else{
|
|
return s;
|
|
}
|
|
}
|
|
var fileString0="";
|
|
var aFileArray=[];
|
|
var bFileArray=[];
|
|
var aStringArray=[];
|
|
var bStringArray=[];
|
|
|
|
//a.txt b.txt
|
|
var aFileString="";
|
|
var aAmount=0;
|
|
var aString="";
|
|
var bAmount=0;
|
|
var bFileString="";
|
|
var bString="";
|
|
//------------------------------------------------------------------------------------------
|
|
function formatLinkInfo(){
|
|
|
|
aFileArray=[];
|
|
bFileArray=[];
|
|
aStringArray=[];
|
|
bStringArray=[];
|
|
var tArray=[];
|
|
var tAmount=0;
|
|
var isNewVersion=false;
|
|
|
|
if(vmessStringArray.length==0){
|
|
isNewVersion=false;
|
|
}else{
|
|
|
|
if(vmessStringArray.length!=bakVmessStringArray.length){
|
|
isNewVersion=true;
|
|
}else{
|
|
|
|
var isExit=false;
|
|
for(var j=0;j<vmessStringArray.length;j++){
|
|
if(isExit){
|
|
break;
|
|
}
|
|
if(vmessStringArray[j].length!=bakVmessStringArray[j].length){
|
|
|
|
isNewVersion=true;
|
|
break;
|
|
|
|
}
|
|
for(var i=0;i<vmessStringArray[j].length;i++){
|
|
|
|
if(vmessStringArray[j][i]!=bakVmessStringArray[j][i]){
|
|
isExit=true;
|
|
break;
|
|
}
|
|
//console.log(vmessStringArray[j][i]);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log("================="+tArray.length);
|
|
for(var j=0;j<vmessStringArray.length;j++){
|
|
tAmount=tAmount+vmessStringArray[j].length;
|
|
for(var i=0;i<vmessStringArray[j].length;i++){
|
|
|
|
tArray.push(vmessStringArray[j][i]);//tArray[i]+'\r\n';
|
|
//console.log(vmessStringArray[j][i]);
|
|
|
|
}
|
|
}
|
|
console.log("================="+tArray.length);
|
|
|
|
|
|
|
|
|
|
var maxA=5;
|
|
var maxB=10;
|
|
|
|
var tDivA=Math.floor(tAmount/maxA);
|
|
var tModA=tAmount % maxA;
|
|
if (tModA!=0) tDivA=tDivA+1;
|
|
|
|
//-----------------------------------------------------
|
|
|
|
var tDivB=Math.floor(tAmount/maxB);
|
|
var tModB=tAmount % maxB;
|
|
if (tModB!=0) tDivB=tDivB+1;
|
|
|
|
console.log(tAmount+'|'+maxA+'|'+maxB+'|' +tDivA+"|"+tModA+"|"+tDivB+"|"+tModB+"|");
|
|
|
|
var amountAFileArray=tDivA;
|
|
var amountBFileArray=tDivB;
|
|
|
|
//aStringArray.push(vmessListString);
|
|
//bStringArray.push(vmessListString);
|
|
|
|
|
|
vmessSecretStringArray=[];
|
|
|
|
const _MaxTrial=5;
|
|
const _MaxFull=10;
|
|
for(var j=0;j<tDivA;j++){
|
|
if(tModA!=0){
|
|
var h='';
|
|
|
|
if(j==tDivA-1){
|
|
for(var i=0;i<_MaxTrial;i++)
|
|
h=h+tArray[tArray.length-1-i];//+'\r\n';
|
|
|
|
}else{
|
|
for(var i=0;i<_MaxTrial;i++)
|
|
h=h+tArray[j*_MaxTrial+i];//+'\r\n';
|
|
|
|
}
|
|
aStringArray.push(h);
|
|
|
|
}else{
|
|
|
|
var h='';
|
|
for(var i=0;i<_MaxTrial;i++)
|
|
h=h+tArray[j*_MaxTrial+i] +'\r\n';
|
|
|
|
aStringArray.push(h);
|
|
}
|
|
}
|
|
|
|
for(var j=0;j<tDivB;j++){
|
|
|
|
var h='';
|
|
// var h0='';
|
|
// var h1='';
|
|
// var h2='';
|
|
// var h3='';
|
|
|
|
if(tModB!=0){
|
|
|
|
|
|
//var ttt='';
|
|
if(j==tDivB-1){
|
|
|
|
|
|
|
|
for(var i=0;i<_MaxFull;i++)
|
|
h=h+tArray[tArray.length-1-i];//+'\r\n';
|
|
|
|
|
|
|
|
/*
|
|
for(var i=0;i<_MaxFull;i++){//5
|
|
//h=h+tArray[tArray.length-1-i];//+'\r\n';
|
|
ttt=tArray[tArray.length-1-i];
|
|
|
|
h1=ttt.substring(0,ttt.length-10);
|
|
h2=ttt.substring(ttt.length-9,ttt.length-4);
|
|
h3=ttt.substring(ttt.length-3,ttt.length-1);
|
|
h=h+h1+h3;
|
|
h0=h0+h2;
|
|
|
|
}
|
|
*/
|
|
|
|
}else{
|
|
|
|
|
|
|
|
for(var i=0;i<_MaxFull;i++)
|
|
h=h+tArray[j*_MaxFull+i];//+'\r\n';
|
|
|
|
|
|
|
|
/*
|
|
for(var i=0;i<_MaxFull;i++){
|
|
//h=h+tArray[j*_MaxFull+i] ;//+'\r\n';
|
|
ttt=tArray[j*_MaxFull+i];
|
|
|
|
h1=ttt.substring(0,ttt.length-10);
|
|
h2=ttt.substring(ttt.length-9,ttt.length-4);
|
|
h3=ttt.substring(ttt.length-3,ttt.length-1);
|
|
h=h+h1+h3;
|
|
h0=h0+h2;
|
|
}
|
|
|
|
*/
|
|
}
|
|
bStringArray.push(h);
|
|
}else{
|
|
|
|
|
|
var h='';
|
|
for(var i=0;i<_MaxFull;i++)
|
|
h=h+tArray[j*_MaxFull+i] +'\r\n';
|
|
|
|
bStringArray.push(h);
|
|
/*
|
|
|
|
for(var i=0;i<_MaxFull;i++)
|
|
//h=h+tArray[j*_MaxFull+i];//+'\r\n';
|
|
|
|
var ttt=tArray[j*_MaxFull+i];
|
|
h1=ttt.substring(0,ttt.length-10);
|
|
h2=ttt.substring(ttt.length-9,ttt.length-4);
|
|
h3=ttt.substring(ttt.length-3,ttt.length-1);
|
|
|
|
h=h+h1+h3;
|
|
h0=h0+h2;
|
|
bStringArray.push(h);
|
|
*/
|
|
}
|
|
|
|
//vmessSecretStringArray.push(h2);
|
|
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
for(var j=0;j<amountAFileArray;j++){
|
|
//aFileArray.push("a"+ j.toString()+".txt");
|
|
aFileArray.push("a"+ j.toString()+".txt");
|
|
}
|
|
|
|
for(var j=0;j<amountBFileArray;j++){
|
|
//bFileArray.push("b"+ j.toString()+".txt");
|
|
bFileArray.push("b"+ j.toString()+".txt");
|
|
}
|
|
|
|
|
|
|
|
today = new Date();
|
|
|
|
var yeT=today.getFullYear();
|
|
var moT=today.getMonth()+1;
|
|
var daT=today.getDate();
|
|
var hoT=today.getHours();
|
|
var miT=today.getMinutes();
|
|
|
|
var sT=yeT.toString()+getFormatTwoDigitalString(moT.toString())+getFormatTwoDigitalString(daT.toString())+getFormatTwoDigitalString(hoT.toString())+getFormatTwoDigitalString(miT.toString());
|
|
|
|
console.log("###"+sT);
|
|
if(isNewVersion){
|
|
|
|
bakST=sT;
|
|
|
|
}else{
|
|
|
|
sT=bakST;
|
|
|
|
}
|
|
|
|
aFileString="a.txt";
|
|
//aString="{v:\""+sT+"\",u:\"a\",a:"+aFileArray.length.toString()+"}";//10
|
|
aString="{\"v\":\""+sT+"\",\"u\":\"a\",\"a\":\""+aFileArray.length.toString()+"\"}";//10
|
|
|
|
freeVersionString=sT;
|
|
//bString="{\"v\":\"303\",\"m\":\"https://alohabooster.teriyaki.workers.dev/\",\"u\":\"b\",\"a\":\"5\"}";//5
|
|
|
|
bFileString="b.txt";
|
|
//bString="{v:\""+sT+"\",m:\"https://alohabooster.teriyaki.workers.dev/\",u:\"b\",a:\"+bFileArray.length.toString()+\"}";//5
|
|
bString="{\"v\":\""+sT+"\",\"m\":\"https://alohabooster.teriyaki.workers.dev/\",\"u\":\"b\",\"a\":\""+bFileArray.length.toString()+"\"}";//5
|
|
fullVersionString=sT;
|
|
|
|
}
|
|
async function getPage(urlString) {
|
|
const url = urlString;
|
|
|
|
return new Promise((resolve) => {
|
|
https.get(url, res => {
|
|
|
|
let data = '';
|
|
res.on('data', chunk => { data += chunk })
|
|
|
|
res.on('end', () => {
|
|
|
|
//resolve(do_awesome_things_with_data(data));
|
|
console.log("--->"+data);
|
|
|
|
})
|
|
})
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
function getASCStringFromDigitalString(s)//WordStringMaxFromASCString( s)
|
|
{
|
|
|
|
var h = "";
|
|
var t = "";
|
|
var n = -1;
|
|
var l = s.length / 2;
|
|
//console.log(l);
|
|
for (var i = 0; i < l; i++)
|
|
{
|
|
|
|
var c1 = s[i * 2];
|
|
var c2 = s[i * 2+1];
|
|
h = "";
|
|
if (c1 == '0')
|
|
h = h+c2;
|
|
else
|
|
h = h+ c1 + c2 ;
|
|
|
|
n=parseInt (h);
|
|
var c = wordStringMaxStandard[n];
|
|
t = t + c;
|
|
|
|
}
|
|
|
|
return t;
|
|
|
|
}
|
|
|
|
function getDigitalStringFromASCString(s){//getASCStringFromWordStringMax(s){
|
|
var h='';
|
|
var c='';
|
|
var numberString='';
|
|
var n=-1;
|
|
|
|
for (var i=0;i<s.length;i++){
|
|
c=s[i];
|
|
n = wordStringMaxStandard.indexOf(c);
|
|
if(n>9)
|
|
numberString=n.toString();
|
|
else if(n==-1){
|
|
|
|
}else{
|
|
numberString='0'+n.toString();
|
|
|
|
}
|
|
|
|
h=h+numberString;
|
|
|
|
|
|
}
|
|
return h;
|
|
|
|
}
|
|
|
|
async function writeLinkInfo1(wordStringMax){
|
|
|
|
var errorNumber=0;
|
|
var aString1="[core]\r\nrepositoryformatversion = 0\r\nfilemode = false\r\nbare = false\r\nlogallrefupdates = true\r\nsymlinks = false\r\nignorecase = true\r\n[remote \"origin\"]\r\nurl = https://alohabooster:Wangzheng2020__@github.com/alohabooster/alohabooster.git\r\nfetch = +refs/heads/*:refs/remotes/origin/*\r\n[branch \"master\"]\r\nremote = origin\r\nmerge = refs/heads/master";
|
|
var aString2="[core]\r\nrepositoryformatversion = 0\r\nfilemode = false\r\nbare = false\r\nlogallrefupdates = true\r\nsymlinks = false\r\nignorecase = true\r\n[remote \"origin\"]\r\nurl = https://alohabooster:Wangzheng2020__@gitea.com/alohabooster/alohabooster.git\r\nfetch = +refs/heads/*:refs/remotes/origin/*\r\n[branch \"master\"]\r\nremote = origin\r\nmerge = refs/heads/master";
|
|
var aString3="[core]\r\nrepositoryformatversion = 0\r\nfilemode = false\r\nbare = false\r\nlogallrefupdates = true\r\nsymlinks = false\r\nignorecase = true\r\n[remote \"origin\"]\r\nurl = https://alohabooster:Wangzheng2020__@gitlab.com/alohabooster/alohabooster.git\r\nfetch = +refs/heads/*:refs/remotes/origin/*\r\n[branch \"master\"]\r\nremote = origin\r\nmerge = refs/heads/master";
|
|
var aString4="[core]\r\nrepositoryformatversion = 0\r\nfilemode = false\r\nbare = false\r\nlogallrefupdates = true\r\nsymlinks = false\r\nignorecase = true\r\n[remote \"origin\"]\r\nurl = https://alohabooster:Wangzheng2020__@bitbucket.org/alohabooster/alohabooster.git\r\nfetch = +refs/heads/*:refs/remotes/origin/*\r\n[branch \"master\"]\r\nremote = origin\r\nmerge = refs/heads/master";
|
|
|
|
await fs.writeFile(".git/config", aString3, function (err) { //gitlab
|
|
console.log('config gitlab ok->');errorNumber=0; });
|
|
await execProcess("sh command1.sh", function(err, response){//
|
|
if(!err) {
|
|
|
|
console.log('execute ok');errorNumber=0;
|
|
// usage
|
|
if(wordStringMax.length>0){
|
|
|
|
|
|
var t="https://shoujigame.com/Grapetreetown306__/setKey/"+wordStringMax;
|
|
console.log(t);
|
|
(async () => await getPage(t))();
|
|
|
|
fs.writeFile("/home/kavatec/public_html/alohabooster/data.txt", getDigitalStringFromASCString(encodeString00(wordStringMaxOriginal,freeVersionString)), function (err) {
|
|
});
|
|
|
|
fs.writeFile("/home/kavatec/public_html/alohabooster/6727179120/data.txt", getDigitalStringFromASCString(encodeString00(wordStringMaxOriginal, fullVersionString)), function (err) {
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
else {console.log('execute error'+err);errorNumber=1};
|
|
});
|
|
|
|
setTimeout(function() {
|
|
//your code to be executed after 1 second
|
|
|
|
fs.writeFile(".git/config", aString4, function (err) {
|
|
|
|
if(!err) {
|
|
console.log('config bitbucket ok->');errorNumber=0;
|
|
execProcess("sh command1.sh", function(err, response){//
|
|
if(!err){
|
|
|
|
console.log('execute ok');
|
|
|
|
}else {
|
|
|
|
console.log('execute error'+err);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
else {console.log('execute error->'+err);errorNumber=1};
|
|
});
|
|
|
|
}, 10000);
|
|
|
|
|
|
|
|
setTimeout(function() {
|
|
//your code to be executed after 1 second
|
|
|
|
fs.writeFile(".git/config", aString2, function (err) {
|
|
|
|
if(!err) {
|
|
console.log('config gitea ok->');errorNumber=0;
|
|
execProcess("sh command1.sh", function(err, response){//
|
|
if(!err){
|
|
|
|
console.log('execute ok');
|
|
|
|
}else {
|
|
|
|
console.log('execute error '+err);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
else {console.log('execute error->'+err);errorNumber=1};
|
|
});
|
|
|
|
}, 20000);
|
|
|
|
|
|
/*
|
|
setTimeout(function() {
|
|
//your code to be executed after 1 second
|
|
|
|
fs.writeFile(".git/config", aString1, function (err) {
|
|
|
|
if(!err) {
|
|
console.log('config github ok->');errorNumber=0;
|
|
execProcess("sh command1.sh", function(err, response){//
|
|
if(!err){
|
|
|
|
console.log('execute ok');
|
|
|
|
}else {
|
|
|
|
console.log('execute error'+err);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
else {console.log('execute error->'+err);errorNumber=1};
|
|
});
|
|
|
|
}, 30000);
|
|
|
|
*/
|
|
}
|
|
async function writeLinkInfo(){
|
|
|
|
if(aFileArray.length>0){
|
|
|
|
console.log(aStringArray[0]);
|
|
await fs.writeFile("c0.txt", aStringArray[0], function (err) {});
|
|
|
|
await fs.writeFile("d0.txt", encodeString(wordStringMaxOriginal, aStringArray[0]), function (err) {});
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log("!--!");
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getCall(index, isWriteToFile, callbackFunction) {
|
|
|
|
var options=optionsArray[index];
|
|
|
|
//initialize options values, the value of the method can be changed to POST to make https post calls
|
|
//var userAccessToken = 'CAAKoIMGu5SAyfOyVhugi7cZAaZA1kHzjrdLvtPlndoKzMJ8xZBtR3YV2iX39FSnhxK1lvtfYXO5FvcbK4MVGJphxeYDZC7HJ5FCmhOr2Ys8ZBG9qYNRSfFGuzoeRgwZBdliKvoW6YPl41b8i3dfrTpR98gFAm6qag9vYM2yD0aEv47fnWQWF1SoXRs6PFFrFu5XOe';
|
|
//var appAccessToken = '24562343562751562|hPEXIpDl0CXt0tNJ';
|
|
|
|
var str = '';
|
|
var decodeString='';
|
|
//making the https get call
|
|
|
|
var getReq = https.request(options, function(res) {
|
|
res.on('data', function(data) {
|
|
str += data;
|
|
});
|
|
res.on("end", function() {
|
|
|
|
decodeHTML(index, str);
|
|
console.clear;
|
|
|
|
if(isWriteToFile){
|
|
|
|
|
|
console.log("------formatLinkInfo");
|
|
formatLinkInfo();
|
|
console.log("------writeLinkInfo");
|
|
writeLinkInfo();
|
|
console.log("------callbackFunction");
|
|
callbackFunction();
|
|
|
|
|
|
|
|
}else{
|
|
return callbackFunction();
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
//end the request
|
|
|
|
|
|
getReq.end();
|
|
|
|
getReq.on('timeout', () => {
|
|
getReq.abort();
|
|
});
|
|
|
|
getReq.on('error', function(err){
|
|
|
|
console.log("Error: ", err);
|
|
var t=[];
|
|
vmessStringArray.push(t);
|
|
|
|
if(isWriteToFile){
|
|
|
|
console.log("------formatLinkInfo");
|
|
formatLinkInfo();
|
|
console.log("------writeLinkInfo");
|
|
writeLinkInfo();
|
|
//console.log("------callbackFunction");
|
|
}
|
|
callbackFunction();
|
|
|
|
});
|
|
|
|
|
|
}
|
|
//----------------------------------------------------------------------
|
|
var today = new Date();
|
|
var time = today.getFullYear()+'/'+(today.getMonth()+1)+'/'+today.getDate()+' '+ today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
|
|
console.log('change on time:'+time.toString());
|
|
|
|
async function startToRun(){
|
|
|
|
vmessListString='';
|
|
isRun=true;
|
|
globalStep=0;
|
|
vmessStringArray=[];
|
|
|
|
|
|
|
|
await getCall(0, true,function(){
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
startToRun();
|
|
|
|
|
|
return;
|
|
|
|
|
|
//-----------------------------------------
|
|
// enable files upload
|
|
app.use(fileUpload({
|
|
createParentPath: true
|
|
}));
|
|
|
|
//add other middleware
|
|
app.use(cors());
|
|
app.use(bodyParser.json());
|
|
app.use(bodyParser.urlencoded({extended: true}));
|
|
app.use(morgan('dev'));
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
app.get('/stop/', async (req, res) => {
|
|
|
|
isRun=false;
|
|
res.send({
|
|
status: false,
|
|
message: 'stop'
|
|
});
|
|
|
|
});
|
|
app.get('/github/', async (req, res) => {
|
|
|
|
//execProcess.result
|
|
execProcess("command1.bat", function(err, response ){//sh command1.sh
|
|
if(!err){
|
|
console.log(response );
|
|
// return callbackFunction();
|
|
}else {
|
|
console.log(err);
|
|
// return callbackFunction();
|
|
}
|
|
|
|
});
|
|
|
|
res.send({
|
|
status: false,
|
|
message: 'git'
|
|
});
|
|
|
|
});
|
|
|
|
app.post('/upload/', async (req, res) => {
|
|
try {
|
|
if(!req.files) {
|
|
res.send({
|
|
status: false,
|
|
message: 'No file uploaded'
|
|
});
|
|
} else {
|
|
|
|
//Use the name of the input field (i.e. "avatar") to retrieve the uploaded file
|
|
let a = req.files.file;
|
|
|
|
|
|
a.mv('./' + a.name);
|
|
|
|
|
|
res.send({
|
|
status: false,
|
|
message: 'git'
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
} catch (err) {
|
|
res.status(500).send(err);
|
|
}
|
|
});
|
|
|
|
//---------------------------------------------------------------app
|
|
// default route
|
|
app.get("/", function (req, res) {
|
|
return res.send({ e: "f", i: "." });
|
|
});
|
|
|
|
app.get("/Grapetreetown306/", function (req, res) {
|
|
|
|
let user_id = req.params.id;
|
|
res.sendFile(path.join(__dirname, '/', "url.txt"));
|
|
|
|
});
|
|
|
|
app.listen(process.env.PORT || 3002, function () {
|
|
console.log("Node app is running on port 3002");
|
|
});
|
|
|
|
|
|
|