overrideApiServerAddrInLocalUI is used to override api server address in local ui automatically
()
| 116 | |
| 117 | // overrideApiServerAddrInLocalUI is used to override api server address in local ui automatically |
| 118 | func overrideApiServerAddrInLocalUI() { |
| 119 | root := config.Data.Server.UiStaticPath |
| 120 | filepath.Walk(root, func(path string, info os.FileInfo, err error) error { |
| 121 | paths := strings.Split(path, "/") |
| 122 | if len(paths) >= 1 { |
| 123 | filename := paths[len(paths)-1] |
| 124 | // if strings.HasPrefix(filename, "index-") { |
| 125 | if strings.HasSuffix(filename, ".js") { |
| 126 | content, err := os.ReadFile(path) |
| 127 | if err != nil { |
| 128 | log.Fatal(err.Error() + ":" + filename) |
| 129 | } |
| 130 | |
| 131 | base := "VITE_API_SERVER_PROD:" |
| 132 | index := bytes.Index(content, []byte("VITE_API_SERVER_PROD:")) |
| 133 | if index >= 0 { |
| 134 | start := index + 22 |
| 135 | var end int |
| 136 | for i := start + 1; i < len(content); i++ { |
| 137 | if content[i] == '"' { |
| 138 | end = i |
| 139 | break |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | var newAddr string |
| 144 | |
| 145 | if strings.TrimSpace(config.Data.Server.OverrideApiServerAddrForUI) != "" { |
| 146 | newAddr = config.Data.Server.OverrideApiServerAddrForUI |
| 147 | } else { |
| 148 | newAddr = "http://" + config.Data.Server.ListeningAddr |
| 149 | } |
| 150 | newAddr = fmt.Sprintf(`%s"%s"`, base, newAddr) |
| 151 | old := fmt.Sprintf(`%s"%s"`, base, string(content[start:end])) |
| 152 | content = bytes.Replace(content, []byte(old), []byte(newAddr), 1) |
| 153 | |
| 154 | f, err := os.OpenFile(path, os.O_WRONLY|os.O_TRUNC|os.O_CREATE|os.O_SYNC, 0644) |
| 155 | if err != nil { |
| 156 | logger.Crit("open ui static file error", "error", err, "path", path) |
| 157 | } else { |
| 158 | // offset |
| 159 | //os.Truncate(filename, 0) //clear |
| 160 | n, _ := f.Seek(0, io.SeekEnd) |
| 161 | c, err := f.WriteAt([]byte(content), n) |
| 162 | if err != nil { |
| 163 | logger.Crit("write content to ui static file error", "error", err, "path", path, "length", c) |
| 164 | } |
| 165 | err = f.Sync() |
| 166 | if err != nil { |
| 167 | logger.Crit("sync ui static file error", "error", err, "path", path) |
| 168 | } |
| 169 | logger.Info("Successfully override api server address for ui", "path", path, "old_addr", string(old), "new_addr", newAddr) |
| 170 | defer f.Close() |
| 171 | } |
| 172 | } |
| 173 | |
| 174 | } |
| 175 | } |