Commit Graph

436 Commits

Author SHA1 Message Date
xboard
ac08199580 fix: fix Redis RDB snapshot permission error 2025-07-15 23:09:38 +08:00
xboard
ba2f305f33 fix: theme switch service 2025-07-15 20:50:04 +08:00
Xboard
acf05c6107 Merge pull request #558 from Hei-XiaoHu/update-memory-limit
Increase Horizon memory_limit to prevent container memory exhaustion
2025-07-15 03:23:55 +08:00
xboard
d30e9cb30b chore: code style and type declaration improvements 2025-07-15 02:55:58 +08:00
xboard
b55a56d6a7 feat: improve traffic reset precision and admin features
- Increase traffic reset granularity to seconds
- Add next reset time display in admin pane
2025-07-15 02:18:33 +08:00
xboard
706ba5a7a9 feat: support theme update and various improvements
- Add support for updating themes if a newer version is uploaded
- Hide config button for plugins without configuration items
- Auto refresh theme cache after panel update
- Fix issue where user used traffic cannot be set as a decimal
- Fix subscription issue for shadowrocket in v2board theme
2025-07-15 01:26:14 +08:00
xboard
f6cf6706c7 fix(admin): handle null rate_time_ranges when editing server nodes to prevent 500 error 2025-07-14 10:19:08 +08:00
xboard
0311a93252 fix(i18n): correct traffic unit display for gift card template rewards 2025-07-14 00:39:54 +08:00
xboard
a838a43ae5 feat: multiple improvements and bug fixes
- Add gift card redemption feature
- Resolve custom range selection issue in overview
- Allow log page size to be modified
- Add subscription path change notification
- Improve dynamic node rate feature
- Support markdown documentation display for plugins
- Reduce power reset service logging
- Fix backend version number not updating after update
2025-07-14 00:33:04 +08:00
xboard
a01b94f131 fix(register): handle invalid invite code gracefully
Fix an issue where entering a non-existent invite code during registration would result in an unclear HTTP code 0 error. Now, the system properly validates the invite code and returns a clear error response if the code does not exist.
2025-07-13 21:19:33 +08:00
xboard
18de0e8a43 feat: add plugin update support + fix bugs 2025-07-13 08:53:00 +08:00
xboard
328461b093 fix(plugin): auto-remove plugin record if class file is missing 2025-07-12 21:54:12 +08:00
xboard
1bb1e032d6 remove redundant and unused payment methods 2025-07-12 03:43:39 +08:00
xboard
97788e3c8f feat: Add client.subscribe.servers hook for plugin-based server extension
- Add HookManager::filter('client.subscribe.servers') hook in ClientController::subscribe()
- Allow plugins to inject custom servers into subscription responses
- Update protocol classes to support extended server configurations
- Enable dynamic server list modification before protocol processing
2025-07-11 21:19:23 +08:00
xboard
1e59bc8ca1 fix(subscribe): Disable anytls protocol for Stash client 2025-07-11 08:48:02 +08:00
xboard
59263da76e feat: update plugin/config api 2025-07-09 18:07:38 +08:00
xboard
103b5ddbd6 fix: Subscription filter not working when using types=all parameter 2025-07-07 03:14:21 +08:00
xboard
d799c8df8b Fix: Handle raw DB expressions in user filter
A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.Fix: Handle raw DB expressions in user filter

A TypeError occurred when filtering the user list by the `total_used` computed attribute. The `applyQueryCondition` method expected a string for the field name, but received an `Illuminate\Database\Query\Expression` object from `DB::raw`.

