package svc // import "github.com/getwtxt/getwtxt/svc"
import (
"fmt"
"log"
"net"
"os"
"strings"
"sync"
"time"
"github.com/getwtxt/registry"
"github.com/spf13/viper"
)
var (
testport string
initTestOnce sync.Once
initDBOnce sync.Once
)
func initTestConf() {
initTestOnce.Do(func() {
logToNull()
testConfig()
tmpls = initTemplates()
pingAssets()
confObj.Mu.RLock()
defer confObj.Mu.RUnlock()
testport = fmt.Sprintf(":%v", confObj.Port)
})
}
func initTestDB() {
initDBOnce.Do(func() {
initDatabase()
})
}
func logToNull() {
hush, err := os.Open("/dev/null")
if err != nil {
log.Printf("%v\n", err)
}
log.SetOutput(hush)
}
func testConfig() {
viper.SetConfigName("getwtxt")
viper.SetConfigType("yml")
viper.AddConfigPath("..")
viper.SetDefault("ListenPort", 9001)
viper.SetDefault("DatabasePath", "getwtxt.db")
viper.SetDefault("AssetsDirectory", "assets")
viper.SetDefault("DatabaseType", "leveldb")
viper.SetDefault("ReCacheInterval", "1h")
viper.SetDefault("DatabasePushInterval", "5m")
viper.SetDefault("Instance.SiteName", "getwtxt")
viper.SetDefault("Instance.OwnerName", "Anonymous Microblogger")
viper.SetDefault("Instance.Email", "nobody@knows")
viper.SetDefault("Instance.URL", "https://twtxt.example.com")
viper.SetDefault("Instance.Description", "A fast, resilient twtxt registry server written in Go!")
confObj.Mu.Lock()
defer confObj.Mu.Unlock()
confObj.Port = viper.GetInt("ListenPort")
confObj.AssetsDir = "../" + viper.GetString("AssetsDirectory")
confObj.DBType = strings.ToLower(viper.GetString("DatabaseType"))
confObj.DBPath = viper.GetString("DatabasePath")
log.Printf("Using %v database: %v\n", confObj.DBType, confObj.DBPath)
confObj.CacheInterval = viper.GetDuration("StatusFetchInterval")
log.Printf("User status fetch interval: %v\n", confObj.CacheInterval)
confObj.DBInterval = viper.GetDuration("DatabasePushInterval")
log.Printf("Database push interval: %v\n", confObj.DBInterval)
confObj.LastCache = time.Now()
confObj.LastPush = time.Now()
confObj.Instance.Vers = Vers
confObj.Instance.Name = viper.GetString("Instance.SiteName")
confObj.Instance.URL = viper.GetString("Instance.URL")
confObj.Instance.Owner = viper.GetString("Instance.OwnerName")
confObj.Instance.Mail = viper.GetString("Instance.Email")
confObj.Instance.Desc = viper.GetString("Instance.Description")
}
func mockRegistry() {
twtxtCache = registry.NewIndex()
statuses, _, _ := registry.GetTwtxt("https://gbmor.dev/twtxt.txt")
parsed, _ := registry.ParseUserTwtxt(statuses, "gbmor", "https://gbmor.dev/twtxt.txt")
_ = twtxtCache.AddUser("gbmor", "https://gbmor.dev/twtxt.txt", "1", net.ParseIP("127.0.0.1"), parsed)
}