/* * This file is part of laurelin_api * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ package middlewares import ( "api/auth" "api/apierror" "net/http" "github.com/gin-gonic/gin" ) // JWT authorization middleware func Auth() gin.HandlerFunc { return func(c *gin.Context) { // get the authorization header and check if it exists token := c.Request.Header.Get("Authorization") if token == "" { // no authorization header c.JSON(http.StatusUnauthorized, gin.H{"error": apierror.MissingAuth}) c.Abort() return } // check if the token is valid claims, err := auth.ValidateJWTToken(token) if err != nil { // something is wrong with the token, error out jwterror := apierror.APIError{apierror.GenericJWTError.ID, apierror.GenericJWTError.Name, err.Error()} c.JSON(http.StatusUnauthorized, gin.H{"error": jwterror}) c.Abort() return } // save the email so we can use it for fetching the user from the database in the handlers c.Set("email", claims.Email) // continue to the next handler c.Next() } }