Update: Initialize the config file outside of the init function
This commit is contained in:
parent
7347c28f75
commit
295d649624
3 changed files with 73 additions and 57 deletions
72
config/initial.go
Normal file
72
config/initial.go
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"archive/tar"
|
||||||
|
"compress/gzip"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
C "github.com/Dreamacro/clash/constant"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func downloadMMDB(path string) (err error) {
|
||||||
|
resp, err := http.Get("http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
gr, err := gzip.NewReader(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer gr.Close()
|
||||||
|
|
||||||
|
tr := tar.NewReader(gr)
|
||||||
|
for {
|
||||||
|
h, err := tr.Next()
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
} else if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !strings.HasSuffix(h.Name, "GeoLite2-Country.mmdb") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
_, err = io.Copy(f, tr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init prepare necessary files
|
||||||
|
func Init() {
|
||||||
|
// initial config.ini
|
||||||
|
if _, err := os.Stat(C.ConfigPath); os.IsNotExist(err) {
|
||||||
|
log.Info("Can't find config, create a empty file")
|
||||||
|
os.OpenFile(C.ConfigPath, os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
|
}
|
||||||
|
|
||||||
|
// initial mmdb
|
||||||
|
if _, err := os.Stat(C.MMDBPath); os.IsNotExist(err) {
|
||||||
|
log.Info("Can't find MMDB, start download")
|
||||||
|
err := downloadMMDB(C.MMDBPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Can't download MMDB: %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,14 +1,9 @@
|
||||||
package constant
|
package constant
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
|
||||||
"compress/gzip"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
@ -52,57 +47,5 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigPath = path.Join(dirPath, "config.ini")
|
ConfigPath = path.Join(dirPath, "config.ini")
|
||||||
if _, err := os.Stat(ConfigPath); os.IsNotExist(err) {
|
|
||||||
log.Info("Can't find config, create a empty file")
|
|
||||||
os.OpenFile(ConfigPath, os.O_CREATE|os.O_WRONLY, 0644)
|
|
||||||
}
|
|
||||||
|
|
||||||
MMDBPath = path.Join(dirPath, "Country.mmdb")
|
MMDBPath = path.Join(dirPath, "Country.mmdb")
|
||||||
if _, err := os.Stat(MMDBPath); os.IsNotExist(err) {
|
|
||||||
log.Info("Can't find MMDB, start download")
|
|
||||||
err := downloadMMDB(MMDBPath)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Can't download MMDB: %s", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func downloadMMDB(path string) (err error) {
|
|
||||||
resp, err := http.Get("http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz")
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
|
|
||||||
gr, err := gzip.NewReader(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer gr.Close()
|
|
||||||
|
|
||||||
tr := tar.NewReader(gr)
|
|
||||||
for {
|
|
||||||
h, err := tr.Next()
|
|
||||||
if err == io.EOF {
|
|
||||||
break
|
|
||||||
} else if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.HasSuffix(h.Name, "GeoLite2-Country.mmdb") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
_, err = io.Copy(f, tr)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
1
main.go
1
main.go
|
@ -18,6 +18,7 @@ func main() {
|
||||||
proxy.Instance().Run()
|
proxy.Instance().Run()
|
||||||
hub.Run()
|
hub.Run()
|
||||||
|
|
||||||
|
config.Init()
|
||||||
err := config.Instance().Parse()
|
err := config.Instance().Parse()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Parse config error: %s", err.Error())
|
log.Fatalf("Parse config error: %s", err.Error())
|
||||||
|
|
Loading…
Reference in a new issue