Newer
Older
percord / extra / admin-api / Spacebar.Cdn / Mimes.cs
@Rory& Rory& on 11 Mar 1 KB WIP cdn-cs stuff
using System.ComponentModel;
using ImageMagick;

namespace Spacebar.AdminApi.TestClient.Services;

public static class Mimes {
    private static string PrintLogged(string msg, string mime) {
        Console.WriteLine($"{msg}: {mime}");
        return mime;
    }

    public static MagickFormat GetFormatForExtension(string extension) {
        extension = extension.ToLower();
        // ban some values...
        if (extension == "screenshot") throw new AccessViolationException("Disallowed extension: " + extension);

        var matchingFormat = Enum.GetNames(typeof(MagickFormat)).FirstOrDefault(f => f.ToLower() == extension);
        if (string.IsNullOrWhiteSpace(matchingFormat)) throw new InvalidEnumArgumentException("Unknown format: " + extension);
        if (Enum.TryParse(matchingFormat, out MagickFormat fmt)) {
            return fmt;
        }

        throw new InvalidEnumArgumentException("Unknown format: " + extension);
    }

    public static string GetMime(MagickFormat fmt) => fmt switch {
        MagickFormat.Png => "image/png",
        MagickFormat.Jpeg => "image/jpeg",
        MagickFormat.Gif => "image/gif",
        MagickFormat.Bmp => "image/bmp",
        MagickFormat.Tiff => "image/tiff",
        MagickFormat.WebP => "image/webp",
        _ => PrintLogged("Unknown mime for format " + fmt.ToString() + "!", "application/octet-stream")
    };
}