Files
phishingclub/backend/vendor/github.com/ysmood/leakless/pkg/utils/utils.go
T
Ronni Skansing f5e6f53d75 update vendor
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
2026-05-24 09:57:07 +02:00

140 lines
2.6 KiB
Go

package utils
import (
"crypto/rand"
"encoding/json"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"time"
)
// E if the last arg is error, panic it
func E(args ...interface{}) []interface{} {
err, ok := args[len(args)-1].(error)
if ok {
panic(err)
}
return args
}
// RandBytes generate random bytes with specified byte length
func RandBytes(len int) []byte {
b := make([]byte, len)
_, _ = rand.Read(b)
return b
}
// MkdirOptions ...
type MkdirOptions struct {
Perm os.FileMode
}
// Mkdir makes dir recursively
func Mkdir(path string, options *MkdirOptions) error {
if options == nil {
options = &MkdirOptions{
Perm: 0775,
}
}
return os.MkdirAll(path, options.Perm)
}
// OutputFileOptions ...
type OutputFileOptions struct {
DirPerm os.FileMode
FilePerm os.FileMode
JSONPrefix string
JSONIndent string
}
// OutputFile auto creates file if not exists, it will try to detect the data type and
// auto output binary, string or json
func OutputFile(p string, data interface{}, options *OutputFileOptions) error {
if options == nil {
options = &OutputFileOptions{0775, 0664, "", " "}
}
dir := filepath.Dir(p)
_ = Mkdir(dir, &MkdirOptions{Perm: options.DirPerm})
var bin []byte
switch t := data.(type) {
case []byte:
bin = t
case string:
bin = []byte(t)
default:
var err error
bin, err = json.MarshalIndent(data, options.JSONPrefix, options.JSONIndent)
if err != nil {
return err
}
}
return ioutil.WriteFile(p, bin, options.FilePerm)
}
// FileExists checks if file exists, only for file, not for dir
func FileExists(path string) bool {
info, err := os.Stat(path)
if err != nil {
return false
}
if info.IsDir() {
return false
}
return true
}
// Sleep the goroutine for specified seconds, such as 2.3 seconds
func Sleep(seconds float64) {
d := time.Duration(seconds * float64(time.Second))
time.Sleep(d)
}
// ReadFile reads file as bytes
func ReadFile(p string) ([]byte, error) {
return ioutil.ReadFile(p)
}
// ReadJSON reads file as json
func ReadJSON(p string, data interface{}) error {
bin, err := ReadFile(p)
if err != nil {
return err
}
return json.Unmarshal(bin, data)
}
// MustToJSONBytes encode data to json bytes
func MustToJSONBytes(data interface{}) []byte {
bytes, err := json.Marshal(data)
E(err)
return bytes
}
// MustToJSON encode data to json string
func MustToJSON(data interface{}) string {
return string(MustToJSONBytes(data))
}
// Exec cmd
func Exec(cmd, dir string, args ...string) {
c := exec.Command(cmd, args...)
c.Dir = dir
c.Stdout = os.Stdout
c.Stderr = os.Stderr
E(c.Run())
}