Compare commits

...

5 Commits

Author SHA1 Message Date
3e03f81e74 docs: point README codex link at indifferentketchup/codex
The previous bullet credited aternosorg/codex-minecraft as the
analysis engine; that dependency was dropped in the codex-swap commit.
Updates the link to point at the in-tree indifferentketchup/codex repo
on Gitea while preserving an attribution back to the upstream codex
that iblogs is built on. The footer credit (Aternos / mclogs) remains
the load-bearing attribution per the manual-fork rules.
2026-05-01 22:19:55 +00:00
94326d5a19 refactor: swap Aternos codex deps for IndifferentKetchup\Codex
Drops aternos/codex (and its codex-minecraft / codex-hytale satellites)
plus aternos/sherlock from composer.json. Adds indifferentketchup/codex
pinned to ^0.2.0, sourced via a Composer vcs repository pointing at the
Gitea-hosted ik-codex repo. composer.lock regenerated against the new
dep tree.

Re-points the seven Aternos\Codex\* import sites in src/ to their
IndifferentKetchup\Codex\* equivalents:
  - src/Log.php (5 imports)
  - src/Api/Response/CodexLogResponse.php (1 import)
  - src/Printer/Printer.php (5 imports)
  - src/Detective.php (rewritten — see below)

Stubs three sites that depend on Minecraft-specific code with no
analogue in IndifferentKetchup\Codex:

  - src/Detective.php no longer extends the Aternos Detective with
    Minecraft + Hytale satellites. Instead it extends our codex's
    Detective and registers ProjectZomboidDetective, which itself
    pre-registers all 11 PZ log subclasses.
  - src/Data/Deobfuscator.php is reduced to a no-op shell. mclogs used
    aternos/sherlock to fetch Mojang/Yarn obfuscation maps and
    deobfuscate Vanilla / Fabric stack traces. Project Zomboid uses no
    such mapping scheme; the deobfuscator returns null until iblogs
    supports Minecraft logs again. Class signature preserved so callers
    in src/Log.php and elsewhere don't break.
  - src/Printer/FormatModification.php no longer extends the Minecraft
    section-sign-code translator. It extends IndifferentKetchup\Codex's
    Modification base class with a pass-through modify() implementation.
    The format-* CSS color classes are retained for any future game's
    own format-code scheme to reuse.

Updates composer.json metadata: description rewritten to drop the
"Minecraft" framing, authors entry replaced with indifferentketchup /
samkintop@gmail.com.

