SafeLine/backend/main.go
2024-04-24 15:06:02 +08:00

66 lines
1.8 KiB
Go

package main
import (
"log"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
swaggerfiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/chaitin/SafeLine/docs"
"github.com/chaitin/SafeLine/internal/handler"
"github.com/chaitin/SafeLine/internal/service"
)
func main() {
viper.AutomaticEnv()
viper.SetDefault("GITHUB_CACHE_TTL", 10) // cache timeout in minutes
viper.SetDefault("LISTEN_ADDR", ":8080") // api server addr
githubToken := viper.GetString("GITHUB_TOKEN")
if githubToken == "" {
log.Fatal("GITHUB_TOKEN must be set")
}
telemetryHost := viper.GetString("TELEMETRY_HOST")
if telemetryHost == "" {
log.Fatal("TELEMETRY_HOST must be set")
}
listenAddr := viper.GetString("LISTEN_ADDR")
r := gin.Default()
// Initialize the GitHubService.
gitHubService := service.NewGitHubService(&service.GithubConfig{
Token: githubToken,
Owner: "chaitin",
Repo: "SafeLine",
CacheTTL: viper.GetDuration("GITHUB_CACHE_TTL"),
})
// Create a new instance of GitHubHandler.
gitHubHandler := handler.NewGitHubHandler(gitHubService)
v1 := r.Group("/api")
v1.GET("/repos/issues", gitHubHandler.GetIssues)
v1.GET("/repos/discussions", gitHubHandler.GetDiscussions)
v1.GET("/repos/info", gitHubHandler.GetRepo)
// Initialize the SafelineService.
safelineService := service.NewSafelineService(telemetryHost)
safelineHandler := handler.NewSafelineHandler(safelineService)
v1.GET("/safeline/count", safelineHandler.GetInstallerCount)
v1.POST("/exist", safelineHandler.Exist)
v1.POST("/behavior", safelineHandler.Behavior)
docs.SwaggerInfo.BasePath = v1.BasePath()
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
// Start the Gin server on the specified port.
if err := r.Run(listenAddr); err != nil {
log.Fatalf("Error starting server: %v", err)
}
}