diff --git a/common/share.go b/common/share.go new file mode 100644 index 0000000..a0da4b2 --- /dev/null +++ b/common/share.go @@ -0,0 +1,78 @@ +package common + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "net/http" + "os" + "path/filepath" + "strings" +) + +const ( + APICasaOSShare = "/v1/samba/shares" +) + +type ShareService interface { + DeleteShare(id string) error +} +type shareService struct { + address string +} + +func (n *shareService) DeleteShare(id string) error { + url := strings.TrimSuffix(n.address, "/") + APICasaOSShare + "/" + id + fmt.Println(url) + message := "{}" + body, err := json.Marshal(message) + if err != nil { + return err + } + + client := &http.Client{} + + // Create request + req, err := http.NewRequest("DELETE", url, bytes.NewBuffer(body)) + if err != nil { + return err + } + + // Fetch Request + response, err := client.Do(req) + if err != nil { + return err + } + defer response.Body.Close() + + if response.StatusCode != http.StatusOK { + return errors.New("failed to send share (status code: " + fmt.Sprint(response.StatusCode) + ")") + } + return nil + +} + +func NewShareService(runtimePath string) (ShareService, error) { + casaosAddressFile := filepath.Join(runtimePath, CasaOSURLFilename) + + buf, err := os.ReadFile(casaosAddressFile) + if err != nil { + return nil, err + } + + address := string(buf) + + response, err := http.Get(address + "/ping") + if err != nil { + return nil, err + } + + if response.StatusCode != 200 { + return nil, errors.New("failed to ping casaos service") + } + + return &shareService{ + address: address, + }, nil +} diff --git a/common/share_test.go b/common/share_test.go new file mode 100644 index 0000000..ce79e03 --- /dev/null +++ b/common/share_test.go @@ -0,0 +1,14 @@ +package common + +import "testing" + +func TestDeleteShare(t *testing.T) { + share, err := NewShareService("/var/run/casaos") + if err != nil { + t.Fatal(err) + } + err = share.DeleteShare("1") + if err != nil { + t.Fatal(err) + } +}