Verification:
  composer update --ignore-platform-req=ext-frankenphp \
                  --ignore-platform-req=ext-mongodb
  -> resolves cleanly: 1 install (indifferentketchup/codex 0.2.0),
     4 removals (the aternos/* set).
  php -l on every touched file -> no syntax errors.
  Autoload smoke test -> Detective registers 11 PZ log classes;
     Printer instantiates; FormatModification stub returns input
     unchanged.
2026-05-01 22:19:03 +00:00
6724320c9a chore: replace mclogs/Minecraft branding strings with iblogs equivalents
example.config.json: legal contact, imprint, privacy URLs swapped to
indifferentketchup.com placeholders; abuse address changed to
samkintop@gmail.com (matches the codex package's author entry);
frontend.name placeholder changed from "mclo.gs" to "iblogs.example".

UI templates: tagline replaced with "Built for game-server logs"
(header.php), meta description rewritten to drop Minecraft & Hytale
framing (start.php), api-docs.php's example "Minecraft version" labels
updated to "Engine version" with a 42.16.3 sample value matching the
codex PZ EngineVersionInformation output shape.

CSS comment "Minecraft Format Colors" tagged as legacy mclogs syntax
palette (the underlying color classes survive untouched — they may
still be useful for highlighting log content).

Footer attribution credit linking back to upstream mclogs and Aternos
is intentionally preserved per the manual-fork rules.

Frontend palette (#5cb85c green accent, etc.) and short-domain choice
remain placeholder values; revisit when iblogs branding is finalised.
2026-05-01 22:13:49 +00:00
8f0b067e38 chore: rename mclogs filenames, asset paths, and runtime identifiers
Two file renames (docker/mclogs.ini -> docker/iblogs.ini,
web/public/css/mclogs.css -> web/public/css/iblogs.css) plus the
internal references that pointed at them (Dockerfile COPY directive,
the linux user name in the container).

Also catches the runtime identifier renames: env-var prefix MCLOGS_*
-> IBLOGS_* (compose files), browser cookie name MCLOGS_SETTINGS ->
IBLOGS_SETTINGS (web/public/js/log.js), production image tag
ghcr.io/aternosorg/mclogs:2 -> ghcr.io/indifferentketchup/iblogs:2,
and the README walk-through with the new branding.

example.config.json branding strings (legal contact, mclo.gs frontend
name) and visible UI text (taglines, meta descriptions) are deferred
to a separate branding commit.
2026-05-01 22:11:46 +00:00
4aeebf3732 refactor: rename Aternos\Mclogs to IndifferentKetchup\Iblogs
Bulk substitution across all PHP files in src/, build.php, worker.php,
and web/frontend/. Updates composer.json's package name and PSR-4
autoload root accordingly. Casing matches the existing
IndifferentKetchup\Codex package's namespace convention (capital K).

Strictly a namespace rename. Aternos\Codex\* imports remain in place;
those get re-pointed in a follow-up commit when the codex Composer
dependency itself is swapped. Filename renames (docker/mclogs.ini,
web/public/css/mclogs.css), README walk-through, env-var prefix changes,
and visible-text branding land in subsequent commits.
2026-05-01 22:11:13 +00:00
91 changed files with 364 additions and 606 deletions

View File

@@ -3,7 +3,7 @@ FROM dunglas/frankenphp:1-php8.5
# System Setup # System Setup
RUN install-php-extensions mongodb zip RUN install-php-extensions mongodb zip
ARG USER=mclogs ARG USER=iblogs
RUN useradd ${USER} && \ RUN useradd ${USER} && \
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp
@@ -20,7 +20,7 @@ RUN --mount=type=cache,target=/tmp/cache/composer \
# Application Setup # Application Setup
COPY docker/Caddyfile /etc/frankenphp/Caddyfile COPY docker/Caddyfile /etc/frankenphp/Caddyfile
COPY docker/mclogs.ini /usr/local/etc/php/conf.d/mclogs.ini COPY docker/iblogs.ini /usr/local/etc/php/conf.d/iblogs.ini
COPY . . COPY . .

View File

@@ -13,7 +13,7 @@
* Syntax highlighting * Syntax highlighting
* Line numbers * Line numbers
* Direct links to specific lines * Direct links to specific lines
* Analysis and parsing using [codex](https://github.com/aternosorg/codex-minecraft) * Analysis and parsing using [indifferentketchup/codex](https://git.indifferentketchup.com/indifferentketchup/ik-codex), forked from [aternos/codex-minecraft](https://github.com/aternosorg/codex-minecraft)
### For developers ### For developers
* Upload your logs using the API * Upload your logs using the API
@@ -22,34 +22,34 @@
* Open source and self-hostable * Open source and self-hostable
## Self-hosting ## Self-hosting
You can self-host mclogs using Docker. A [docker image](https://github.com/aternosorg/mclogs/pkgs/container/mclogs) is available in the GitHub Container Registry: `ghcr.io/aternosorg/mclogs`. You can self-host iblogs using Docker. A [docker image](https://github.com/indifferentketchup/iblogs/pkgs/container/iblogs) is available in the GitHub Container Registry: `ghcr.io/indifferentketchup/iblogs`.
A MongoDB instance is also required to run mclogs. A MongoDB instance is also required to run iblogs.
An example docker compose files for self-hosting can be found here: [docker/compose.production.yaml](docker/compose.production.yaml). An example docker compose files for self-hosting can be found here: [docker/compose.production.yaml](docker/compose.production.yaml).
### Config ### Config
You can configure mclogs by creating a `config.json` file in the root directory, see [example.config.json](example.config.json) or by setting You can configure iblogs by creating a `config.json` file in the root directory, see [example.config.json](example.config.json) or by setting
environment variables. Environment variables override settings in the config file. environment variables. Environment variables override settings in the config file.
Here is a list of all available config options: Here is a list of all available config options:
| Variable / JSON Path | Default | Description | | Variable / JSON Path | Default | Description |
|:--------------------------------------------------------------------|:--------------------|:--------------------------------------------| |:--------------------------------------------------------------------|:--------------------|:--------------------------------------------|
| `MCLOGS_STORAGE_TTL` <br> `storage.ttl` | `7776000` (90d) | Time until logs are deleted after last view | | `IBLOGS_STORAGE_TTL` <br> `storage.ttl` | `7776000` (90d) | Time until logs are deleted after last view |
| `MCLOGS_STORAGE_LIMIT_BYTES` <br> `storage.limit.bytes` | `10485760` (10 MiB) | Maximum size of a log in bytes | | `IBLOGS_STORAGE_LIMIT_BYTES` <br> `storage.limit.bytes` | `10485760` (10 MiB) | Maximum size of a log in bytes |
| `MCLOGS_STORAGE_LIMIT_LINES` <br> `storage.limit.lines` | `25000` | Maximum number of lines in a log | | `IBLOGS_STORAGE_LIMIT_LINES` <br> `storage.limit.lines` | `25000` | Maximum number of lines in a log |
| `MCLOGS_MONGODB_URL` <br> `mongodb.url` | `"mongodb://mongo"` | MongoDB connection URL | | `IBLOGS_MONGODB_URL` <br> `mongodb.url` | `"mongodb://mongo"` | MongoDB connection URL |
| `MCLOGS_MONGODB_DATABASE` <br> `mongodb.database` | `"mclogs"` | Name of the MongoDB database | | `IBLOGS_MONGODB_DATABASE` <br> `mongodb.database` | `"iblogs"` | Name of the MongoDB database |
| `MCLOGS_ID_LENGTH` <br> `id.length` | `7` | The default length for new IDs | | `IBLOGS_ID_LENGTH` <br> `id.length` | `7` | The default length for new IDs |
| `MCLOGS_LEGAL_ABUSE` <br> `legal.abuse` | `null` | Public email address to report abuse | | `IBLOGS_LEGAL_ABUSE` <br> `legal.abuse` | `null` | Public email address to report abuse |
| `MCLOGS_LEGAL_IMPRINT` <br> `legal.imprint` | `null` | The imprint URL | | `IBLOGS_LEGAL_IMPRINT` <br> `legal.imprint` | `null` | The imprint URL |
| `MCLOGS_LEGAL_PRIVACY` <br> `legal.privacy` | `null` | The privacy policy URL | | `IBLOGS_LEGAL_PRIVACY` <br> `legal.privacy` | `null` | The privacy policy URL |
| `MCLOGS_FRONTEND_NAME` <br> `frontend.name` | `null` | Instance name (defaults to domain) | | `IBLOGS_FRONTEND_NAME` <br> `frontend.name` | `null` | Instance name (defaults to domain) |
| `MCLOGS_FRONTEND_COLOR_ACCENT` <br> `frontend.color.accent` | `#5cb85c` | The accent/primary color | | `IBLOGS_FRONTEND_COLOR_ACCENT` <br> `frontend.color.accent` | `#5cb85c` | The accent/primary color |
| `MCLOGS_FRONTEND_COLOR_BACKGROUND` <br> `frontend.color.background` | `#1a1a1a` | The background color | | `IBLOGS_FRONTEND_COLOR_BACKGROUND` <br> `frontend.color.background` | `#1a1a1a` | The background color |
| `MCLOGS_FRONTEND_COLOR_TEXT` <br> `frontend.color.text` | `#e8e8e8` | The text color | | `IBLOGS_FRONTEND_COLOR_TEXT` <br> `frontend.color.text` | `#e8e8e8` | The text color |
| `MCLOGS_FRONTEND_COLOR_ERROR` <br> `frontend.color.error` | `#f62451` | The error color | | `IBLOGS_FRONTEND_COLOR_ERROR` <br> `frontend.color.error` | `#f62451` | The error color |
| `MCLOGS_WORKER_REQUESTS` <br> `worker.requests` | `500` | Max requests per single worker | | `IBLOGS_WORKER_REQUESTS` <br> `worker.requests` | `500` | Max requests per single worker |
There are a few more environment variables that can be set to modify the FrankenPHP/Caddy setup directly: There are a few more environment variables that can be set to modify the FrankenPHP/Caddy setup directly:
@@ -69,10 +69,10 @@ There are a few more environment variables that can be set to modify the Franken
### Installation ### Installation
```bash ```bash
# clone repository # clone repository
git clone git@github.com:aternosorg/mclogs.git git clone git@github.com:indifferentketchup/iblogs.git
# install composer dependencies # install composer dependencies
cd mclogs cd iblogs
composer install composer install
# start development environment # start development environment

View File

@@ -2,4 +2,4 @@
require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/vendor/autoload.php';
\Aternos\Mclogs\Frontend\Assets\AssetLoader::getInstance()->writeCache(); \IndifferentKetchup\Iblogs\Frontend\Assets\AssetLoader::getInstance()->writeCache();

View File

@@ -1,10 +1,16 @@
{ {
"name": "aternos/mclogs", "name": "indifferentketchup/iblogs",
"description": "Paste, share and analyse Minecraft logs", "description": "Paste, share, and analyse game-server logs.",
"authors": [ "authors": [
{ {
"name": "Matthias Neid", "name": "indifferentketchup",
"email": "matthias@aternos.org" "email": "samkintop@gmail.com"
}
],
"repositories": [
{
"type": "vcs",
"url": "https://git.indifferentketchup.com/indifferentketchup/ik-codex"
} }
], ],
"require": { "require": {
@@ -15,14 +21,12 @@
"ext-mongodb": "*", "ext-mongodb": "*",
"ext-uri": "*", "ext-uri": "*",
"ext-zlib": "*", "ext-zlib": "*",
"aternos/codex-hytale": "^2.0", "indifferentketchup/codex": "^0.2.0",
"aternos/codex-minecraft": "^5.0.1",
"aternos/sherlock": "^1.0.2",
"mongodb/mongodb": "2.1.2" "mongodb/mongodb": "2.1.2"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Aternos\\Mclogs\\": "src/" "IndifferentKetchup\\Iblogs\\": "src/"
} }
} }
} }

184
composer.lock generated
View File

@@ -4,21 +4,15 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "a570f76a4698742115ca4d1d4113a836", "content-hash": "821a03243eb4b751e38ca3f8f063dd3e",
"packages": [ "packages": [
{ {
"name": "aternos/codex", "name": "indifferentketchup/codex",
"version": "v4.1.0", "version": "v0.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aternosorg/codex.git", "url": "https://git.indifferentketchup.com/indifferentketchup/ik-codex",
"reference": "2d0b1930464d9c5129e90c5e69314b1da22c7c4a" "reference": "2bd4fe6189c21be5b1fb03e8ac23b1a3c01d747c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aternosorg/codex/zipball/2d0b1930464d9c5129e90c5e69314b1da22c7c4a",
"reference": "2d0b1930464d9c5129e90c5e69314b1da22c7c4a",
"shasum": ""
}, },
"require": { "require": {
"php": ">=8.4" "php": ">=8.4"
@@ -29,161 +23,31 @@
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Aternos\\Codex\\": "src/" "IndifferentKetchup\\Codex\\": "src/"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "autoload-dev": {
"license": [
"MIT"
],
"authors": [
{
"name": "Matthias Neid",
"email": "matthias@aternos.org"
}
],
"description": "PHP library to read, parse, print and analyse log files.",
"support": {
"issues": "https://github.com/aternosorg/codex/issues",
"source": "https://github.com/aternosorg/codex/tree/v4.1.0"
},
"time": "2026-01-21T14:12:19+00:00"
},
{
"name": "aternos/codex-hytale",
"version": "v2.0.0",
"source": {
"type": "git",
"url": "https://github.com/aternosorg/codex-hytale.git",
"reference": "9b48e2d0fa4b82a3f10c8833a766b7e76e233271"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aternosorg/codex-hytale/zipball/9b48e2d0fa4b82a3f10c8833a766b7e76e233271",
"reference": "9b48e2d0fa4b82a3f10c8833a766b7e76e233271",
"shasum": ""
},
"require": {
"aternos/codex": "^v4.1.0",
"ext-json": "*",
"php": ">=8.4.0"
},
"require-dev": {
"phpunit/phpunit": "^12.4"
},
"type": "library",
"autoload": {
"psr-4": { "psr-4": {
"Aternos\\Codex\\Hytale\\": "src/" "IndifferentKetchup\\Codex\\Test\\Src\\": "test/src/",
"IndifferentKetchup\\Codex\\Test\\Tests\\": "test/tests/"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "scripts": {
"test": [
"phpunit test/tests"
]
},
"license": [ "license": [
"MIT" "MIT"
], ],
"authors": [ "authors": [
{ {
"name": "Matthias", "name": "indifferentketchup",
"email": "matthias@aternos.org" "email": "samkintop@gmail.com"
} }
], ],
"description": "PHP library to read, parse, print and analyse Hytale log files.", "description": "Generic PHP log parsing and analysis framework.",
"support": { "time": "2026-05-01T22:08:43+00:00"
"issues": "https://github.com/aternosorg/codex-hytale/issues",
"source": "https://github.com/aternosorg/codex-hytale/tree/v2.0.0"
},
"time": "2026-01-23T12:25:09+00:00"
},
{
"name": "aternos/codex-minecraft",
"version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/aternosorg/codex-minecraft.git",
"reference": "f921d0277449af04a72c3dbb784e37b5fa4934b1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aternosorg/codex-minecraft/zipball/f921d0277449af04a72c3dbb784e37b5fa4934b1",
"reference": "f921d0277449af04a72c3dbb784e37b5fa4934b1",
"shasum": ""
},
"require": {
"aternos/codex": "^v4.1.0",
"ext-json": "*",
"php": ">=8.4.0"
},
"require-dev": {
"phpunit/phpunit": "^12"
},
"type": "library",
"autoload": {
"psr-4": {
"Aternos\\Codex\\Minecraft\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Matthias",
"email": "matthias@aternos.org"
}
],
"description": "PHP library to read, parse, print and analyse Minecraft log files.",
"support": {
"issues": "https://github.com/aternosorg/codex-minecraft/issues",
"source": "https://github.com/aternosorg/codex-minecraft/tree/v5.1.0"
},
"time": "2026-03-30T18:21:47+00:00"
},
{
"name": "aternos/sherlock",
"version": "v1.1.3",
"source": {
"type": "git",
"url": "https://github.com/aternosorg/sherlock.git",
"reference": "2bfb6427790b24df860f20905b76f09978a7df3a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aternosorg/sherlock/zipball/2bfb6427790b24df860f20905b76f09978a7df3a",
"reference": "2bfb6427790b24df860f20905b76f09978a7df3a",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-simplexml": "*",
"ext-zlib": "*",
"php": ">=8.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Aternos\\Sherlock\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Julian Vennen",
"email": "julian@aternos.org"
}
],
"description": "PHP library to apply minecraft mappings to log files",
"support": {
"issues": "https://github.com/aternosorg/sherlock/issues",
"source": "https://github.com/aternosorg/sherlock/tree/v1.1.3"
},
"time": "2026-02-09T10:37:21+00:00"
}, },
{ {
"name": "mongodb/mongodb", "name": "mongodb/mongodb",
@@ -314,16 +178,16 @@
}, },
{ {
"name": "symfony/polyfill-php85", "name": "symfony/polyfill-php85",
"version": "v1.33.0", "version": "v1.37.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php85.git", "url": "https://github.com/symfony/polyfill-php85.git",
"reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/fcfa4973a9917cef23f2e38774da74a2b7d115ee",
"reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -370,7 +234,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" "source": "https://github.com/symfony/polyfill-php85/tree/v1.37.0"
}, },
"funding": [ "funding": [
{ {
@@ -390,7 +254,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-06-23T16:12:55+00:00" "time": "2026-04-26T13:10:57+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],

View File

@@ -1,11 +1,11 @@
name: "mclogs" name: "iblogs"
services: services:
web: web:
build: build:
context: .. context: ..
dockerfile: ./Dockerfile dockerfile: ./Dockerfile
environment: environment:
- MCLOGS_WORKER_REQUESTS=1 - IBLOGS_WORKER_REQUESTS=1
- FRANKENPHP_WORKERS=4 - FRANKENPHP_WORKERS=4
ports: ports:
- "80:80" - "80:80"

View File

@@ -1,6 +1,6 @@
services: services:
web: web:
image: ghcr.io/aternosorg/mclogs:2 image: ghcr.io/indifferentketchup/iblogs:2
restart: always restart: always
ports: ports:
# Expose HTTP (80) and HTTPS (443) # Expose HTTP (80) and HTTPS (443)
@@ -9,16 +9,16 @@ services:
- "443:443" - "443:443"
- "443:443/udp" - "443:443/udp"
environment: environment:
# Set this to your domain (e.g., mclogs.example.com) to enable Auto-SSL. # Set this to your domain (e.g., iblogs.example.com) to enable Auto-SSL.
# If running behind a proxy (Cloudflare/Nginx), set to ":80" to disable Auto-SSL. # If running behind a proxy (Cloudflare/Nginx), set to ":80" to disable Auto-SSL.
SERVER_NAME: :80 SERVER_NAME: :80
MCLOGS_MONGODB_URL: mongodb://mongo:27017 IBLOGS_MONGODB_URL: mongodb://mongo:27017
MCLOGS_MONGODB_DATABASE: mclogs IBLOGS_MONGODB_DATABASE: iblogs
# Optional MCLOGS configuration # Optional IBLOGS configuration
# See README.md for full list of available options # See README.md for full list of available options
# MCLOGS_FRONTEND_NAME: "mclogs" # IBLOGS_FRONTEND_NAME: "iblogs"
volumes: volumes:
# For caddy cache (SSL certificates) # For caddy cache (SSL certificates)

View File

@@ -8,18 +8,18 @@
}, },
"mongodb": { "mongodb": {
"url": "mongodb://127.0.0.1:27017", "url": "mongodb://127.0.0.1:27017",
"database": "mclogs" "database": "iblogs"
}, },
"id": { "id": {
"length": 7 "length": 7
}, },
"legal": { "legal": {
"abuse": "abuse@aternos.org", "abuse": "samkintop@gmail.com",
"imprint": "https://aternos.gmbh/imprint/", "imprint": "https://indifferentketchup.com/imprint",
"privacy": "https://aternos.gmbh/en/mclogs/privacy" "privacy": "https://indifferentketchup.com/iblogs/privacy"
}, },
"frontend": { "frontend": {
"name": "mclo.gs", "name": "iblogs.example",
"assets": { "assets": {
"integrity": true "integrity": true
}, },

View File

@@ -1,12 +1,12 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\LogContentParser; use IndifferentKetchup\Iblogs\Api\LogContentParser;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\CodexLogResponse; use IndifferentKetchup\Iblogs\Api\Response\CodexLogResponse;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
class AnalyseLogAction extends ApiAction class AnalyseLogAction extends ApiAction
{ {

View File

@@ -1,10 +1,10 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\ContentParser; use IndifferentKetchup\Iblogs\Api\ContentParser;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
abstract class ApiAction extends Action abstract class ApiAction extends Action
{ {

View File

@@ -1,14 +1,14 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\ContentParser; use IndifferentKetchup\Iblogs\Api\ContentParser;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\MultiResponse; use IndifferentKetchup\Iblogs\Api\Response\MultiResponse;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Storage\MongoDBClient; use IndifferentKetchup\Iblogs\Storage\MongoDBClient;
class BulkDeleteLogsAction extends ApiAction class BulkDeleteLogsAction extends ApiAction
{ {

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\LogContentParser; use IndifferentKetchup\Iblogs\Api\LogContentParser;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\LogResponse; use IndifferentKetchup\Iblogs\Api\Response\LogResponse;
use Aternos\Mclogs\Data\MetadataEntry; use IndifferentKetchup\Iblogs\Data\MetadataEntry;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
class CreateLogAction extends ApiAction class CreateLogAction extends ApiAction
{ {

View File

@@ -1,12 +1,12 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class DeleteLogAction extends ApiAction class DeleteLogAction extends ApiAction
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
class EmptyAction extends Action class EmptyAction extends Action
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
class EndpointNotFoundAction extends ApiAction class EndpointNotFoundAction extends ApiAction
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\FiltersResponse; use IndifferentKetchup\Iblogs\Api\Response\FiltersResponse;
class GetFiltersAction extends ApiAction class GetFiltersAction extends ApiAction
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\LimitsResponse; use IndifferentKetchup\Iblogs\Api\Response\LimitsResponse;
class GetLimitsAction extends ApiAction class GetLimitsAction extends ApiAction
{ {

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\LogResponse; use IndifferentKetchup\Iblogs\Api\Response\LogResponse;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class LogInfoAction extends ApiAction class LogInfoAction extends ApiAction
{ {

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\CodexLogResponse; use IndifferentKetchup\Iblogs\Api\Response\CodexLogResponse;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class LogInsightsAction extends ApiAction class LogInsightsAction extends ApiAction
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
class RateLimitErrorAction extends ApiAction class RateLimitErrorAction extends ApiAction
{ {

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Aternos\Mclogs\Api\Action; namespace IndifferentKetchup\Iblogs\Api\Action;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\RawLogResponse; use IndifferentKetchup\Iblogs\Api\Response\RawLogResponse;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class RawLogAction extends ApiAction class RawLogAction extends ApiAction
{ {

View File

@@ -1,11 +1,11 @@
<?php <?php
namespace Aternos\Mclogs\Api; namespace IndifferentKetchup\Iblogs\Api;
use Aternos\Mclogs\Router\Router; use IndifferentKetchup\Iblogs\Router\Router;
use Aternos\Mclogs\Frontend; use IndifferentKetchup\Iblogs\Frontend;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Router\Method; use IndifferentKetchup\Iblogs\Router\Method;
class ApiRouter extends Router class ApiRouter extends Router
{ {

View File

@@ -1,10 +1,10 @@
<?php <?php
namespace Aternos\Mclogs\Api; namespace IndifferentKetchup\Iblogs\Api;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
/** /**
* Utility class for reading log content from the http request * Utility class for reading log content from the http request

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Api; namespace IndifferentKetchup\Iblogs\Api;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
class LogContentParser extends ContentParser class LogContentParser extends ContentParser
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
class ApiError extends ApiResponse class ApiError extends ApiResponse
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
class ApiResponse implements \JsonSerializable class ApiResponse implements \JsonSerializable
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
use Aternos\Codex\Log\LogInterface; use IndifferentKetchup\Codex\Log\LogInterface;
class CodexLogResponse extends ApiResponse class CodexLogResponse extends ApiResponse
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
use Aternos\Mclogs\Filter\Filter; use IndifferentKetchup\Iblogs\Filter\Filter;
class FiltersResponse extends ApiResponse class FiltersResponse extends ApiResponse
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
class LimitsResponse extends ApiResponse class LimitsResponse extends ApiResponse
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class LogResponse extends ApiResponse class LogResponse extends ApiResponse
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
class MultiResponse extends ApiResponse class MultiResponse extends ApiResponse
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Api\Response; namespace IndifferentKetchup\Iblogs\Api\Response;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
class RawLogResponse extends ApiResponse class RawLogResponse extends ApiResponse
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Cache; namespace IndifferentKetchup\Iblogs\Cache;
use Aternos\Mclogs\Storage\MongoDBClient; use IndifferentKetchup\Iblogs\Storage\MongoDBClient;
use MongoDB\BSON\UTCDateTime; use MongoDB\BSON\UTCDateTime;
class CacheEntry class CacheEntry

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Config; namespace IndifferentKetchup\Iblogs\Config;
use Aternos\Mclogs\Util\Singleton; use IndifferentKetchup\Iblogs\Util\Singleton;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class Config class Config
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Config; namespace IndifferentKetchup\Iblogs\Config;
enum ConfigKey enum ConfigKey
{ {
@@ -40,7 +40,7 @@ enum ConfigKey
ConfigKey::STORAGE_LIMIT_LINES => 25000, ConfigKey::STORAGE_LIMIT_LINES => 25000,
ConfigKey::MONGODB_URL => 'mongodb://mongo:27017', ConfigKey::MONGODB_URL => 'mongodb://mongo:27017',
ConfigKey::MONGODB_DATABASE => 'mclogs', ConfigKey::MONGODB_DATABASE => 'iblogs',
ConfigKey::ID_LENGTH => 7, ConfigKey::ID_LENGTH => 7,
@@ -66,7 +66,7 @@ enum ConfigKey
*/ */
public function getEnvironmentVariable(): string public function getEnvironmentVariable(): string
{ {
return "MCLOGS_" . $this->name; return "IBLOGS_" . $this->name;
} }
/** /**

View File

@@ -1,28 +1,20 @@
<?php <?php
namespace Aternos\Mclogs\Data; namespace IndifferentKetchup\Iblogs\Data;
use Aternos\Codex\Analysis\Information; use IndifferentKetchup\Codex\Log\LogInterface;
use Aternos\Codex\Log\AnalysableLog;
use Aternos\Codex\Log\LogInterface;
use Aternos\Codex\Minecraft\Analysis\Information\Vanilla\VanillaVersionInformation;
use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\Fabric\FabricLog;
use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\VanillaClientLog;
use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\VanillaCrashReportLog;
use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\VanillaLog;
use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\VanillaNetworkProtocolErrorReportLog;
use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\VanillaServerLog;
use Aternos\Mclogs\Cache\CacheEntry;
use Aternos\Sherlock\MapLocator\FabricMavenMapLocator;
use Aternos\Sherlock\MapLocator\LauncherMetaMapLocator;
use Aternos\Sherlock\Maps\GZURLYarnMap;
use Aternos\Sherlock\Maps\ObfuscationMap;
use Aternos\Sherlock\Maps\URLVanillaObfuscationMap;
use Aternos\Sherlock\Maps\VanillaObfuscationMap;
use Aternos\Sherlock\Maps\YarnMap;
use Aternos\Sherlock\ObfuscatedString;
use Exception;
/**
* Stub for v1 — `mclogs` used `aternos/sherlock` plus the Vanilla / Fabric
* Minecraft codex log subclasses to deobfuscate Mojang and Yarn mappings
* in stack traces. iblogs targets Project Zomboid, which uses no such
* mapping scheme, so the deobfuscator is a no-op until iblogs gains
* Minecraft support.
*
* Restore the original mapping flow (Sherlock map locators + obfuscation
* maps) when re-introducing Minecraft logs. The historical implementation
* lives in mclogs upstream commits prior to the iblogs fork.
*/
class Deobfuscator class Deobfuscator
{ {
public function __construct(protected LogInterface $codexLog) public function __construct(protected LogInterface $codexLog)
@@ -31,108 +23,6 @@ class Deobfuscator
public function deobfuscate(): ?string public function deobfuscate(): ?string
{ {
if (!$this->codexLog instanceof AnalysableLog) {
return null;
}
if (!$this->codexLog instanceof VanillaLog) {
return null;
}
$analysis = $this->codexLog->analyse();
/**
* @var ?Information $version
*/
$version = $analysis->getFilteredInsights(VanillaVersionInformation::class)[0] ?? null;
if (!$version) {
return null;
}
$version = $version->getValue();
try {
$map = $this->getObfuscationMap($version);
} catch (Exception) {
$map = null;
}
if ($map === null) {
return null;
}
$obfuscatedContent = new ObfuscatedString($this->codexLog->getLogFile()->getContent(), $map);
if ($content = $obfuscatedContent->getMappedContent()) {
return $content;
}
return null; return null;
} }
}
/**
* Get the obfuscation map matching this log
*
* @param $version
* @return ObfuscationMap|null
* @throws Exception
*/
protected function getObfuscationMap($version): ?ObfuscationMap
{
if (in_array(get_class($this->codexLog), [
VanillaServerLog::class,
VanillaClientLog::class,
VanillaCrashReportLog::class,
VanillaNetworkProtocolErrorReportLog::class
])) {
$urlCache = new CacheEntry("sherlock:vanilla:$version:client");
$mapURL = $urlCache->get();
if (!$mapURL) {
$mapURL = new LauncherMetaMapLocator($version, "client")->findMappingURL();
if (!$mapURL) {
return null;
}
$urlCache->set($mapURL, 30 * 24 * 60 * 60);
}
try {
$mapCache = new CacheEntry("sherlock:$mapURL");
if ($mapContent = $mapCache->get()) {
$map = new VanillaObfuscationMap($mapContent);
} else {
$map = new URLVanillaObfuscationMap($mapURL);
$mapCache->set($map->getContent());
}
} catch (Exception) {
}
return $map ?? null;
}
if ($this->codexLog instanceof FabricLog) {
$urlCache = new CacheEntry("sherlock:yarn:$version:server");
$mapURL = $urlCache->get();
if (!$mapURL) {
$mapURL = new FabricMavenMapLocator($version)->findMappingURL();
if (!$mapURL) {
return null;
}
$urlCache->set($mapURL, 24 * 60 * 60);
}
try {
$mapCache = new CacheEntry("sherlock:$mapURL");
if ($mapContent = $mapCache->get()) {
$map = new YarnMap($mapContent);
} else {
$map = new GZURLYarnMap($mapURL);
$mapCache->set($map->getContent());
}
} catch (Exception) {
}
return $map ?? null;
}
return null;
}
}

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Data; namespace IndifferentKetchup\Iblogs\Data;
use MongoDB\BSON\Serializable; use MongoDB\BSON\Serializable;
use MongoDB\Model\BSONDocument; use MongoDB\Model\BSONDocument;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Data; namespace IndifferentKetchup\Iblogs\Data;
use Random\RandomException; use Random\RandomException;

View File

@@ -1,16 +1,13 @@
<?php <?php
namespace Aternos\Mclogs; namespace IndifferentKetchup\Iblogs;
use Aternos\Codex\Minecraft\Log\Minecraft\MinecraftLog; use IndifferentKetchup\Codex\Detective\ProjectZomboid\ProjectZomboidDetective;
class Detective extends \Aternos\Codex\Detective\Detective class Detective extends \IndifferentKetchup\Codex\Detective\Detective
{ {
protected string $defaultLogClass = MinecraftLog::class;
public function __construct() public function __construct()
{ {
$this->addDetective(new \Aternos\Codex\Minecraft\Detective\Detective()) $this->addDetective(new ProjectZomboidDetective());
->addDetective(new \Aternos\Codex\Hytale\Detective\Detective());
} }
} }

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Filter\Pattern\PatternWithReplacement; use IndifferentKetchup\Iblogs\Filter\Pattern\PatternWithReplacement;
class AccessTokenFilter extends RegexFilter class AccessTokenFilter extends RegexFilter
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
abstract class Filter implements \JsonSerializable abstract class Filter implements \JsonSerializable
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
enum FilterType: string enum FilterType: string
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Filter\Pattern\Pattern; use IndifferentKetchup\Iblogs\Filter\Pattern\Pattern;
use Aternos\Mclogs\Filter\Pattern\PatternWithReplacement; use IndifferentKetchup\Iblogs\Filter\Pattern\PatternWithReplacement;
class IPv4Filter extends RegexFilter class IPv4Filter extends RegexFilter
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Filter\Pattern\Pattern; use IndifferentKetchup\Iblogs\Filter\Pattern\Pattern;
use Aternos\Mclogs\Filter\Pattern\PatternWithReplacement; use IndifferentKetchup\Iblogs\Filter\Pattern\PatternWithReplacement;
class IPv6Filter extends RegexFilter class IPv6Filter extends RegexFilter
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
class LimitBytesFilter extends Filter class LimitBytesFilter extends Filter
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
class LimitLinesFilter extends Filter class LimitLinesFilter extends Filter
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Filter\Pattern; namespace IndifferentKetchup\Iblogs\Filter\Pattern;
/** /**
* https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php * https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Filter\Pattern; namespace IndifferentKetchup\Iblogs\Filter\Pattern;
class Pattern implements \JsonSerializable class Pattern implements \JsonSerializable
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Filter\Pattern; namespace IndifferentKetchup\Iblogs\Filter\Pattern;
class PatternWithReplacement extends Pattern class PatternWithReplacement extends Pattern
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Filter\Pattern\Pattern; use IndifferentKetchup\Iblogs\Filter\Pattern\Pattern;
use Aternos\Mclogs\Filter\Pattern\PatternWithReplacement; use IndifferentKetchup\Iblogs\Filter\Pattern\PatternWithReplacement;
abstract class RegexFilter extends Filter abstract class RegexFilter extends Filter
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
class TrimFilter extends Filter class TrimFilter extends Filter
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Filter; namespace IndifferentKetchup\Iblogs\Filter;
use Aternos\Mclogs\Filter\Pattern\PatternWithReplacement; use IndifferentKetchup\Iblogs\Filter\Pattern\PatternWithReplacement;
class UsernameFilter extends RegexFilter class UsernameFilter extends RegexFilter
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
class ApiDocsAction extends Action class ApiDocsAction extends Action
{ {

View File

@@ -1,10 +1,10 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class CreateLogAction extends \Aternos\Mclogs\Api\Action\CreateLogAction class CreateLogAction extends \IndifferentKetchup\Iblogs\Api\Action\CreateLogAction
{ {
protected bool $includeCookie = true; protected bool $includeCookie = true;
protected bool $includeToken = false; protected bool $includeToken = false;

View File

@@ -1,12 +1,12 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Frontend\Cookie\TokenCookie; use IndifferentKetchup\Iblogs\Frontend\Cookie\TokenCookie;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class DeleteLogAction extends \Aternos\Mclogs\Api\Action\DeleteLogAction class DeleteLogAction extends \IndifferentKetchup\Iblogs\Api\Action\DeleteLogAction
{ {
protected function getAllowedOrigin(): string protected function getAllowedOrigin(): string
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
class FaviconAction extends Action class FaviconAction extends Action
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
class NotFoundAction extends Action class NotFoundAction extends Action
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
class StartAction extends Action class StartAction extends Action
{ {

View File

@@ -1,11 +1,11 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Action; namespace IndifferentKetchup\Iblogs\Frontend\Action;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Router\Action; use IndifferentKetchup\Iblogs\Router\Action;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class ViewLogAction extends Action class ViewLogAction extends Action
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Assets; namespace IndifferentKetchup\Iblogs\Frontend\Assets;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
class Asset implements \JsonSerializable class Asset implements \JsonSerializable
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Assets; namespace IndifferentKetchup\Iblogs\Frontend\Assets;
use Aternos\Mclogs\Util\Singleton; use IndifferentKetchup\Iblogs\Util\Singleton;
class AssetLoader class AssetLoader
{ {
@@ -90,7 +90,7 @@ class AssetLoader
public function writeCache(): void public function writeCache(): void
{ {
$assets = [ $assets = [
new Asset(AssetType::CSS, "css/mclogs.css"), new Asset(AssetType::CSS, "css/iblogs.css"),
new Asset(AssetType::JS, "js/start.js"), new Asset(AssetType::JS, "js/start.js"),
new Asset(AssetType::JS, "js/log.js"), new Asset(AssetType::JS, "js/log.js"),
new Asset(AssetType::CSS, "vendor/fontawesome/css/fontawesome.min.css") new Asset(AssetType::CSS, "vendor/fontawesome/css/fontawesome.min.css")

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Assets; namespace IndifferentKetchup\Iblogs\Frontend\Assets;
enum AssetType: string enum AssetType: string
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Cookie; namespace IndifferentKetchup\Iblogs\Frontend\Cookie;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
abstract class Cookie abstract class Cookie
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Cookie; namespace IndifferentKetchup\Iblogs\Frontend\Cookie;
class SettingsCookie extends Cookie class SettingsCookie extends Cookie
{ {
@@ -9,6 +9,6 @@ class SettingsCookie extends Cookie
*/ */
protected function getKey(): string protected function getKey(): string
{ {
return "MCLOGS_SETTINGS"; return "IBLOGS_SETTINGS";
} }
} }

