sophuwu.site > myweb   
              95
            
             package config

import (
	"bytes"
	"log"
	"os"
	"path/filepath"
	"time"
)

var (
	ListenAddr   string
	WebRoot      string
	StaticPath   string
	MediaPath    string
	Templates    string
	DBPath       string
	Email        string
	Name         string
	URL          string
	passHash     str
	passLoadTime time.Time
)

type str string

func (s str) Bytes() []byte {
	return []byte(s)
}
func (s str) String() string {
	return string(s)

}

func PassHash() str {
	if time.Since(passLoadTime) > 5*time.Minute {
		passLoad()
	}
	return passHash
}

func passLoad() {
	b, err := os.ReadFile(path("userpass"))
	if err != nil {
		log.Fatalf("Error reading userpass: %v", err)
	}
	passHash = str(bytes.TrimSpace(b))
	passLoadTime = time.Now()
}

func path(p string) string {
	return filepath.Join(WebRoot, p)
}

func init() {
	if len(os.Args) < 2 {
		log.Fatalf("Usage: %s <config file>", os.Args[0])
	}

	file, err := os.ReadFile(os.Args[1])
	if err != nil {
		log.Fatalf("Error opening config: %v", err)
	}

	var mm = make(map[string]string)
	var pos int

	for _, v := range bytes.Split(file, []byte{'\n'}) {
		if len(v) == 0 || (len(v) > 0 && v[0] == '#') || func() bool {
			pos = bytes.IndexByte(v, '=')
			return pos == -1
		}() {
			continue
		}
		mm[string(bytes.TrimSpace(v[:pos]))] = string(bytes.TrimSpace(v[pos+1:]))
	}
	ListenAddr = mm["address"] + ":" + mm["port"]
	if ListenAddr[len(ListenAddr)-1] == ':' {
		ListenAddr += "8085"
	}

	if len(mm["webroot"]) > 0 && mm["webroot"][0] == '/' {
		WebRoot = mm["webroot"]
	} else {
		WebRoot = filepath.Join(filepath.Dir(os.Args[1]), mm["webroot"])
	}
	StaticPath = path("static")
	MediaPath = path("media")
	Templates = path("templates/*")
	DBPath = path("data.db")
	Email = mm["email"]
	Name = mm["name"]
	URL = mm["url"]
	passLoad()
}