cspj-application/server/internal/webdav/webdav.go
2025-02-09 18:51:53 +08:00

74 lines
1.8 KiB
Go

package webdav
import (
"fmt"
"log"
"os"
"github.com/studio-b12/gowebdav"
)
type WebDAVClient struct {
Client *gowebdav.Client
}
const (
// TODO: use values from config file
webdavURL = "https://webdav.vomitblood.com"
webdavUser = "Vomitblood"
webdavPassword = "alpine"
)
func Init() *gowebdav.Client {
// initialize the webdav client
client := gowebdav.NewClient(webdavURL, webdavUser, webdavPassword)
// establish a connection to the webdav server
err := client.Connect()
if err != nil {
log.Fatalf("Failed to connect to WebDAV server: %v", err)
}
log.Println("Connected to WebDAV server")
return client
}
func CreateDirectory(client *gowebdav.Client, remoteDir string) error {
err := client.Mkdir(remoteDir, 0755)
if err != nil {
return fmt.Errorf("failed to create directory %s: %v", remoteDir, err)
}
log.Printf("Created directory: %s", remoteDir)
return nil
}
func UploadFile(client *gowebdav.Client, localFilePath string, remoteFilePath string) error {
bytes, err := os.ReadFile(localFilePath)
if err != nil {
return fmt.Errorf("failed to read file %s: %v", localFilePath, err)
}
err = client.Write(remoteFilePath, bytes, 0644)
if err != nil {
return fmt.Errorf("failed to upload file %s: %v", localFilePath, err)
}
log.Printf("Uploaded file: %s to %s", localFilePath, remoteFilePath)
return nil
}
func DownloadFile(client *gowebdav.Client, remoteFilePath string, localFilePath string) error {
bytes, err := client.Read(remoteFilePath)
if err != nil {
return fmt.Errorf("failed to download file %s: %v", remoteFilePath, err)
}
err = os.WriteFile(localFilePath, bytes, 0644)
if err != nil {
return fmt.Errorf("failed to save downloaded file %s: %v", localFilePath, err)
}
log.Printf("Downloaded file: %s to %s", remoteFilePath, localFilePath)
return nil
}