package main import ( "context" "fmt" "strings" "code.gurenya.net/carlsmei/muninn-aio/config" "code.gurenya.net/carlsmei/muninn-aio/db" "code.gurenya.net/carlsmei/muninn-aio/ent" "code.gurenya.net/carlsmei/muninn-aio/services" "github.com/asaskevich/govalidator" "github.com/go-telegram/bot" "github.com/go-telegram/bot/models" "github.com/gofiber/fiber/v2" _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" _ "github.com/mattn/go-sqlite3" ) var ( Version = "dev" ) func main() { config.Load() db.EntInit() // TELEGRAM opts := []bot.Option{ // bot.WithDefaultHandler(handler), } b, err := bot.New(config.Env.TelegramToken, opts...) if err != nil { panic(err) } b.RegisterHandler(bot.HandlerTypeMessageText, "/start", bot.MatchTypeExact, startHandler) b.RegisterHandlerMatchFunc(func(update *models.Update) bool { return update.Message != nil && govalidator.IsURL(update.Message.Text) }, generateLinkHandler) go b.Start(context.Background()) // FIBER app := fiber.New() app.Use(func(c *fiber.Ctx) error { c.Set("Server", fmt.Sprintf("muninn-aio (%s)", Version)) return c.Next() }) app.Get("/:key", func(c *fiber.Ctx) error { key := c.Params("key") link, err := services.GetLinkByKey(c.Context(), key) if err != nil { if ent.IsNotFound(err) { return c.Status(404).SendString("not found") } } c.SendString(fmt.Sprintf("Found. Redirecting to %s", link.OriginalURL)) return c.Redirect(link.OriginalURL, 302) }) var addr string if strings.Contains(config.Env.AppPort, ":") { addr = config.Env.AppPort } else { addr = ":" + config.Env.AppPort } app.Listen(addr) // quit := make(chan os.Signal, 1) // signal.Notify(quit, os.Interrupt, syscall.SIGTERM) // sig := <-quit // fmt.Printf("Shutting down server... Reason: %s\n", sig) }