Esempio n. 1
0
 private void ValidateProtocolProvider(IProtocolProvider provider)
 {
     if (provider == null)
     {
         throw new InvalidProtocolProviderException("External protocol provider cannot be null");
     }
     if (string.IsNullOrWhiteSpace(provider.ProtocolIdentifier))
     {
         throw new InvalidProtocolProviderException($"Invalid protocol provider '{provider.GetType().GetRESTableTypeName()}'. " +
                                                    "ProtocolIdentifier cannot be null or whitespace");
     }
     if (!Regex.IsMatch(provider.ProtocolIdentifier, "^[a-zA-Z]+$"))
     {
         throw new InvalidProtocolProviderException($"Invalid protocol provider '{provider.GetType().GetRESTableTypeName()}'. " +
                                                    "ProtocolIdentifier can only contain letters a-z and A-Z");
     }
     if (provider.ExternalContentTypeProviderSettings == ExternalContentTypeProviderSettings.DontAllow)
     {
         var contentProviders = provider.GetCustomContentTypeProviders()?.ToList();
         if (contentProviders?.Any() != true)
         {
             throw new InvalidProtocolProviderException($"Invalid protocol provider '{provider.GetType().GetRESTableTypeName()}'. " +
                                                        "The protocol provider allows no external content type providers " +
                                                        "and does not provide any content type providers of its own.");
         }
         if (contentProviders.All(p => !p.CanRead) && contentProviders.All(p => !p.CanWrite))
         {
             throw new InvalidProtocolProviderException($"Invalid protocol provider '{provider.GetType().GetRESTableTypeName()}'. " +
                                                        "The protocol provider allows no external content type providers " +
                                                        "and none of the provided content type providers can read or write.");
         }
     }
 }
Esempio n. 2
0
        private CachedProtocolProvider GetCachedProtocolProvider(IProtocolProvider provider)
        {
            var cProvider            = new CachedProtocolProvider(provider);
            var contentTypeProviders = provider.GetCustomContentTypeProviders()?.ToList() ?? new List <IContentTypeProvider>();

            foreach (var contentTypeProvider in contentTypeProviders.Where(p => p.MatchStrings != null))
            {
                if (contentTypeProvider.CanRead)
                {
                    foreach (var mimeType in contentTypeProvider.MatchStrings)
                    {
                        cProvider.InputMimeBindings[mimeType] = contentTypeProvider;
                    }
                }
                if (contentTypeProvider.CanWrite)
                {
                    foreach (var mimeType in contentTypeProvider.MatchStrings)
                    {
                        cProvider.OutputMimeBindings[mimeType] = contentTypeProvider;
                    }
                }
            }
            switch (provider.ExternalContentTypeProviderSettings)
            {
            case ExternalContentTypeProviderSettings.AllowAll:
                foreach (var pair in ContentTypeProviderManager.InputContentTypeProviders.Where(p => !cProvider.InputMimeBindings.ContainsKey(p.Key)))
                {
                    cProvider.InputMimeBindings.Add(pair);
                }
                foreach (var pair in ContentTypeProviderManager.OutputContentTypeProviders.Where(p => !cProvider.OutputMimeBindings.ContainsKey(p.Key)))
                {
                    cProvider.OutputMimeBindings.Add(pair);
                }
                break;

            case ExternalContentTypeProviderSettings.AllowInput:
                foreach (var pair in ContentTypeProviderManager.InputContentTypeProviders.Where(p => !cProvider.InputMimeBindings.ContainsKey(p.Key)))
                {
                    cProvider.InputMimeBindings.Add(pair);
                }
                break;

            case ExternalContentTypeProviderSettings.AllowOutput:
                foreach (var pair in ContentTypeProviderManager.OutputContentTypeProviders.Where(p => !cProvider.OutputMimeBindings.ContainsKey(p.Key)))
                {
                    cProvider.OutputMimeBindings.Add(pair);
                }
                break;
            }
            return(cProvider);
        }