CSRF protection
This commit is contained in:
parent
84fa811a4a
commit
f5985f9f7a
@ -13,7 +13,7 @@ import (
|
||||
func TokenHandler(ctx *gin.Context) {
|
||||
session := sessions.Default(ctx)
|
||||
userId := utils.GetUserId(session)
|
||||
//TODO : CSRF
|
||||
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
||||
"userid": strconv.FormatUint(userId, 10),
|
||||
})
|
||||
|
12
app/http/middleware/verifyheader.go
Normal file
12
app/http/middleware/verifyheader.go
Normal file
@ -0,0 +1,12 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"github.com/TicketsBot/GoPanel/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func VerifyXTicketsHeader(ctx *gin.Context) {
|
||||
if ctx.GetHeader("x-tickets") != "true" {
|
||||
ctx.AbortWithStatusJSON(400, utils.ErrorStr("Missing x-tickets header"))
|
||||
}
|
||||
}
|
@ -59,7 +59,7 @@ func StartServer() {
|
||||
|
||||
authorized := router.Group("/", middleware.AuthenticateCookie)
|
||||
{
|
||||
authorized.POST("/token", api.TokenHandler)
|
||||
authorized.POST("/token", middleware.VerifyXTicketsHeader, api.TokenHandler)
|
||||
|
||||
authenticateGuildAdmin := authorized.Group("/", middleware.AuthenticateGuild(false, permission.Admin))
|
||||
authenticateGuildSupport := authorized.Group("/", middleware.AuthenticateGuild(false, permission.Support))
|
||||
@ -80,7 +80,7 @@ func StartServer() {
|
||||
authorized.GET("/webchat", manage.WebChatWs)
|
||||
}
|
||||
|
||||
apiGroup := router.Group("/api", middleware.AuthenticateToken)
|
||||
apiGroup := router.Group("/api", middleware.VerifyXTicketsHeader, middleware.AuthenticateToken)
|
||||
guildAuthApiAdmin := apiGroup.Group("/:id", middleware.AuthenticateGuild(true, permission.Admin))
|
||||
guildAuthApiSupport := apiGroup.Group("/:id", middleware.AuthenticateGuild(true, permission.Support))
|
||||
{
|
||||
|
@ -1,8 +1,11 @@
|
||||
async function getToken() {
|
||||
let token = window.localStorage.getItem('token');
|
||||
if (token == null) {
|
||||
let res = await axios.post('/token', {
|
||||
withCredentials: true
|
||||
let res = await axios.post('/token', undefined, {
|
||||
withCredentials: true,
|
||||
headers: {
|
||||
'x-tickets': 'true'
|
||||
}
|
||||
});
|
||||
|
||||
if (res.status !== 200 || !res.data.success) {
|
||||
@ -25,6 +28,7 @@ function clearLocalStorage() {
|
||||
async function setDefaultHeader() {
|
||||
const token = await getToken();
|
||||
axios.defaults.headers.common['Authorization'] = token;
|
||||
axios.defaults.headers.common['x-tickets'] = 'true'; // abritrary header name and value
|
||||
axios.defaults.validateStatus = false;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user