This commit updates the `buildFilterQuery` method to check if the query field is an `Expression` instance. If so, it now uses `whereRaw` to apply the filter, preventing the type error and enabling filtering on computed fields. For standard string fields, it continues to use the original `applyQueryCondition` logic.
2025-07-05 12:35:12 +08:00
xboard
a3c4cb1aea fix(setting): Resolve admin_setting helper incompatibility with Octane
Updated the `admin_setting` and `admin_settings_batch` helpers to retrieve the `Setting` instance from the service container. This fixes a fatal error and ensures correct behavior in a Laravel Octane environment by preventing the use of stale, shared static instances.
2025-07-04 22:16:19 +08:00
Xiaohu Hei
fc8caee0c3 Increase Horizon memory_limit configuration from 32MB to 64MB to support higher workload 2025-07-02 02:12:47 +08:00
xboard
05afe870e7 feat: add tags to plans, refactor order service, adn fix ticket lock 2025-07-01 11:14:18 +08:00
xboard
349c1710fe feat: add PostgreSQL support and refactor database configuration in install command 2025-07-01 03:09:53 +08:00
xboard
690832e3eb feat: add socks protocol support for shadowrocket client 2025-07-01 00:49:55 +08:00
xboard
5b295dbec3 feat: plugin controller config system with guest_comm_config hook integration
- Add HasPluginConfig trait and PluginController base class
- Integrate guest_comm_config hook in CommController for plugin frontend config injection
- Add user creation functionality to UserService and fix null value handling
- Enhance AbstractPlugin.getConfig() with key parameter support
- Multiple service layer optimizations and architecture improvements
2025-06-29 01:42:48 +08:00
xboard
b96700ab30 docs: update issue template 2025-06-28 18:16:10 +08:00
xboard
6d85736eea eat: add reCAPTCHA v3 and Cloudflare Turnstile verification support
- Implement reCAPTCHA v3 with score-based validation
- Add Cloudflare Turnstile as captcha alternative
- Create reusable CaptchaService for unified validation
- Support switching between recaptcha, recaptcha-v3, and turnstile
- Maintain backward compatibility with existing configurations
2025-06-28 18:01:59 +08:00
xboard
f1d1dd5684 docs: update docs 2025-06-28 15:54:44 +08:00
xboard
f974a8c846 fix: admin export subscription link issue 2025-06-24 22:55:34 +08:00
xboard
1dcd2fcdf6 remove: disable traffic package stacking feature 2025-06-24 02:00:12 +08:00
xboard
eff2b1f8ba feat(admin): enhance i18n support
Fix system monitor button i18n syntax, complete coupon form i18n
2025-06-23 11:55:17 +08:00
xboard
7efc16990e feat(admin): optimize user traffic management features
- Improve traffic reset dialog interactions
- Enhance traffic reset logs display
2025-06-22 18:04:29 +08:00
xboard
44d92ac1c6 fix: resolve known issues and improve code standards
- Fix known bugs in user, plan, and server modules
- Standardize code formatting and structure
- Optimize database queries and model relationships
- Improve request validation and error handling
- Update admin controllers for better consistency
2025-06-22 17:38:17 +08:00
Xboard
733cc7e9a5 Update README.md 2025-06-22 01:22:04 +08:00
xboard
4fe2f35183 feat: enhance plan validation, traffic system and email verification
- feat: add plan price validation
- feat: make traffic packages stackable
- feat: add commission and invite info to admin order details
- feat: apply email whitelist to verification code API
- fix: subscription link copy compatibility for non-HTTPS
- fix: resolve route editing 500 error in certain cases
- refactor: restructure traffic reset logic
2025-06-22 01:18:38 +08:00
Xboard
7bab761db6 Merge pull request #427 from OfficialKatana/patch-1
更换可用的DoH服务器
2025-06-22 00:05:52 +08:00
xboard
d7fb26d527 fix: getSystemStatus api 2025-06-21 16:01:51 +08:00
xboard
42258626b0 feat: enhance plan user statistics with active user count display 2025-06-21 13:20:57 +08:00
xboard
272dbd2107 feat: optimize settings management and admin functionality
- Add system log cleanup functionality with batch processing
- Optimize v2_settings table performance by unifying value storage
- Add comprehensive client support list for one-click subscription
- Fix QR code subscription links for specific node types
- Fix route addition issues in admin management panel
- Enhance admin system controller with log management APIs
2025-06-21 12:11:27 +08:00
xboard
895a870dfc fix(admin): fix shadowsocks plugin issue - save empty string instead of 'none' when plugin is set to none 2025-05-25 08:43:00 +08:00
xboard
6332d96131 fix(clash-meta): support custom SNI configuration for anytls protocol 2025-05-25 00:20:13 +08:00
xboard
c90e3d6424 fix(admin): optimize mail encryption selector and null value handling 2025-05-24 22:58:46 +08:00
xboard
fadeacf6f8 refactor: comment out update-check routes and refactor findUserByBearerToken, calcResetDayByMonthFirstDay, calcResetDayByExpireDay 2025-05-24 20:47:27 +08:00
xboard
7c86193215 fix: add missing files from previous commit 2025-05-24 20:19:54 +08:00
xboard
4e84cbd953 refactor: optimize mail reminder system - fix memory overflow, improve performance 20-30x, streamline code 2025-05-24 20:08:21 +08:00
Xboard
38f640c6d9 Update composer.json 2025-05-24 18:11:11 +08:00
xboard
78fc0ada98 feat: upgrade Laravel framework from 11.x to 12.15.0 with enhanced dependencies and performance optimizations 2025-05-24 16:28:49 +08:00
Xboard
2ad71017f9 Update 1panel.md 2025-05-24 14:17:22 +08:00
xboard
05f94aeadb fix: restrict anytls delivery to compatible stash client versions 2025-05-24 14:13:44 +08:00
xboard
fdb5b222b9 refactor: use request attributes instead of merge for middleware data transfer
- Replace request->merge() with request->attributes->set() in Server middleware to avoid polluting user input
- Add getNodeInfo() helper method in UniProxyController for cleaner node info access
- Update all node_info references to use the new attribute-based approach
2025-05-24 13:54:57 +08:00
xboard
bf3a9112f2 fix: improve node filtering by client base_version, set subscription content-type, and add hop_interval support for hysteria2
- Refactor node filtering logic to correctly handle client base_version requirements.
- Set appropriate Content-Type header for subscription responses.
- Add support for hop_interval configuration in hysteria2 node delivery.
2025-05-24 13:45:32 +08:00