- /api/v1/media and /api/v2/media (and GET/PUT /api/v1/media/:id):
images go through libvips (NetVips, its native build bundled):
autorotated, every kind of metadata dropped (EXIF, GPS, XMP, IPTC,
comments), capped at 4096 px, with a 640 px preview and a blurhash
(own encoder, the reference algorithm); animated GIFs are re-encoded;
video and audio are remuxed by ffmpeg with -map_metadata -1, never
re-encoded, and a video gets a still preview. Files get random names
under /var/lib/privapub/media, outside the web root deploys replace, and
are served at /media/files with nosniff and a sandbox CSP.
- media_ids on create and edit (four at most, the persona's own, each used
once); notes carry them as Document attachments with alt text, blurhash,
focalPoint and size; inbound attachments were already kept.
- avatar and header uploads in update_credentials, cropped to 400x400 and
1500x500, federated with Update{Person}.
- Remote media reaches clients only through /media/proxy/{hmac}/{url},
fetched by the guarded client (no SVG, 40 MB cap) and cached outside the
served root, trimmed to 5 GB; foreign avatars and headers use it too, so
a client never contacts another server.
- MediaJanitor deletes uploads left unattached for a day.
- nginx accepts 100 MB bodies on the upload endpoints only (applied on Max).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
65 lines
2.6 KiB
XML
65 lines
2.6 KiB
XML
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
|
|
<PropertyGroup>
|
|
<TargetFramework>net10.0</TargetFramework>
|
|
<Nullable>disable</Nullable>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="FFMpegCore" Version="5.5.0" />
|
|
<PackageReference Include="HtmlSanitizer" Version="9.2.1039" />
|
|
<PackageReference Include="MailKit" Version="4.18.0" />
|
|
<PackageReference Include="Markdig" Version="1.4.0" />
|
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.9" />
|
|
<PackageReference Include="MongoDB.Entities" Version="25.1.0" />
|
|
<PackageReference Include="NetVips" Version="3.2.0" />
|
|
<PackageReference Include="NetVips.Native.linux-x64" Version="8.18.7" />
|
|
<PackageReference Include="OpenIddict.AspNetCore" Version="7.7.1" />
|
|
<PackageReference Include="OpenIddict.MongoDb" Version="7.7.1" />
|
|
<PackageReference Include="PasswordGenerator" Version="3.0.0" />
|
|
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
|
|
<PackageReference Include="Serilog.Sinks.MongoDB" Version="7.3.0" />
|
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.2.3" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\PrivaPub.ClientModels\PrivaPub.ClientModels.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Compile Update="Resources\GenericRes.Designer.cs">
|
|
<DesignTime>True</DesignTime>
|
|
<AutoGen>True</AutoGen>
|
|
<DependentUpon>GenericRes.resx</DependentUpon>
|
|
</Compile>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<EmbeddedResource Update="Resources\GenericRes.resx">
|
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
|
<LastGenOutput>GenericRes.Designer.cs</LastGenOutput>
|
|
</EmbeddedResource>
|
|
</ItemGroup>
|
|
|
|
<Target Name="GenerateBuildInfo" BeforeTargets="BeforeCompile">
|
|
<PropertyGroup>
|
|
<BuildInfoPath>$(IntermediateOutputPath)BuildInfo.g.cs</BuildInfoPath>
|
|
</PropertyGroup>
|
|
<ItemGroup>
|
|
<BuildInfoLine Include="public static class BuildInfo" />
|
|
<BuildInfoLine Include="{" />
|
|
<BuildInfoLine Include=" public const string Commit = "$(BuildCommit)"%3B" />
|
|
<BuildInfoLine Include=" public const string Ref = "$(BuildRef)"%3B" />
|
|
<BuildInfoLine Include=" public const string BuiltAt = "$(BuildTimeUtc)"%3B" />
|
|
<BuildInfoLine Include="}" />
|
|
</ItemGroup>
|
|
<WriteLinesToFile File="$(BuildInfoPath)" Lines="@(BuildInfoLine)" Overwrite="true" WriteOnlyWhenDifferent="true" />
|
|
<ItemGroup>
|
|
<Compile Include="$(BuildInfoPath)" />
|
|
<FileWrites Include="$(BuildInfoPath)" />
|
|
</ItemGroup>
|
|
</Target>
|
|
|
|
</Project>
|