working commit

This commit is contained in:
2026-02-02 17:27:16 +02:00
parent 0dac88fde8
commit 41e1b253f7
6 changed files with 160 additions and 67 deletions
+80 -51
View File
@@ -11,17 +11,27 @@ import (
"strconv"
)
type Client struct{}
type Client struct {
username string
password string
}
func NewClient() *Client {
return &Client{}
}
func NewClientWithAuth(username, password string) *Client {
return &Client{
username: username,
password: password,
}
}
func (cli *Client) ServiceHello(ctx context.Context, ref string) (bool, error) {
var res bool
var err error
ref, err = convertServiceLink(ref)
ref, err = convertServiceRefer(ref)
if err != nil {
return res, err
}
@@ -53,7 +63,7 @@ func (cli *Client) FileExists(ctx context.Context, ref string) (bool, error) {
var res bool
var err error
ref, err = convertFileLink(ref)
ref, err = convertFileRefer(ref)
if err != nil {
return res, err
}
@@ -62,6 +72,10 @@ func (cli *Client) FileExists(ctx context.Context, ref string) (bool, error) {
return res, err
}
if cli.username != "" && cli.password != "" {
req.Header.Add("Authorization", encodeBasicAuth(cli.username, cli.password))
}
transport := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
@@ -81,10 +95,61 @@ func (cli *Client) FileExists(ctx context.Context, ref string) (bool, error) {
return res, err
}
func (cli *Client) PutFile(ctx context.Context, filename, ref string) error {
var err error
ref, err = convertFileRefer(ref)
if err != nil {
return err
}
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
req, err := http.NewRequestWithContext(ctx, http.MethodPut, ref, file)
if err != nil {
return err
}
if cli.username != "" && cli.password != "" {
req.Header.Add("Authorization", encodeBasicAuth(cli.username, cli.password))
}
transport := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}
client := &http.Client{
Transport: transport,
}
fileinfo, err := os.Stat(filename)
if err != nil {
return err
}
filesize := fileinfo.Size()
req.ContentLength = filesize
req.Header.Set("Content-Type", "application/octet-stream")
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
err := fmt.Errorf("Received wrong status code: %s", resp.Status)
return err
}
return err
}
func (cli *Client) GetFile(ctx context.Context, ref, filename string) (int64, error) {
var err error
var size int64
ref, err = convertFileLink(ref)
ref, err = convertFileRefer(ref)
if err != nil {
return size, err
}
@@ -93,6 +158,11 @@ func (cli *Client) GetFile(ctx context.Context, ref, filename string) (int64, er
if err != nil {
return size, err
}
if cli.username != "" && cli.password != "" {
req.Header.Add("Authorization", encodeBasicAuth(cli.username, cli.password))
}
transport := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
@@ -141,55 +211,9 @@ func (cli *Client) GetFile(ctx context.Context, ref, filename string) (int64, er
return size, err
}
func (cli *Client) PutFile(ctx context.Context, filename, ref string) error {
var err error
ref, err = convertFileLink(ref)
if err != nil {
return err
}
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
req, err := http.NewRequestWithContext(ctx, http.MethodPut, ref, file)
if err != nil {
return err
}
transport := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}
client := &http.Client{
Transport: transport,
}
fileinfo, err := os.Stat(filename)
if err != nil {
return err
}
filesize := fileinfo.Size()
req.ContentLength = filesize
req.Header.Set("Content-Type", "application/octet-stream")
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
err := fmt.Errorf("Received wrong status code: %s", resp.Status)
return err
}
return err
}
func (cli *Client) DeleteFile(ctx context.Context, ref, filename string) error {
var err error
ref, err = convertFileLink(ref)
ref, err = convertFileRefer(ref)
if err != nil {
return err
}
@@ -197,6 +221,11 @@ func (cli *Client) DeleteFile(ctx context.Context, ref, filename string) error {
if err != nil {
return err
}
if cli.username != "" && cli.password != "" {
req.Header.Add("Authorization", encodeBasicAuth(cli.username, cli.password))
}
transport := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,