300 lines
5.8 KiB
Go
300 lines
5.8 KiB
Go
package routes
|
|
|
|
import (
|
|
"context"
|
|
"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"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
"google.golang.org/grpc/credentials"
|
|
|
|
"go.opentelemetry.io/otel/sdk/resource"
|
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
|
)
|
|
|
|
var (
|
|
serviceName = os.Getenv("SERVICE_NAME")
|
|
collectorURL = os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
insecure = os.Getenv("INSECURE_MODE")
|
|
)
|
|
|
|
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 initTracer() func(context.Context) error {
|
|
|
|
var secureOption otlptracegrpc.Option
|
|
|
|
if strings.ToLower(insecure) == "false" || insecure == "0" || strings.ToLower(insecure) == "f" {
|
|
secureOption = otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, ""))
|
|
} else {
|
|
secureOption = otlptracegrpc.WithInsecure()
|
|
}
|
|
|
|
exporter, err := otlptrace.New(
|
|
context.Background(),
|
|
otlptracegrpc.NewClient(
|
|
secureOption,
|
|
otlptracegrpc.WithEndpoint(collectorURL),
|
|
),
|
|
)
|
|
|
|
if err != nil {
|
|
log.Fatalf("Failed to create exporter: %v", err)
|
|
}
|
|
resources, err := resource.New(
|
|
context.Background(),
|
|
resource.WithAttributes(
|
|
attribute.String("service.name", serviceName),
|
|
attribute.String("library.language", "go"),
|
|
),
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("Could not set resources: %v", err)
|
|
}
|
|
|
|
otel.SetTracerProvider(
|
|
sdktrace.NewTracerProvider(
|
|
sdktrace.WithSampler(sdktrace.AlwaysSample()),
|
|
sdktrace.WithBatcher(exporter),
|
|
sdktrace.WithResource(resources),
|
|
),
|
|
)
|
|
return exporter.Shutdown
|
|
}
|
|
|
|
func SetupRotes(g *gin.Engine) error {
|
|
InitMiddlewareProvider()
|
|
|
|
cleanup := initTracer()
|
|
defer cleanup(context.Background())
|
|
|
|
g.Use(otelgin.Middleware(serviceName))
|
|
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
|
|
}
|