mirror of
https://codeberg.org/scip/ephemerup.git
synced 2025-12-17 04:30:57 +01:00
fixed error handling, added list command, switched to koanf
This commit is contained in:
@@ -26,11 +26,17 @@ const Version string = "v0.0.1"
|
||||
var VERSION string // maintained by -x
|
||||
|
||||
type Config struct {
|
||||
// globals
|
||||
Endpoint string
|
||||
Debug bool
|
||||
Retries int
|
||||
Expire string
|
||||
Apikey string
|
||||
|
||||
// upload
|
||||
Expire string
|
||||
|
||||
// list
|
||||
Apicontext string
|
||||
}
|
||||
|
||||
func Getversion() string {
|
||||
|
||||
42
upctl/cmd/list.go
Normal file
42
upctl/cmd/list.go
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright © 2023 Thomas von Dein
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/tlinden/up/upctl/cfg"
|
||||
"github.com/tlinden/up/upctl/lib"
|
||||
)
|
||||
|
||||
func ListCommand(conf *cfg.Config) *cobra.Command {
|
||||
var listCmd = &cobra.Command{
|
||||
Use: "list [options] [file ..]",
|
||||
Short: "list uploads",
|
||||
Long: `List uploads.`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
// errors at this stage do not cause the usage to be shown
|
||||
cmd.SilenceUsage = true
|
||||
|
||||
return lib.List(conf, args)
|
||||
},
|
||||
}
|
||||
|
||||
// options
|
||||
listCmd.PersistentFlags().StringVarP(&conf.Apicontext, "apicontext", "", "", "Filter by given API context")
|
||||
|
||||
return listCmd
|
||||
}
|
||||
@@ -87,6 +87,7 @@ func Execute() {
|
||||
rootCmd.PersistentFlags().StringVarP(&conf.Apikey, "apikey", "a", "", "Api key to use")
|
||||
|
||||
rootCmd.AddCommand(UploadCommand(&conf))
|
||||
rootCmd.AddCommand(ListCommand(&conf))
|
||||
|
||||
err := rootCmd.Execute()
|
||||
if err != nil {
|
||||
|
||||
@@ -39,6 +39,10 @@ type Request struct {
|
||||
Url string
|
||||
}
|
||||
|
||||
type ListParams struct {
|
||||
Apicontext string `json:"apicontext"`
|
||||
}
|
||||
|
||||
func Setup(c *cfg.Config, path string) *Request {
|
||||
client := req.C()
|
||||
if c.Debug {
|
||||
@@ -59,7 +63,7 @@ func Setup(c *cfg.Config, path string) *Request {
|
||||
AddRetryHook(func(resp *req.Response, err error) {
|
||||
req := resp.Request.RawRequest
|
||||
if c.Debug {
|
||||
fmt.Println("Retrying endpoint request:", req.Method, req.URL)
|
||||
fmt.Println("Retrying endpoint request:", req.Method, req.URL, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -68,7 +72,7 @@ func Setup(c *cfg.Config, path string) *Request {
|
||||
client.SetCommonBearerAuthToken(c.Apikey)
|
||||
}
|
||||
|
||||
return &Request{Url: c.Endpoint + "/file/", R: R}
|
||||
return &Request{Url: c.Endpoint + path, R: R}
|
||||
|
||||
}
|
||||
|
||||
@@ -129,22 +133,55 @@ func Upload(c *cfg.Config, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return HandleResponse(c, resp)
|
||||
}
|
||||
|
||||
func HandleResponse(c *cfg.Config, resp *req.Response) error {
|
||||
// we expect a json response
|
||||
r := Response{}
|
||||
json.Unmarshal([]byte(resp.String()), &r)
|
||||
|
||||
if err := json.Unmarshal([]byte(resp.String()), &r); err != nil {
|
||||
// text output!
|
||||
r.Message = resp.String()
|
||||
}
|
||||
|
||||
if c.Debug {
|
||||
trace := resp.TraceInfo() // Use `resp.Request.TraceInfo()` to avoid unnecessary struct copy in production.
|
||||
fmt.Println(trace.Blame()) // Print out exactly where the http request is slowing down.
|
||||
trace := resp.Request.TraceInfo()
|
||||
fmt.Println(trace.Blame())
|
||||
fmt.Println("----------")
|
||||
fmt.Println(trace)
|
||||
}
|
||||
|
||||
if !r.Success {
|
||||
return errors.New(r.Message)
|
||||
if len(r.Message) == 0 {
|
||||
if resp.Err != nil {
|
||||
return resp.Err
|
||||
} else {
|
||||
return errors.New("Unknown error")
|
||||
}
|
||||
} else {
|
||||
return errors.New(r.Message)
|
||||
}
|
||||
}
|
||||
|
||||
// all right
|
||||
fmt.Println(r.Message)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func List(c *cfg.Config, args []string) error {
|
||||
rq := Setup(c, "/list/")
|
||||
|
||||
params := &ListParams{Apicontext: c.Apicontext}
|
||||
resp, err := rq.R.
|
||||
SetBodyJsonMarshal(params).
|
||||
Get(rq.Url)
|
||||
|
||||
fmt.Println("")
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return HandleResponse(c, resp)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user