package pastes import ( "bytes" "encoding/json" "fmt" "io" "net/http" "os" "strings" "github.com/urfave/cli/v2" ) const ( API_BASE_URL = "https://bin.tritan.gg/api" HTML_BASE_URL = "https://bin.tritan.gg" ) func CreateNewPaste(c *cli.Context) error { if c.NArg() < 1 { return fmt.Errorf("content argument is required") } inputData := c.Args().First() req, err := http.NewRequest("POST", API_BASE_URL+"/quick", bytes.NewBuffer([]byte(inputData))) if err != nil { return fmt.Errorf("failed to create request: %v", err) } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", "quickpaste/1.0") resp, err := http.DefaultClient.Do(req) if err != nil { return fmt.Errorf("failed to create paste: %v", err) } defer resp.Body.Close() contentType := resp.Header.Get("Content-Type") if !strings.Contains(contentType, "application/json") { bodyBytes, _ := io.ReadAll(resp.Body) return fmt.Errorf("unexpected response: %s", string(bodyBytes)) } var response PasteResponse if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { return fmt.Errorf("failed to decode response: %v", err) } if response.Error { return fmt.Errorf("API error: %s", response.Message) } fmt.Printf("Pasted - ID: %s\nLink: %s\n", response.Data.ID, HTML_BASE_URL+"/"+response.Data.ID) return nil } func GetPaste(c *cli.Context) error { if c.NArg() < 1 { return fmt.Errorf("paste ID is required") } pasteID := c.Args().First() rawOutput := c.Bool("raw") req, err := http.NewRequest("GET", fmt.Sprintf("%s/pastes/%s", API_BASE_URL, pasteID), nil) if err != nil { return fmt.Errorf("failed to create request: %v", err) } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", "quickpaste/1.0") resp, err := http.DefaultClient.Do(req) if err != nil { return fmt.Errorf("failed to get paste: %v", err) } defer resp.Body.Close() var response PasteResponse if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { return fmt.Errorf("failed to decode response: %v", err) } if response.Error { return fmt.Errorf("API error: %s", response.Message) } if rawOutput { fmt.Print(response.Data.Content) } else { fmt.Printf("Content: %s\nCreated at: %s\n", response.Data.Content, response.Data.CreatedAt.Format("2006-01-02 15:04:05")) } return nil } func ReadFileAndCreatePaste(c *cli.Context) error { if c.NArg() < 1 { return fmt.Errorf("file path is required") } filePath := c.Args().First() content, err := os.ReadFile(filePath) if err != nil { return fmt.Errorf("failed to read file: %v", err) } req, err := http.NewRequest("POST", API_BASE_URL+"/quick", bytes.NewBuffer([]byte(content))) if err != nil { return fmt.Errorf("failed to create request: %v", err) } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", "quickpaste/1.0") resp, err := http.DefaultClient.Do(req) if err != nil { return fmt.Errorf("failed to create paste: %v", err) } var response PasteResponse if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { return fmt.Errorf("failed to decode response: %v", err) } if response.Error { return fmt.Errorf("API error: %s", response.Message) } fmt.Printf("Pasted file - ID: %s\nLink: %s\n", response.Data.ID, HTML_BASE_URL+"/"+response.Data.ID) return nil }