Enshi/enshi_back/routes/routesSetup.go
2025-04-16 17:44:25 +03:00

272 lines
5.3 KiB
Go

package routes
import (
"enshi/middleware"
"enshi/middleware/getters"
"enshi/routes/authRoutes"
"enshi/routes/blogRoutes"
bookmarksroutes "enshi/routes/bookmarksRoutes"
"enshi/routes/postsRoutes"
"enshi/routes/userProfileRoutes"
userroutes "enshi/routes/userRoutes"
voteroutes "enshi/routes/voteRoutes"
"io"
"log"
"net/http"
"strings"
"github.com/gin-gonic/gin"
"github.com/opentracing-contrib/go-gin/ginhttp"
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
jaegercfg "github.com/uber/jaeger-client-go/config"
)
func testCookie(c *gin.Context) {
cock, _ := c.Cookie("auth_cookie")
c.IndentedJSON(http.StatusOK, gin.H{"token": "SLESAR' U STASA " + strings.Split(cock, "_")[0]})
}
func testAdmin(c *gin.Context) {
c.IndentedJSON(http.StatusOK, gin.H{"message": "you are an admin, congrats!"})
}
func testAuth(c *gin.Context) {
userInfo, err := getters.GetClaimsFromContext(c)
if err != nil {
c.IndentedJSON(http.StatusUnauthorized, gin.H{"message": "you are not logged in"})
}
c.IndentedJSON(
http.StatusOK,
gin.H{
"message": "you are logged in, congrats!",
"username": userInfo.Username,
"is_admin": userInfo.IsAdmin,
"id": userInfo.Id,
},
)
}
func initJaeger(service string) (opentracing.Tracer, io.Closer, error) {
cfg := jaegercfg.Configuration{
ServiceName: service,
Sampler: &jaegercfg.SamplerConfig{
Type: jaeger.SamplerTypeConst, // sample every trace; for production consider probabilistic sampling
Param: 1,
},
Reporter: &jaegercfg.ReporterConfig{
LogSpans: true,
LocalAgentHostPort: "localhost:6831", // make sure this matches your Docker settings
},
}
tracer, closer, err := cfg.NewTracer()
return tracer, closer, err
}
func SetupRotes(g *gin.Engine) error {
InitMiddlewareProvider()
// Initialize Jaeger Tracer
tracer, closer, err := initJaeger("go-gin-jaeger-example")
if err != nil {
log.Fatalf("Could not initialize jaeger tracer: %s", err.Error())
}
defer closer.Close()
// Set the global tracer (thread-safe and available everywhere)
opentracing.SetGlobalTracer(tracer)
// Attach the OpenTracing middleware to Gin.
// This middleware will extract any incoming tracing information and start a server span.
g.Use(ginhttp.Middleware(tracer))
g.Use(middleware.CORSMiddleware())
g.Use(middleware.TargetMiddleware())
testGroup := g.Group("/test/")
testGroup.Use(MiddlewareProvider.GetMiddleware(POST_MIDDLEWARE))
testGroup.GET(
"posts/:post-id",
postsRoutes.GetPost,
)
testGroup.GET(
"posts/random",
postsRoutes.GetRandomPost,
)
testGroup.PUT(
"posts/:post-id",
postsRoutes.UpdatePost,
)
testGroup.POST(
"posts",
postsRoutes.CreatePost,
)
testGroup.DELETE(
"posts/:post-id",
postsRoutes.DeletePost,
)
// Free group routes
freeGroup := g.Group("/")
freeGroup.GET("getCookie", testCookie)
freeGroup.POST(
"login",
authRoutes.Login,
)
freeGroup.POST(
"users",
authRoutes.RegisterUser,
)
postsGroup := g.Group("/")
postsGroup.Use(middleware.PostsMiddleware())
postsGroup.GET(
"posts/:post-id",
postsRoutes.GetPost,
)
postsGroup.GET(
"posts/random",
postsRoutes.GetRandomPost,
)
postsGroup.PUT(
"posts/:post-id",
postsRoutes.UpdatePost,
)
postsGroup.PUT(
"posts/:post-id/blogs/:blog-id",
postsRoutes.UpdatePostBlog,
)
postsGroup.POST(
"posts",
postsRoutes.CreatePost,
)
postsGroup.DELETE(
"posts/:post-id",
postsRoutes.DeletePost,
)
postsGroup.DELETE(
"posts/:post-id/blogs",
postsRoutes.DeletePostBlog,
)
blogGroup := g.Group("/")
blogGroup.Use(MiddlewareProvider.GetMiddleware(BLOG_MIDDLEWARE))
blogGroup.POST(
"blogs",
blogRoutes.CreateBlog,
)
blogGroup.PUT(
"blogs/:blog-id",
blogRoutes.UpdateBlog,
)
blogGroup.DELETE(
"blogs/:blog-id",
blogRoutes.DeleteBlog,
)
blogGroup.GET(
"blogs/:blog-id",
blogRoutes.GetBlog,
)
profilesGroup := g.Group("/")
profilesGroup.Use(middleware.ProfileMiddleware())
profilesGroup.PUT(
"profiles",
userProfileRoutes.UpdateUserProfile,
)
bookmarksGroup := g.Group("/")
bookmarksGroup.Use(middleware.BookmarksMiddleware())
bookmarksGroup.POST(
"bookmarks/:post-id",
bookmarksroutes.CreateBookmark,
)
bookmarksGroup.DELETE(
"bookmarks/:post-id",
bookmarksroutes.DeleteBookmark,
)
bookmarksGroup.GET(
"bookmarks/:post-id",
bookmarksroutes.GetBookmark,
)
postVoteGroup := g.Group("/")
postVoteGroup.Use(middleware.PostVotesMiddleware())
postVoteGroup.POST(
"post-votes/:post-id",
voteroutes.CreateVote,
)
postVoteGroup.DELETE(
"post-votes/:post-id",
voteroutes.DeleteVote,
)
postVoteGroup.GET(
"post-vote/:post-id",
voteroutes.GetVote,
)
postVoteGroup.GET(
"post-votes/:post-id",
voteroutes.GetVotes,
)
userGroup := g.Group("/users/")
userGroup.Use(MiddlewareProvider.GetMiddleware(USER_MIDDLEWARE))
userGroup.GET(
"/info/:user-id",
userroutes.GetUserInfo,
)
// Admin group routes
adminGroup := g.Group("/admin/")
adminGroup.Use(middleware.AdminMiddleware())
adminGroup.GET("check", testAdmin)
authGroup := g.Group("/auth/")
authGroup.Use(middleware.AuthMiddleware())
authGroup.GET("check", testAuth)
authGroup.DELETE(
"logout",
authRoutes.Logout,
)
temporal := g.Group("/")
temporal.Use(middleware.AuthMiddleware())
temporal.GET(
"/user/blogs",
blogRoutes.GetUserBlogs,
)
freeGroup.GET(
"/user/:user-id",
userroutes.GetUserUsername,
)
return nil
}