b397291bd2
Signed-off-by: Xe Iaso <xe@tailscale.com>
79 lines
1.5 KiB
Go
79 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
var (
|
|
fname = flag.String("n", "", "filename to use for pastes from standard input")
|
|
target = flag.String("target", "http://paste", "paste server URL")
|
|
)
|
|
|
|
func main() {
|
|
flag.Usage = func() {
|
|
fmt.Fprintf(os.Stderr, "Usage: %s [filename]\n\nTakes a file or standard in and posts it to your tailnet's paste service. Returns a URL on standard out for sharing.\n\nFlags:\n", filepath.Base(os.Args[0]))
|
|
flag.PrintDefaults()
|
|
os.Exit(2)
|
|
}
|
|
flag.Parse()
|
|
|
|
fin := os.Stdin
|
|
switch flag.NArg() {
|
|
case 0:
|
|
if *fname == "" {
|
|
*fname = "paste.txt"
|
|
}
|
|
case 1:
|
|
var err error
|
|
fin, err = os.Open(flag.Arg(0))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer fin.Close()
|
|
|
|
*fname = flag.Arg(0)
|
|
default:
|
|
flag.Usage()
|
|
}
|
|
|
|
u, err := url.Parse(*target)
|
|
if err != nil {
|
|
log.Fatalf("%q is not a legal url: %v", *target, err)
|
|
}
|
|
|
|
u.Path = "/api/post"
|
|
|
|
data, err := io.ReadAll(fin)
|
|
if err != nil {
|
|
log.Fatalf("can't read data: %v", err)
|
|
}
|
|
|
|
q := url.Values{}
|
|
|
|
q.Set("filename", filepath.Base(*fname))
|
|
q.Set("data", string(data))
|
|
|
|
resp, err := http.PostForm(u.String(), q)
|
|
if err != nil {
|
|
log.Fatalf("can't post to %s: %v", u, err)
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode != http.StatusOK {
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Printf("[unexpected] can't read from body of HTTP response: %v", err)
|
|
}
|
|
log.Fatalf("error submitting paste: %s", string(body))
|
|
}
|
|
|
|
io.Copy(os.Stdout, resp.Body)
|
|
}
|