90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package convutil
|
|
|
|
import (
|
|
"os/exec"
|
|
)
|
|
|
|
type PhpConvert struct {
|
|
CmdConvert
|
|
}
|
|
|
|
const phpDecodeCode = `
|
|
<?php
|
|
|
|
$action = strtolower($argv[1]);
|
|
$content = $argv[2];
|
|
|
|
if ($action === 'decode') {
|
|
$decoded = base64_decode($content);
|
|
if ($decoded !== false) {
|
|
$obj = unserialize($decoded);
|
|
if ($obj !== false) {
|
|
$unserialized = json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
if ($unserialized !== false) {
|
|
echo base64_encode($unserialized);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
} elseif ($action === 'encode') {
|
|
$decoded = base64_decode($content);
|
|
if ($decoded !== false) {
|
|
$json = json_decode($decoded, true);
|
|
if ($json !== false) {
|
|
$serialized = serialize($json);
|
|
if ($serialized !== false) {
|
|
echo base64_encode($serialized);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo '[RDM-ERROR]';
|
|
`
|
|
|
|
func NewPhpConvert() *PhpConvert {
|
|
c := CmdConvert{
|
|
Name: "PHP",
|
|
Auto: true,
|
|
DecodePath: "php",
|
|
EncodePath: "php",
|
|
}
|
|
|
|
var err error
|
|
if _, err = exec.LookPath(c.DecodePath); err != nil {
|
|
return nil
|
|
}
|
|
|
|
var filepath string
|
|
if filepath, err = writeExecuteFile([]byte(phpDecodeCode), "php_decoder.php"); err != nil {
|
|
return nil
|
|
}
|
|
c.DecodeArgs = []string{filepath, "decode"}
|
|
c.EncodeArgs = []string{filepath, "encode"}
|
|
|
|
return &PhpConvert{
|
|
CmdConvert: c,
|
|
}
|
|
}
|
|
|
|
func (p *PhpConvert) Enable() bool {
|
|
if p == nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (p *PhpConvert) Encode(str string) (string, bool) {
|
|
if !p.Enable() {
|
|
return str, false
|
|
}
|
|
return p.CmdConvert.Encode(str)
|
|
}
|
|
|
|
func (p *PhpConvert) Decode(str string) (string, bool) {
|
|
if !p.Enable() {
|
|
return str, false
|
|
}
|
|
return p.CmdConvert.Decode(str)
|
|
}
|