main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "log"
  4. "github.com/gin-gonic/gin"
  5. "github.com/spf13/viper"
  6. swaggerfiles "github.com/swaggo/files"
  7. ginSwagger "github.com/swaggo/gin-swagger"
  8. "github.com/chaitin/SafeLine/docs"
  9. "github.com/chaitin/SafeLine/internal/handler"
  10. "github.com/chaitin/SafeLine/internal/service"
  11. )
  12. func main() {
  13. viper.AutomaticEnv()
  14. viper.SetDefault("GITHUB_CACHE_TTL", 10) // cache timeout in minutes
  15. viper.SetDefault("LISTEN_ADDR", ":8080") // api server addr
  16. githubToken := viper.GetString("GITHUB_TOKEN")
  17. if githubToken == "" {
  18. log.Fatal("GITHUB_TOKEN must be set")
  19. }
  20. telemetryHost := viper.GetString("TELEMETRY_HOST")
  21. if telemetryHost == "" {
  22. log.Fatal("TELEMETRY_HOST must be set")
  23. }
  24. listenAddr := viper.GetString("LISTEN_ADDR")
  25. r := gin.Default()
  26. // Initialize the GitHubService.
  27. gitHubService := service.NewGitHubService(&service.GithubConfig{
  28. Token: githubToken,
  29. Owner: "chaitin",
  30. Repo: "SafeLine",
  31. CacheTTL: viper.GetDuration("GITHUB_CACHE_TTL"),
  32. })
  33. // Create a new instance of GitHubHandler.
  34. gitHubHandler := handler.NewGitHubHandler(gitHubService)
  35. v1 := r.Group("/api")
  36. v1.GET("/repos/issues", gitHubHandler.GetIssues)
  37. v1.GET("/repos/discussions", gitHubHandler.GetDiscussions)
  38. v1.GET("/repos/info", gitHubHandler.GetRepo)
  39. // Initialize the SafelineService.
  40. safelineService := service.NewSafelineService(telemetryHost)
  41. safelineHandler := handler.NewSafelineHandler(safelineService)
  42. v1.GET("/safeline/count", safelineHandler.GetInstallerCount)
  43. v1.POST("/exist", safelineHandler.Exist)
  44. v1.POST("/behavior", safelineHandler.Behavior)
  45. docs.SwaggerInfo.BasePath = v1.BasePath()
  46. r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
  47. // Start the Gin server on the specified port.
  48. if err := r.Run(listenAddr); err != nil {
  49. log.Fatalf("Error starting server: %v", err)
  50. }
  51. }