sambashare.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package samba
  2. import "encoding/json"
  3. /*
  4. This script handle the functions related to samba shares
  5. */
  6. // Wrapper to save changes to file. Note that the name cannot be changed
  7. // or otherwise there will be save issue. Use rename instead for name change
  8. func (s *ShareConfig) SaveToConfig() error {
  9. //Deep copy of the current share config
  10. newShareConfig := ShareConfig{}
  11. originalConfigBytes, _ := json.Marshal(s)
  12. err := json.Unmarshal(originalConfigBytes, &newShareConfig)
  13. if err != nil {
  14. return err
  15. }
  16. //Remove the old one in smb.conf and inject new one
  17. shareManager := s.parent
  18. err = shareManager.RemoveSambaShareConfig(s.Name)
  19. if err != nil {
  20. return err
  21. }
  22. return shareManager.CreateNewSambaShare(&newShareConfig)
  23. }
  24. //Remove this share
  25. func (s *ShareConfig) Remove() error {
  26. return s.parent.RemoveSambaShareConfig(s.Name)
  27. }
  28. func (s *ShareConfig) Rename(newName string) error {
  29. //Deep copy of the current share config
  30. newShareConfig := ShareConfig{}
  31. originalConfigBytes, _ := json.Marshal(s)
  32. err := json.Unmarshal(originalConfigBytes, &newShareConfig)
  33. if err != nil {
  34. return err
  35. }
  36. //Change the name and create the new one, then remove the old share
  37. newShareConfig.Name = newName
  38. err = s.parent.CreateNewSambaShare(&newShareConfig)
  39. if err != nil {
  40. return err
  41. }
  42. return s.Remove()
  43. }