mirror of
https://github.com/bettercap/bettercap
synced 2025-07-06 13:02:12 -07:00
164 lines
3.9 KiB
Go
164 lines
3.9 KiB
Go
package js
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"encoding/base64"
|
|
|
|
"github.com/robertkrimen/otto"
|
|
)
|
|
|
|
func textEncode(call otto.FunctionCall) otto.Value {
|
|
argv := call.ArgumentList
|
|
argc := len(argv)
|
|
if argc != 1 {
|
|
return ReportError("textEncode: expected 1 argument, %d given instead.", argc)
|
|
}
|
|
|
|
arg := argv[0]
|
|
if (!arg.IsString()) {
|
|
return ReportError("textEncode: single argument must be a string.")
|
|
}
|
|
|
|
encoded := []byte(arg.String())
|
|
vm := otto.New()
|
|
v, err := vm.ToValue(encoded)
|
|
if err != nil {
|
|
return ReportError("textEncode: could not convert to []uint8: %s", err.Error())
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func textDecode(call otto.FunctionCall) otto.Value {
|
|
argv := call.ArgumentList
|
|
argc := len(argv)
|
|
if argc != 1 {
|
|
return ReportError("textDecode: expected 1 argument, %d given instead.", argc)
|
|
}
|
|
|
|
arg, err := argv[0].Export()
|
|
if err != nil {
|
|
return ReportError("textDecode: could not export argument value: %s", err.Error())
|
|
}
|
|
byteArr, ok := arg.([]uint8)
|
|
if !ok {
|
|
return ReportError("textDecode: single argument must be of type []uint8.")
|
|
}
|
|
|
|
decoded := string(byteArr)
|
|
v, err := otto.ToValue(decoded)
|
|
if err != nil {
|
|
return ReportError("textDecode: could not convert to string: %s", err.Error())
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func btoa(call otto.FunctionCall) otto.Value {
|
|
argv := call.ArgumentList
|
|
argc := len(argv)
|
|
if argc != 1 {
|
|
return ReportError("btoa: expected 1 argument, %d given instead.", argc)
|
|
}
|
|
|
|
arg := argv[0]
|
|
if (!arg.IsString()) {
|
|
return ReportError("btoa: single argument must be a string.")
|
|
}
|
|
|
|
encoded := base64.StdEncoding.EncodeToString([]byte(arg.String()))
|
|
v, err := otto.ToValue(encoded)
|
|
if err != nil {
|
|
return ReportError("btoa: could not convert to string: %s", err.Error())
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func atob(call otto.FunctionCall) otto.Value {
|
|
argv := call.ArgumentList
|
|
argc := len(argv)
|
|
if argc != 1 {
|
|
return ReportError("atob: expected 1 argument, %d given instead.", argc)
|
|
}
|
|
|
|
arg := argv[0]
|
|
if (!arg.IsString()) {
|
|
return ReportError("atob: single argument must be a string.")
|
|
}
|
|
|
|
decoded, err := base64.StdEncoding.DecodeString(arg.String())
|
|
if err != nil {
|
|
return ReportError("atob: could not decode string: %s", err.Error())
|
|
}
|
|
|
|
v, err := otto.ToValue(string(decoded))
|
|
if err != nil {
|
|
return ReportError("atob: could not convert to string: %s", err.Error())
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func gzipCompress(call otto.FunctionCall) otto.Value {
|
|
argv := call.ArgumentList
|
|
argc := len(argv)
|
|
if argc != 1 {
|
|
return ReportError("gzipCompress: expected 1 argument, %d given instead.", argc)
|
|
}
|
|
|
|
arg := argv[0]
|
|
if (!arg.IsString()) {
|
|
return ReportError("gzipCompress: single argument must be a string.")
|
|
}
|
|
|
|
uncompressedBytes := []byte(arg.String())
|
|
|
|
var writerBuffer bytes.Buffer
|
|
gzipWriter := gzip.NewWriter(&writerBuffer)
|
|
_, err := gzipWriter.Write(uncompressedBytes)
|
|
if err != nil {
|
|
return ReportError("gzipCompress: could not compress data: %s", err.Error())
|
|
}
|
|
gzipWriter.Close()
|
|
|
|
compressedBytes := writerBuffer.Bytes()
|
|
|
|
v, err := otto.ToValue(string(compressedBytes))
|
|
if err != nil {
|
|
return ReportError("gzipCompress: could not convert to string: %s", err.Error())
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func gzipDecompress(call otto.FunctionCall) otto.Value {
|
|
argv := call.ArgumentList
|
|
argc := len(argv)
|
|
if argc != 1 {
|
|
return ReportError("gzipDecompress: expected 1 argument, %d given instead.", argc)
|
|
}
|
|
|
|
compressedBytes := []byte(argv[0].String())
|
|
readerBuffer := bytes.NewBuffer(compressedBytes)
|
|
|
|
gzipReader, err := gzip.NewReader(readerBuffer)
|
|
if err != nil {
|
|
return ReportError("gzipDecompress: could not create gzip reader: %s", err.Error())
|
|
}
|
|
|
|
var decompressedBuffer bytes.Buffer
|
|
_, err = decompressedBuffer.ReadFrom(gzipReader)
|
|
if err != nil {
|
|
return ReportError("gzipDecompress: could not decompress data: %s", err.Error())
|
|
}
|
|
|
|
decompressedBytes := decompressedBuffer.Bytes()
|
|
v, err := otto.ToValue(string(decompressedBytes))
|
|
if err != nil {
|
|
return ReportError("gzipDecompress: could not convert to string: %s", err.Error())
|
|
}
|
|
|
|
return v
|
|
}
|