fieldwitness/frontends/web/templates/dropbox/admin.html
Aaron D. Lee 490f9d4a1d Rebrand SooSeF to FieldWitness
Complete project rebrand for better positioning in the press freedom
and digital security space. FieldWitness communicates both field
deployment and evidence testimony — appropriate for the target audience
of journalists, NGOs, and human rights organizations.

Rename mapping:
- soosef → fieldwitness (package, CLI, all imports)
- soosef.stegasoo → fieldwitness.stego
- soosef.verisoo → fieldwitness.attest
- ~/.soosef/ → ~/.fwmetadata/ (innocuous data dir name)
- SOOSEF_DATA_DIR → FIELDWITNESS_DATA_DIR
- SoosefConfig → FieldWitnessConfig
- SoosefError → FieldWitnessError

Also includes:
- License switch from MIT to GPL-3.0
- C2PA bridge module (Phase 0-2 MVP): cert.py, export.py, vendor_assertions.py
- README repositioned to lead with provenance/federation, stego backgrounded
- Threat model skeleton at docs/security/threat-model.md
- Planning docs: docs/planning/c2pa-integration.md, docs/planning/gtm-feasibility.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 15:05:13 -04:00

72 lines
2.8 KiB
HTML

{% extends "base.html" %}
{% block title %}Source Drop Box — FieldWitness{% endblock %}
{% block content %}
<h2><i class="bi bi-inbox me-2"></i>Source Drop Box</h2>
<p class="text-muted">Create time-limited upload links for sources who cannot install FieldWitness.</p>
<div class="card bg-dark mb-4">
<div class="card-body">
<h5 class="card-title">Create Upload Token</h5>
<form method="POST">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<input type="hidden" name="action" value="create">
<div class="row g-3">
<div class="col-md-4">
<label class="form-label">Label (internal only)</label>
<input type="text" name="label" class="form-control bg-dark text-light"
placeholder="e.g., Gulf Ministry Source">
</div>
<div class="col-md-3">
<label class="form-label">Expires in (hours)</label>
<input type="number" name="hours" value="24" min="1" max="168"
class="form-control bg-dark text-light">
</div>
<div class="col-md-3">
<label class="form-label">Max files</label>
<input type="number" name="max_files" value="10" min="1" max="100"
class="form-control bg-dark text-light">
</div>
<div class="col-md-2 d-flex align-items-end">
<button type="submit" class="btn btn-primary w-100">Create</button>
</div>
</div>
</form>
</div>
</div>
{% if tokens %}
<h5>Active Tokens</h5>
<table class="table table-dark table-sm">
<thead>
<tr>
<th>Label</th>
<th>Token</th>
<th>Used / Max</th>
<th>Expires</th>
<th></th>
</tr>
</thead>
<tbody>
{% for token, data in tokens.items() %}
<tr>
<td>{{ data.label }}</td>
<td><code>{{ token[:12] }}...</code></td>
<td>{{ data.used }} / {{ data.max_files }}</td>
<td>{{ data.expires_at[:16] }}</td>
<td>
<form method="POST" class="d-inline">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<input type="hidden" name="action" value="revoke">
<input type="hidden" name="token" value="{{ token }}">
<button type="submit" class="btn btn-sm btn-outline-danger">Revoke</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p class="text-muted">No active upload tokens.</p>
{% endif %}
{% endblock %}