public void ProcessContent(EPiServer.Core.IContent content, System.IO.Stream writableStream) { var streamWriter = new StreamWriter(writableStream); if (content is VariationContent) { streamWriter.Write(",\"__prices\":{"); WritePrices(streamWriter, GetDefaultPrices(content as VariationContent)); streamWriter.Write("}"); } else if (content is ProductContent) { var pricesLow = new Dictionary <string, Dictionary <string, decimal> >(); var pricesHigh = new Dictionary <string, Dictionary <string, decimal> >(); var variants = ServiceLocator.Current.GetInstance <IContentLoader>() .GetItems((content as ProductContent).GetVariants(), (content as ProductContent).Language); if (variants != null) { foreach (VariationContent variant in variants) { var markets = GetDefaultPrices(variant); if (markets != null) { foreach (var market in markets) { if (!pricesLow.ContainsKey(market.Key)) { pricesLow.Add(market.Key, new Dictionary <string, decimal>()); } if (!pricesHigh.ContainsKey(market.Key)) { pricesHigh.Add(market.Key, new Dictionary <string, decimal>()); } if (market.Value.Any()) { foreach (var price in market.Value) { if (!pricesLow[market.Key].ContainsKey(price.Key)) { pricesLow[market.Key].Add(price.Key, price.Value); } else { if (price.Value < pricesLow[market.Key][price.Key]) { pricesLow[market.Key][price.Key] = price.Value; } } if (!pricesHigh[market.Key].ContainsKey(price.Key)) { pricesHigh[market.Key].Add(price.Key, price.Value); } else { if (price.Value > pricesHigh[market.Key][price.Key]) { pricesHigh[market.Key][price.Key] = price.Value; } } } } } } } } streamWriter.Write(",\"__pricesLow\":{"); WritePrices(streamWriter, pricesLow); streamWriter.Write("}"); streamWriter.Write(",\"__pricesHigh\":{"); WritePrices(streamWriter, pricesHigh); streamWriter.Write("}"); } // read permission compatibility for commerce content, since markets handle access var commercePermissionEntries = new AccessControlEntry[] { new AccessControlEntry(EveryoneRole.RoleName, AccessLevel.Read), new AccessControlEntry(AnonymousRole.RoleName, AccessLevel.Read) }; streamWriter.Write(",\"" + VulcanFieldConstants.ReadPermission + "\":["); streamWriter.Write(string.Join(",", commercePermissionEntries.Select(x => "\"" + x.Name + "\""))); streamWriter.Write("]"); streamWriter.Flush(); }
/// <summary> /// Process record. /// </summary> protected override void ProcessRecord() { IEnumerable <Sid> sids; switch (ParameterSetName) { case "sddl": sids = Sddl.Select(s => new Sid(s)); break; case "name": sids = Name.Select(s => NtSecurity.LookupAccountName(s)); break; case "service": sids = ServiceName.Select(s => NtSecurity.GetServiceSid(s)); break; case "il": sids = IntegrityLevel.Select(s => NtSecurity.GetIntegritySid(s)); break; case "il_raw": sids = IntegrityLevelRaw.Select(s => NtSecurity.GetIntegritySidRaw(s)); break; case "package": sids = PackageName.Select(s => TokenUtils.DerivePackageSidFromName(s)); if (RestrictedPackageName != null) { sids = sids.Select(s => TokenUtils.DeriveRestrictedPackageSidFromSid(s, RestrictedPackageName)); } if (AsCapability) { sids = sids.Select(s => NtSecurity.PackageSidToCapability(s)); } break; case "known": sids = KnownSid.Select(s => KnownSids.GetKnownSid(s)); break; case "token": using (NtToken token = NtToken.OpenProcessToken()) { Sid temp = null; if (PrimaryGroup) { temp = token.PrimaryGroup; } else if (Owner) { temp = token.Owner; } else if (LogonGroup) { temp = token.LogonSid.Sid; } else if (AppContainer) { temp = token.AppContainerSid; } else if (Label) { temp = token.IntegrityLevelSid.Sid; } else { temp = token.User.Sid; } sids = new[] { temp }; } break; case "cap": sids = CapabilityName.Select(s => CapabilityGroup ? NtSecurity.GetCapabilityGroupSid(s) : NtSecurity.GetCapabilitySid(s)); break; case "sid": sids = new[] { new Sid(SecurityAuthority, RelativeIdentifier ?? new uint[0]) }; break; case "rawsa": sids = new[] { new Sid(new SidIdentifierAuthority(SecurityAuthorityByte), RelativeIdentifier) }; break; case "logon": sids = new[] { NtSecurity.GetLogonSessionSid() }; break; case "trust": sids = new[] { NtSecurity.GetTrustLevelSid(TrustType, TrustLevel) }; break; case "ace": sids = AccessControlEntry.Select(a => a.Sid); break; case "relsid": sids = new[] { Sibling?BaseSid.CreateSibling(RelativeIdentifier) : BaseSid.CreateRelative(RelativeIdentifier) }; break; case "bytes": sids = new[] { new Sid(Byte) }; break; default: throw new ArgumentException("No SID type specified"); } if (AsSddl) { WriteObject(sids.Select(s => s.ToString()), true); } else if (AsName) { WriteObject(sids.Select(s => s.Name), true); } else { WriteObject(sids, true); } }