1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-08 05:47:07 +09:00
anytype-heart/cmd/logdecode/main.go
2023-04-25 18:17:59 +02:00

69 lines
1.2 KiB
Go

package main
import (
"bufio"
"bytes"
"compress/gzip"
"encoding/base64"
"errors"
"fmt"
"io"
"os"
)
const (
argsLenWithFile = 2
fileArgNumber = 1
stdinSizeOnLinux = 4092
bufferSize = 1024
)
func main() {
var (
err error
reader io.Reader
file = os.Stdin
)
if len(os.Args) == argsLenWithFile {
if file, err = os.Open(os.Args[fileArgNumber]); err != nil {
fmt.Println("Error opening file:", err)
return
}
} else {
fmt.Print("Enter base64 encoded string: ")
}
scanner := bufio.NewScanner(file)
scanner.Scan()
base64Str := scanner.Text()
gzipBytes, err := base64.StdEncoding.DecodeString(base64Str)
if err != nil {
fmt.Println("Error decoding base64:", err)
// On some OS stdin is limited with 4092 bytes
if errors.Is(err, base64.CorruptInputError(stdinSizeOnLinux)) {
fmt.Println("Try to pass base64 in a file. Filename should be the argument of the program")
}
return
}
br := bytes.NewReader(gzipBytes)
zr, err := gzip.NewReader(br)
if err != nil {
reader = br
} else {
reader = zr
defer zr.Close()
}
result := ""
buf := make([]byte, bufferSize)
for {
n, err := reader.Read(buf)
result += string(buf[:n])
if err != nil {
break
}
}
fmt.Println(result)
}