Esempio n. 1
0
    public static OpenApiDocument GetAsaphOpenApiDocument(
        IConfiguration configuration,
        ClaimsPrincipal requester)
    {
        // Get Azure AD B2C configuration
        IConfiguration azureAdb2cConfiguration = configuration.GetSection("AzureAdb2c");

        // Get Swagger UI configuration
        IConfiguration swaggerUIConfiguration = configuration.GetSection("SwaggerUI");

        // Return the OpenApiDocument for the Asaph API
        return(new OpenApiDocument
        {
            Info = new OpenApiInfo
            {
                Title = "Asaph API",
                Version = "1.0.0",
            },
            SecurityRequirements = GetOpenApiSecurityRequirements(swaggerUIConfiguration),
            Paths = new OpenApiPaths
            {
                ["/song-directors"] =
                    SongDirectorApiModel.GetOpenApiPath(requester),
            },
            Components = new OpenApiComponents
            {
                Schemas = new Dictionary <string, OpenApiSchema>
                {
                    ["SongDirector"] = SongDirectorApiModel.GetJsonSchema(requester),
                },
                SecuritySchemes = new Dictionary <string, OpenApiSecurityScheme>
                {
                    ["oauth2"] = new OpenApiSecurityScheme
                    {
                        Type = SecuritySchemeType.OAuth2,
                        Flows = new OpenApiOAuthFlows()
                        {
                            Implicit = new OpenApiOAuthFlow()
                            {
                                AuthorizationUrl = GetAuthorizationUrl(azureAdb2cConfiguration),

                                // Colons aren't allowed in config keys, so scopes keys and values
                                // are swapped. This swaps them back.
                                Scopes = swaggerUIConfiguration
                                         .GetSection("Scopes")
                                         .GetChildren()
                                         .ToDictionary(kv => kv.Value, kv => kv.Key),

                                TokenUrl = GetTokenUrl(azureAdb2cConfiguration),
                            },
                        },
                    },
                },
            },
        });
    }
Esempio n. 2
0
    /// <inheritdoc/>
    public IResult SongDirectorAdded(AddSongDirectorResponse response)
    {
        // Validate song director id
        if (response.AddedSongDirector?.Id == null)
        {
            throw new ArgumentException("Id must be set for an added song director.");
        }

        // Get the URL for the added song director
        string addedSongDirectorUrl = new Uri(
            ResourceBaseUri, response.AddedSongDirector.Id)
                                      .ToString();

        // Create a response object for the added song director
        SongDirectorApiModel addSongDirectorResponse = SongDirectorApiModel
                                                       .AddedSongDirector(addedSongDirectorUrl);

        // Return the IActionResult representing the add
        return(Results.Created(addedSongDirectorUrl, addSongDirectorResponse));
    }
    /// <inheritdoc/>
    public IResult Success(GetSongDirectorsResponse response)
    {
        if (response.SongDirectors == null)
        {
            throw new ArgumentException("Song directors must be set for a successful Get" +
                                        "Song Directors response.");
        }

        // Convert use case models to API models
        IEnumerable <SongDirectorApiModel> songDirectorApiModels = response.SongDirectors
                                                                   .Select(useCaseModel => SongDirectorApiModel
                                                                           .RetrievedSongDirector(
                                                                               HydraContext,
                                                                               new Uri(ResourceBaseUri, useCaseModel.Id),
                                                                               useCaseModel));

        return(Results.Ok(songDirectorApiModels));
    }