fix: update to new api
This commit is contained in:
parent
03610b8d18
commit
4951a290ee
1 changed files with 49 additions and 19 deletions
68
main.go
68
main.go
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
|
@ -15,18 +16,21 @@ import (
|
|||
type Configuration struct {
|
||||
ServerURL string
|
||||
Repo string
|
||||
TaskID string
|
||||
Token string
|
||||
FilePatterns []string
|
||||
Files []string
|
||||
}
|
||||
|
||||
type TaskResponse struct {
|
||||
TaskID int `json:"taskID"`
|
||||
Status int `json:"status"`
|
||||
}
|
||||
|
||||
func parseFlags() Configuration {
|
||||
var cfg Configuration
|
||||
|
||||
flag.StringVar(&cfg.ServerURL, "url", "http://localhost:9999", "Базовый URL сервера загрузки")
|
||||
flag.StringVar(&cfg.Repo, "repo", "", "Название репозитория (обязательно)")
|
||||
flag.StringVar(&cfg.TaskID, "task", "", "ID задачи (обязательно)")
|
||||
flag.StringVar(&cfg.Token, "token", "", "Токен авторизации (обязательно)")
|
||||
files := flag.String("files", "", "Список путей к файлам или паттернов (разделены запятой) для загрузки (обязательно)")
|
||||
|
||||
|
@ -37,10 +41,6 @@ func parseFlags() Configuration {
|
|||
fmt.Println("Ошибка: -repo является обязательным")
|
||||
missing = true
|
||||
}
|
||||
if cfg.TaskID == "" {
|
||||
fmt.Println("Ошибка: -task является обязательным")
|
||||
missing = true
|
||||
}
|
||||
if cfg.Token == "" {
|
||||
fmt.Println("Ошибка: -token является обязательным")
|
||||
missing = true
|
||||
|
@ -104,7 +104,7 @@ func unique(input []string) []string {
|
|||
return result
|
||||
}
|
||||
|
||||
func createMultipartRequest(url string, files []string, token string) (*http.Request, error) {
|
||||
func createMultipartRequest(url string, files []string, token string, repo string) (*http.Request, error) {
|
||||
var buf bytes.Buffer
|
||||
writer := multipart.NewWriter(&buf)
|
||||
|
||||
|
@ -126,7 +126,12 @@ func createMultipartRequest(url string, files []string, token string) (*http.Req
|
|||
}
|
||||
}
|
||||
|
||||
err := writer.Close()
|
||||
err := writer.WriteField("repo", repo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("не удалось добавить поле repo: %w", err)
|
||||
}
|
||||
|
||||
err = writer.Close()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("не удалось закрыть multipart писатель: %w", err)
|
||||
}
|
||||
|
@ -142,10 +147,41 @@ func createMultipartRequest(url string, files []string, token string) (*http.Req
|
|||
return req, nil
|
||||
}
|
||||
|
||||
func uploadFiles(cfg Configuration) error {
|
||||
uploadURL := fmt.Sprintf("%s/upload/%s/task/%s", strings.TrimRight(cfg.ServerURL, "/"), cfg.Repo, cfg.TaskID)
|
||||
func createTask(cfg Configuration) (int, error) {
|
||||
taskURL := fmt.Sprintf("%s/tasks", strings.TrimRight(cfg.ServerURL, "/"))
|
||||
requestBody, err := json.Marshal(map[string]string{
|
||||
"Repo": cfg.Repo,
|
||||
})
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("не удалось создать тело запроса: %w", err)
|
||||
}
|
||||
|
||||
req, err := createMultipartRequest(uploadURL, cfg.Files, cfg.Token)
|
||||
req, err := http.NewRequest("POST", taskURL, bytes.NewReader(requestBody))
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("не удалось создать HTTP-запрос: %w", err)
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Authorization", "Bearer "+cfg.Token)
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("не удалось выполнить HTTP-запрос: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var taskResp TaskResponse
|
||||
err = json.NewDecoder(resp.Body).Decode(&taskResp)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("не удалось декодировать ответ: %w", err)
|
||||
}
|
||||
|
||||
return taskResp.TaskID, nil
|
||||
}
|
||||
|
||||
func uploadFiles(cfg Configuration, taskID int) error {
|
||||
uploadURL := fmt.Sprintf("%s/tasks/%d/upload", strings.TrimRight(cfg.ServerURL, "/"), taskID)
|
||||
req, err := createMultipartRequest(uploadURL, cfg.Files, cfg.Token, cfg.Repo)
|
||||
if err != nil {
|
||||
return fmt.Errorf("не удалось создать multipart-запрос: %w", err)
|
||||
}
|
||||
|
@ -162,22 +198,16 @@ func uploadFiles(cfg Configuration) error {
|
|||
return fmt.Errorf("не удалось прочитать тело ответа: %w", err)
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("загрузка не удалась с кодом %d: %s", resp.StatusCode, string(respBody))
|
||||
}
|
||||
|
||||
fmt.Println("Загрузка успешна:")
|
||||
fmt.Println(string(respBody))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
cfg := parseFlags()
|
||||
|
||||
err := uploadFiles(cfg)
|
||||
taskID, err := createTask(cfg)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
uploadFiles(cfg, taskID)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue