Loading meta.php 0 → 100644 +210 −0 Original line number Diff line number Diff line <?php header('X-Robots-Tag: noindex, nofollow'); error_reporting(E_ALL); ini_set('display_errors', 1); require 'vendor/autoload.php'; use Dotenv\Dotenv; use MongoDB\Client; use MongoDB\BSON\UTCDateTime; $dotenv = Dotenv::createImmutable(__DIR__); $dotenv->load(); $mongoUser = $_ENV['MONGO_USER']; $mongoPass = $_ENV['MONGO_PASS']; $mongoAuthDb = $_ENV['MONGO_AUTHDB']; $mongoHost = $_ENV['MONGO_HOST']; $mongoPort = $_ENV['MONGO_PORT']; $dsn = "mongodb://$mongoUser:$mongoPass@$mongoHost:$mongoPort/?authSource=$mongoAuthDb"; $mongo = new Client($dsn); $db = $mongo->secretdb; $collection = $db->secrets; function utcToIso(?UTCDateTime $dt): ?string { if (!$dt) return null; // Mongo UTCDateTime -> DateTimeImmutable $d = $dt->toDateTime(); $d = DateTimeImmutable::createFromMutable($d)->setTimezone(new DateTimeZone('UTC')); return $d->format('Y-m-d H:i:s') . ' UTC'; } function nowUtc(): DateTimeImmutable { return new DateTimeImmutable('now', new DateTimeZone('UTC')); } $metaId = $_GET['id'] ?? ''; $metaId = is_string($metaId) ? trim($metaId) : ''; $doc = null; if ($metaId !== '') { $doc = $collection->findOne( ['metaDataId' => $metaId], [ 'projection' => [ '_id' => 1, 'createdAt' => 1, 'expiresAt' => 1, 'deleted' => 1, 'displayedAt' => 1, 'firstRetrievedAt' => 1, 'lastRetrievedAt' => 1, 'retrievedCount' => 1, // apzināti NEliekam: secret, displayToken, encrypted ] ] ); } $found = (bool)$doc; $statusTitle = 'Nav datu'; $statusBadge = 'secondary'; $statusText = 'Šāds meta ID netika atrasts (vai ieraksts jau sen ir prom).'; $now = nowUtc(); $expiresAtIso = $found ? utcToIso($doc['expiresAt'] ?? null) : null; $expired = false; if ($found && isset($doc['expiresAt']) && $doc['expiresAt'] instanceof UTCDateTime) { $exp = DateTimeImmutable::createFromMutable($doc['expiresAt']->toDateTime())->setTimezone(new DateTimeZone('UTC')); $expired = $exp < $now; } $deleted = $found ? !empty($doc['deleted']) : false; if ($found) { if ($deleted) { $statusTitle = 'Noslēpums izdzēsts'; $statusBadge = 'success'; $statusText = 'Noslēpums ir ticis parādīts (vai citādi atzīmēts kā izdzēsts) un serverī vairs neglabājas.'; } else if ($expired) { $statusTitle = 'Termiņš beidzies'; $statusBadge = 'warning'; $statusText = 'Noslēpuma glabāšanas termiņš ir beidzies (TTL).'; } else { $statusTitle = 'Aktīvs'; $statusBadge = 'primary'; $statusText = 'Noslēpums vēl ir derīgs un nav atzīmēts kā izdzēsts.'; } } $createdAtIso = $found ? utcToIso($doc['createdAt'] ?? null) : null; $displayedAtIso = $found ? utcToIso($doc['displayedAt'] ?? null) : null; $firstRetrievedAtIso= $found ? utcToIso($doc['firstRetrievedAt'] ?? null) : null; $lastRetrievedAtIso = $found ? utcToIso($doc['lastRetrievedAt'] ?? null) : null; $retrievedCount = $found ? (int)($doc['retrievedCount'] ?? 0) : 0; // (Optional) remaining time $remainingText = null; if ($found && !$deleted && !$expired && isset($doc['expiresAt']) && $doc['expiresAt'] instanceof UTCDateTime) { $exp = DateTimeImmutable::createFromMutable($doc['expiresAt']->toDateTime())->setTimezone(new DateTimeZone('UTC')); $diff = $now->diff($exp); $parts = []; if ($diff->days) $parts[] = $diff->days . 'd'; if ($diff->h) $parts[] = $diff->h . 'h'; if ($diff->i) $parts[] = $diff->i . 'm'; if (!$parts) $parts[] = $diff->s . 's'; $remainingText = implode(' ', $parts); } ?> <!DOCTYPE html> <html lang="lv"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/svg+xml" href="/favicon.svg"/> <title>Noslēpuma statuss</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <style> html { height: 100%; } body { min-height: 100%; display:flex; flex-direction:column; } .footer { margin-top:auto; } .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } </style> </head> <body class="bg-light"> <div class="container py-5"> <h2 class="mb-4 text-center">📎 Noslēpuma statuss</h2> <div class="card shadow-sm"> <div class="card-body"> <div class="d-flex align-items-center justify-content-between flex-wrap gap-2"> <div> <span class="badge text-bg-<?= htmlspecialchars($statusBadge) ?>"><?= htmlspecialchars($statusTitle) ?></span> <div class="mt-2 text-secondary"><?= $statusText ?></div> </div> <?php if ($found): ?> <div class="text-end"> <div class="text-secondary small">Meta ID</div> <div class="mono"><?= htmlspecialchars($metaId) ?></div> </div> <?php endif; ?> </div> <hr class="my-4"> <?php if (!$found): ?> <div class="alert alert-secondary mb-0"> Ja tu tikko izveidoji noslēpumu, pārliecinies, ka atveri pareizo meta saiti. </div> <?php else: ?> <div class="row g-3"> <div class="col-12 col-md-6"> <div class="text-secondary small">Izveidots</div> <div><?= htmlspecialchars($createdAtIso ?? '-') ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Derīgs līdz</div> <div> <?= htmlspecialchars($expiresAtIso ?? '-') ?> <?php if ($remainingText): ?> <span class="text-secondary small">(aptuveni <?= htmlspecialchars($remainingText) ?> atlicis)</span> <?php endif; ?> </div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Izsniegts pirmo reizi</div> <div><?= htmlspecialchars($firstRetrievedAtIso ?? '-') ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Izsniegts pēdējo reizi</div> <div><?= htmlspecialchars($lastRetrievedAtIso ?? '-') ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Izsniegšanas skaits</div> <div><?= htmlspecialchars((string)$retrievedCount) ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Parādīts / izdzēsts</div> <div><?= htmlspecialchars($displayedAtIso ?? '-') ?></div> </div> </div> <div class="mt-4 alert alert-info mb-0"> Šeit netiek rādīts noslēpuma saturs. Tikai statuss un laiki. </div> <?php endif; ?> </div> </div> <div class="mt-4"> <a class="btn btn-outline-secondary" href="/">← Atpakaļ uz glabātuvi</a> </div> </div> <div class="footer py-3"> <div class="container text-secondary small"> Visi laiki ir UTC. </div> </div> </body> </html> Loading
meta.php 0 → 100644 +210 −0 Original line number Diff line number Diff line <?php header('X-Robots-Tag: noindex, nofollow'); error_reporting(E_ALL); ini_set('display_errors', 1); require 'vendor/autoload.php'; use Dotenv\Dotenv; use MongoDB\Client; use MongoDB\BSON\UTCDateTime; $dotenv = Dotenv::createImmutable(__DIR__); $dotenv->load(); $mongoUser = $_ENV['MONGO_USER']; $mongoPass = $_ENV['MONGO_PASS']; $mongoAuthDb = $_ENV['MONGO_AUTHDB']; $mongoHost = $_ENV['MONGO_HOST']; $mongoPort = $_ENV['MONGO_PORT']; $dsn = "mongodb://$mongoUser:$mongoPass@$mongoHost:$mongoPort/?authSource=$mongoAuthDb"; $mongo = new Client($dsn); $db = $mongo->secretdb; $collection = $db->secrets; function utcToIso(?UTCDateTime $dt): ?string { if (!$dt) return null; // Mongo UTCDateTime -> DateTimeImmutable $d = $dt->toDateTime(); $d = DateTimeImmutable::createFromMutable($d)->setTimezone(new DateTimeZone('UTC')); return $d->format('Y-m-d H:i:s') . ' UTC'; } function nowUtc(): DateTimeImmutable { return new DateTimeImmutable('now', new DateTimeZone('UTC')); } $metaId = $_GET['id'] ?? ''; $metaId = is_string($metaId) ? trim($metaId) : ''; $doc = null; if ($metaId !== '') { $doc = $collection->findOne( ['metaDataId' => $metaId], [ 'projection' => [ '_id' => 1, 'createdAt' => 1, 'expiresAt' => 1, 'deleted' => 1, 'displayedAt' => 1, 'firstRetrievedAt' => 1, 'lastRetrievedAt' => 1, 'retrievedCount' => 1, // apzināti NEliekam: secret, displayToken, encrypted ] ] ); } $found = (bool)$doc; $statusTitle = 'Nav datu'; $statusBadge = 'secondary'; $statusText = 'Šāds meta ID netika atrasts (vai ieraksts jau sen ir prom).'; $now = nowUtc(); $expiresAtIso = $found ? utcToIso($doc['expiresAt'] ?? null) : null; $expired = false; if ($found && isset($doc['expiresAt']) && $doc['expiresAt'] instanceof UTCDateTime) { $exp = DateTimeImmutable::createFromMutable($doc['expiresAt']->toDateTime())->setTimezone(new DateTimeZone('UTC')); $expired = $exp < $now; } $deleted = $found ? !empty($doc['deleted']) : false; if ($found) { if ($deleted) { $statusTitle = 'Noslēpums izdzēsts'; $statusBadge = 'success'; $statusText = 'Noslēpums ir ticis parādīts (vai citādi atzīmēts kā izdzēsts) un serverī vairs neglabājas.'; } else if ($expired) { $statusTitle = 'Termiņš beidzies'; $statusBadge = 'warning'; $statusText = 'Noslēpuma glabāšanas termiņš ir beidzies (TTL).'; } else { $statusTitle = 'Aktīvs'; $statusBadge = 'primary'; $statusText = 'Noslēpums vēl ir derīgs un nav atzīmēts kā izdzēsts.'; } } $createdAtIso = $found ? utcToIso($doc['createdAt'] ?? null) : null; $displayedAtIso = $found ? utcToIso($doc['displayedAt'] ?? null) : null; $firstRetrievedAtIso= $found ? utcToIso($doc['firstRetrievedAt'] ?? null) : null; $lastRetrievedAtIso = $found ? utcToIso($doc['lastRetrievedAt'] ?? null) : null; $retrievedCount = $found ? (int)($doc['retrievedCount'] ?? 0) : 0; // (Optional) remaining time $remainingText = null; if ($found && !$deleted && !$expired && isset($doc['expiresAt']) && $doc['expiresAt'] instanceof UTCDateTime) { $exp = DateTimeImmutable::createFromMutable($doc['expiresAt']->toDateTime())->setTimezone(new DateTimeZone('UTC')); $diff = $now->diff($exp); $parts = []; if ($diff->days) $parts[] = $diff->days . 'd'; if ($diff->h) $parts[] = $diff->h . 'h'; if ($diff->i) $parts[] = $diff->i . 'm'; if (!$parts) $parts[] = $diff->s . 's'; $remainingText = implode(' ', $parts); } ?> <!DOCTYPE html> <html lang="lv"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/svg+xml" href="/favicon.svg"/> <title>Noslēpuma statuss</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <style> html { height: 100%; } body { min-height: 100%; display:flex; flex-direction:column; } .footer { margin-top:auto; } .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } </style> </head> <body class="bg-light"> <div class="container py-5"> <h2 class="mb-4 text-center">📎 Noslēpuma statuss</h2> <div class="card shadow-sm"> <div class="card-body"> <div class="d-flex align-items-center justify-content-between flex-wrap gap-2"> <div> <span class="badge text-bg-<?= htmlspecialchars($statusBadge) ?>"><?= htmlspecialchars($statusTitle) ?></span> <div class="mt-2 text-secondary"><?= $statusText ?></div> </div> <?php if ($found): ?> <div class="text-end"> <div class="text-secondary small">Meta ID</div> <div class="mono"><?= htmlspecialchars($metaId) ?></div> </div> <?php endif; ?> </div> <hr class="my-4"> <?php if (!$found): ?> <div class="alert alert-secondary mb-0"> Ja tu tikko izveidoji noslēpumu, pārliecinies, ka atveri pareizo meta saiti. </div> <?php else: ?> <div class="row g-3"> <div class="col-12 col-md-6"> <div class="text-secondary small">Izveidots</div> <div><?= htmlspecialchars($createdAtIso ?? '-') ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Derīgs līdz</div> <div> <?= htmlspecialchars($expiresAtIso ?? '-') ?> <?php if ($remainingText): ?> <span class="text-secondary small">(aptuveni <?= htmlspecialchars($remainingText) ?> atlicis)</span> <?php endif; ?> </div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Izsniegts pirmo reizi</div> <div><?= htmlspecialchars($firstRetrievedAtIso ?? '-') ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Izsniegts pēdējo reizi</div> <div><?= htmlspecialchars($lastRetrievedAtIso ?? '-') ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Izsniegšanas skaits</div> <div><?= htmlspecialchars((string)$retrievedCount) ?></div> </div> <div class="col-12 col-md-6"> <div class="text-secondary small">Parādīts / izdzēsts</div> <div><?= htmlspecialchars($displayedAtIso ?? '-') ?></div> </div> </div> <div class="mt-4 alert alert-info mb-0"> Šeit netiek rādīts noslēpuma saturs. Tikai statuss un laiki. </div> <?php endif; ?> </div> </div> <div class="mt-4"> <a class="btn btn-outline-secondary" href="/">← Atpakaļ uz glabātuvi</a> </div> </div> <div class="footer py-3"> <div class="container text-secondary small"> Visi laiki ir UTC. </div> </div> </body> </html>