share.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package common
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "net/http"
  8. "os"
  9. "path/filepath"
  10. "strings"
  11. )
  12. const (
  13. APICasaOSShare = "/v1/samba/shares"
  14. )
  15. type ShareService interface {
  16. DeleteShare(id string) error
  17. }
  18. type shareService struct {
  19. address string
  20. }
  21. func (n *shareService) DeleteShare(id string) error {
  22. url := strings.TrimSuffix(n.address, "/") + APICasaOSShare + "/" + id
  23. fmt.Println(url)
  24. message := "{}"
  25. body, err := json.Marshal(message)
  26. if err != nil {
  27. return err
  28. }
  29. client := &http.Client{}
  30. // Create request
  31. req, err := http.NewRequest("DELETE", url, bytes.NewBuffer(body))
  32. if err != nil {
  33. return err
  34. }
  35. // Fetch Request
  36. response, err := client.Do(req)
  37. if err != nil {
  38. return err
  39. }
  40. defer response.Body.Close()
  41. if response.StatusCode != http.StatusOK {
  42. return errors.New("failed to send share (status code: " + fmt.Sprint(response.StatusCode) + ")")
  43. }
  44. return nil
  45. }
  46. func NewShareService(runtimePath string) (ShareService, error) {
  47. casaosAddressFile := filepath.Join(runtimePath, CasaOSURLFilename)
  48. buf, err := os.ReadFile(casaosAddressFile)
  49. if err != nil {
  50. return nil, err
  51. }
  52. address := string(buf)
  53. response, err := http.Get(address + "/ping")
  54. if err != nil {
  55. return nil, err
  56. }
  57. if response.StatusCode != 200 {
  58. return nil, errors.New("failed to ping casaos service")
  59. }
  60. return &shareService{
  61. address: address,
  62. }, nil
  63. }