| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using MediaBrowser.Model.Services;
 
- namespace Emby.Server.Implementations.Services
 
- {
 
-     [Route("/swagger", "GET", Summary = "Gets the swagger specifications")]
 
-     [Route("/swagger.json", "GET", Summary = "Gets the swagger specifications")]
 
-     public class GetSwaggerSpec : IReturn<SwaggerSpec>
 
-     {
 
-     }
 
-     public class SwaggerSpec
 
-     {
 
-         public string swagger { get; set; }
 
-         public string[] schemes { get; set; }
 
-         public SwaggerInfo info { get; set; }
 
-         public string host { get; set; }
 
-         public string basePath { get; set; }
 
-         public SwaggerTag[] tags { get; set; }
 
-         public IDictionary<string, Dictionary<string, SwaggerMethod>> paths { get; set; }
 
-         public Dictionary<string, SwaggerDefinition> definitions { get; set; }
 
-         public SwaggerComponents components { get; set; }
 
-     }
 
-     public class SwaggerComponents
 
-     {
 
-         public Dictionary<string, SwaggerSecurityScheme> securitySchemes { get; set; }
 
-     }
 
-     public class SwaggerSecurityScheme
 
-     {
 
-         public string name { get; set; }
 
-         public string type { get; set; }
 
-         public string @in { get; set; }
 
-     }
 
-     public class SwaggerInfo
 
-     {
 
-         public string description { get; set; }
 
-         public string version { get; set; }
 
-         public string title { get; set; }
 
-         public string termsOfService { get; set; }
 
-         public SwaggerConcactInfo contact { get; set; }
 
-     }
 
-     public class SwaggerConcactInfo
 
-     {
 
-         public string email { get; set; }
 
-         public string name { get; set; }
 
-         public string url { get; set; }
 
-     }
 
-     public class SwaggerTag
 
-     {
 
-         public string description { get; set; }
 
-         public string name { get; set; }
 
-     }
 
-     public class SwaggerMethod
 
-     {
 
-         public string summary { get; set; }
 
-         public string description { get; set; }
 
-         public string[] tags { get; set; }
 
-         public string operationId { get; set; }
 
-         public string[] consumes { get; set; }
 
-         public string[] produces { get; set; }
 
-         public SwaggerParam[] parameters { get; set; }
 
-         public Dictionary<string, SwaggerResponse> responses { get; set; }
 
-         public Dictionary<string, string[]>[] security { get; set; }
 
-     }
 
-     public class SwaggerParam
 
-     {
 
-         public string @in { get; set; }
 
-         public string name { get; set; }
 
-         public string description { get; set; }
 
-         public bool required { get; set; }
 
-         public string type { get; set; }
 
-         public string collectionFormat { get; set; }
 
-     }
 
-     public class SwaggerResponse
 
-     {
 
-         public string description { get; set; }
 
-         // ex. "$ref":"#/definitions/Pet"
 
-         public Dictionary<string, string> schema { get; set; }
 
-     }
 
-     public class SwaggerDefinition
 
-     {
 
-         public string type { get; set; }
 
-         public Dictionary<string, SwaggerProperty> properties { get; set; }
 
-     }
 
-     public class SwaggerProperty
 
-     {
 
-         public string type { get; set; }
 
-         public string format { get; set; }
 
-         public string description { get; set; }
 
-         public string[] @enum { get; set; }
 
-         public string @default { get; set; }
 
-     }
 
-     public class SwaggerService : IService, IRequiresRequest
 
-     {
 
-         private SwaggerSpec _spec;
 
-         public IRequest Request { get; set; }
 
-         public object Get(GetSwaggerSpec request)
 
-         {
 
-             return _spec ?? (_spec = GetSpec());
 
-         }
 
-         private SwaggerSpec GetSpec()
 
-         {
 
-             string host = null;
 
-             Uri uri;
 
-             if (Uri.TryCreate(Request.RawUrl, UriKind.Absolute, out uri))
 
-             {
 
-                 host = uri.Host;
 
-             }
 
-             var securitySchemes = new Dictionary<string, SwaggerSecurityScheme>();
 
-             securitySchemes["api_key"] = new SwaggerSecurityScheme
 
-             {
 
-                 name = "api_key",
 
-                 type = "apiKey",
 
-                 @in = "query"
 
-             };
 
-             var spec = new SwaggerSpec
 
-             {
 
-                 schemes = new[] { "http" },
 
-                 tags = GetTags(),
 
-                 swagger = "2.0",
 
-                 info = new SwaggerInfo
 
-                 {
 
-                     title = "Emby Server API",
 
-                     version = "1.0.0",
 
-                     description = "Explore the Emby Server API",
 
-                     contact = new SwaggerConcactInfo
 
-                     {
 
-                         name = "Emby Developer Community",
 
-                         url = "https://emby.media/community/index.php?/forum/47-developer-api"
 
-                     },
 
-                     termsOfService = "https://emby.media/terms"
 
-                 },
 
-                 paths = GetPaths(),
 
-                 definitions = GetDefinitions(),
 
-                 basePath = "/emby",
 
-                 host = host,
 
-                 components = new SwaggerComponents
 
-                 {
 
-                     securitySchemes = securitySchemes
 
-                 }
 
-             };
 
-             return spec;
 
-         }
 
-         private SwaggerTag[] GetTags()
 
-         {
 
-             return new SwaggerTag[] { };
 
-         }
 
-         private Dictionary<string, SwaggerDefinition> GetDefinitions()
 
-         {
 
-             return new Dictionary<string, SwaggerDefinition>();
 
-         }
 
-         private IDictionary<string, Dictionary<string, SwaggerMethod>> GetPaths()
 
-         {
 
-             var paths = new SortedDictionary<string, Dictionary<string, SwaggerMethod>>();
 
-             var all = ServiceController.Instance.RestPathMap.OrderBy(i => i.Key, StringComparer.OrdinalIgnoreCase).ToList();
 
-             foreach (var current in all)
 
-             {
 
-                 foreach (var info in current.Value)
 
-                 {
 
-                     if (info.IsHidden)
 
-                     {
 
-                         continue;
 
-                     }
 
-                     if (info.Path.StartsWith("/mediabrowser", StringComparison.OrdinalIgnoreCase))
 
-                     {
 
-                         continue;
 
-                     }
 
-                     if (info.Path.StartsWith("/emby", StringComparison.OrdinalIgnoreCase))
 
-                     {
 
-                         continue;
 
-                     }
 
-                     paths[info.Path] = GetPathInfo(info);
 
-                 }
 
-             }
 
-             return paths;
 
-         }
 
-         private Dictionary<string, SwaggerMethod> GetPathInfo(RestPath info)
 
-         {
 
-             var result = new Dictionary<string, SwaggerMethod>();
 
-             foreach (var verb in info.Verbs)
 
-             {
 
-                 var responses = new Dictionary<string, SwaggerResponse>
 
-                 {
 
-                 };
 
-                 responses["200"] = new SwaggerResponse
 
-                 {
 
-                     description = "OK"
 
-                 };
 
-                 var security = new List<Dictionary<string, string[]>>();
 
-                 var apiKeySecurity = new Dictionary<string, string[]>();
 
-                 apiKeySecurity["api_key"] = new string[] { };
 
-                 security.Add(apiKeySecurity);
 
-                 result[verb.ToLower()] = new SwaggerMethod
 
-                 {
 
-                     summary = info.Summary,
 
-                     description = info.Description,
 
-                     produces = new[]
 
-                     {
 
-                         "application/json"
 
-                     },
 
-                     consumes = new[]
 
-                     {
 
-                         "application/json"
 
-                     },
 
-                     operationId = info.RequestType.Name,
 
-                     tags = new string[] { },
 
-                     parameters = new SwaggerParam[] { },
 
-                     responses = responses,
 
-                     security = security.ToArray()
 
-                 };
 
-             }
 
-             return result;
 
-         }
 
-     }
 
- }
 
 
  |