Added Cloudflare R2 media storage support
Build and Publish / Build and Publish Docker Image (push) Successful in 1m26s

This commit is contained in:
Aleksandr Bogomiakov
2026-08-09 00:15:40 +01:00
parent 2d43600066
commit 9ee5048a43
15 changed files with 1883 additions and 235 deletions
+39
View File
@@ -11,6 +11,9 @@
{% if saved %}
<div class="notification is-success is-light">{{ t.settings_saved }}</div>
{% endif %}
{% if let Some(message) = error %}
<div class="notification is-danger is-light">{{ message }}</div>
{% endif %}
<div class="form-card">
<form method="post" action="/admin/settings/save">
@@ -58,6 +61,42 @@
</div>
</div>
<h3 class="subtitle is-6 mb-2 has-text-grey" style="margin-top:1.25rem;">{{ t.settings_section_storage }}</h3>
<div class="notification is-info is-light" style="padding:0.8rem 1rem;font-size:0.85rem;margin-bottom:0.85rem;">
<p>{{ t.settings_r2_help }}</p>
<p style="margin-top:0.45rem;">{{ t.settings_r2_migration_help }}</p>
</div>
<div class="field">
<label class="checkbox">
<input type="checkbox" name="r2_enabled" value="true"{% if r2_enabled_checked %} checked{% endif %}>
{{ t.settings_r2_enabled }}
</label>
</div>
<div class="field">
<label class="label">{{ t.settings_r2_account_id }}</label>
<div class="control">
<input class="input" type="text" name="r2_account_id" maxlength="32" autocomplete="off" placeholder="0123456789abcdef0123456789abcdef" value="{% for s in &settings %}{% if s.key == "r2_account_id" %}{{ s.value }}{% endif %}{% endfor %}">
</div>
</div>
<div class="field">
<label class="label">{{ t.settings_r2_bucket }}</label>
<div class="control">
<input class="input" type="text" name="r2_bucket" autocomplete="off" placeholder="pet-media" value="{% for s in &settings %}{% if s.key == "r2_bucket" %}{{ s.value }}{% endif %}{% endfor %}">
</div>
</div>
<div class="field">
<label class="label">{{ t.settings_r2_access_key_id }}</label>
<div class="control">
<input class="input" type="text" name="r2_access_key_id" autocomplete="off" value="{% for s in &settings %}{% if s.key == "r2_access_key_id" %}{{ s.value }}{% endif %}{% endfor %}">
</div>
</div>
<div class="field">
<label class="label">{{ t.settings_r2_secret_access_key }}</label>
<div class="control">
<input class="input" type="password" name="r2_secret_access_key" autocomplete="new-password"{% if r2_secret_configured %} placeholder="{{ t.settings_r2_secret_unchanged }}"{% endif %}>
</div>
</div>
<h3 class="subtitle is-6 mb-2 has-text-grey" style="margin-top:1.25rem;">{{ t.settings_section_notifications }}</h3>
<div class="field">
<label class="checkbox">