package main import ( "fmt" _ "github.com/lib/pq" "log" "net/http" "os" "git.minhas.io/asara/sudoscientist/packages/auth" "git.minhas.io/asara/sudoscientist/packages/database" "git.minhas.io/asara/sudoscientist/packages/users" "github.com/dgrijalva/jwt-go" "github.com/go-chi/chi" "github.com/go-chi/chi/middleware" "github.com/go-chi/jwtauth" "github.com/go-chi/render" ) func main() { // initiate the database db, _ := database.NewDB() defer db.Close() auth.DB = db auth.Init() users.DB = db users.Init() // initiate jwt token auth.TokenAuth = jwtauth.New("HS256", []byte("secret"), nil) _, tokenString, _ := auth.TokenAuth.Encode(jwt.MapClaims{"asara": 123}) log.Printf("DEBUG: a sample jwt is %s\n\n", tokenString) // initiate the routes router := Routes() walkFunc := func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error { fmt.Printf("%s %s\n", method, route) return nil } if err := chi.Walk(router, walkFunc); err != nil { log.Panicf("Logging err: %s\n", err.Error()) } // start server apiPort := fmt.Sprintf(":%s", os.Getenv("API_PORT")) log.Fatal(http.ListenAndServe(apiPort, router)) } func Routes() *chi.Mux { router := chi.NewRouter() router.Use( render.SetContentType(render.ContentTypeJSON), middleware.Logger, middleware.DefaultCompress, middleware.RedirectSlashes, middleware.Recoverer, ) router.Route("/v1", func(r chi.Router) { r.Mount("/api/auth", auth.Routes()) }) return router }