mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-06 13:14:11 +00:00
2.2 KiB
2.2 KiB
Task Record
Date: 2026-04-27 Related Module: web/service/server, web/controller/server, web/html/index Change Type: Add
Background
When downloading geoip.dat and geosite.dat from GitHub releases, the version information (GitHub release tag like 202604262232) was not captured or displayed. The user wanted to track and show the version of geofiles in the UI.
Changes
web/service/server.go:- Changed
downloadFileclosure to return the captured version string alongside the error - Modified
http.Clientto useCheckRedirectcallback that extracts the release tag from the 302 redirect URL path (format:/releases/download/{version}/{filename}) - Added
GeofileVersionstruct andGeofileVersionsmap type for version metadata storage - Added
loadGeofileVersions()andsaveGeofileVersions()for reading/writinggeofile_versions.jsonin the bin folder - Added
GetGeofileVersions()public method for API access
- Changed
web/controller/server.go:- Added
GET /getGeofileVersionsendpoint returning version metadata
- Added
web/html/index.html:- Added
geofileVersionsto Vue data - Added
loadGeofileVersions()method, called when the Xray version modal opens - Geofiles panel now displays version string (e.g.
202604262232) next to each file name - Added CSS classes for version text in light/dark themes
- Added
Impact
- New file:
bin/geofile_versions.jsonstores version metadata per geofile - New API:
GET /panel/api/server/getGeofileVersions - No database schema changes
- Xray binary filename expectations unchanged (files still saved as
geoip.dat/geosite.dat)
Verification
gofmt -l -w .passedgo vet ./...passed- Tested redirect URL parsing logic: path
/releases/download/202604262232/geoip.datcorrectly extracts202604262232 - Confirmed
http.ClientwithCheckRedirectdoes not interfere withIf-Modified-Since/Last-Modifiedcaching
Risks And Follow-Up
- Version extraction depends on GitHub's redirect URL format; if GitHub changes the URL structure, version will be empty (graceful degradation — shows
-in UI) - Worker nodes: version metadata is written locally on each node after their own download via
syncGeoIfNeeded(), so each worker has its owngeofile_versions.json