Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"github.com/prism/proxy/internal/geodata"
|
||||
)
|
||||
|
||||
func (s *Server) geoStatus(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
settings, err := s.app.Store.GetSettings(ctx)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
cfg := geodata.ConfigFromSettings(settings)
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"ready": geodata.Ready(s.app.DataDir),
|
||||
"auto_download": settings["geo_auto_download"] != "false",
|
||||
"files": geodata.Status(s.app.DataDir, cfg),
|
||||
"default_urls": geodata.DefaultConfig(),
|
||||
})
|
||||
}
|
||||
|
||||
type geoUpdateReq struct {
|
||||
Force bool `json:"force"`
|
||||
}
|
||||
|
||||
func (s *Server) geoUpdate(c *gin.Context) {
|
||||
var req geoUpdateReq
|
||||
_ = c.ShouldBindJSON(&req)
|
||||
|
||||
ctx := c.Request.Context()
|
||||
settings, err := s.app.Store.GetSettings(ctx)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
cfg := geodata.ConfigFromSettings(settings)
|
||||
geodata.ApplyMihomoURLs(cfg)
|
||||
|
||||
updated, err := geodata.Ensure(s.app.DataDir, cfg, req.Force)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadGateway, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
_ = s.app.Store.AddAuditLog(ctx, "update", "geo", "updated: "+joinNames(updated))
|
||||
s.logs.Add("info", "prism", "geo data updated")
|
||||
_ = s.app.ReloadEngine(ctx)
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"ok": true,
|
||||
"updated": updated,
|
||||
"ready": geodata.Ready(s.app.DataDir),
|
||||
"files": geodata.Status(s.app.DataDir, cfg),
|
||||
})
|
||||
}
|
||||
|
||||
func joinNames(names []string) string {
|
||||
if len(names) == 0 {
|
||||
return "none (already present)"
|
||||
}
|
||||
out := names[0]
|
||||
for i := 1; i < len(names); i++ {
|
||||
out += ", " + names[i]
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func geoDataReady(dataDir string) bool {
|
||||
return geodata.Ready(dataDir)
|
||||
}
|
||||
|
||||
func applyGeoSettings(dataDir string, settings map[string]string) {
|
||||
geodata.InitHomeDir(dataDir)
|
||||
geodata.ApplyMihomoURLs(geodata.ConfigFromSettings(settings))
|
||||
}
|
||||
Reference in New Issue
Block a user