x
This commit is contained in:
@@ -0,0 +1,86 @@
|
|||||||
|
/**
|
||||||
|
* @title 怪兽插件下载
|
||||||
|
* @create_at 2022-07-04 16:05:44
|
||||||
|
* @description 🐒仅供学习,访问傻妞地址下载:http://${ app.ip }:${ app.port ?? "8080"}/api/fuckatm?title=hook&username=username&password=password
|
||||||
|
* @author 佚名
|
||||||
|
* @version v1.0.0
|
||||||
|
* @http GET /api/fuckatm
|
||||||
|
* @encrypt true
|
||||||
|
* @form {key: "autMan.title", "title": "默认标题", required: true, tooltip: "请求参数title为空时"}
|
||||||
|
* @form {key: "autMan.username", "title": "默认用户", required: true, tooltip: "请求参数username为空时"}
|
||||||
|
* @form {key: "autMan.password", "title": "默认密码", required: true, tooltip: "请求参数password为空时"}
|
||||||
|
*/
|
||||||
|
|
||||||
|
const plt = s.getPlatform()
|
||||||
|
const autMan = Bucket("autMan")
|
||||||
|
const base_url = "http://aut.zhelee.cn/plugin/"
|
||||||
|
|
||||||
|
class AESCipher {
|
||||||
|
constructor(key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
decrypt(encrypt) {
|
||||||
|
const encryptBuffer = Buffer.from(encrypt, 'base64');
|
||||||
|
const decipher = crypto.createDecipheriv('aes-256-cbc', this.key, encryptBuffer.slice(0, 16));
|
||||||
|
let decrypted = decipher.update(encryptBuffer.slice(16).toString('hex'), 'hex', 'utf8');
|
||||||
|
decrypted += decipher.final('utf8');
|
||||||
|
return decrypted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
if (req) {
|
||||||
|
let title = req.query("title")
|
||||||
|
if (!title) {
|
||||||
|
title = autMan.title ?? ""
|
||||||
|
}
|
||||||
|
if (!title) {
|
||||||
|
res.send("title不为空")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let username = req.query("username")
|
||||||
|
if (!username) {
|
||||||
|
username = autMan.username ?? ""
|
||||||
|
}
|
||||||
|
if (!username) {
|
||||||
|
res.send("username不为空")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let password = req.query("password")
|
||||||
|
if (!password) {
|
||||||
|
password = autMan.password ?? ""
|
||||||
|
}
|
||||||
|
if (!password) {
|
||||||
|
res.send("password不为空")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let { body } = request({
|
||||||
|
url: base_url + "download?" + strings.encodeQueryString({
|
||||||
|
title,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
version: "1",
|
||||||
|
dataType: "text"
|
||||||
|
}),
|
||||||
|
method: "POST",
|
||||||
|
})
|
||||||
|
console.log("==",body)
|
||||||
|
let key = username + "killsillygirltodeath109times"
|
||||||
|
key = Buffer.from(key)
|
||||||
|
key = key.length() > 32 ? key.slice(0, 32) : key.slice(0, 24)
|
||||||
|
let cipher = new AESCipher(key.toString())
|
||||||
|
res.send(cipher.decrypt(body))
|
||||||
|
let resp = request({
|
||||||
|
url: base_url + "remove?" + strings.encodeQueryString({
|
||||||
|
title: title,
|
||||||
|
username: username,
|
||||||
|
password: password,
|
||||||
|
version: "1",
|
||||||
|
}),
|
||||||
|
method: "POST",
|
||||||
|
})
|
||||||
|
console.log("remove", resp.body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
+30
-25
@@ -3,7 +3,6 @@ package core
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -15,30 +14,23 @@ import (
|
|||||||
|
|
||||||
// type Reason map[string]interface{}
|
// type Reason map[string]interface{}
|
||||||
|
|
||||||
func readEvent(body io.Reader) (string, error) {
|
// func readEvent(body io.Reader) (string, error) {
|
||||||
var event string
|
// var data []rune
|
||||||
|
// bufReader := bufio.NewReader(body)
|
||||||
|
// for {
|
||||||
|
// r, _, err := bufReader.ReadRune()
|
||||||
|
// if err != nil {
|
||||||
|
// return "", err
|
||||||
|
// }
|
||||||
|
// if r != '\n' {
|
||||||
|
// data = append(data, r)
|
||||||
|
// } else {
|
||||||
|
|
||||||
scanner := bufio.NewScanner(body)
|
// return strings.Replace(string(data), "data: ", "", 1), nil
|
||||||
|
// }
|
||||||
for scanner.Scan() {
|
// }
|
||||||
line := scanner.Text()
|
// panic(string(data))
|
||||||
|
// }
|
||||||
// 去掉换行符
|
|
||||||
line = strings.TrimSuffix(line, "\n")
|
|
||||||
|
|
||||||
// 判断是否是事件行
|
|
||||||
if strings.HasPrefix(line, "data: ") {
|
|
||||||
event = strings.TrimPrefix(line, "data: ")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
return event, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return event, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func MakeResponseObject(vm *goja.Runtime, resp *http.Response, responseType string) (*goja.Object, error) {
|
func MakeResponseObject(vm *goja.Runtime, resp *http.Response, responseType string) (*goja.Object, error) {
|
||||||
obj := vm.NewObject()
|
obj := vm.NewObject()
|
||||||
@@ -66,14 +58,27 @@ func MakeResponseObject(vm *goja.Runtime, resp *http.Response, responseType stri
|
|||||||
var closed = false
|
var closed = false
|
||||||
go func() {
|
go func() {
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
// var data2 []rune
|
||||||
|
var data []rune
|
||||||
|
bufReader := bufio.NewReader(resp.Body)
|
||||||
for {
|
for {
|
||||||
event, err := readEvent(resp.Body)
|
r, _, err := bufReader.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
evc <- err
|
evc <- err
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
// data2 = append(data2, r)
|
||||||
|
if r != '\n' {
|
||||||
|
data = append(data, r)
|
||||||
|
} else {
|
||||||
|
event := strings.TrimSpace(strings.Replace(string(data), "data: ", "", 1))
|
||||||
|
if event != "" {
|
||||||
evc <- event
|
evc <- event
|
||||||
}
|
}
|
||||||
|
data = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fmt.Println(string(data2))
|
||||||
time.Sleep(time.Minute * 5)
|
time.Sleep(time.Minute * 5)
|
||||||
if !closed {
|
if !closed {
|
||||||
close(evc)
|
close(evc)
|
||||||
|
|||||||
Reference in New Issue
Block a user