main.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "log"
  7. "time"
  8. _ "github.com/Wei-Shaw/sub2api/ent/runtime"
  9. "github.com/Wei-Shaw/sub2api/internal/config"
  10. "github.com/Wei-Shaw/sub2api/internal/repository"
  11. "github.com/Wei-Shaw/sub2api/internal/service"
  12. )
  13. func main() {
  14. email := flag.String("email", "", "Admin email to issue a JWT for (defaults to first active admin)")
  15. flag.Parse()
  16. cfg, err := config.LoadForBootstrap()
  17. if err != nil {
  18. log.Fatalf("failed to load config: %v", err)
  19. }
  20. client, sqlDB, err := repository.InitEnt(cfg)
  21. if err != nil {
  22. log.Fatalf("failed to init db: %v", err)
  23. }
  24. defer func() {
  25. if err := client.Close(); err != nil {
  26. log.Printf("failed to close db: %v", err)
  27. }
  28. }()
  29. userRepo := repository.NewUserRepository(client, sqlDB)
  30. authService := service.NewAuthService(client, userRepo, nil, nil, cfg, nil, nil, nil, nil, nil, nil, nil, nil)
  31. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  32. defer cancel()
  33. var user *service.User
  34. if *email != "" {
  35. user, err = userRepo.GetByEmail(ctx, *email)
  36. } else {
  37. user, err = userRepo.GetFirstAdmin(ctx)
  38. }
  39. if err != nil {
  40. log.Fatalf("failed to resolve admin user: %v", err)
  41. }
  42. token, err := authService.GenerateToken(ctx, user)
  43. if err != nil {
  44. log.Fatalf("failed to generate token: %v", err)
  45. }
  46. fmt.Printf("ADMIN_EMAIL=%s\nADMIN_USER_ID=%d\nJWT=%s\n", user.Email, user.ID, token)
  47. }