0.1.6B bugfix

This commit is contained in:
User
2025-06-17 19:40:41 -04:00
parent 2c730be26f
commit d6110dd6db
8 changed files with 435 additions and 250 deletions

View File

@@ -2,7 +2,7 @@
namespace App\Remote; namespace App\Remote;
use DOMDocument; use Dom\HTMLDocument;
use Exception; use Exception;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\GuzzleException;
@@ -16,7 +16,7 @@ class CopyManga
{ {
/** /**
* @var array Caching options * @var array{caching: bool, cachingTimeout: int} Caching options
* @deprecated * @deprecated
*/ */
protected array $options = [ protected array $options = [
@@ -36,8 +36,10 @@ class CopyManga
/** /**
* @var string Encryption for legacy image fetch * @var string Encryption for legacy image fetch
*
* Since 17/Jun/2025, the key is updated dynamically, added function to fetch the key now
*/ */
protected string $encryptionKey = "xxxmanga.woo.key"; protected string $encryptionKey = "";
/** /**
* @var bool Use old method to fetch images list * @var bool Use old method to fetch images list
@@ -326,13 +328,23 @@ class CopyManga
$responses = $this->execute($this->legacyBuildUrl("comic/{$comic}/chapter/{$chapter}"), "GET", $userAgent, ttl: 24 * 60 * 60 * 30); $responses = $this->execute($this->legacyBuildUrl("comic/{$comic}/chapter/{$chapter}"), "GET", $userAgent, ttl: 24 * 60 * 60 * 30);
// Get Content Key // Get Content Key
$dom = new DOMDocument(); $dom = HTMLDocument::createFromString($responses, LIBXML_NOERROR);
$dom->loadHTML($responses);
$dataNode = $dom->getElementsByTagName("div"); $scriptNodes = $dom->getElementsByTagName('script');
foreach ($scriptNodes as $node) {
if (strpos($node->textContent, 'var jojo') !== false) {
if (preg_match("/var\s+jojo\s*=\s*'([^']+)'/", trim($node->textContent), $matches)) {
$this->encryptionKey = $matches[1];
}
}
}
$dataNodes = $dom->getElementsByTagName("div");
$encryptedData = ""; $encryptedData = "";
foreach ($dataNode as $node) { foreach ($dataNodes as $node) {
if ($node->getAttribute("class") === 'imageData') { if ($node->getAttribute("class") === 'imageData') {
$encryptedData = $node->attributes->item(1)->value; $encryptedData = $node->attributes->item(1)->value;
break; break;

View File

@@ -6,6 +6,7 @@ use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware; use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets; use Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets;
use Illuminate\Http\Middleware\TrustProxies;
use Sentry\Laravel\Integration; use Sentry\Laravel\Integration;
return Application::configure(basePath: dirname(__DIR__)) return Application::configure(basePath: dirname(__DIR__))
@@ -19,9 +20,10 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->web(append: [ $middleware->web(append: [
HandleInertiaRequests::class, HandleInertiaRequests::class,
AddLinkHeadersForPreloadedAssets::class, AddLinkHeadersForPreloadedAssets::class,
TrustProxies::class,
]); ]);
$middleware->statefulApi(); $middleware->statefulApi();
// $middleware->trustProxies(at: '*');
}) })
->withExceptions(function (Exceptions $exceptions) { ->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (ServerException $e, Request $request) { $exceptions->render(function (ServerException $e, Request $request) {

BIN
bun.lockb

Binary file not shown.

View File

@@ -6,7 +6,7 @@
"keywords": ["laravel", "framework"], "keywords": ["laravel", "framework"],
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.3", "php": "^8.4",
"ext-dom": "*", "ext-dom": "*",
"ext-openssl": "*", "ext-openssl": "*",
"inertiajs/inertia-laravel": "^2.0", "inertiajs/inertia-laravel": "^2.0",
@@ -17,7 +17,8 @@
"plesk/ext-laravel-integration": "^7.0", "plesk/ext-laravel-integration": "^7.0",
"predis/predis": "^2.0", "predis/predis": "^2.0",
"sentry/sentry-laravel": "^4.10", "sentry/sentry-laravel": "^4.10",
"tightenco/ziggy": "^2.0" "tightenco/ziggy": "^2.0",
"ext-libxml": "*"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.23", "fakerphp/faker": "^1.23",

455
composer.lock generated

File diff suppressed because it is too large Load Diff

178
nixpacks.toml Normal file
View File

@@ -0,0 +1,178 @@
[phases.setup]
nixPkgs = ["...", "python311Packages.supervisor"]
[phases.build]
cmds = [
"mkdir -p /etc/supervisor/conf.d/",
"cp /assets/worker-*.conf /etc/supervisor/conf.d/",
"cp /assets/supervisord.conf /etc/supervisord.conf",
"chmod +x /assets/start.sh",
"..."
]
[start]
cmd = '/assets/start.sh'
[staticAssets]
"start.sh" = '''
#!/bin/bash
# Transform the nginx configuration
node /assets/scripts/prestart.mjs /assets/nginx.template.conf /etc/nginx.conf
# Start supervisor
supervisord -c /etc/supervisord.conf -n
'''
"supervisord.conf" = '''
[unix_http_server]
file=/assets/supervisor.sock
[supervisord]
logfile=/var/log/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/assets/supervisord.pid
nodaemon=false
silent=false
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///assets/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
'''
"worker-nginx.conf" = '''
[program:worker-nginx]
process_name=%(program_name)s_%(process_num)02d
command=nginx -c /etc/nginx.conf
autostart=true
autorestart=true
stdout_logfile=/var/log/worker-nginx.log
stderr_logfile=/var/log/worker-nginx.log
'''
"worker-phpfpm.conf" = '''
[program:worker-phpfpm]
process_name=%(program_name)s_%(process_num)02d
command=php-fpm -y /assets/php-fpm.conf -F
autostart=true
autorestart=true
stdout_logfile=/var/log/worker-phpfpm.log
stderr_logfile=/var/log/worker-phpfpm.log
'''
"worker-laravel.conf" = '''
[program:worker-laravel]
process_name=%(program_name)s_%(process_num)02d
command=bash -c 'exec php /app/artisan queue:work --sleep=3 --tries=3 --max-time=3600'
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
numprocs=2 # To reduce memory/CPU usage, change to 2.
startsecs=0
stopwaitsecs=3600
stdout_logfile=/var/log/worker-laravel.log
stderr_logfile=/var/log/worker-laravel.log
'''
"php-fpm.conf" = '''
[www]
listen = 127.0.0.1:9000
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.min_spare_servers = 4
pm.max_spare_servers = 32
pm.start_servers = 18
clear_env = no
php_admin_value[post_max_size] = 35M
php_admin_value[upload_max_filesize] = 30M
'''
"nginx.template.conf" = '''
user www-data www-data;
worker_processes 5;
daemon off;
worker_rlimit_nofile 8192;
events {
worker_connections 4096; # Default: 1024
}
http {
include $!{nginx}/conf/mime.types;
index index.html index.htm index.php;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx-access.log;
error_log /var/log/nginx-error.log;
sendfile on;
tcp_nopush on;
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
server {
listen ${PORT};
listen [::]:${PORT};
server_name localhost;
$if(NIXPACKS_PHP_ROOT_DIR) (
root ${NIXPACKS_PHP_ROOT_DIR};
) else (
root /app;
)
add_header X-Content-Type-Options "nosniff";
client_max_body_size 35M;
index index.php;
charset utf-8;
$if(NIXPACKS_PHP_FALLBACK_PATH) (
location / {
try_files $uri $uri/ ${NIXPACKS_PHP_FALLBACK_PATH}?$query_string;
}
) else (
location / {
try_files $uri $uri/ /index.php?$query_string;
}
)
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
$if(IS_LARAVEL) (
error_page 404 /index.php;
) else ()
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_buffer_size 8k;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include $!{nginx}/conf/fastcgi_params;
include $!{nginx}/conf/fastcgi.conf;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
}
'''

View File

@@ -7,14 +7,14 @@
}, },
"devDependencies": { "devDependencies": {
"@headlessui/react": "^2.2.4", "@headlessui/react": "^2.2.4",
"@inertiajs/react": "^2.0.11", "@inertiajs/react": "^2.0.12",
"@tailwindcss/forms": "^0.5.10", "@tailwindcss/forms": "^0.5.10",
"@vitejs/plugin-react": "^4.5.0", "@vitejs/plugin-react": "^4.5.2",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.21",
"axios": "^1.9.0", "axios": "^1.10.0",
"concurrently": "^9.1.2", "concurrently": "^9.1.2",
"laravel-vite-plugin": "^1.2.0", "laravel-vite-plugin": "^1.3.0",
"postcss": "^8.5.3", "postcss": "^8.5.6",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
@@ -43,11 +43,11 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lucide-react": "^0.468.0", "lucide-react": "^0.468.0",
"luxon": "^3.6.1", "luxon": "^3.6.1",
"react-hook-form": "^7.56.4", "react-hook-form": "^7.58.1",
"tailwind-merge": "^2.6.0", "tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"use-double-tap": "^1.3.7", "use-double-tap": "^1.3.7",
"use-long-press": "^3.3.0", "use-long-press": "^3.3.0",
"zod": "^3.25.32" "zod": "^3.25.67"
} }
} }

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react'; import React, { useState, useMemo } from 'react';
import { Head, Link } from '@inertiajs/react'; import { Head, Link } from '@inertiajs/react';
import { Star } from 'lucide-react'; import { Star } from 'lucide-react';
@@ -13,7 +13,6 @@ import { useToast } from '@/hooks/use-toast.js';
export default function Index({ comics = [], offset = 0, auth = {} }) { export default function Index({ comics = [], offset = 0, auth = {} }) {
const url = new URL(window.location); // searchParams const url = new URL(window.location); // searchParams
const [favourites, setFavourites] = useState((auth?.user?.favourites !== null) ? auth.user.favourites : []); const [favourites, setFavourites] = useState((auth?.user?.favourites !== null) ? auth.user.favourites : []);
const { toast } = useToast(); const { toast } = useToast();