Support restricting API token access based on IP address
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package middlewares
|
||||
|
||||
import (
|
||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||
)
|
||||
|
||||
// APITokenIpLimit limits API token access based on IP address
|
||||
func APITokenIpLimit(config *settings.Config) core.MiddlewareHandlerFunc {
|
||||
return func(c *core.WebContext) {
|
||||
claims := c.GetTokenClaims()
|
||||
|
||||
if claims == nil {
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
|
||||
if claims.Type != core.USER_TOKEN_TYPE_API {
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
|
||||
if len(config.APITokenAllowedRemoteIPs) < 1 {
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
|
||||
for i := 0; i < len(config.APITokenAllowedRemoteIPs); i++ {
|
||||
if config.APITokenAllowedRemoteIPs[i].Match(c.ClientIP()) {
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
utils.PrintJsonErrorResult(c, errs.ErrIPForbidden)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user