config.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package main
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "log"
  6. "os"
  7. "path/filepath"
  8. "strings"
  9. "imuslab.com/zoraxy/mod/utils"
  10. )
  11. /*
  12. Reverse Proxy Configs
  13. The following section handle
  14. the reverse proxy configs
  15. */
  16. type Record struct {
  17. ProxyType string
  18. Rootname string
  19. ProxyTarget string
  20. UseTLS bool
  21. }
  22. func SaveReverseProxyConfig(ptype string, rootname string, proxyTarget string, useTLS bool) error {
  23. os.MkdirAll("conf", 0775)
  24. filename := getFilenameFromRootName(rootname)
  25. //Generate record
  26. thisRecord := Record{
  27. ProxyType: ptype,
  28. Rootname: rootname,
  29. ProxyTarget: proxyTarget,
  30. UseTLS: useTLS,
  31. }
  32. //Write to file
  33. js, _ := json.MarshalIndent(thisRecord, "", " ")
  34. return ioutil.WriteFile(filepath.Join("conf", filename), js, 0775)
  35. }
  36. func RemoveReverseProxyConfig(rootname string) error {
  37. filename := getFilenameFromRootName(rootname)
  38. removePendingFile := strings.ReplaceAll(filepath.Join("conf", filename), "\\", "/")
  39. log.Println("Config Removed: ", removePendingFile)
  40. if utils.FileExists(removePendingFile) {
  41. err := os.Remove(removePendingFile)
  42. if err != nil {
  43. log.Println(err.Error())
  44. return err
  45. }
  46. }
  47. //File already gone
  48. return nil
  49. }
  50. // Return ptype, rootname and proxyTarget, error if any
  51. func LoadReverseProxyConfig(filename string) (*Record, error) {
  52. thisRecord := Record{}
  53. configContent, err := ioutil.ReadFile(filename)
  54. if err != nil {
  55. return &thisRecord, err
  56. }
  57. //Unmarshal the content into config
  58. err = json.Unmarshal(configContent, &thisRecord)
  59. if err != nil {
  60. return &thisRecord, err
  61. }
  62. //Return it
  63. return &thisRecord, nil
  64. }
  65. func getFilenameFromRootName(rootname string) string {
  66. //Generate a filename for this rootname
  67. filename := strings.ReplaceAll(rootname, ".", "_")
  68. filename = strings.ReplaceAll(filename, "/", "-")
  69. filename = filename + ".config"
  70. return filename
  71. }