Dockerfile was added | admin middleware | get post route
This commit is contained in:
parent
c74b71163a
commit
7a507192a4
8
enshi_back/.dockerignore
Normal file
8
enshi_back/.dockerignore
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
main
|
||||||
|
*.log
|
||||||
|
*.swp
|
||||||
|
*.tmp
|
||||||
|
*.out
|
||||||
|
node_modules
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
15
enshi_back/dockerfile
Normal file
15
enshi_back/dockerfile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
FROM golang:1.23.3-alpine3.20
|
||||||
|
|
||||||
|
WORKDIR /enshi_app
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN go build -o enshi_bin .
|
||||||
|
|
||||||
|
EXPOSE 9876
|
||||||
|
|
||||||
|
CMD [ "./enshi_bin" ]
|
||||||
@ -1,11 +1,11 @@
|
|||||||
package global
|
package global
|
||||||
|
|
||||||
var ResetColor = "\033[0m"
|
const ResetColor = "\033[0m"
|
||||||
var RedColor = "\033[31m"
|
const RedColor = "\033[31m"
|
||||||
var GreenColor = "\033[32m"
|
const GreenColor = "\033[32m"
|
||||||
var YellowColor = "\033[33m"
|
const YellowColor = "\033[33m"
|
||||||
var BlueColor = "\033[34m"
|
const BlueColor = "\033[34m"
|
||||||
var MagentaColor = "\033[35m"
|
const MagentaColor = "\033[35m"
|
||||||
var CyanColor = "\033[36m"
|
const CyanColor = "\033[36m"
|
||||||
var GrayColor = "\033[37m"
|
const GrayColor = "\033[37m"
|
||||||
var WhiteColor = "\033[97m"
|
const WhiteColor = "\033[97m"
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
package global
|
package global
|
||||||
|
|
||||||
var PathForCookies = "/"
|
const PathForCookies = "/"
|
||||||
var DomainForCookies = "localhost"
|
const DomainForCookies = "localhost"
|
||||||
var SecureForCookies = false
|
const SecureForCookies = false
|
||||||
var HttpOnlyForCookies = false
|
const HttpOnlyForCookies = false
|
||||||
|
|
||||||
|
const GinWorkPath = "localhost:9876"
|
||||||
|
|||||||
5
enshi_back/global/keys.go
Normal file
5
enshi_back/global/keys.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package global
|
||||||
|
|
||||||
|
const ContextUserId = "id"
|
||||||
|
const ContextIsAdmin = "isAdmin"
|
||||||
|
const ContextTokenData = "tokenData"
|
||||||
@ -5,6 +5,7 @@ import (
|
|||||||
db_repo "enshi/db/go_queries"
|
db_repo "enshi/db/go_queries"
|
||||||
"enshi/db_connection"
|
"enshi/db_connection"
|
||||||
"enshi/env"
|
"enshi/env"
|
||||||
|
"enshi/global"
|
||||||
utils "enshi/utils"
|
utils "enshi/utils"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
router.Run("localhost:9876")
|
router.Run(global.GinWorkPath)
|
||||||
|
|
||||||
fmt.Printf("Hey!, %v", "you")
|
fmt.Printf("Hey!, %v", "you")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,40 @@
|
|||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import "github.com/gin-gonic/gin"
|
import (
|
||||||
|
"context"
|
||||||
|
rest_api_stuff "enshi/REST_API_stuff"
|
||||||
|
db_repo "enshi/db/go_queries"
|
||||||
|
"enshi/db_connection"
|
||||||
|
"enshi/middleware/getters"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
func AdminMiddleware() gin.HandlerFunc {
|
func AdminMiddleware() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
|
|
||||||
|
userId, err := getters.GetUserIdFromContext(c)
|
||||||
|
|
||||||
|
if err != nil || userId == 0 {
|
||||||
|
rest_api_stuff.BadRequestAnswer(c, err)
|
||||||
|
c.Abort()
|
||||||
|
}
|
||||||
|
|
||||||
|
user, err :=
|
||||||
|
db_repo.New(db_connection.Dbx).
|
||||||
|
GetUserById(context.Background(), userId)
|
||||||
|
|
||||||
|
if err != nil || user.UserID == 0 {
|
||||||
|
rest_api_stuff.BadRequestAnswer(c, err)
|
||||||
|
c.Abort()
|
||||||
|
}
|
||||||
|
|
||||||
|
if !user.IsAdmin {
|
||||||
|
rest_api_stuff.UnauthorizedAnswer(c, fmt.Errorf("not allowed"))
|
||||||
|
c.Abort()
|
||||||
|
}
|
||||||
|
|
||||||
c.Next()
|
c.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package middleware
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"enshi/auth"
|
"enshi/auth"
|
||||||
|
"enshi/global"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@ -28,8 +29,8 @@ func AuthMiddleware() gin.HandlerFunc {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// Claims -> data stored in token
|
// Claims -> data stored in token
|
||||||
c.Set(ContextUserId, cookieClimes["id"])
|
c.Set(global.ContextUserId, cookieClimes["id"])
|
||||||
c.Set(ContextTokenData, cookieClimes)
|
c.Set(global.ContextTokenData, cookieClimes)
|
||||||
c.Next()
|
c.Next()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,6 @@ package getters
|
|||||||
import (
|
import (
|
||||||
"enshi/auth"
|
"enshi/auth"
|
||||||
"enshi/global"
|
"enshi/global"
|
||||||
"enshi/middleware"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
@ -14,7 +13,7 @@ import (
|
|||||||
func GetClaimsFromContext(c *gin.Context) (auth.UserInfoJWT, error) {
|
func GetClaimsFromContext(c *gin.Context) (auth.UserInfoJWT, error) {
|
||||||
var UserInfo auth.UserInfoJWT
|
var UserInfo auth.UserInfoJWT
|
||||||
|
|
||||||
claims, exists := c.Get(middleware.ContextTokenData)
|
claims, exists := c.Get(global.ContextTokenData)
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
return auth.UserInfoJWT{}, fmt.Errorf("error getting user id")
|
return auth.UserInfoJWT{}, fmt.Errorf("error getting user id")
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package getters
|
package getters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"enshi/middleware"
|
"enshi/global"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func GetUserIdFromContext(c *gin.Context) (int64, error) {
|
func GetUserIdFromContext(c *gin.Context) (int64, error) {
|
||||||
userId, exists := c.Get(middleware.ContextUserId)
|
userId, exists := c.Get(global.ContextUserId)
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
return -1, fmt.Errorf("error getting user id")
|
return -1, fmt.Errorf("error getting user id")
|
||||||
|
|||||||
@ -1,5 +0,0 @@
|
|||||||
package middleware
|
|
||||||
|
|
||||||
var ContextUserId = "id"
|
|
||||||
var ContextIsAdmin = "isAdmin"
|
|
||||||
var ContextTokenData = "tokenData"
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package routes
|
package authRoutes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package routes
|
package authRoutes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package routes
|
package postsRoutes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package routes
|
package postsRoutes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
func DeletePost(c *gin.Context) {
|
func DeletePost(c *gin.Context) {
|
||||||
var deletePostId struct {
|
var deletePostId struct {
|
||||||
postId int64
|
PostId int64
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.BindJSON(&deletePostId); err != nil {
|
if err := c.BindJSON(&deletePostId); err != nil {
|
||||||
@ -28,7 +28,7 @@ func DeletePost(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
query := db_repo.New(db_connection.Dbx)
|
query := db_repo.New(db_connection.Dbx)
|
||||||
post, err := query.GetPostsByPostId(context.Background(), deletePostId.postId)
|
post, err := query.GetPostsByPostId(context.Background(), deletePostId.PostId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rest_api_stuff.InternalErrorAnswer(c, err)
|
rest_api_stuff.InternalErrorAnswer(c, err)
|
||||||
return
|
return
|
||||||
@ -41,7 +41,7 @@ func DeletePost(c *gin.Context) {
|
|||||||
|
|
||||||
// TODO: Add block of code, so admin could delete anything
|
// TODO: Add block of code, so admin could delete anything
|
||||||
|
|
||||||
err = query.DeletePostByPostId(context.Background(), deletePostId.postId)
|
err = query.DeletePostByPostId(context.Background(), deletePostId.PostId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rest_api_stuff.InternalErrorAnswer(c, err)
|
rest_api_stuff.InternalErrorAnswer(c, err)
|
||||||
return
|
return
|
||||||
34
enshi_back/routes/postsRoutes/getPost.go
Normal file
34
enshi_back/routes/postsRoutes/getPost.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package postsRoutes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
rest_api_stuff "enshi/REST_API_stuff"
|
||||||
|
db_repo "enshi/db/go_queries"
|
||||||
|
"enshi/db_connection"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetPost(c *gin.Context) {
|
||||||
|
var postParams struct {
|
||||||
|
PostId int64
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := c.BindJSON(&postParams); err != nil {
|
||||||
|
rest_api_stuff.BadRequestAnswer(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
postData, err :=
|
||||||
|
db_repo.New(db_connection.Dbx).
|
||||||
|
GetPostsByPostId(context.Background(), postParams.PostId)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
rest_api_stuff.InternalErrorAnswer(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.IndentedJSON(http.StatusOK, postData)
|
||||||
|
|
||||||
|
}
|
||||||
@ -3,6 +3,8 @@ package utils
|
|||||||
import (
|
import (
|
||||||
"enshi/middleware"
|
"enshi/middleware"
|
||||||
"enshi/routes"
|
"enshi/routes"
|
||||||
|
"enshi/routes/authRoutes"
|
||||||
|
"enshi/routes/postsRoutes"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -14,6 +16,10 @@ func testCookie(c *gin.Context) {
|
|||||||
c.IndentedJSON(http.StatusOK, gin.H{"token": "SLESAR' U STASA " + strings.Split(cock, "_")[0]})
|
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 SetupRotes(g *gin.Engine) error {
|
func SetupRotes(g *gin.Engine) error {
|
||||||
g.Use(middleware.CORSMiddleware())
|
g.Use(middleware.CORSMiddleware())
|
||||||
|
|
||||||
@ -22,19 +28,23 @@ func SetupRotes(g *gin.Engine) error {
|
|||||||
|
|
||||||
freeGroup.GET("getCookie", testCookie)
|
freeGroup.GET("getCookie", testCookie)
|
||||||
|
|
||||||
freeGroup.POST("login", routes.Login)
|
freeGroup.POST("login", authRoutes.Login)
|
||||||
freeGroup.POST("registerUser", routes.RegisterUser)
|
freeGroup.POST("registerUser", authRoutes.RegisterUser)
|
||||||
|
|
||||||
// Auth group routes
|
// Auth group routes
|
||||||
authGroup := g.Group("/")
|
authGroup := g.Group("/")
|
||||||
authGroup.Use(middleware.AuthMiddleware())
|
authGroup.Use(middleware.AuthMiddleware())
|
||||||
authGroup.POST("createPost", routes.CreatePost)
|
|
||||||
authGroup.POST("deletePost", routes.DeletePost)
|
authGroup.GET("getPost", postsRoutes.GetPost)
|
||||||
|
|
||||||
|
authGroup.POST("createPost", postsRoutes.CreatePost)
|
||||||
|
authGroup.POST("deletePost", postsRoutes.DeletePost)
|
||||||
|
authGroup.POST("changeUserProfile", routes.ChangeUserProfile)
|
||||||
|
|
||||||
adminGroup := authGroup.Group("/admin/")
|
adminGroup := authGroup.Group("/admin/")
|
||||||
adminGroup.Use(middleware.AdminMiddleware())
|
adminGroup.Use(middleware.AdminMiddleware())
|
||||||
|
|
||||||
authGroup.POST("changeUserProfile", routes.ChangeUserProfile)
|
adminGroup.GET("testAdmin", testAdmin)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
171
package-lock.json
generated
171
package-lock.json
generated
@ -1,171 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Enshi",
|
|
||||||
"lockfileVersion": 3,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"dependencies": {
|
|
||||||
"@tanstack/react-query": "^5.59.0",
|
|
||||||
"axios": "^1.7.7"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@tanstack/query-core": {
|
|
||||||
"version": "5.59.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.0.tgz",
|
|
||||||
"integrity": "sha512-WGD8uIhX6/deH/tkZqPNcRyAhDUqs729bWKoByYHSogcshXfFbppOdTER5+qY7mFvu8KEFJwT0nxr8RfPTVh0Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"funding": {
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/tannerlinsley"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@tanstack/react-query": {
|
|
||||||
"version": "5.59.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.0.tgz",
|
|
||||||
"integrity": "sha512-YDXp3OORbYR+8HNQx+lf4F73NoiCmCcSvZvgxE29OifmQFk0sBlO26NWLHpcNERo92tVk3w+JQ53/vkcRUY1hA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@tanstack/query-core": "5.59.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/tannerlinsley"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"react": "^18 || ^19"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/asynckit": {
|
|
||||||
"version": "0.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
|
||||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/axios": {
|
|
||||||
"version": "1.7.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
|
|
||||||
"integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"follow-redirects": "^1.15.6",
|
|
||||||
"form-data": "^4.0.0",
|
|
||||||
"proxy-from-env": "^1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/combined-stream": {
|
|
||||||
"version": "1.0.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
|
||||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"delayed-stream": "~1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/delayed-stream": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/follow-redirects": {
|
|
||||||
"version": "1.15.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
|
|
||||||
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "individual",
|
|
||||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"debug": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/form-data": {
|
|
||||||
"version": "4.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
|
|
||||||
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"asynckit": "^0.4.0",
|
|
||||||
"combined-stream": "^1.0.8",
|
|
||||||
"mime-types": "^2.1.12"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/js-tokens": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true
|
|
||||||
},
|
|
||||||
"node_modules/loose-envify": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
|
||||||
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
|
||||||
"js-tokens": "^3.0.0 || ^4.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"loose-envify": "cli.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mime-db": {
|
|
||||||
"version": "1.52.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
|
||||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mime-types": {
|
|
||||||
"version": "2.1.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
|
||||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"mime-db": "1.52.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/proxy-from-env": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/react": {
|
|
||||||
"version": "18.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
|
|
||||||
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
|
||||||
"loose-envify": "^1.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"@tanstack/react-query": "^5.59.0",
|
|
||||||
"axios": "^1.7.7"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user