Commit graph

13276 commits

Author SHA1 Message Date
Andras Bacsai
ae9f348458 rate limit test 2025-10-28 15:18:28 +01:00
Andras Bacsai
6d6f3e9de7
Merge pull request #6944 from coollabsio/dependabot/npm_and_yarn/vite-6.4.1
build(deps-dev): bump vite from 6.3.6 to 6.4.1
2025-10-28 12:48:33 +01:00
Andras Bacsai
65c2b917db
Merge pull request #7039 from coollabsio/andrasbacsai/fix-login-rate-limit-bypass
fix: prevent login rate limit bypass via spoofed headers
2025-10-28 12:16:34 +01:00
Andras Bacsai
65e5b2ecdb fix: correct login rate limiter key format to include IP address 2025-10-28 10:32:19 +01:00
Andras Bacsai
20ac018620
Merge pull request #6979 from ShadowArcanist/shadow/-appwrite-healthchecks
feat(service): appwrite added healthchecks
2025-10-28 10:31:05 +01:00
Andras Bacsai
28e343d458
Merge pull request #7016 from majcek210/patch-3
Update & rename the pterodactly template
2025-10-28 10:30:51 +01:00
Andras Bacsai
81529e9274
Merge pull request #6976 from majcek210/v4.x
Fix and update the "pterodactly with wings" template.
2025-10-28 10:30:34 +01:00
Andras Bacsai
4df3134cec
Merge pull request #6973 from ShadowArcanist/patch-9
fix(service): seafile cannot upload files due to network errors
2025-10-28 10:30:07 +01:00
Andras Bacsai
342abc967c
Merge pull request #6971 from lamongabriel/plane
Update Plane version to v1.0.0
2025-10-28 10:29:47 +01:00
Andras Bacsai
0fdfc18440
Merge pull request #6530 from yipfram/fix/evolution-api-slogan
feat: update Evolution API slogan to better reflect its capabilities
2025-10-28 10:29:07 +01:00
Andras Bacsai
f300ba0118 fix: prevent login rate limit bypass via spoofed headers
The login and forgot-password rate limiters were vulnerable to bypass
by manipulating the X-Forwarded-For header. Attackers could rotate
this header value to circumvent the 5 attempts per minute limit.

Changed both rate limiters to use server('REMOTE_ADDR') instead of
ip() to prevent header spoofing. REMOTE_ADDR gives the actual
connecting IP before proxy headers are processed.

Also added comprehensive unit tests to verify the fix.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 09:47:13 +01:00
Andras Bacsai
4c29e8ceb3
Merge pull request #7012 from coollabsio/andrasbacsai/debian-13-docker-support
Add repository-based Docker installation fallbacks for Debian 13 and other major distros
2025-10-28 09:35:24 +01:00
Andras Bacsai
84b0ec1e94
Update app/Actions/Server/InstallDocker.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-28 09:31:32 +01:00
Andras Bacsai
221ed6283d
Delete funding.json 2025-10-28 08:41:38 +01:00
Andras Bacsai
0f59672942
Merge pull request #7038 from coollabsio/andrasbacsai/add-funding-json
feat: add funding.json for standardized funding information
2025-10-28 08:23:40 +01:00
Andras Bacsai
86fe583247
Merge pull request #7021 from coollabsio/andrasbacsai/fix-oauth-client-id-error
UI/UX improvements
2025-10-28 08:22:39 +01:00
Andras Bacsai
08ddc914d5 feat: add funding information for Coollabs including sponsorship plans and channels 2025-10-28 08:22:17 +01:00
Andras Bacsai
b1a68df65c fix: add null checks and validation to OAuth bulk update method
- Add null check before updating OAuth settings to prevent calling methods on null
- Apply couldBeEnabled() validation for all settings in bulk update (not just instant save)
- Disable OAuth providers that fail validation and collect error messages
- Surface all validation errors to the user instead of silently failing
- Update oauth_settings_map with fresh data after saving each setting

