From bb802e765c651e78f585db55cda0ec487e6fa73f Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 5 May 2026 04:12:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=A8=E7=A1=AC=E7=BC=96=E7=A0=81MIME?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E6=9B=BF=E4=BB=A3mime.TypeByExtension?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Alpine镜像缺少/etc/mime.types导致TypeByExtension不可靠 - 使用getContentType函数硬编码常见Web文件MIME类型 - 不再依赖系统环境,确保所有平台行为一致 --- backend/cmd/main.go | 60 +++++-- error.txt | 420 +++++++++----------------------------------- 2 files changed, 126 insertions(+), 354 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index c77a6f8..2bceb17 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -5,7 +5,6 @@ import ( "fmt" "io/fs" "log" - "mime" "net/url" "os" "strings" @@ -225,15 +224,6 @@ func startServer() { r := gin.Default() r.MaxMultipartMemory = 32 << 20 - mime.AddExtensionType(".js", "application/javascript") - mime.AddExtensionType(".mjs", "application/javascript") - mime.AddExtensionType(".css", "text/css") - mime.AddExtensionType(".html", "text/html") - mime.AddExtensionType(".json", "application/json") - mime.AddExtensionType(".svg", "image/svg+xml") - mime.AddExtensionType(".woff", "font/woff") - mime.AddExtensionType(".woff2", "font/woff2") - r.Use(middleware.Logger()) r.Use(middleware.Recovery()) r.Use(middleware.Cors()) @@ -282,10 +272,7 @@ func setupEmbeddedFrontend(r *gin.Engine) { return } - contentType := mime.TypeByExtension(decodedPath) - if contentType == "" { - contentType = "application/octet-stream" - } + contentType := getContentType(decodedPath) c.Header("Cache-Control", "public, max-age=31536000, immutable") c.Data(200, contentType, data) @@ -303,10 +290,7 @@ func setupEmbeddedFrontend(r *gin.Engine) { decodedPath = path } if data, err := fs.ReadFile(distFS, decodedPath); err == nil { - contentType := mime.TypeByExtension(decodedPath) - if contentType == "" { - contentType = "application/octet-stream" - } + contentType := getContentType(decodedPath) c.Data(200, contentType, data) return } @@ -349,3 +333,43 @@ func getSettingString(settings map[string]interface{}, key, defaultValue string) } return defaultValue } + +func getContentType(filename string) string { + ext := strings.ToLower(filename[strings.LastIndex(filename, "."):]) + switch ext { + case ".js", ".mjs": + return "application/javascript; charset=utf-8" + case ".css": + return "text/css; charset=utf-8" + case ".html": + return "text/html; charset=utf-8" + case ".json": + return "application/json; charset=utf-8" + case ".png": + return "image/png" + case ".jpg", ".jpeg": + return "image/jpeg" + case ".gif": + return "image/gif" + case ".svg": + return "image/svg+xml" + case ".ico": + return "image/x-icon" + case ".webp": + return "image/webp" + case ".woff": + return "font/woff" + case ".woff2": + return "font/woff2" + case ".ttf": + return "font/ttf" + case ".eot": + return "application/vnd.ms-fontobject" + case ".xml": + return "application/xml" + case ".txt": + return "text/plain; charset=utf-8" + default: + return "application/octet-stream" + } +} diff --git a/error.txt b/error.txt index f5551df..9693a5e 100644 --- a/error.txt +++ b/error.txt @@ -1,341 +1,89 @@ root@super:/opt/ace/compose/verify# docker compose logs -verify-app | 2026/05/04 18:17:35 database.go:69: Using SQLite database: /app/data/verification_platform.db +verify-app | 2026/05/04 20:09:27 database.go:69: Using SQLite database: /app/data/verification_platform.db verify-app | -verify-app | 2026/05/04 18:17:35 /app/internal/database/database.go:163 -verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc000523250 -verify-app | 2026/05/04 18:17:35 database.go:164: Applications table columns: -verify-app | 2026/05/04 18:17:35 database.go:166: - id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - user_id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - name (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - description (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - icon_url (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - app_key (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - billing_type (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - login_policy (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - encrypt_type (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - encrypt_key (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - bind_type (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - max_devices (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - change_limit (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - change_interval (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - change_exceed_action (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - change_deduct_amount (REAL) -verify-app | 2026/05/04 18:17:35 database.go:166: - multi_open_mode (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - max_instances (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - enable_trial (numeric) -verify-app | 2026/05/04 18:17:35 database.go:166: - trial_balance (REAL) -verify-app | 2026/05/04 18:17:35 database.go:166: - trial_days (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - enable_free_period (numeric) -verify-app | 2026/05/04 18:17:35 database.go:166: - free_period_type (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - free_period_start (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - free_period_end (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - free_period_weekdays (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - free_period_start_time (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - free_period_end_time (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - heartbeat_interval (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - heartbeat_timeout (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - max_attempts (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - lock_duration (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - status (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - deduction_mode (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - deduction_type (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - deduction_interval (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - deduction_unit (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - deduction_amount (REAL) -verify-app | 2026/05/04 18:17:35 database.go:166: - allow_register (numeric) -verify-app | 2026/05/04 18:17:35 database.go:166: - enable_login_verify (numeric) -verify-app | 2026/05/04 18:17:35 database.go:166: - enable_register_verify (numeric) -verify-app | 2026/05/04 18:17:35 database.go:166: - verify_method (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - email_config_id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - sms_config_id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - enable_password_reset (numeric) -verify-app | 2026/05/04 18:17:35 database.go:166: - password_reset_method (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:166: - password_reset_email_id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - password_reset_sms_id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:166: - created_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:166: - updated_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:166: - deleted_at (datetime) +verify-app | 2026/05/04 20:09:27 /app/internal/database/database.go:163 +verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc000035ff0 +verify-app | 2026/05/04 20:09:27 database.go:164: Applications table columns: +verify-app | 2026/05/04 20:09:27 database.go:166: - id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - user_id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - name (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - description (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - icon_url (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - app_key (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - billing_type (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - login_policy (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - encrypt_type (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - encrypt_key (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - bind_type (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - max_devices (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - change_limit (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - change_interval (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - change_exceed_action (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - change_deduct_amount (REAL) +verify-app | 2026/05/04 20:09:27 database.go:166: - multi_open_mode (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - max_instances (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - enable_trial (numeric) +verify-app | 2026/05/04 20:09:27 database.go:166: - trial_balance (REAL) +verify-app | 2026/05/04 20:09:27 database.go:166: - trial_days (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - enable_free_period (numeric) +verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_type (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_start (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_end (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_weekdays (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_start_time (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_end_time (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - heartbeat_interval (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - heartbeat_timeout (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - max_attempts (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - lock_duration (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - status (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_mode (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_type (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_interval (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_unit (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_amount (REAL) +verify-app | 2026/05/04 20:09:27 database.go:166: - allow_register (numeric) +verify-app | 2026/05/04 20:09:27 database.go:166: - enable_login_verify (numeric) +verify-app | 2026/05/04 20:09:27 database.go:166: - enable_register_verify (numeric) +verify-app | 2026/05/04 20:09:27 database.go:166: - verify_method (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - email_config_id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - sms_config_id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - enable_password_reset (numeric) +verify-app | 2026/05/04 20:09:27 database.go:166: - password_reset_method (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:166: - password_reset_email_id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - password_reset_sms_id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:166: - created_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:166: - updated_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:166: - deleted_at (datetime) verify-app | -verify-app | 2026/05/04 18:17:35 /app/internal/database/database.go:178 -verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc0000a5c40 -verify-app | 2026/05/04 18:17:35 database.go:179: AppUsers table columns: -verify-app | 2026/05/04 18:17:35 database.go:181: - id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:181: - username (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:181: - email (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:181: - password (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:181: - device_id (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:181: - avatar (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:181: - status (TEXT) -verify-app | 2026/05/04 18:17:35 database.go:181: - application_id (INTEGER) -verify-app | 2026/05/04 18:17:35 database.go:181: - balance (REAL) -verify-app | 2026/05/04 18:17:35 database.go:181: - expiry_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - last_login_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - last_heartbeat_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - is_trial_user (numeric) -verify-app | 2026/05/04 18:17:35 database.go:181: - trial_start_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - trial_end_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - created_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - updated_at (datetime) -verify-app | 2026/05/04 18:17:35 database.go:181: - deleted_at (datetime) +verify-app | 2026/05/04 20:09:27 /app/internal/database/database.go:178 +verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc000235970 +verify-app | 2026/05/04 20:09:27 database.go:179: AppUsers table columns: +verify-app | 2026/05/04 20:09:27 database.go:181: - id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:181: - username (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:181: - email (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:181: - password (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:181: - device_id (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:181: - avatar (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:181: - status (TEXT) +verify-app | 2026/05/04 20:09:27 database.go:181: - application_id (INTEGER) +verify-app | 2026/05/04 20:09:27 database.go:181: - balance (REAL) +verify-app | 2026/05/04 20:09:27 database.go:181: - expiry_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - last_login_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - last_heartbeat_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - is_trial_user (numeric) +verify-app | 2026/05/04 20:09:27 database.go:181: - trial_start_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - trial_end_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - created_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - updated_at (datetime) +verify-app | 2026/05/04 20:09:27 database.go:181: - deleted_at (datetime) verify-app | -verify-app | 2026/05/04 18:17:35 /app/internal/database/database.go:273 -verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc00061f110 -verify-app | 2026/05/04 18:17:35 database.go:418: Document data already exists, skipping initialization -verify-app | 2026/05/04 18:17:35 database.go:730: Initializing ticket data... -verify-app | 2026/05/04 18:17:35 database.go:734: No dev user found, skipping ticket initialization -verify-app | 2026/05/04 18:17:35 database.go:418: Document data already exists, skipping initialization -verify-app | 2026/05/04 18:17:35 database.go:718: Failed to connect to Redis: dial tcp [::1]:6379: connect: connection refused -verify-app | 2026/05/04 18:17:35 main.go:258: [Embed] Listing embedded files in assets/: -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/AvatarImage.vue_vue_type_script_setup_true_lang-AwtCux1q.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Badge.vue_vue_type_script_setup_true_lang-CNCteu2Y.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Button.vue_vue_type_script_setup_true_lang-BlLllVY0.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/CardContent.vue_vue_type_script_setup_true_lang-2t3ueBFv.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/CardDescription.vue_vue_type_script_setup_true_lang-wvSKV2D1.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/CardFooter.vue_vue_type_script_setup_true_lang-Bu5gpSYd.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/CardTitle.vue_vue_type_script_setup_true_lang-ChEybjGX.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Checkbox.vue_vue_type_script_setup_true_lang-BPszeqb4.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Collection-DfeE0uSh.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Command.vue_vue_type_script_setup_true_lang-CwniBVl3.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/DateTimePicker.vue_vue_type_script_setup_true_lang-r3AQlJfI.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/DialogPortal-Bn9Gjund.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/DialogTitle-QVMiDj7-.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/DialogTitle.vue_vue_type_script_setup_true_lang-DePzLTf8.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/DropdownMenuTrigger.vue_vue_type_script_setup_true_lang-Dsmekrlt.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Input.vue_vue_type_script_setup_true_lang-A6F7ctQ3.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Label.vue_vue_type_script_setup_true_lang-C5PsOurb.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/NumberFieldDecrement.vue_vue_type_script_setup_true_lang-BAK-Hri3.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/PopoverTrigger.vue_vue_type_script_setup_true_lang-BzsLoFz-.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/PopperContent-Booxl69c.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Presence-CTwhCmRr.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/RadioGroupItem.vue_vue_type_script_setup_true_lang-CgDf32VH.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/RovingFocusGroup-BaGjPci-.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/RovingFocusItem-BEWX8oC5.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/SelectContent.vue_vue_type_script_setup_true_lang-BYqXsmFr.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Separator.vue_vue_type_script_setup_true_lang-oP6Gakrn.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Switch.vue_vue_type_script_setup_true_lang-BKa-B332.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/TableHeader.vue_vue_type_script_setup_true_lang-BLNNfoFw.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Teleport-BQhbMNI4.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/Textarea.vue_vue_type_script_setup_true_lang-BnGE6NbF.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/TooltipProvider.vue_vue_type_script_setup_true_lang-DUN_T_fI.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/TooltipTrigger.vue_vue_type_script_setup_true_lang-wF74j_pN.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/VisuallyHidden-CWMqYMew.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/VisuallyHiddenInput-_ieYs7Nc.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-0eu8SYUT.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-5OkTbEdI.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-B1_ox5ja.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-B88GIrzB.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-BMtDekB_.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-CDQaESnV.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-CpVdqBly.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-DD42NWXR.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-DGYWQPQA.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-DNrgLBRJ.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-DlCRR9aY.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-Dnjqf1jp.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-eFGVomqZ.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-etCs3sod.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/_id_-gHREqXSQ.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/activity-DIQ3qDUo.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/admin-BmXVP3Wg.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/agent-BpbkQ80n.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/api-Dphx-5K-.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/applications-VA1FS_kR.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/arrow-left-BsrZIACk.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/arrow-right-CLjtUreG.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/arrow-up-_hYMNUoB.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/arrow-up-right-tEBXCY_L.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/auto-CquwA8NN.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/ban-BqLu4DZg.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/basic-page.vue_vue_type_script_setup_true_lang-C2Iz63L5.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/box-CQ-z2ati.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/boxes-DnAPlr22.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/bulk-actions.vue_vue_type_script_setup_true_lang-BjLpaF-T.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/calendar-CCK8yU_9.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/card-types-ccGJcsyB.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/check-DGF4n9et.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/chevron-left-5lBEtZrY.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/chevron-right-DbxG4jDG.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/chevrons-up-down-43hifH_H.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/circle-DpXpnJrx.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/circle-alert-RjJZS7w9.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/circle-check-big-PDxVWoWl.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/circle-x-CjB4CsbI.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/clock-BP4iPMli.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/cloud-CRV5SPEs.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/code-6usHRmLV.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/config-CtltiSGh.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/confirm-dialog.vue_vue_type_script_setup_true_lang-CGjl-v_J.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/copy-DB_HRlKj.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/country-select.vue_vue_type_script_setup_true_lang-bc5ry3w7.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-B0sqG9kr.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-BaCmJaNf.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-Bg0WTX3K.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-Bmd21MXk.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-CHAX4SLa.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-CNUI6iQw.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-CPAXxxW2.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-CTVVv31A.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-CjFEgbHT.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-DGVsp6yJ.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-DKh06boE.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-DPnY941l.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-Dc9loZax.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-Dhlblrv2.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-Dqmi63jD.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-DuSupo4Y.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-DxvMKrWv.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-bxYXug0D.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/create-vJSd7IcH.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/credit-card-BFp_X-6k.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/crown-DYumxbmN.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/database-C3hd9UAM.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/date-range-filter.vue_vue_type_script_setup_true_lang-Dm5JWskv.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/dollar-sign-3s5mQ6B6.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/download-BabT8NS7.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/edit-C_jqMbOJ.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/ellipsis-Be5NK2VA.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/eye-BXVoxpMK.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/file-0_Ppsm6i.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/file-plus-BHp60ovy.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/file-text-CfXoDNLz.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/folder-U8W4znt3.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/git-branch-DwZmTlFA.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/globe-uBUwQqGl.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/handleAndDispatchCustomEvent-ChOKVcqp.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/hard-drive-dOmHSQns.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/hash-BTviwxgw.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/iconify-BVzF0Y74.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-3PXBZiut.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-4hsuKCa7.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BI5xZS_I.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BV6kGwWy.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BbeL3Rqx.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BfXsKSU-.css -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-Bmtov9Bk.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BqAUYfr-.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BrlfUfAN.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-BuBZG3A6.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-C3UtEC7L.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-C4Xvm1u3.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-C87IbmBH.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CFnskj4E.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CLa6x-N2.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CMlK9jy_.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CMnoguab.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CpTqpQDN.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CuY7mC11.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-CxX2AQVx.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-D0dECFXe.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-D2g2EZqx.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-DAye8q2C.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-DBSfZ71o.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-DCGryKi8.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-DJAzccVh.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-DcoBCDzD.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-_0LPZbfY.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-dD0bY0_d.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-n1fFA9ee.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-qVsDJT5D.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-u_flp1M3.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/index-wgrrg61s.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/invite-DQSiHZ39.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/key-Djq0PsqX.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/layers-CNrqR6Nk.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/layout-grid-eEB5gjQt.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/link-DtRMZUEt.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/lock-YJ1jIXZ8.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/lock-open-DwagmGeE.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/log-out-C90ri4oc.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/login-B7MvvS1E.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/mail-CW_wbUad.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/megaphone-ERGzCpXD.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/message-square-CWb9ZJtb.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/minus-BY35ShZ_.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/monitor-DhMvGkMK.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/nullish-CHIgUVhi.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/pencil-DIFk4FKP.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/percent-GYYmbL3f.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/plug-CU7VBhiv.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/plus-BkOfVC7B.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/power-CW4uhMrB.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/receipt-DTMXErsm.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/recharge-42rZlWZE.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/refresh-cw-DKH-0oGP.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/register-BpIRLdoJ.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/request-9cLYCh4S.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/rotate-ccw-jodT4r2H.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/save-osZ0tNMr.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/security-Dp87CtQi.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/send-C3p92zcj.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/server-BHRHGVCz.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/settings-2-C_nhY7Wn.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/settings-B4qMjdK2.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/settings-D_voE_4b.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/shield-BCAAwYCt.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/shield-check-DGGjITlW.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/single-filter.vue_vue_type_script_setup_true_lang-Dxixj7x4.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/smartphone-Ch2MC_py.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/square-pen-C64JUWxC.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/table-columns-0w7-t3wd.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/table-pagination.vue_vue_type_script_setup_true_lang-DGmEkzsw.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/ticket-DKuKYg5D.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/tickets-DOl6qwUK.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/toggle-theme.vue_vue_type_script_setup_true_lang-CIpEKE-w.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/trash-2-BVIldtKB.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/upload-Ch5JWnMn.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/useFormControl-DwztNxnq.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/useForwardExpose-CTsRPGsM.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/useKbd-kRIii9yh.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/useLocale-Cm6lU1fj.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/useTypeahead-Dx-84tHn.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/user-Dv2Vp6ri.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/user-plus-B0b9IhWo.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/users-TTzCHqOY.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/utils-Blg70jis.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/variable-C__MpM-t.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/view-options.vue_vue_type_script_setup_true_lang-DKsjF8Mv.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/wallet-WiG-QA-X.js -verify-app | 2026/05/04 18:17:35 main.go:264: [Embed] assets/zap-ptjzNMWo.js -verify-app | 2026/05/04 18:17:35 main.go:245: Server starting on port 8080 -verify-app | 全局中间件: GET /admin/card-types -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:21 UTC] "GET /admin/card-types HTTP/1.1 200 482.281µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:21 UTC] "GET /admin/card-types HTTP/1.1 200 568.114µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:21 | 200 | 574.186µs | 103.244.89.77 | GET "/admin/card-types" -verify-app | 全局中间件: GET /assets/index-DBSfZ71o.js -verify-app | 全局中间件: GET /assets/index-BfXsKSU-.css -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:22 UTC] "GET /assets/index-DBSfZ71o.js HTTP/1.1 200 467.707189ms "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:22 UTC] "GET /assets/index-DBSfZ71o.js HTTP/1.1 200 467.896982ms "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:22 | 200 | 467.906003ms | 103.244.89.77 | GET "/assets/index-DBSfZ71o.js" -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:23 UTC] "GET /assets/index-BfXsKSU-.css HTTP/1.1 200 1.772717056s "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:23 UTC] "GET /assets/index-BfXsKSU-.css HTTP/1.1 200 1.772978804s "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:23 | 200 | 1.772997594s | 103.244.89.77 | GET "/assets/index-BfXsKSU-.css" -verify-app | 全局中间件: GET /api/install/status -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:25 UTC] "GET /api/install/status HTTP/1.1 200 523.662µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:25 UTC] "GET /api/install/status HTTP/1.1 200 661.016µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:25 | 200 | 666.915µs | 103.244.89.77 | GET "/api/install/status" -verify-app | 全局中间件: GET /logo-black.svg -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:25 UTC] "GET /logo-black.svg HTTP/1.1 200 20.46µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:25 UTC] "GET /logo-black.svg HTTP/1.1 200 94.411µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:25 | 200 | 101.292µs | 103.244.89.77 | GET "/logo-black.svg" -verify-app | 全局中间件: GET /api/v1/dev/card-types -verify-app | JWT中间件被调用: GET /api/v1/dev/card-types -verify-app | JWT中间件: 验证成功, user_id=1, role=admin -verify-app | 2026/05/04 18:18:26 cards.go:78: [DEBUG] handleGetCardTypes called: userID=1, applicationID= -verify-app | 2026/05/04 18:18:26 cards.go:122: [DEBUG] Found 1 card types -verify-app | 2026/05/04 18:18:26 cards.go:124: [DEBUG] CardType 0: ID=1, Name=天卡, ApplicationID=1 -verify-app | 2026/05/04 18:18:26 cards.go:131: [DEBUG] CardType ID=1, Name=天卡, GeneratedCount=0 -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:26 UTC] "GET /api/v1/dev/card-types HTTP/1.1 200 1.682952ms "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:26 UTC] "GET /api/v1/dev/card-types HTTP/1.1 200 1.766753ms "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:26 | 200 | 1.773265ms | 103.244.89.77 | GET "/api/v1/dev/card-types" -verify-app | 全局中间件: GET /avatars/admin.jpg -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:26 UTC] "GET /avatars/admin.jpg HTTP/1.1 200 358.859µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:26 UTC] "GET /avatars/admin.jpg HTTP/1.1 200 434.731µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:26 | 200 | 441.501µs | 103.244.89.77 | GET "/avatars/admin.jpg" -verify-app | 全局中间件: GET /api/v1/dev/applications -verify-app | JWT中间件被调用: GET /api/v1/dev/applications -verify-app | JWT中间件: 验证成功, user_id=1, role=admin -verify-app | 找到 1 个应用 -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:26 UTC] "GET /api/v1/dev/applications HTTP/1.1 200 1.350663ms "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | 103.244.89.77 - [Mon, 04 May 2026 18:18:26 UTC] "GET /api/v1/dev/applications HTTP/1.1 200 1.422305ms "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " -verify-app | [GIN] 2026/05/04 - 18:18:26 | 200 | 1.429106ms | 103.244.89.77 | GET "/api/v1/dev/applications" +verify-app | 2026/05/04 20:09:27 /app/internal/database/database.go:273 +verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc0006aa820 +verify-app | 2026/05/04 20:09:27 database.go:418: Document data already exists, skipping initialization +verify-app | 2026/05/04 20:09:27 database.go:730: Initializing ticket data... +verify-app | 2026/05/04 20:09:27 database.go:734: No dev user found, skipping ticket initialization +verify-app | 2026/05/04 20:09:27 database.go:418: Document data already exists, skipping initialization +verify-app | 2026/05/04 20:09:27 database.go:718: Failed to connect to Redis: dial tcp [::1]:6379: connect: connection refused +verify-app | 2026/05/04 20:09:27 main.go:250: Server starting on port 8080 root@super:/opt/ace/compose/verify# \ No newline at end of file