示例#1
0
        private async Task <IEnumerable <CIDRNotation> > GetServiceAllowRuleCIDRNotation(int serviceId, int?serviceForwardTargetId = null)
        {
            var rules = await ListServiceAllowRule(serviceId, serviceForwardTargetId);

            List <CIDRNotation> result = new List <CIDRNotation>();

            foreach (var rule in rules)
            {
                try
                {
                    switch (rule.Type)
                    {
                    case ServiceAllowRuleTypes.CIDR:
                        result.Add(CIDRNotation.Parse(rule.Cidr));
                        break;

                    case ServiceAllowRuleTypes.CIDR_GROUP:
                        result.AddRange((await _cidrGroupService.GetCidrGroup(rule.CidrGroupId.Value)).CidrList.Select(CIDRNotation.Parse));
                        break;

                    case ServiceAllowRuleTypes.USER:
                        var ip = await _userService.GetUserIP(rule.UserId.Value);

                        if (ip == null)
                        {
                            break;
                        }
                        result.Add(CIDRNotation.Parse(ip.ToString() + "/" + (ip.GetAddressBytes().Length * 8)));

                        if (IPAddress.IsLoopback(ip))
                        {
                            result.Add(CIDRNotation.Parse("::1/128"));
                            result.Add(CIDRNotation.Parse("127.0.0.1/32"));
                        }
                        else
                        {
                            if (ip.IsIPv4MappedToIPv6)
                            {
                                var ipv4 = ip.MapToIPv4();
                                result.Add(CIDRNotation.Parse(ipv4.ToString() + "/" + (ipv4.GetAddressBytes().Length * 8)));
                            }
                        }
                        break;

                    case ServiceAllowRuleTypes.USER_GROUP:
                        var userlist = await _userGroupService.ListUserGroupMember(rule.UserGroupId.Value);

                        foreach (var user in userlist)
                        {
                            var userIp = await _userService.GetUserIP(user.Id);

                            if (userIp == null)
                            {
                                continue;
                            }
                            result.Add(CIDRNotation.Parse(userIp.ToString() + "/" + (userIp.GetAddressBytes().Length * 8)));

                            if (IPAddress.IsLoopback(userIp))
                            {
                                result.Add(CIDRNotation.Parse("::1/128"));
                                result.Add(CIDRNotation.Parse("127.0.0.1/32"));
                            }
                            else
                            {
                                if (userIp.IsIPv4MappedToIPv6)
                                {
                                    var ipv4 = userIp.MapToIPv4();
                                    result.Add(CIDRNotation.Parse(ipv4.ToString() + "/" + (ipv4.GetAddressBytes().Length * 8)));
                                }
                            }
                        }
                        break;
                    }
                }
                catch { }
            }

            return(result);
        }
示例#2
0
 public Task <CidrGroup> GetCidrGroup(int cidrGroupId)
 {
     return(_cidrGroupService.GetCidrGroup(cidrGroupId));
 }