mirror of
https://github.com/simon987/Architeuthis.git
synced 2025-04-10 13:36:41 +00:00
57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"golang.org/x/time/rate"
|
|
"io/ioutil"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type HostConfig struct {
|
|
Every string `json:"every"`
|
|
Burst int `json:"burst"`
|
|
Headers map[string]string `json:"headers"`
|
|
}
|
|
|
|
type ProxyConfig struct {
|
|
Name string `json:"name"`
|
|
Url string `json:"url"`
|
|
}
|
|
|
|
var config struct {
|
|
Addr string `json:"addr"`
|
|
Hosts map[string]HostConfig `json:"hosts"`
|
|
Proxies []ProxyConfig `json:"proxies"`
|
|
}
|
|
|
|
func loadConfig() {
|
|
|
|
configFile, err := os.Open("config.json")
|
|
handleErr(err)
|
|
|
|
configBytes, err := ioutil.ReadAll(configFile)
|
|
handleErr(err)
|
|
|
|
err = json.Unmarshal(configBytes, &config)
|
|
handleErr(err)
|
|
}
|
|
|
|
func applyConfig(proxy *Proxy) {
|
|
|
|
for host, conf := range config.Hosts {
|
|
duration, err := time.ParseDuration(conf.Every)
|
|
handleErr(err)
|
|
proxy.Limiters[host] = &ExpiringLimiter{
|
|
rate.NewLimiter(rate.Every(duration), conf.Burst),
|
|
time.Now(),
|
|
}
|
|
}
|
|
}
|
|
|
|
func handleErr(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|