diff options
Diffstat (limited to 'BlobBin')
| -rw-r--r-- | BlobBin/BlobBin.csproj | 21 | ||||
| -rw-r--r-- | BlobBin/Dockerfile | 20 | ||||
| -rw-r--r-- | BlobBin/Program.cs | 46 | ||||
| -rw-r--r-- | BlobBin/Properties/launchSettings.json | 15 | ||||
| -rw-r--r-- | BlobBin/appsettings.Development.json | 8 | ||||
| -rw-r--r-- | BlobBin/appsettings.json | 9 | ||||
| -rw-r--r-- | BlobBin/wwwroot/index.html | 80 |
7 files changed, 199 insertions, 0 deletions
diff --git a/BlobBin/BlobBin.csproj b/BlobBin/BlobBin.csproj new file mode 100644 index 0000000..cd8d47d --- /dev/null +++ b/BlobBin/BlobBin.csproj @@ -0,0 +1,21 @@ +<Project Sdk="Microsoft.NET.Sdk.Web"> + + <PropertyGroup> + <TargetFramework>net7.0</TargetFramework> + <Nullable>enable</Nullable> + <ImplicitUsings>enable</ImplicitUsings> + <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" /> + <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" /> + </ItemGroup> + + <ItemGroup> + <Content Include="..\.dockerignore"> + <Link>.dockerignore</Link> + </Content> + </ItemGroup> + +</Project> diff --git a/BlobBin/Dockerfile b/BlobBin/Dockerfile new file mode 100644 index 0000000..9b1f38e --- /dev/null +++ b/BlobBin/Dockerfile @@ -0,0 +1,20 @@ +FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /src +COPY ["BlobBin/BlobBin.csproj", "BlobBin/"] +RUN dotnet restore "BlobBin/BlobBin.csproj" +COPY . . +WORKDIR "/src/BlobBin" +RUN dotnet build "BlobBin.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "BlobBin.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "BlobBin.dll"] diff --git a/BlobBin/Program.cs b/BlobBin/Program.cs new file mode 100644 index 0000000..085bd6e --- /dev/null +++ b/BlobBin/Program.cs @@ -0,0 +1,46 @@ +var builder = WebApplication.CreateBuilder(args); + +var app = builder.Build(); + +app.UseFileServer(); +app.UseStatusCodePages(); +app.MapPost("/upload", Upload); +app.MapPost("/text", UploadText); +app.MapGet("/b/{id}", GetBlob); +app.Run(); + +IResult Upload(HttpContext context) { + var request = new UploadRequest() { + Singleton = context.Request.Form["singleton"] == "on", + File = context.Request.Form.Files.FirstOrDefault(), + Password = context.Request.Form["password"], + AutoDeleteAfter = context.Request.Form["autoDeleteAfter"] + }; + return Results.Ok(); +} + +IResult UploadText(PasteRequest request) { + return Results.Ok(); +} + +IResult GetBlob(string id) { + return Results.Ok(); +} + +class BlobBase +{ + public string Password { get; set; } + public bool Singleton { get; set; } + public string AutoDeleteAfter { get; set; } +} + +class PasteRequest : BlobBase +{ + public string Text { get; set; } + public string Mime { get; set; } +} + +class UploadRequest : BlobBase +{ + public IFormFile? File { get; set; } +}
\ No newline at end of file diff --git a/BlobBin/Properties/launchSettings.json b/BlobBin/Properties/launchSettings.json new file mode 100644 index 0000000..e19510b --- /dev/null +++ b/BlobBin/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "launchUrl": "", + "applicationUrl": "http://localhost:5033", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/BlobBin/appsettings.Development.json b/BlobBin/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/BlobBin/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/BlobBin/appsettings.json b/BlobBin/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/BlobBin/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/BlobBin/wwwroot/index.html b/BlobBin/wwwroot/index.html new file mode 100644 index 0000000..f252fe3 --- /dev/null +++ b/BlobBin/wwwroot/index.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <style> + body { + font-family: sans-serif; + } + + form { + width: 100%; + max-width: 300px; + display: flex; + flex-direction: column; + gap: 5px; + } + + #forms { + display: flex; + flex-direction: row; + gap: 15px; + flex-wrap: wrap; + } + + #forms summary { + width: 300px; + cursor: pointer; + } + </style> + <title>Blobbin</title> +</head> +<body> +<h1>Blobbin</h1> +<p>This is a web service you can upload files and texts to.</p> +<main id="forms"> + <details> + <summary>Upload a file</summary> + <form action="/upload" method="post"> + <input type="file" id="file" name="files" required> + <label for="file-password">Password (optional)</label> + <input type="password" name="password" id="file-password"> + <label for="file-auto-delete"> + Automatically delete after (optional) + <span class="label-description" + title="blank=never, <number><unit>, unit can be d=day,w=week,h=hour,m=minute">?</span> + </label> + <input type="text" + id="file-auto-delete" + name="autoDeleteAfter"> + <label for="file-singleton"> + <input type="checkbox" name="singleton" id="file-singleton"> + Delete after first open</label> + <input type="submit"> + </form> + </details> + <details> + <summary>Upload some text</summary> + <form action="/text" method="post"> + <textarea id="text" name="text" required></textarea> + <label for="text-password">Mimetype (default: text/plain)</label> + <input type="password" name="mime" id="text-mimetype"> + <label for="text-password">Password (optional)</label> + <input type="password" name="password" id="text-password"> + <label for="text-auto-delete"> + Automatically delete after (optional) + <span class="label-description" + title="blank=never, <number><unit>, unit can be d=day,w=week,h=hour,m=minute">?</span> + </label> + <input type="text" + id="text-auto-delete" + name="autoDeleteAfter"> + <label for="text-singleton"> + <input type="checkbox" id="text-singleton" name="singleton"> + Delete after first open</label> + <input type="submit"> + </form> + </details> +</main> +</body> +</html>
\ No newline at end of file |
