更新 main.go
This commit is contained in:
65
main.go
65
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(`
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><title>Chrome Offline Installer</title></head>
|
||||
<head>
|
||||
<title>Chrome Offline Installer</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; margin: 20px; }
|
||||
table { border-collapse: collapse; width: 100%; }
|
||||
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
|
||||
th { background-color: #4CAF50; color: white; }
|
||||
tr:nth-child(even) { background-color: #f2f2f2; }
|
||||
.sha256 { font-family: monospace; font-size: 0.9em; word-break: break-all; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Chrome Offline Versions</h1>
|
||||
<ul>
|
||||
<h1>Chrome Offline Versions (x64)</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Filename</th>
|
||||
<th>Size</th>
|
||||
<th>Date</th>
|
||||
<th>SHA256</th>
|
||||
</tr>
|
||||
{{range .Versions}}
|
||||
<li><a href="/download/{{.Filename}}{{if $.Token}}?token={{$.Token}}{{end}}">{{.Filename}}</a> ({{printf "%.2f" .SizeMB}} MB, {{.Time.Format "2006-01-02 15:04"}})</li>
|
||||
<tr>
|
||||
<td><a href="/download/{{.Filename}}{{if $.Token}}?token={{$.Token}}{{end}}">{{.Filename}}</a></td>
|
||||
<td>{{printf "%.2f" .SizeMB}} MB</td>
|
||||
<td>{{.Time.Format "2006-01-02 15:04"}}</td>
|
||||
<td class="sha256">{{.SHA256}}</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</ul>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
`))
|
||||
@@ -295,6 +316,7 @@ func serveIndex(w http.ResponseWriter, r *http.Request) {
|
||||
Filename string
|
||||
SizeMB float64
|
||||
Time time.Time
|
||||
SHA256 string
|
||||
}
|
||||
|
||||
var displayVersions []VersionDisplay
|
||||
@@ -303,6 +325,7 @@ func serveIndex(w http.ResponseWriter, r *http.Request) {
|
||||
Filename: v.Filename,
|
||||
SizeMB: float64(v.Size) / 1024 / 1024,
|
||||
Time: v.Time,
|
||||
SHA256: v.SHA256,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user