Skip to content

Commit 60fa637

Browse files
committed
feat: added delete command to client
1 parent bf75d13 commit 60fa637

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

cmd/client/cmd/delete.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package cmd
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
"net/url"
7+
8+
"github.com/spf13/cobra"
9+
"github.com/spf13/viper"
10+
)
11+
12+
var deleteCmd = &cobra.Command{
13+
Use: "delete <url-or-id>",
14+
Short: "Delete an uploaded file from remote",
15+
Args: cobra.ExactArgs(1),
16+
RunE: func(cmd *cobra.Command, args []string) error {
17+
serverURL := viper.GetString("url")
18+
if serverURL == "" {
19+
return fmt.Errorf("no server URL configured: set CLIP_URL, use --url, or add url to ~/.config/clip/config.toml")
20+
}
21+
server, err := url.Parse(serverURL)
22+
if err != nil {
23+
return fmt.Errorf("invalid server URL: %w", err)
24+
}
25+
26+
id, err := resolveID(args[0], server)
27+
if err != nil {
28+
return err
29+
}
30+
31+
req, err := http.NewRequest(http.MethodDelete, serverURL+"/"+id, nil)
32+
if err != nil {
33+
return err
34+
}
35+
if key := viper.GetString("key"); key != "" {
36+
req.Header.Set("Authorization", "Bearer "+key)
37+
}
38+
39+
res, err := http.DefaultClient.Do(req)
40+
if err != nil {
41+
return err
42+
}
43+
defer func() { _ = res.Body.Close() }()
44+
45+
if res.StatusCode == http.StatusNotFound {
46+
return fmt.Errorf("not found: may have already expired or been deleted")
47+
}
48+
if res.StatusCode/100 != 2 {
49+
return fmt.Errorf("server returned %d: %s", res.StatusCode, res.Status)
50+
}
51+
52+
return nil
53+
},
54+
}
55+
56+
func resolveID(arg string, server *url.URL) (string, error) {
57+
u, err := url.Parse(arg)
58+
if err != nil || u.Scheme == "" || u.Host == "" {
59+
return arg, nil
60+
}
61+
if u.Host != server.Host {
62+
return "", fmt.Errorf("URL hostname %q differs from configured server %q\n use --url %s to target a different server", u.Host, server.Host, u.Host)
63+
}
64+
return u.Path[1:], nil
65+
}
66+
67+
func init() {
68+
RootCmd.AddCommand(deleteCmd)
69+
}

0 commit comments

Comments
 (0)