// Package middleware ...
//
// Description : middleware ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022-06-25 23:24
package middleware

import (
	"git.zhangdeman.cn/zhangdeman/gin/define"
	"git.zhangdeman.cn/zhangdeman/gin/response"
	networkUtil "git.zhangdeman.cn/zhangdeman/network/util"
	"github.com/gin-gonic/gin"
)

// ValidateBlackIPMiddleware 验证黑名单IP的中间件
func ValidateBlackIPMiddleware(code interface{}, httpCode int, validateFunc define.IsBlackIP) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		if nil == validateFunc {
			// 不验证黑名单
			ctx.Next()
			return
		}
		remoteIp := networkUtil.IP.GetRemoteIP(ctx.Request)
		if validateFunc(ctx, remoteIp) {
			// 命中黑名单
			response.Send(ctx, code, httpCode, map[string]any{
				"remote_ip": remoteIp,
			}, nil)
			ctx.Abort()
			return
		}
		ctx.Next()
	}
}

// ValidateWhiteIPMiddleware 是否白名单IP
func ValidateWhiteIPMiddleware(code interface{}, httpCode int, validateFunc define.IsWhiteIP) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		if nil == validateFunc {
			// 不验证白名单
			ctx.Next()
			return
		}
		remoteIp := networkUtil.IP.GetRemoteIP(ctx.Request)
		if !validateFunc(ctx, remoteIp) {
			// 非名单
			response.Send(ctx, code, httpCode, map[string]any{
				"remote_ip": remoteIp,
			}, nil)
			ctx.Abort()
			return
		}
		ctx.Next()
	}
}
