示例#1
0
 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;
 }
示例#2
0
 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;
 }
示例#3
0
 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);
                }
            }
        }