package geodb import ( "io" "log" "net/http" "os" "imuslab.com/zoraxy/mod/utils" ) const ( ipv4UpdateSource = "https://cdn.jsdelivr.net/npm/@ip-location-db/geo-whois-asn-country/geo-whois-asn-country-ipv4.csv" ipv6UpdateSource = "https://cdn.jsdelivr.net/npm/@ip-location-db/geo-whois-asn-country/geo-whois-asn-country-ipv6.csv" ) // DownloadGeoDBUpdate download the latest geodb update func DownloadGeoDBUpdate(externalGeoDBStoragePath string) { //Create the storage path if not exist if !utils.FileExists(externalGeoDBStoragePath) { os.MkdirAll(externalGeoDBStoragePath, 0755) } //Download the update log.Println("Downloading IPv4 database update...") err := downloadFile(ipv4UpdateSource, externalGeoDBStoragePath+"/geoipv4.csv") if err != nil { log.Println(err) return } log.Println("Downloading IPv6 database update...") err = downloadFile(ipv6UpdateSource, externalGeoDBStoragePath+"/geoipv6.csv") if err != nil { log.Println(err) return } log.Println("GeoDB update stored at: " + externalGeoDBStoragePath) log.Println("Exiting...") } // Utility functions func downloadFile(url string, savepath string) error { resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() fileContent, err := io.ReadAll(resp.Body) if err != nil { return err } return os.WriteFile(savepath, fileContent, 0644) }