View File

@@ -1,10 +1,10 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Cookie; namespace IndifferentKetchup\Iblogs\Frontend\Cookie;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
class TokenCookie extends Cookie class TokenCookie extends Cookie
{ {
@@ -23,7 +23,7 @@ class TokenCookie extends Cookie
*/ */
protected function getKey(): string protected function getKey(): string
{ {
return "MCLOGS_LOG_TOKEN"; return "IBLOGS_LOG_TOKEN";
} }
/** /**

View File

@@ -1,10 +1,10 @@
<?php <?php
namespace Aternos\Mclogs\Frontend; namespace IndifferentKetchup\Iblogs\Frontend;
use Aternos\Mclogs\Router\Router; use IndifferentKetchup\Iblogs\Router\Router;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
use Aternos\Mclogs\Router\Method; use IndifferentKetchup\Iblogs\Router\Method;
class FrontendRouter extends Router class FrontendRouter extends Router
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Settings; namespace IndifferentKetchup\Iblogs\Frontend\Settings;
enum Setting: string enum Setting: string
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs\Frontend\Settings; namespace IndifferentKetchup\Iblogs\Frontend\Settings;
use Aternos\Mclogs\Frontend\Cookie\SettingsCookie; use IndifferentKetchup\Iblogs\Frontend\Cookie\SettingsCookie;
class Settings class Settings
{ {

View File

@@ -1,8 +1,8 @@
<?php <?php
namespace Aternos\Mclogs; namespace IndifferentKetchup\Iblogs;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
class Id implements \JsonSerializable class Id implements \JsonSerializable
{ {
@@ -26,7 +26,7 @@ class Id implements \JsonSerializable
*/ */
protected function generate(): string protected function generate(): string
{ {
$config = \Aternos\Mclogs\Config\Config::getInstance(); $config = \IndifferentKetchup\Iblogs\Config\Config::getInstance();
$idLength = $config->get(ConfigKey::ID_LENGTH); $idLength = $config->get(ConfigKey::ID_LENGTH);
$newId = ""; $newId = "";

View File

@@ -1,21 +1,21 @@
<?php <?php
namespace Aternos\Mclogs; namespace IndifferentKetchup\Iblogs;
use Aternos\Codex\Analysis\Analysis; use IndifferentKetchup\Codex\Analysis\Analysis;
use Aternos\Codex\Log\AnalysableLogInterface; use IndifferentKetchup\Codex\Log\AnalysableLogInterface;
use Aternos\Codex\Log\File\StringLogFile; use IndifferentKetchup\Codex\Log\File\StringLogFile;
use Aternos\Codex\Log\Level; use IndifferentKetchup\Codex\Log\Level;
use Aternos\Codex\Log\LogInterface; use IndifferentKetchup\Codex\Log\LogInterface;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Data\Deobfuscator; use IndifferentKetchup\Iblogs\Data\Deobfuscator;
use Aternos\Mclogs\Data\MetadataEntry; use IndifferentKetchup\Iblogs\Data\MetadataEntry;
use Aternos\Mclogs\Data\Token; use IndifferentKetchup\Iblogs\Data\Token;
use Aternos\Mclogs\Filter\Filter; use IndifferentKetchup\Iblogs\Filter\Filter;
use Aternos\Mclogs\Frontend\Cookie\TokenCookie; use IndifferentKetchup\Iblogs\Frontend\Cookie\TokenCookie;
use Aternos\Mclogs\Printer\Printer; use IndifferentKetchup\Iblogs\Printer\Printer;
use Aternos\Mclogs\Storage\MongoDBClient; use IndifferentKetchup\Iblogs\Storage\MongoDBClient;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
use MongoDB\BSON\UTCDateTime; use MongoDB\BSON\UTCDateTime;
use Uri\Rfc3986\Uri; use Uri\Rfc3986\Uri;
@@ -371,7 +371,7 @@ class Log
*/ */
protected function getExpiryTimestamp(): UTCDateTime protected function getExpiryTimestamp(): UTCDateTime
{ {
$ttl = \Aternos\Mclogs\Config\Config::getInstance()->get(ConfigKey::STORAGE_TTL); $ttl = \IndifferentKetchup\Iblogs\Config\Config::getInstance()->get(ConfigKey::STORAGE_TTL);
$expires = time() + $ttl; $expires = time() + $ttl;
return new UTCDateTime($expires * 1000); return new UTCDateTime($expires * 1000);
} }

View File

@@ -1,20 +1,24 @@
<?php <?php
namespace Aternos\Mclogs\Printer; namespace IndifferentKetchup\Iblogs\Printer;
use IndifferentKetchup\Codex\Printer\Modification;
/** /**
* Class FormatModification * Stub for v1 — `mclogs` extended `Aternos\Codex\Minecraft\Printer\FormatModification`
* to translate Minecraft section-sign format codes into HTML format spans
* (`format-black`, `format-darkblue`, etc., backed by the format-colors block
* in the iblogs CSS). Project Zomboid logs do not carry these codes, so this
* Modification is a pass-through under iblogs.
* *
* @package Printer * The CSS `format-*` color classes are retained so re-introducing a real
* Minecraft FormatModification later (or any other game with its own
* format-code scheme) can reuse the existing styling.
*/ */
class FormatModification extends \Aternos\Codex\Minecraft\Printer\FormatModification class FormatModification extends Modification
{ {
/** public function modify(string $text): string
* @param string $format
* @return string
*/
protected function getClasses(string $format): string
{ {
return "format format-" . $format; return $text;
} }
} }

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Aternos\Mclogs\Printer; namespace IndifferentKetchup\Iblogs\Printer;
use Aternos\Codex\Log\Entry; use IndifferentKetchup\Codex\Log\Entry;
use Aternos\Codex\Log\EntryInterface; use IndifferentKetchup\Codex\Log\EntryInterface;
use Aternos\Codex\Log\Level; use IndifferentKetchup\Codex\Log\Level;
use Aternos\Codex\Log\LineInterface; use IndifferentKetchup\Codex\Log\LineInterface;
use Aternos\Codex\Printer\ModifiableDefaultPrinter; use IndifferentKetchup\Codex\Printer\ModifiableDefaultPrinter;
use Aternos\Mclogs\Id; use IndifferentKetchup\Iblogs\Id;
/** /**
* Class Printer * Class Printer

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Router; namespace IndifferentKetchup\Iblogs\Router;
abstract class Action abstract class Action
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Router; namespace IndifferentKetchup\Iblogs\Router;
enum Method: string enum Method: string
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Router; namespace IndifferentKetchup\Iblogs\Router;
class Route class Route
{ {

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Aternos\Mclogs\Router; namespace IndifferentKetchup\Iblogs\Router;
use Aternos\Mclogs\Util\Singleton; use IndifferentKetchup\Iblogs\Util\Singleton;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
class Router class Router
{ {

View File

@@ -1,10 +1,10 @@
<?php <?php
namespace Aternos\Mclogs\Storage; namespace IndifferentKetchup\Iblogs\Storage;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Util\Singleton; use IndifferentKetchup\Iblogs\Util\Singleton;
use MongoDB\BSON\UTCDateTime; use MongoDB\BSON\UTCDateTime;
use MongoDB\Client; use MongoDB\Client;
use MongoDB\Collection; use MongoDB\Collection;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Util; namespace IndifferentKetchup\Iblogs\Util;
trait Singleton trait Singleton
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Util; namespace IndifferentKetchup\Iblogs\Util;
class TimeInterval class TimeInterval
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Aternos\Mclogs\Util; namespace IndifferentKetchup\Iblogs\Util;
use Uri\Rfc3986\Uri; use Uri\Rfc3986\Uri;

View File

@@ -1,12 +1,12 @@
<?php <?php
use Aternos\Mclogs\Api\Action\BulkDeleteLogsAction; use IndifferentKetchup\Iblogs\Api\Action\BulkDeleteLogsAction;
use Aternos\Mclogs\Api\Response\ApiError; use IndifferentKetchup\Iblogs\Api\Response\ApiError;
use Aternos\Mclogs\Api\Response\ApiResponse; use IndifferentKetchup\Iblogs\Api\Response\ApiResponse;
use Aternos\Mclogs\Api\Response\MultiResponse; use IndifferentKetchup\Iblogs\Api\Response\MultiResponse;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
$config = Config::getInstance(); $config = Config::getInstance();
?> ?>
@@ -433,8 +433,8 @@ $config = Config::getInstance();
{ {
"message": "Label: value", "message": "Label: value",
"counter": 1, "counter": 1,
"label": "The label of this information, e.g. Minecraft version", "label": "The label of this information, e.g. Engine version",
"value": "The value of this information, e.g. 1.12.2", "value": "The value of this information, e.g. 42.16.3",
"entry": { "entry": {
"level": 6, "level": 6,
"time": null, "time": null,
@@ -515,8 +515,8 @@ $config = Config::getInstance();
{ {
"message": "Label: value", "message": "Label: value",
"counter": 1, "counter": 1,
"label": "The label of this information, e.g. Minecraft version", "label": "The label of this information, e.g. Engine version",
"value": "The value of this information, e.g. 1.12.2", "value": "The value of this information, e.g. 42.16.3",
"entry": { "entry": {
"level": 6, "level": 6,
"time": null, "time": null,
@@ -586,7 +586,7 @@ $config = Config::getInstance();
</div> </div>
<h3>Success <span class="content-type">application/json</span></h3> <h3>Success <span class="content-type">application/json</span></h3>
<pre class="api-code"> <pre class="api-code">
<?=htmlspecialchars(json_encode(\Aternos\Mclogs\Filter\Filter::getAll(), JSON_PRETTY_PRINT)); ?></pre> <?=htmlspecialchars(json_encode(\IndifferentKetchup\Iblogs\Filter\Filter::getAll(), JSON_PRETTY_PRINT)); ?></pre>
<h3>Filter types</h3> <h3>Filter types</h3>
<table class="api-table"> <table class="api-table">
<tr> <tr>

View File

@@ -1,13 +1,13 @@
<?php <?php
use Aternos\Mclogs\Frontend\Assets\AssetLoader; use IndifferentKetchup\Iblogs\Frontend\Assets\AssetLoader;
use Aternos\Mclogs\Frontend\Assets\AssetType; use IndifferentKetchup\Iblogs\Frontend\Assets\AssetType;
use Aternos\Mclogs\Log; use IndifferentKetchup\Iblogs\Log;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Frontend\Settings\Setting; use IndifferentKetchup\Iblogs\Frontend\Settings\Setting;
use Aternos\Mclogs\Frontend\Settings\Settings; use IndifferentKetchup\Iblogs\Frontend\Settings\Settings;
use Aternos\Mclogs\Util\TimeInterval; use IndifferentKetchup\Iblogs\Util\TimeInterval;
/** @var Log $log */ /** @var Log $log */

View File

@@ -1,4 +1,4 @@
<svg width="41" height="42" viewBox="0 0 41 42" fill="<?=htmlspecialchars(\Aternos\Mclogs\Config\Config::getInstance()->get(\Aternos\Mclogs\Config\ConfigKey::FRONTEND_COLOR_ACCENT)); ?>" xmlns="http://www.w3.org/2000/svg"> <svg width="41" height="42" viewBox="0 0 41 42" fill="<?=htmlspecialchars(\IndifferentKetchup\Iblogs\Config\Config::getInstance()->get(\IndifferentKetchup\Iblogs\Config\ConfigKey::FRONTEND_COLOR_ACCENT)); ?>" xmlns="http://www.w3.org/2000/svg">
<rect width="41" height="5" rx="2"/> <rect width="41" height="5" rx="2"/>
<rect y="9.25" width="33" height="5" rx="2"/> <rect y="9.25" width="33" height="5" rx="2"/>
<rect y="18.5" width="19" height="5" rx="2"/> <rect y="18.5" width="19" height="5" rx="2"/>

Before

Width:  |  Height:  |  Size: 470 B

After

Width:  |  Height:  |  Size: 492 B

View File

@@ -1,5 +1,5 @@
<?php <?php
use Aternos\Mclogs\Config\Config;use Aternos\Mclogs\Config\ConfigKey;use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Config\Config;use IndifferentKetchup\Iblogs\Config\ConfigKey;use IndifferentKetchup\Iblogs\Util\URL;
$imprintUrl = Config::getInstance()->get(ConfigKey::LEGAL_IMPRINT); $imprintUrl = Config::getInstance()->get(ConfigKey::LEGAL_IMPRINT);
$privacyUrl = Config::getInstance()->get(ConfigKey::LEGAL_PRIVACY); $privacyUrl = Config::getInstance()->get(ConfigKey::LEGAL_PRIVACY);
@@ -19,10 +19,9 @@ $privacyUrl = Config::getInstance()->get(ConfigKey::LEGAL_PRIVACY);
</nav> </nav>
<?php endif; ?> <?php endif; ?>
<nav class="footer-nav"> <nav class="footer-nav">
<a href="https://github.com/aternosorg/mclogs" title="mclo.gs on Github" target="_blank"><i class="fa-brands fa-github"></i>GitHub</a> <a href="https://github.com/indifferentketchup/iblogs" title="iblogs on Github" target="_blank"><i class="fa-brands fa-github"></i>GitHub</a>
<a href="https://modrinth.com/plugin/mclogs" title="Download mclo.gs Mod/Plugin" target="_blank"><i class="fa-solid fa-cube"></i>Mod/Plugin</a> <a href="<?=htmlspecialchars(URL::getApi()->toString()); ?>" title="iblogs API"><i class="fa-solid fa-code"></i>API</a>
<a href="<?=htmlspecialchars(URL::getApi()->toString()); ?>" title="mclo.gs API"><i class="fa-solid fa-code"></i>API</a>
</nav> </nav>
<span class="footer-text">developed by <a href="https://aternos.org" target="_blank" title="Aternos website">Aternos</a> <span class="footer-text">based on <a href="https://github.com/aternosorg/mclogs" target="_blank" title="Original mclogs project">mclogs</a> by <a href="https://github.com/aternosorg" target="_blank" title="Aternos on GitHub"><i class="fa-brands fa-github"></i> Aternos</a>
</span> </span>
</footer> </footer>

View File

@@ -1,17 +1,17 @@
<?php <?php
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Frontend\Assets\AssetLoader; use IndifferentKetchup\Iblogs\Frontend\Assets\AssetLoader;
use Aternos\Mclogs\Frontend\Assets\AssetType; use IndifferentKetchup\Iblogs\Frontend\Assets\AssetType;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
?> ?>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<base href="/"/> <base href="/"/>
<?= AssetLoader::getInstance()->getHTML(AssetType::CSS, "vendor/fontawesome/css/fontawesome.min.css"); ?> <?= AssetLoader::getInstance()->getHTML(AssetType::CSS, "vendor/fontawesome/css/fontawesome.min.css"); ?>
<?= AssetLoader::getInstance()->getHTML(AssetType::CSS, "css/mclogs.css"); ?> <?= AssetLoader::getInstance()->getHTML(AssetType::CSS, "css/iblogs.css"); ?>
<style> <style>
:root { :root {

View File

@@ -1,5 +1,5 @@
<header> <header>
<a href="<?=htmlspecialchars(\Aternos\Mclogs\Util\URL::getBase()->toString()); ?>" class="logo"> <a href="<?=htmlspecialchars(\IndifferentKetchup\Iblogs\Util\URL::getBase()->toString()); ?>" class="logo">
<svg class="logo-icon" width="41" height="42" viewBox="0 0 41 42" fill="none" <svg class="logo-icon" width="41" height="42" viewBox="0 0 41 42" fill="none"
xmlns="http://www.w3.org/2000/svg"> xmlns="http://www.w3.org/2000/svg">
<rect width="41" height="5" rx="2" fill="currentColor"/> <rect width="41" height="5" rx="2" fill="currentColor"/>
@@ -8,11 +8,11 @@
<rect y="27.75" width="33" height="5" rx="2" fill="currentColor"/> <rect y="27.75" width="33" height="5" rx="2" fill="currentColor"/>
<rect y="37" width="41" height="5" rx="2" fill="currentColor"/> <rect y="37" width="41" height="5" rx="2" fill="currentColor"/>
</svg> </svg>
<span class="logo-text"><?= htmlspecialchars(\Aternos\Mclogs\Config\Config::getInstance()->getName()); ?></span> <span class="logo-text"><?= htmlspecialchars(\IndifferentKetchup\Iblogs\Config\Config::getInstance()->getName()); ?></span>
</a> </a>
<div class="tagline"> <div class="tagline">
<h1 class="tagline-main"><span class="title-verb">Paste</span> your logs.</h1> <h1 class="tagline-main"><span class="title-verb">Paste</span> your logs.</h1>
<div class="tagline-sub">Built for Minecraft & Hytale</div> <div class="tagline-sub">Built for game-server logs</div>
</div> </div>
<script> <script>
const titles = ["Paste", "Share", "Analyse"]; const titles = ["Paste", "Share", "Analyse"];

View File

@@ -1,14 +1,14 @@
<?php <?php
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Filter\Filter; use IndifferentKetchup\Iblogs\Filter\Filter;
use Aternos\Mclogs\Frontend\Assets\AssetLoader; use IndifferentKetchup\Iblogs\Frontend\Assets\AssetLoader;
use Aternos\Mclogs\Frontend\Assets\AssetType; use IndifferentKetchup\Iblogs\Frontend\Assets\AssetType;
?><!DOCTYPE html> ?><!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<?php include __DIR__ . '/parts/head.php'; ?> <?php include __DIR__ . '/parts/head.php'; ?>
<title><?= htmlspecialchars(Config::getInstance()->getName()); ?> - Paste, share & analyse your logs</title> <title><?= htmlspecialchars(Config::getInstance()->getName()); ?> - Paste, share & analyse your logs</title>
<meta name="description" content="Easily paste your Minecraft & Hytale logs to share and analyse them." /> <meta name="description" content="Easily paste your game-server logs to share and analyse them." />
</head> </head>
<body data-name="<?=htmlspecialchars(Config::getInstance()->getName()); ?>"> <body data-name="<?=htmlspecialchars(Config::getInstance()->getName()); ?>">
<?php include __DIR__ . '/parts/header.php'; ?> <?php include __DIR__ . '/parts/header.php'; ?>

View File

@@ -1145,7 +1145,7 @@ main {
color: #A4A4A4; color: #A4A4A4;
} }
/** Minecraft Format Colors **/ /** Format colors (legacy mclogs syntax-highlighting palette) **/
.format-black { .format-black {
color: #000; color: #000;

View File

@@ -203,7 +203,7 @@ function saveSettings() {
for (const checkbox of settingCheckboxes) { for (const checkbox of settingCheckboxes) {
data[checkbox.dataset.key] = checkbox.checked; data[checkbox.dataset.key] = checkbox.checked;
} }
document.cookie = "MCLOGS_SETTINGS=" + encodeURIComponent(JSON.stringify(data)) + ";path=/;expires=" + new Date(new Date().getTime() + 100 * 365 * 24 * 60 * 60 * 1000).toUTCString(); document.cookie = "IBLOGS_SETTINGS=" + encodeURIComponent(JSON.stringify(data)) + ";path=/;expires=" + new Date(new Date().getTime() + 100 * 365 * 24 * 60 * 60 * 1000).toUTCString();
} }
/* copy to clipboard */ /* copy to clipboard */

View File

@@ -1,11 +1,11 @@
<?php <?php
use Aternos\Mclogs\Api\ApiRouter; use IndifferentKetchup\Iblogs\Api\ApiRouter;
use Aternos\Mclogs\Config\Config; use IndifferentKetchup\Iblogs\Config\Config;
use Aternos\Mclogs\Config\ConfigKey; use IndifferentKetchup\Iblogs\Config\ConfigKey;
use Aternos\Mclogs\Frontend\FrontendRouter; use IndifferentKetchup\Iblogs\Frontend\FrontendRouter;
use Aternos\Mclogs\Storage\MongoDBClient; use IndifferentKetchup\Iblogs\Storage\MongoDBClient;
use Aternos\Mclogs\Util\URL; use IndifferentKetchup\Iblogs\Util\URL;
require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/vendor/autoload.php';