oauth2-proxy/oauth2-proxy

View on GitHub
pkg/ip/parse_ip_net.go

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
package ip

import (
    "net"
    "strings"
)

func ParseIPNet(s string) *net.IPNet {
    if !strings.ContainsRune(s, '/') {
        ip := net.ParseIP(s)
        if ip == nil {
            return nil
        }

        var mask net.IPMask
        switch {
        case ip.To4() != nil:
            mask = net.CIDRMask(32, 32)
        case ip.To16() != nil:
            mask = net.CIDRMask(128, 128)
        default:
            return nil
        }

        return &net.IPNet{
            IP:   ip,
            Mask: mask,
        }
    }

    switch ip, ipNet, err := net.ParseCIDR(s); {
    case err != nil:
        return nil
    case !ipNet.IP.Equal(ip):
        return nil
    default:
        return ipNet
    }
}