feat: add accessPolicy middleware to allow or deny a list of Ips

This commit is contained in:
2024-12-09 11:00:14 +01:00
parent 262d616e8e
commit f3c2bdcebc
9 changed files with 178 additions and 17 deletions

View File

@@ -282,6 +282,41 @@ func getBasicAuthMiddleware(input interface{}) (BasicRuleMiddleware, error) {
}
return *basicAuth, nil
}
func getAccessPoliciesMiddleware(input interface{}) (AccessPolicyRuleMiddleware, error) {
a := new(AccessPolicyRuleMiddleware)
var bytes []byte
bytes, err := yaml.Marshal(input)
if err != nil {
return AccessPolicyRuleMiddleware{}, fmt.Errorf("error parsing yaml: %v", err)
}
err = yaml.Unmarshal(bytes, a)
if err != nil {
return AccessPolicyRuleMiddleware{}, fmt.Errorf("error parsing yaml: %v", err)
}
if len(a.SourceRanges) == 0 {
return AccessPolicyRuleMiddleware{}, fmt.Errorf("empty sourceRanges")
}
for _, ip := range a.SourceRanges {
isIP, isCIDR := isIPOrCIDR(ip)
if isIP {
if !validateIPAddress(ip) {
return AccessPolicyRuleMiddleware{}, fmt.Errorf("invalid ip address")
}
}
if isCIDR {
if !validateCIDR(ip) {
return AccessPolicyRuleMiddleware{}, fmt.Errorf("invalid cidr address")
}
if validateCIDR(ip) {
return AccessPolicyRuleMiddleware{}, fmt.Errorf("cidr is not yet supported")
}
}
}
return *a, nil
}
// oAuthMiddleware returns OauthRulerMiddleware, error
func oAuthMiddleware(input interface{}) (OauthRulerMiddleware, error) {