61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package main
|
||
|
||
import (
|
||
"log"
|
||
"net/http"
|
||
"os"
|
||
"path/filepath"
|
||
"time"
|
||
|
||
"scout/internal/httpapi"
|
||
"scout/internal/notify"
|
||
"scout/internal/registry"
|
||
"scout/internal/users"
|
||
)
|
||
|
||
func main() {
|
||
address := envOr("SCOUT_ADDR", ":8080")
|
||
dataDir := envOr("SCOUT_DATA_DIR", "data")
|
||
token := os.Getenv("SCOUT_DEVELOPER_TOKEN")
|
||
logger := log.Default()
|
||
store, err := registry.New(dataDir)
|
||
if err != nil {
|
||
logger.Fatal(err)
|
||
}
|
||
userStore, err := users.New(filepath.Join(dataDir, "users.json"))
|
||
if err != nil {
|
||
logger.Fatal(err)
|
||
}
|
||
if adminEmail := os.Getenv("SCOUT_ADMIN_EMAIL"); adminEmail != "" {
|
||
if _, err := userStore.EnsureAdmin(adminEmail, os.Getenv("SCOUT_ADMIN_NAME"), os.Getenv("SCOUT_ADMIN_PASSWORD")); err != nil {
|
||
logger.Fatal(err)
|
||
}
|
||
}
|
||
server := &httpapi.Server{
|
||
Registry: store,
|
||
DeveloperToken: token,
|
||
MaxUploadBytes: 512 << 20,
|
||
Users: userStore,
|
||
Mailer: notify.NewFromEnv(logger),
|
||
SessionDuration: 24 * time.Hour,
|
||
Logger: logger,
|
||
}
|
||
logger.Printf("Scout 包服务端正在监听 %s,数据目录为 %s", address, dataDir)
|
||
if token == "" {
|
||
logger.Printf("未配置 SCOUT_DEVELOPER_TOKEN,上传需要开发者账户或管理员账户")
|
||
}
|
||
if os.Getenv("SCOUT_SMTP_HOST") == "" {
|
||
logger.Printf("未配置 SMTP,邮箱通知将只记录日志")
|
||
}
|
||
if err := http.ListenAndServe(address, server.Handler()); err != nil {
|
||
logger.Fatal(err)
|
||
}
|
||
}
|
||
|
||
func envOr(name, fallback string) string {
|
||
if value := os.Getenv(name); value != "" {
|
||
return value
|
||
}
|
||
return fallback
|
||
}
|