123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package v308
- import (
- "encoding/json"
- "io"
- "log"
- "os"
- "path/filepath"
- )
- /*
- v3.0.7 update to v3.0.8
- This update function
- */
- // Update proxy config files from v3.0.7 to v3.0.8
- func UpdateFrom307To308() error {
- //Load the configs
- oldConfigFiles, err := filepath.Glob("./conf/proxy/*.config")
- if err != nil {
- return err
- }
- //Backup all the files
- err = os.MkdirAll("./conf/proxy.old/", 0775)
- if err != nil {
- return err
- }
- for _, oldConfigFile := range oldConfigFiles {
- // Extract the file name from the path
- fileName := filepath.Base(oldConfigFile)
- // Construct the backup file path
- backupFile := filepath.Join("./conf/proxy.old/", fileName)
- // Copy the file to the backup directory
- err := copyFile(oldConfigFile, backupFile)
- if err != nil {
- return err
- }
- }
- //read the config into the old struct
- for _, oldConfigFile := range oldConfigFiles {
- configContent, err := os.ReadFile(oldConfigFile)
- if err != nil {
- log.Println("Unable to read config file "+filepath.Base(oldConfigFile), err.Error())
- continue
- }
- thisOldConfigStruct := v307ProxyEndpoint{}
- err = json.Unmarshal(configContent, &thisOldConfigStruct)
- if err != nil {
- log.Println("Unable to parse file "+filepath.Base(oldConfigFile), err.Error())
- continue
- }
- //Convert the old config to new config
- newProxyStructure := convertV307ToV308(thisOldConfigStruct)
- js, _ := json.MarshalIndent(newProxyStructure, "", " ")
- err = os.WriteFile(oldConfigFile, js, 0775)
- if err != nil {
- log.Println(err.Error())
- continue
- }
- }
- return nil
- }
- func convertV307ToV308(old v307ProxyEndpoint) v308ProxyEndpoint {
- // Create a new v308ProxyEndpoint instance
- matchingDomainsSlice := old.MatchingDomainAlias
- if matchingDomainsSlice == nil {
- matchingDomainsSlice = []string{}
- }
- newEndpoint := v308ProxyEndpoint{
- ProxyType: old.ProxyType,
- RootOrMatchingDomain: old.RootOrMatchingDomain,
- MatchingDomainAlias: matchingDomainsSlice,
- ActiveOrigins: []*v308Upstream{{ // Mapping Domain field to v308Upstream struct
- OriginIpOrDomain: old.Domain,
- RequireTLS: old.RequireTLS,
- SkipCertValidations: old.SkipCertValidations,
- SkipWebSocketOriginCheck: old.SkipWebSocketOriginCheck,
- Weight: 1,
- MaxConn: 0,
- }},
- InactiveOrigins: []*v308Upstream{},
- UseStickySession: false,
- Disabled: old.Disabled,
- BypassGlobalTLS: old.BypassGlobalTLS,
- VirtualDirectories: old.VirtualDirectories,
- UserDefinedHeaders: old.UserDefinedHeaders,
- HSTSMaxAge: old.HSTSMaxAge,
- EnablePermissionPolicyHeader: old.EnablePermissionPolicyHeader,
- PermissionPolicy: old.PermissionPolicy,
- RequireBasicAuth: old.RequireBasicAuth,
- BasicAuthCredentials: old.BasicAuthCredentials,
- BasicAuthExceptionRules: old.BasicAuthExceptionRules,
- RequireRateLimit: old.RequireRateLimit,
- RateLimit: old.RateLimit,
- AccessFilterUUID: old.AccessFilterUUID,
- DefaultSiteOption: old.DefaultSiteOption,
- DefaultSiteValue: old.DefaultSiteValue,
- }
- return newEndpoint
- }
- // Helper function to copy files
- func copyFile(src, dst string) error {
- sourceFile, err := os.Open(src)
- if err != nil {
- return err
- }
- defer sourceFile.Close()
- destinationFile, err := os.Create(dst)
- if err != nil {
- return err
- }
- defer destinationFile.Close()
- _, err = io.Copy(destinationFile, sourceFile)
- return err
- }
|