Timeout, admin password and site id are set in many commands, and we need to take care of synchronising the descriptions and flags between them. This change moves these standard options to cmd.go importing them in the same manner CommonOpts imported by all commands already.
64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
|
|
log "github.com/go-pkgz/lgr"
|
|
)
|
|
|
|
// RemapCommand set of flags and command for change linkage between comments to
|
|
// different urls based on given rules (input file)
|
|
type RemapCommand struct {
|
|
InputFile string `short:"f" long:"file" description:"input file name" required:"true"`
|
|
|
|
SupportCmdOpts
|
|
CommonOpts
|
|
}
|
|
|
|
// Execute runs (re)mapper with RemapCommand parameters, entry point for "remap" command
|
|
func (rc *RemapCommand) Execute(_ []string) error {
|
|
log.Printf("[INFO] start remap, site %s, file with rules %s", rc.Site, rc.InputFile)
|
|
resetEnv("SECRET", "ADMIN_PASSWD")
|
|
|
|
rulesReader, err := os.Open(rc.InputFile)
|
|
if err != nil {
|
|
return fmt.Errorf("cant open file %s: %w", rc.InputFile, err)
|
|
}
|
|
|
|
client := http.Client{}
|
|
defer client.CloseIdleConnections()
|
|
ctx, cancel := context.WithTimeout(context.Background(), rc.Timeout)
|
|
defer cancel()
|
|
remapURL := fmt.Sprintf("%s/api/v1/admin/remap?site=%s", rc.RemarkURL, rc.Site)
|
|
req, err := http.NewRequest(http.MethodPost, remapURL, rulesReader)
|
|
if err != nil {
|
|
return fmt.Errorf("can't make remap request for %s: %w", remapURL, err)
|
|
}
|
|
req.SetBasicAuth("admin", rc.AdminPasswd)
|
|
|
|
resp, err := client.Do(req.WithContext(ctx))
|
|
if err != nil {
|
|
return fmt.Errorf("request failed for %s: %w", remapURL, err)
|
|
}
|
|
defer func() {
|
|
if err = resp.Body.Close(); err != nil {
|
|
log.Printf("[WARN] failed to close response, %s", err)
|
|
}
|
|
}()
|
|
if resp.StatusCode >= 300 {
|
|
return responseError(resp)
|
|
}
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return fmt.Errorf("can't get response: %w", err)
|
|
}
|
|
|
|
log.Printf("[INFO] completed, status=%d, %s", resp.StatusCode, string(body))
|
|
return nil
|
|
}
|