2025-02-04 12:08:39 +02:00
|
|
|
package pastes
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"net/http"
|
2025-02-08 11:01:51 +02:00
|
|
|
"net/url"
|
2025-02-04 12:08:39 +02:00
|
|
|
"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")
|
2025-02-08 11:01:51 +02:00
|
|
|
urlFlag := c.Bool("url")
|
|
|
|
|
|
|
|
if urlFlag {
|
|
|
|
parsedURL, err := url.Parse(pasteID)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("invalid URL: %v", err)
|
|
|
|
}
|
|
|
|
parts := strings.Split(strings.Trim(parsedURL.Path, "/"), "/")
|
|
|
|
if len(parts) == 0 || parts[0] == "" {
|
|
|
|
return fmt.Errorf("failed to extract paste id from URL")
|
|
|
|
}
|
|
|
|
pasteID = parts[0]
|
|
|
|
}
|
2025-02-04 12:08:39 +02:00
|
|
|
|
|
|
|
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 {
|
2025-02-04 12:14:18 +02:00
|
|
|
fmt.Println(response.Data.Content)
|
2025-02-04 12:08:39 +02:00
|
|
|
} 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
|
|
|
|
}
|