This ensures bulk updates follow the same validation logic as instant-save paths
and prevents bypassing model validation by directly calling update.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 17:04:33 +01:00
Andras Bacsai
8a3dc19d19 Update app/Livewire/SettingsOauth.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-27 17:03:19 +01:00
Andras Bacsai
f0db097a90 fix: clean up formatting and remove unnecessary key binding in stack form component 2025-10-27 17:03:19 +01:00
Andras Bacsai
974a8bdf64 fix: add wire:ignore directive to modal component for improved functionality 2025-10-27 17:03:19 +01:00
Andras Bacsai
28fc3feab0 fix: remove wire:ignore from modal and add wire:key to EditCompose component
- Remove wire:ignore from modal-input.blade.php wrapper to allow child Livewire components to be properly tracked
- Add unique wire:key to EditCompose component for proper identification when teleported
- Fixes 'Unable to call component method' error when saving compose files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 17:03:19 +01:00
Andras Bacsai
1ab4b9aa31 refactor: simplify project data retrieval and enhance OAuth settings handling 2025-10-27 17:03:19 +01:00
Andras Bacsai
385af3143b fix: optimize caching in Dockerfile and GitHub Actions workflow 2025-10-27 16:59:41 +01:00
Andras Bacsai
cc070f2ee6 refactor: streamline Docker build process with matrix strategy for multi-architecture support 2025-10-27 16:51:42 +01:00
Andras Bacsai
a3a5694d10
Merge pull request #7029 from coollabsio/andrasbacsai/fix-mongodb-public-proto
fix(database): prevent malformed URLs when server IP is empty
2025-10-27 16:14:48 +01:00
Andras Bacsai
7ca3ce59fd
Merge pull request #7032 from coollabsio/andrasbacsai/update-sponsor-dade2
Update sponsor link from Darweb to Dade2
2025-10-27 16:04:56 +01:00
Andras Bacsai
c724654a0d fix: update sponsor link from Darweb to Dade2 in README 2025-10-27 16:02:05 +01:00
Andras Bacsai
dd002ba85d
Merge pull request #7015 from zackify/feature/fix-booleans
Fix api call booleans not being respected
2025-10-27 15:57:32 +01:00
Andras Bacsai
2265570964
Merge pull request #7030 from coollabsio/andrasbacsai/compose-editor-empty
Fix: Monaco editor empty for docker compose applications
2025-10-27 12:51:06 +01:00
Andras Bacsai
261dc39f02 fix: Monaco editor empty for docker compose applications
This commit fixes two related issues preventing the Monaco editor from displaying Docker Compose file content:

1. Data Sync Issue:
   - After loadComposeFile() fetches the compose content from Git and updates the database model, the Livewire component properties were never synced
   - Monaco editor binds to component properties via wire:model, so it remained empty
   - Fixed by calling syncFromModel() after refresh() in loadComposeFile() method

2. Script Duplication Issue:
   - Multiple Monaco editors on the same page (compose files, dockerfile, labels) caused race condition
   - Each instance tried to inject the Monaco loader script simultaneously
   - Resulted in "SyntaxError: Identifier '_amdLoaderGlobal' has already been declared"
   - Fixed by adding a global flag to prevent duplicate script injection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 12:48:20 +01:00
Andras Bacsai
4cc668253e fix(database): prevent malformed URLs when server IP is empty
Add defensive null/empty checks in externalDbUrl() for all standalone database models to prevent "invalid proto:" errors when server IP is not available.

**Problem:**
When `$this->destination->server->getIp` returns null or empty string, database URLs become malformed (e.g., `mongodb://user:pass@:27017` with empty host), causing "invalid proto:" validation errors.

**Solution:**
Added early return with null check in externalDbUrl() method for all 8 database types:
- Check if server IP is empty before building URL
- Return null instead of generating malformed URL
- Maintains graceful degradation - UI handles null URLs appropriately

**Defense in Depth:**
While mount() guard (from commit 74c70b431) prevents most cases, this adds an additional safety layer for edge cases:
- Race conditions during server updates
- State changes between mount and URL access
- Direct model access bypassing Livewire lifecycle

**Affected Models:**
- StandaloneMongodb
- StandalonePostgresql
- StandaloneMysql
- StandaloneMariadb
- StandaloneClickhouse
- StandaloneRedis
- StandaloneKeydb
- StandaloneDragonfly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 11:46:24 +01:00
Andras Bacsai
4d8d258b83
Merge pull request #7018 from Cinzya/hotfix/serverpatch-notification-url
fix: server URL generation in ServerPatchCheck notification
2025-10-27 11:44:50 +01:00
majcek210
26a5ab78f2
Merge branch 'next' into patch-3 2025-10-27 11:22:35 +01:00
Andras Bacsai
53ef6ddfc6
Merge pull request #7028 from coollabsio/andrasbacsai/belgrade-v3
feat: add dynamic viewport-based height for compose editor
2025-10-27 11:21:35 +01:00
Andras Bacsai
12766695c4 feat: add dynamic viewport-based height for compose editor
- Add Alpine.js reactive height calculation based on viewport size
- Monaco editor now responds to window resize events
- Fix Livewire component structure by moving style tag inside root div
- Update CLAUDE.md to document critical single root element requirement
- Set minimum editor height of 300px with responsive maximum
- Use CSS custom properties to pass calculated height to components
2025-10-27 11:18:25 +01:00
majcek210
26b543810e
Merge branch 'next' into patch-3 2025-10-27 11:18:02 +01:00
Cinzya
35b104477a test: fix ServerPatchCheckNotification tests to avoid global state pollution
Moved ServerPatchCheckNotificationTest from Unit to Feature tests and replaced
Mockery alias mocking with real database records to prevent global state pollution.

