public TargetFeedConfig(TargetFeedContentType contentType, string targetURL, FeedType type, string token, List <string> latestLinkShortUrlPrefixes = null, AssetSelection assetSelection = AssetSelection.All, bool isolated = false, bool @internal = false, bool allowOverwrite = false, SymbolTargetType symbolTargetType = SymbolTargetType.None, IEnumerable <string> filenamesToExclude = null, bool flatten = true) { ContentType = contentType; TargetURL = targetURL; Type = type; Token = token; AssetSelection = assetSelection; Isolated = isolated; Internal = @internal; AllowOverwrite = allowOverwrite; LatestLinkShortUrlPrefixes = latestLinkShortUrlPrefixes ?? new List <string>(); SymbolTargetType = symbolTargetType; FilenamesToExclude = filenamesToExclude?.ToImmutableList() ?? ImmutableList <string> .Empty; Flatten = flatten; }
public TargetFeedConfig(TargetFeedContentType contentType, string targetURL, FeedType type, string token, string latestLinkShortUrlPrefix = null, AssetSelection assetSelection = AssetSelection.All, bool isolated = false, bool @internal = false, bool allowOverwrite = false) { ContentType = contentType; TargetURL = targetURL; Type = type; Token = token; AssetSelection = assetSelection; Isolated = isolated; Internal = @internal; AllowOverwrite = allowOverwrite; LatestLinkShortUrlPrefix = latestLinkShortUrlPrefix ?? string.Empty; }
public TargetFeedConfig(TargetFeedContentType contentType, string targetURL, FeedType type, string token, string latestLinkShortUrlPrefix = null, AssetSelection assetSelection = AssetSelection.All, bool isolated = false, bool @internal = false, bool allowOverwrite = false, SymbolTargetType symbolTargetType = SymbolTargetType.None, List <string> filenamesToExclude = null) { ContentType = contentType; TargetURL = targetURL; Type = type; Token = token; AssetSelection = assetSelection; Isolated = isolated; Internal = @internal; AllowOverwrite = allowOverwrite; LatestLinkShortUrlPrefix = latestLinkShortUrlPrefix ?? string.Empty; SymbolTargetType = symbolTargetType; FilenamesToExclude = filenamesToExclude ?? new List <string>(); }
/// <summary> /// Parse out the input TargetFeedConfig into a dictionary of FeedConfig types /// </summary> public async Task ParseTargetFeedConfigAsync() { using (HttpClient httpClient = new HttpClient(new HttpClientHandler { CheckCertificateRevocationList = true })) { foreach (var fc in TargetFeedConfig) { string targetFeedUrl = fc.GetMetadata(nameof(Model.TargetFeedConfig.TargetURL)); string feedKey = fc.GetMetadata(nameof(Model.TargetFeedConfig.Token)); string type = fc.GetMetadata(nameof(Model.TargetFeedConfig.Type)); AssetSelection assetSelection = AssetSelection.All; bool isInternalFeed; bool isIsolatedFeed = false; bool isOverridableFeed = false; if (string.IsNullOrEmpty(targetFeedUrl) || string.IsNullOrEmpty(feedKey) || string.IsNullOrEmpty(type)) { Log.LogError($"Invalid FeedConfig entry. {nameof(Model.TargetFeedConfig.TargetURL)}='{targetFeedUrl}' {nameof(Model.TargetFeedConfig.Type)}='{type}' {nameof(Model.TargetFeedConfig.Token)}='{feedKey}'"); continue; } if (!targetFeedUrl.EndsWith(PublishingConstants.ExpectedFeedUrlSuffix)) { Log.LogError($"Exepcted that feed '{targetFeedUrl}' would end in {PublishingConstants.ExpectedFeedUrlSuffix}"); continue; } if (!Enum.TryParse <FeedType>(type, true, out FeedType feedType)) { Log.LogError($"Invalid feed config type '{type}'. Possible values are: {string.Join(", ", Enum.GetNames(typeof(FeedType)))}"); continue; } string assetSelectionStr = fc.GetMetadata(nameof(Model.TargetFeedConfig.AssetSelection)); if (!string.IsNullOrEmpty(assetSelectionStr)) { if (!Enum.TryParse <AssetSelection>(assetSelectionStr, true, out assetSelection)) { Log.LogError($"Invalid feed config asset selection '{type}'. Possible values are: {string.Join(", ", Enum.GetNames(typeof(AssetSelection)))}"); continue; } } // To determine whether a feed is internal, we allow the user to // specify the value explicitly. string isInternalFeedStr = fc.GetMetadata(nameof(Model.TargetFeedConfig.Internal)); if (!string.IsNullOrEmpty(isInternalFeedStr)) { if (!bool.TryParse(isInternalFeedStr, out isInternalFeed)) { Log.LogError($"Invalid feed config '{nameof(Model.TargetFeedConfig.Internal)}' setting. Must be 'true' or 'false'."); continue; } } else { bool?isPublicFeed = await GeneralUtils.IsFeedPublicAsync(targetFeedUrl, httpClient, Log); if (!isPublicFeed.HasValue) { continue; } else { isInternalFeed = !isPublicFeed.Value; } } string isIsolatedFeedStr = fc.GetMetadata(nameof(Model.TargetFeedConfig.Isolated)); if (!string.IsNullOrEmpty(isIsolatedFeedStr)) { if (!bool.TryParse(isIsolatedFeedStr, out isIsolatedFeed)) { Log.LogError($"Invalid feed config '{nameof(Model.TargetFeedConfig.Isolated)}' setting. Must be 'true' or 'false'."); continue; } } string allowOverwriteOnFeed = fc.GetMetadata(nameof(Model.TargetFeedConfig.AllowOverwrite)); if (!string.IsNullOrEmpty(allowOverwriteOnFeed)) { if (!bool.TryParse(allowOverwriteOnFeed, out isOverridableFeed)) { Log.LogError($"Invalid feed config '{nameof(Model.TargetFeedConfig.AllowOverwrite)}' setting. Must be 'true' or 'false'."); continue; } } string latestLinkShortUrlPrefix = fc.GetMetadata(nameof(Model.TargetFeedConfig.LatestLinkShortUrlPrefixes)); if (!string.IsNullOrEmpty(latestLinkShortUrlPrefix)) { // Verify other inputs are provided if (string.IsNullOrEmpty(AkaMSClientId) || string.IsNullOrEmpty(AkaMSClientSecret) || string.IsNullOrEmpty(AkaMSTenant) || string.IsNullOrEmpty(AkaMsOwners) || string.IsNullOrEmpty(AkaMSCreatedBy)) { Log.LogError($"If a short url path is provided, please provide {nameof(AkaMSClientId)}, {nameof(AkaMSClientSecret)}, " + $"{nameof(AkaMSTenant)}, {nameof(AkaMsOwners)}, {nameof(AkaMSCreatedBy)}"); continue; } // Set up the link manager if it hasn't already been done if (LinkManager == null) { LinkManager = new LatestLinksManager(AkaMSClientId, AkaMSClientSecret, AkaMSTenant, AkaMSGroupOwner, AkaMSCreatedBy, AkaMsOwners, Log); } } if (!Enum.TryParse(fc.ItemSpec, ignoreCase: true, out TargetFeedContentType categoryKey)) { Log.LogError($"Invalid target feed config category '{fc.ItemSpec}'."); } if (!FeedConfigs.TryGetValue(categoryKey, out _)) { FeedConfigs[categoryKey] = new HashSet <TargetFeedConfig>(); } TargetFeedConfig feedConfig = new TargetFeedConfig( contentType: categoryKey, targetURL: targetFeedUrl, type: feedType, token: feedKey, latestLinkShortUrlPrefixes: new List <string>() { latestLinkShortUrlPrefix }, assetSelection: assetSelection, isolated: isIsolatedFeed, @internal: isInternalFeed, allowOverwrite: isOverridableFeed); CheckForInternalBuildsOnPublicFeeds(feedConfig); FeedConfigs[categoryKey].Add(feedConfig); } } }