aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server/Filters/RetryOnTemporarilyUnavailableFilter.cs
blob: 08caac0d3835553592bee031eea10694a7a8ce8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System.Collections.Generic;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

namespace Jellyfin.Server.Filters;

internal class RetryOnTemporarilyUnavailableFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        operation.Responses.Add(
            "503",
            new OpenApiResponse
            {
                Description = "The server is currently starting or is temporarily not available.",
                Headers = new Dictionary<string, OpenApiHeader>
                {
                    {
                        "Retry-After", new OpenApiHeader
                        {
                            AllowEmptyValue = true,
                            Required = false,
                            Description = "A hint for when to retry the operation in full seconds.",
                            Schema = new OpenApiSchema
                            {
                                Type = "integer",
                                Format = "int32"
                            }
                        }
                    },
                    {
                        "Message", new OpenApiHeader
                        {
                            AllowEmptyValue = true,
                            Required = false,
                            Description = "A short plain-text reason why the server is not available.",
                            Schema = new OpenApiSchema
                            {
                                Type = "string",
                                Format = "text"
                            }
                        }
                    }
                },
                Content = new Dictionary<string, OpenApiMediaType>()
                {
                    { "text/html", new OpenApiMediaType() }
                }
            });
    }
}