Initial commit
This commit is contained in:
		
							
								
								
									
										49
									
								
								middleware/middleware.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								middleware/middleware.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
package middleware
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"git.beisel.it/florian/hostname-service/config"
 | 
			
		||||
	"github.com/dgrijalva/jwt-go"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Authenticate() gin.HandlerFunc {
 | 
			
		||||
	return func(c *gin.Context) {
 | 
			
		||||
		const Bearer_schema = "Bearer "
 | 
			
		||||
		header := c.GetHeader("Authorization")
 | 
			
		||||
		if header == "" {
 | 
			
		||||
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "No token provided"})
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		tokenString := header[len(Bearer_schema):]
 | 
			
		||||
		token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
 | 
			
		||||
			if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
 | 
			
		||||
				return nil, fmt.Errorf("unexpected signing method")
 | 
			
		||||
			}
 | 
			
		||||
			return config.JwtKey, nil
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid token: " + err.Error()})
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
 | 
			
		||||
			// Extract the username from the MapClaims
 | 
			
		||||
			if username, ok := claims["sub"].(string); ok {
 | 
			
		||||
				c.Set("username", username)
 | 
			
		||||
			} else {
 | 
			
		||||
				c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid token claims"})
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		c.Next()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user