The original implementation used Mockery::mock('alias:InstanceSettings::class)
which creates a global class alias that persists across all tests, causing
other tests to fail when they try to use the real InstanceSettings model.

Changes:
- Moved test from tests/Unit/ to tests/Feature/ (requires database access)
- Replaced Mockery alias mocking with RefreshDatabase and real InstanceSettings records
- Tests now create actual InstanceSettings records in the test database
- Preserved Server mocking with Mockery for non-database dependencies

All 4 tests pass individually and when run via php artisan test without
polluting global state or affecting other tests.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 21:54:55 +01:00
Cinzya
bceef418c8 refactor: remove staging URL logic from ServerPatchCheck constructor 2025-10-26 21:52:51 +01:00
Andras Bacsai
8458ad0283
Merge pull request #7013 from ShadowArcanist/patch-10
fix(service): Wireguard vpn is on wrong category
2025-10-26 20:59:11 +01:00
majcek210
8e75b47829
Update & rename the pterodactly template
Removed the wings service from the template only leaving the panel as the panel + wings are deployed in the "pterodacly with wings" template. Renamed the template from pterodactly > pterodactly panel for better understanding
2025-10-26 19:26:55 +01:00
Zach Silveira
b72f93faab fix api call booleans not being used 2025-10-26 11:25:44 -04:00
ShadowArcanist
7d4d621237
Changed Wireguard one click service template category to vpn 2025-10-26 18:05:22 +05:30
Andras Bacsai
fc49b9284a Add repository-based Docker installation fallbacks for all major Linux distros
This commit adds official Docker repository installation methods as fallbacks
when Rancher and get.docker.com convenience scripts fail, providing more
reliable Docker installation across all supported operating systems.

Changes:
- Add apt repository fallback for Debian-based systems (Ubuntu, Debian, Raspbian)
  - Fixes installation on Debian 13 (Trixie) where get.docker.com fails
  - Uses VERSION_CODENAME for automatic OS version detection
- Add dnf repository fallback for RHEL-based systems (CentOS, Fedora, Rocky, AlmaLinux)
- Add zypper repository fallback for SUSE-based systems (SLES, OpenSUSE)
- Refactor installation methods into dedicated private methods for better maintainability

Installation fallback chain:
1. Rancher install-docker script (preserves version pinning)
2. Docker get.docker.com convenience script
3. Official repository method (new, most reliable)

Benefits:
- Future-proof: Works with new OS releases automatically
- Production-ready: Uses Docker's recommended installation method
- Comprehensive: Covers 95%+ of Linux servers in production
- Maintainable: Clean code structure with single-responsibility methods

Fixes issue where Debian 13 (Trixie) servers fail validation because
get.docker.com script incorrectly uses numeric version "13" instead of
codename "trixie" in repository URLs.
2025-10-26 12:41:50 +01:00
Cinzya
c4bfbad8e7 Merge branch 'next' into hotfix/serverpatch-notification-url 2025-10-26 12:38:26 +01:00
Andras Bacsai
70024f0ca4
Merge pull request #6984 from Cinzya/feature/fix-allowedall-check
fix(settings): prevent false positives in allowed IPs validation
2025-10-26 11:00:15 +01:00
Andras Bacsai
1c33d131c7 fix: clarify warning message for allowed IPs configuration 2025-10-26 10:59:28 +01:00
Andras Bacsai
6e74317cb5 refactor: streamline allowed IPs validation and enhance UI warnings for API access 2025-10-26 10:57:24 +01:00
Andras Bacsai
f5b513fdbe
Merge pull request #7005 from coollabsio/fix-github-source-appid-null
fix: GitHub source creation and configuration issues
2025-10-26 09:54:48 +01:00
Andras Bacsai
3b9eb42eaf fix: use x-cloak instead of inline style to prevent FOUC
Replaced inline style="display: none;" with x-cloak attribute on the
warning callout to properly prevent flash of unstyled content before
Alpine.js initializes. Alpine 3+ automatically handles x-cloak styling.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 09:31:22 +01:00