package api import ( "net/http" "time" "git.tek.govt.hu/dowerx/chat/server/controller" "git.tek.govt.hu/dowerx/chat/server/dao" "git.tek.govt.hu/dowerx/chat/server/util" "github.com/gin-gonic/gin" ) var userController controller.UserController var chatController controller.ChatController var authController controller.AuthController func initControlles() *util.ChatError { userDAO, err := dao.GetUserDAO() if err != nil { return err } channelDAO, err := dao.GetChannelDAO() if err != nil { return err } sessionDAO, err := dao.GetSessionDAO() if err != nil { return err } messageDAO, err := dao.GetMessageDAO() if err != nil { return err } rightDAO, err := dao.GetRightDAO() if err != nil { return err } notifcationDAO, err := dao.GetNotificationDAO() if err != nil { return err } userController = controller.MakeUserController(userDAO) authController = controller.MakeAuthController(userDAO, sessionDAO) chatController = controller.MakeChatController( channelDAO, sessionDAO, messageDAO, notifcationDAO, userDAO, rightDAO) return nil } func Listen(address string, base string) error { if err := initControlles(); err != nil { return err } router := gin.Default() if gin.DebugMode == "debug" { router.Use(func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "*") c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") c.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, Authorization") if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } c.Next() }) } api := router.Group(base) auth := api.Group("auth") auth.POST("register", register) auth.POST("login", login) auth.GET("logout", isLoggedIn, logout) auth.GET("bump", isLoggedIn, bump) user := api.Group("user") user.Use(isLoggedIn) user.GET("info/:username", userInfo) chat := api.Group("chat") chat.Use(isLoggedIn) chat.GET("channels", listAvailableChannels) chat.GET("messages/:id", getMessages) chat.POST("send", sendMessage) chat.GET("subscribe/:id", subscribeToChannel) server := &http.Server{ Addr: address, Handler: router, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, } return server.ListenAndServe() }