3518555d1e
R2 S3 Signature V4 client in [src/R2/R2Client.php](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/src/R2/R2Client.php) SQLite mirror, usage ledger, settings, local tags, permission labels, and signed URL history under [src/Repository](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/src/Repository) Simple password auth and CSRF protection Uploads, folders, sync, copy/move/delete, downloads, presigned URLs, CORS JSON management, and usage/billing-style summaries Setup docs in [README.md](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/README.md) and config template in [.env.example](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/.env.example) Important R2 caveat: Cloudflare’s current R2 S3 compatibility docs say ACLs and object-tagging APIs are not implemented, so the app stores tags and permission labels locally in SQLite while keeping file bytes on R2. I used Cloudflare’s official docs for S3 compatibility, presigned URLs, and CORS.
24 lines
786 B
PHP
24 lines
786 B
PHP
<?php
|
|
/** @var string $csrf */
|
|
?>
|
|
<main class="login-shell">
|
|
<section class="login-panel">
|
|
<div>
|
|
<p class="eyebrow">Cloudflare R2</p>
|
|
<h1>Storage manager</h1>
|
|
<p class="muted">Sign in with the app password from your environment file.</p>
|
|
</div>
|
|
|
|
<form method="post" class="stack">
|
|
<input type="hidden" name="action" value="login">
|
|
<input type="hidden" name="csrf" value="<?= htmlspecialchars($csrf) ?>">
|
|
<label>
|
|
Password
|
|
<input type="password" name="password" autocomplete="current-password" autofocus required>
|
|
</label>
|
|
<button type="submit" class="button button-primary">Sign in</button>
|
|
</form>
|
|
</section>
|
|
</main>
|
|
|