93 lines
1.9 KiB
Go
93 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
"opencatd-open/pkg/store"
|
|
"opencatd-open/team/dashboard"
|
|
"opencatd-open/wire"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func main() {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
|
|
|
|
_, err := store.InitDB()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
team, err := wire.InitTeamHandler(ctx, store.DB)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
r := gin.Default()
|
|
teamGroup := r.Group("/1")
|
|
teamGroup.Use(team.AuthMiddleware())
|
|
{
|
|
teamGroup.POST("/users/init", team.InitAdmin)
|
|
// 获取当前用户信息
|
|
teamGroup.GET("/me", team.Me)
|
|
//// team.GET("/me/usages", team.HandleMeUsage)
|
|
|
|
teamGroup.POST("/keys", team.CreateKey)
|
|
teamGroup.GET("/keys", team.ListKeys)
|
|
teamGroup.POST("/keys/:id", team.UpdateKey)
|
|
teamGroup.DELETE("/keys/:id", team.DeleteKey)
|
|
|
|
teamGroup.POST("/users", team.CreateUser)
|
|
teamGroup.GET("/users", team.ListUsers)
|
|
teamGroup.POST("/users/:id/reset", team.ResetUserToken)
|
|
teamGroup.DELETE("/users/:id", team.DeleteUser)
|
|
|
|
teamGroup.GET("/1/usages", team.ListUsages)
|
|
}
|
|
|
|
api := r.Group("/api")
|
|
{
|
|
api.POST("/login", dashboard.HandleLogin)
|
|
}
|
|
|
|
srv := &http.Server{
|
|
Addr: ":8080",
|
|
Handler: r,
|
|
}
|
|
|
|
go func() {
|
|
// 服务启动
|
|
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
|
log.Fatalf("listen: %s\n", err)
|
|
}
|
|
}()
|
|
|
|
// 等待中断信号来优雅地关闭服务器
|
|
quit := make(chan os.Signal, 1)
|
|
// kill (no param) default send syscall.SIGTERM
|
|
// kill -2 is syscall.SIGINT
|
|
// kill -9 is syscall.SIGKILL but can't be catch
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
<-quit
|
|
log.Println("Shutdown Server ...")
|
|
|
|
defer cancel()
|
|
if err := srv.Shutdown(ctx); err != nil {
|
|
log.Fatal("Server Shutdown:", err)
|
|
}
|
|
db, _ := store.DB.DB()
|
|
db.Close()
|
|
// catching ctx.Done(). timeout of 1 seconds.
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Println("timeout of 5 seconds.")
|
|
}
|
|
log.Println("Server exiting")
|
|
|
|
}
|