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); }
public Task <CidrGroup> GetCidrGroup(int cidrGroupId) { return(_cidrGroupService.GetCidrGroup(cidrGroupId)); }