diff --git a/main.go b/main.go index 9929cd3..4f9596b 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,8 @@ package main import ( - "crypto/md5" "crypto/subtle" - "encoding/base64" "encoding/xml" - "fmt" "html/template" "io" "log" @@ -37,6 +34,7 @@ type Version struct { Filename string Size int64 Time time.Time + SHA256 string } type UpdateResponse struct { @@ -166,13 +164,14 @@ func checkAndDownload() { return } - // 检查是否已存在该版本 - files, _ := os.ReadDir(downloadDir) - for _, f := range files { - if strings.HasPrefix(f.Name(), "chrome_"+version+"_") { - log.Printf("Version %s already exists, skipping download", version) - return - } + parts := strings.Split(downloadURL, "/") + filename := parts[len(parts)-1] + filePath := filepath.Join(downloadDir, filename) + sha256File := filePath + ".sha256" + + if _, err := os.Stat(filePath); err == nil { + log.Printf("File %s already exists, skipping download", filename) + return } var data []byte @@ -202,22 +201,20 @@ func checkAndDownload() { return } - hash := fmt.Sprintf("%x", md5.Sum(data)) - filename := fmt.Sprintf("chrome_%s_%s.exe", version, hash[:8]) - filepath := filepath.Join(downloadDir, filename) - - if err := os.WriteFile(filepath, data, 0644); err != nil { + if err := os.WriteFile(filePath, data, 0644); err != nil { log.Printf("Error saving file: %v", err) return } + os.WriteFile(sha256File, []byte(sha256), 0644) + log.Printf("Downloaded: %s (%.2f MB)", filename, float64(len(data))/1024/1024) cleanupOldVersions() } func cleanupOldVersions() { files, _ := os.ReadDir(downloadDir) - if len(files) <= keepVersions { + if len(files) <= keepVersions*2 { return } @@ -239,6 +236,7 @@ func cleanupOldVersions() { for i := keepVersions; i < len(versions); i++ { os.Remove(filepath.Join(downloadDir, versions[i].Filename)) + os.Remove(filepath.Join(downloadDir, versions[i].Filename+".sha256")) log.Printf("Removed old version: %s", versions[i].Filename) } } @@ -263,10 +261,12 @@ func serveIndex(w http.ResponseWriter, r *http.Request) { for _, f := range files { if strings.HasSuffix(f.Name(), ".exe") { info, _ := f.Info() + sha256, _ := os.ReadFile(filepath.Join(downloadDir, f.Name()+".sha256")) versions = append(versions, Version{ Filename: f.Name(), Time: info.ModTime(), Size: info.Size(), + SHA256: string(sha256), }) } } @@ -279,14 +279,35 @@ func serveIndex(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.New("index").Parse(` -Chrome Offline Installer + +Chrome Offline Installer + + -

Chrome Offline Versions

-