Files
opencatd-open/opencat.go
2023-06-11 20:12:53 +08:00

125 lines
2.6 KiB
Go

package main
import (
"embed"
"io/fs"
"log"
"net/http"
"opencatd-open/router"
"opencatd-open/store"
"os"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"gorm.io/gorm"
)
//go:embed dist/*
var web embed.FS
func getFileSystem(path string) http.FileSystem {
fs, err := fs.Sub(web, path)
if err != nil {
panic(err)
}
return http.FS(fs)
}
func main() {
args := os.Args[1:]
if len(args) > 0 {
switch args[0] {
case "reset_root":
log.Println("reset root token...")
if _, err := store.GetUserByID(uint(1)); err != nil {
if err == gorm.ErrRecordNotFound {
log.Println("请在opencat(或其他APP)客户端完成team初始化")
return
} else {
log.Fatalln(err)
return
}
}
ntoken := uuid.NewString()
if err := store.UpdateUser(uint(1), ntoken); err != nil {
log.Fatalln(err)
return
}
log.Println("new root token:", ntoken)
return
case "root_token":
log.Println("reset root token...")
if user, err := store.GetUserByID(uint(1)); err != nil {
log.Fatalln(err)
return
} else {
log.Println("root token:", user.Token)
return
}
default:
return
}
}
port := os.Getenv("PORT")
r := gin.Default()
group := r.Group("/1")
{
group.Use(router.AuthMiddleware())
// 获取当前用户信息
group.GET("/me", router.HandleMe)
group.GET("/me/usages", router.HandleMeUsage)
// 获取所有Key
group.GET("/keys", router.HandleKeys)
// 获取所有用户信息
group.GET("/users", router.HandleUsers)
group.GET("/usages", router.HandleUsage)
// 添加Key
group.POST("/keys", router.HandleAddKey)
// 删除Key
group.DELETE("/keys/:id", router.HandleDelKey)
// 添加用户
group.POST("/users", router.HandleAddUser)
// 删除用户
group.DELETE("/users/:id", router.HandleDelUser)
// 重置用户Token
group.POST("/users/:id/reset", router.HandleResetUserToken)
}
// 初始化用户
r.POST("/1/users/init", router.Handleinit)
r.Any("/v1/*proxypath", router.HandleProy)
// r.POST("/v1/chat/completions", router.HandleProy)
// r.GET("/v1/models", router.HandleProy)
// r.GET("/v1/dashboard/billing/subscription", router.HandleProy)
// r.Use(static.Serve("/", static.LocalFile("dist", false)))
idxFS, err := fs.Sub(web, "dist")
if err != nil {
panic(err)
}
r.GET("/", gin.WrapH(http.FileServer(http.FS(idxFS))))
assetsFS, err := fs.Sub(web, "dist/assets")
if err != nil {
panic(err)
}
r.GET("/assets/*filepath", gin.WrapH(http.StripPrefix("/assets/", http.FileServer(http.FS(assetsFS)))))
if port == "" {
port = "80"
}
r.Run(":" + port)
}