From 5d5e3ce0f83ca115f207c1899d4930f7d28bb3ae Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Sat, 7 Feb 2026 03:32:39 +0800 Subject: [PATCH 1/2] fix(agent-server): include all active users in sync --- api/agent_server.go | 8 -------- api/api_test.go | 8 ++++---- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/api/agent_server.go b/api/agent_server.go index 1339ae3..7a2ac6a 100644 --- a/api/agent_server.go +++ b/api/agent_server.go @@ -82,14 +82,6 @@ func (h *handler) listAgentUsers(c *gin.Context) { continue } - // Default behavior: only sync eligible (active, verified, non-expired) users. - if !u.EmailVerified { - continue - } - if u.ProxyUUIDExpiresAt != nil && now.After(*u.ProxyUUIDExpiresAt) { - continue - } - id := strings.TrimSpace(u.ProxyUUID) if id == "" { id = strings.TrimSpace(u.ID) diff --git a/api/api_test.go b/api/api_test.go index 2760df4..3724e6d 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -140,11 +140,11 @@ func TestAgentServerUsers_DefaultSyncIncludesSandboxAndRegularUsers(t *testing.T t.Fatalf("create sandbox user: %v", err) } - // normal user + // normal user (not verified + expired) should still be synced by default. if err := st.CreateUser(ctx, &store.User{ Name: "User", Email: "user@example.com", - EmailVerified: true, + EmailVerified: false, Role: store.RoleUser, Level: store.LevelUser, Active: true, @@ -152,12 +152,12 @@ func TestAgentServerUsers_DefaultSyncIncludesSandboxAndRegularUsers(t *testing.T t.Fatalf("create normal user: %v", err) } - // Ensure normal user has a non-expired proxy UUID. + // Ensure normal user is "expired" per proxy UUID expiry metadata. normal, err := st.GetUserByEmail(ctx, "user@example.com") if err != nil { t.Fatalf("get normal user: %v", err) } - exp := time.Now().UTC().Add(24 * time.Hour) + exp := time.Now().UTC().Add(-24 * time.Hour) normal.ProxyUUIDExpiresAt = &exp if err := st.UpdateUser(ctx, normal); err != nil { t.Fatalf("update normal user: %v", err) From 2c8ad90c9f8f94283c22bb90221ba3916797d729 Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Sat, 7 Feb 2026 03:39:36 +0800 Subject: [PATCH 2/2] updatev .gitignore --- .gitignore | 1 + accountsvc.log | 70 -------------------------------------------------- 2 files changed, 1 insertion(+), 70 deletions(-) delete mode 100644 accountsvc.log diff --git a/.gitignore b/.gitignore index 3e1c449..b02346c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .env +accountsvc.log account.log models/ pg_jieba/ diff --git a/accountsvc.log b/accountsvc.log deleted file mode 100644 index db251b3..0000000 --- a/accountsvc.log +++ /dev/null @@ -1,70 +0,0 @@ -[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - - using env: export GIN_MODE=release - - using code: gin.SetMode(gin.ReleaseMode) - -time=2026-02-07T02:23:47.924+08:00 level=WARN msg="xray sync is disabled in configuration; agent mode will still attempt to manage xray config" -time=2026-02-07T02:23:47.924+08:00 level=INFO msg="configured cors" allowedOrigins="[http://localhost:3000 http://127.0.0.1:3000]" -time=2026-02-07T02:23:47.987+08:00 level=WARN msg="root account bootstrapped from environment variable" email=admin@svc.plus -time=2026-02-07T02:23:48.035+08:00 level=INFO msg="demo read-only user created" username=Demo email=demo@svc.plus -time=2026-02-07T02:23:48.080+08:00 level=INFO msg="sandbox experience user created" email=sandbox@svc.plus -time=2026-02-07T02:23:48.080+08:00 level=INFO msg="token service initialized" auth_enabled=true -time=2026-02-07T02:23:48.082+08:00 level=INFO msg="loaded agents from store" count=1 -[GIN-debug] GET /healthz --> account/api.RegisterRoutes.func1 (4 handlers) -[GIN-debug] POST /api/auth/register --> account/api.(*handler).register-fm (4 handlers) -[GIN-debug] POST /api/auth/register/verify --> account/api.(*handler).verifyEmail-fm (4 handlers) -[GIN-debug] POST /api/auth/register/send --> account/api.(*handler).sendEmailVerification-fm (4 handlers) -[GIN-debug] POST /api/auth/login --> account/api.(*handler).login-fm (4 handlers) -[GIN-debug] POST /api/auth/token/exchange --> account/api.(*handler).exchangeToken-fm (4 handlers) -[GIN-debug] GET /api/auth/oauth/login/:provider --> account/api.(*handler).oauthLogin-fm (4 handlers) -[GIN-debug] GET /api/auth/oauth/callback/:provider --> account/api.(*handler).oauthCallback-fm (4 handlers) -[GIN-debug] POST /api/auth/token/refresh --> account/api.(*handler).refreshToken-fm (4 handlers) -[GIN-debug] GET /api/auth/mfa/status --> account/api.(*handler).mfaStatus-fm (4 handlers) -[GIN-debug] GET /api/auth/session --> account/api.(*handler).session-fm (6 handlers) -[GIN-debug] DELETE /api/auth/session --> account/api.(*handler).deleteSession-fm (6 handlers) -[GIN-debug] POST /api/auth/mfa/totp/provision --> account/api.(*handler).provisionTOTP-fm (6 handlers) -[GIN-debug] POST /api/auth/mfa/totp/verify --> account/api.(*handler).verifyTOTP-fm (6 handlers) -[GIN-debug] POST /api/auth/mfa/disable --> account/api.(*handler).disableMFA-fm (6 handlers) -[GIN-debug] POST /api/auth/password/reset --> account/api.(*handler).requestPasswordReset-fm (6 handlers) -[GIN-debug] POST /api/auth/password/reset/confirm --> account/api.(*handler).confirmPasswordReset-fm (6 handlers) -[GIN-debug] GET /api/auth/subscriptions --> account/api.(*handler).listSubscriptions-fm (6 handlers) -[GIN-debug] POST /api/auth/subscriptions --> account/api.(*handler).upsertSubscription-fm (6 handlers) -[GIN-debug] POST /api/auth/subscriptions/cancel --> account/api.(*handler).cancelSubscription-fm (6 handlers) -[GIN-debug] POST /api/auth/config/sync --> account/api.(*handler).syncConfig-fm (6 handlers) -[GIN-debug] GET /api/auth/admin/settings --> account/api.(*handler).getAdminSettings-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/settings --> account/api.(*handler).updateAdminSettings-fm (6 handlers) -[GIN-debug] GET /api/auth/admin/users/metrics --> account/api.(*handler).adminUsersMetrics-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/users --> account/api.(*handler).createCustomUser-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/users/:userId/role --> account/api.(*handler).updateUserRole-fm (6 handlers) -[GIN-debug] DELETE /api/auth/admin/users/:userId/role --> account/api.(*handler).resetUserRole-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/users/:userId/pause --> account/api.(*handler).pauseUser-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/users/:userId/resume --> account/api.(*handler).resumeUser-fm (6 handlers) -[GIN-debug] DELETE /api/auth/admin/users/:userId --> account/api.(*handler).deleteUser-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/users/:userId/renew-uuid --> account/api.(*handler).renewProxyUUID-fm (6 handlers) -[GIN-debug] GET /api/auth/admin/blacklist --> account/api.(*handler).listBlacklist-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/blacklist --> account/api.(*handler).addToBlacklist-fm (6 handlers) -[GIN-debug] DELETE /api/auth/admin/blacklist/:email --> account/api.(*handler).removeFromBlacklist-fm (6 handlers) -[GIN-debug] GET /api/auth/admin/sandbox/binding --> account/api.(*handler).getSandboxBinding-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/sandbox/bind --> account/api.(*handler).bindSandboxNode-fm (6 handlers) -[GIN-debug] GET /api/auth/sandbox/binding --> account/api.(*handler).getSandboxBindingPublic-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/assume --> account/api.(*handler).adminAssume-fm (6 handlers) -[GIN-debug] POST /api/auth/admin/assume/revert --> account/api.(*handler).adminAssumeRevert-fm (6 handlers) -[GIN-debug] GET /api/auth/admin/assume/status --> account/api.(*handler).adminAssumeStatus-fm (6 handlers) -[GIN-debug] GET /api/auth/users --> account/api.(*handler).listUsers-fm (6 handlers) -[GIN-debug] GET /api/internal/public-overview --> account/api.(*handler).internalPublicOverview-fm (5 handlers) -[GIN-debug] GET /api/admin/users/metrics --> account/api.(*handler).adminUsersMetrics-fm (6 handlers) -[GIN-debug] GET /api/admin/agents/status --> account/api.(*handler).adminAgentStatus-fm (6 handlers) -[GIN-debug] POST /api/admin/users --> account/api.(*handler).createCustomUser-fm (6 handlers) -[GIN-debug] POST /api/admin/users/:userId/pause --> account/api.(*handler).pauseUser-fm (6 handlers) -[GIN-debug] POST /api/admin/users/:userId/resume --> account/api.(*handler).resumeUser-fm (6 handlers) -[GIN-debug] DELETE /api/admin/users/:userId --> account/api.(*handler).deleteUser-fm (6 handlers) -[GIN-debug] POST /api/admin/users/:userId/renew-uuid --> account/api.(*handler).renewProxyUUID-fm (6 handlers) -[GIN-debug] GET /api/admin/blacklist --> account/api.(*handler).listBlacklist-fm (6 handlers) -[GIN-debug] POST /api/admin/blacklist --> account/api.(*handler).addToBlacklist-fm (6 handlers) -[GIN-debug] DELETE /api/admin/blacklist/:email --> account/api.(*handler).removeFromBlacklist-fm (6 handlers) -[GIN-debug] GET /api/admin/sandbox/binding --> account/api.(*handler).getSandboxBinding-fm (6 handlers) -[GIN-debug] POST /api/admin/sandbox/bind --> account/api.(*handler).bindSandboxNode-fm (6 handlers) -[GIN-debug] GET /api/agent-server/v1/nodes --> account/api.(*handler).listAgentNodes-fm (4 handlers) -[GIN-debug] GET /api/agent-server/v1/users --> account/api.(*handler).listAgentUsers-fm (4 handlers) -[GIN-debug] POST /api/agent-server/v1/status --> account/api.(*handler).reportAgentStatus-fm (4 handlers) -[GIN-debug] GET /api/agent/nodes --> account/api.(*handler).listAgentNodes-fm (4 handlers) -time=2026-02-07T02:23:48.082+08:00 level=INFO msg="starting account service" addr=127.0.0.1:8080 tls=false