From 3cfefb4367ea2590e989d1ee55fe95870aec51dc Mon Sep 17 00:00:00 2001 From: ryan Date: Sat, 6 Jun 2026 10:26:20 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20go=20=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-agent.yml | 2 +- .github/workflows/docker-relay.yml | 2 +- .github/workflows/docker-server.yml | 4 +- .github/workflows/github-pages.yml | 60 ++--- .github/workflows/release.yml | 28 +-- .gitignore | 4 +- docker-compose.yaml | 8 +- docs/changelog/index.md | 5 + docs/deployment/agent.md | 4 +- docs/deployment/deployment.md | 8 +- docs/deployment/relay.md | 6 +- docs/deployment/server.md | 8 +- docs/design/architecture.md | 6 +- docs/design/index.md | 16 +- docs/design/pages-design.md | 2 +- docs/design/tunnel-design.md | 10 +- docs/en/deployment/agent.md | 4 +- docs/en/deployment/deployment.md | 8 +- docs/en/deployment/relay.md | 6 +- docs/en/deployment/server.md | 8 +- docs/en/design/architecture.md | 8 +- docs/en/design/development.md | 22 +- docs/en/design/repository.md | 8 +- docs/en/design/tunnel-design.md | 10 +- docs/en/guide/troubleshooting.md | 6 +- docs/en/reference/api.md | 2 +- docs/en/reference/cli.md | 22 +- docs/en/reference/configuration.md | 2 +- docs/guide/troubleshooting.md | 6 +- docs/guideline/Constraints.md | 10 +- ...0260606-replace-import-paths-evaluation.md | 147 ++++++++++++ docs/plan/handover-plan-template.md | 2 +- docs/plan/implementation-plan-template.md | 8 +- docs/reference/cli.md | 22 +- docs/reference/configuration.md | 2 +- docs/reference/index.md | 2 +- openflare_server/go.mod => go.mod | 6 +- openflare_server/go.sum => go.sum | 34 +-- .../.gitignore | 0 .../Dockerfile | 14 +- .../agent.json | 0 .../cmd/agent/main.go | 22 +- .../internal/agent/runner.go | 10 +- .../internal/agent/runner_test.go | 6 +- .../internal/config/config.go | 7 +- .../internal/config/config_test.go | 3 +- .../internal/config/duration.go | 0 .../internal/config/version.go | 0 .../internal/geoipdata/GeoLite2-Country.mmdb | Bin .../internal/geoipdata/data.go | 0 .../internal/geoipupdate/updater.go | 4 +- .../internal/geoipupdate/updater_test.go | 0 .../internal/heartbeat/service.go | 2 +- .../internal/httpclient/client.go | 2 +- .../internal/logging/logger.go | 0 .../internal/nginx/manager.go | 6 +- .../internal/nginx/manager_test.go | 2 +- .../internal/nginx/mimetypes.go | 0 .../internal/nginx/observability_assets.go | 2 +- .../internal/nginx/pow_assets.go | 3 +- .../nginx/pow_static/css/static/geist.woff2 | Bin .../pow_static/css/static/iosevka-curly.woff2 | Bin .../nginx/pow_static/css/static/podkova.css | 0 .../nginx/pow_static/css/static/podkova.woff2 | Bin .../internal/nginx/pow_static/css/xess.css | 0 .../internal/nginx/pow_static/img/happy.webp | Bin .../nginx/pow_static/img/pensive.webp | Bin .../internal/nginx/pow_static/img/reject.webp | Bin .../nginx/pow_static/js/algorithms/index.mjs | 0 .../internal/nginx/pow_static/js/main.mjs | 0 .../pow_static/js/worker/sha256-purejs.mjs | 0 .../pow_static/js/worker/sha256-webcrypto.mjs | 0 .../internal/nginx/pow_static/locales/en.json | 0 .../nginx/pow_static/locales/zh-CN.json | 0 .../internal/nginx/waf_assets.go | 2 +- .../internal/observability/collector.go | 7 +- .../internal/observability/openresty_local.go | 5 +- .../observability/openresty_local_test.go | 2 +- .../internal/observability/traffic.go | 7 +- .../internal/observability/traffic_test.go | 6 +- .../internal/protocol/agent_api.go | 0 .../internal/state/observability_buffer.go | 2 +- .../state/observability_buffer_test.go | 2 +- .../internal/state/state.go | 0 .../internal/state/state_test.go | 0 .../internal/sync/pages.go | 2 +- .../internal/sync/service.go | 9 +- .../internal/sync/service_test.go | 6 +- .../internal/updater/restart_unix.go | 0 .../internal/updater/restart_unix_test.go | 0 .../internal/updater/restart_windows.go | 0 .../internal/updater/updater.go | 7 +- .../internal/updater/updater_test.go | 5 +- .../internal/wsclient/client.go | 4 +- openflare-relay/.gitignore | 1 + openflare-relay/Dockerfile | 33 +++ .../cmd/relay/main.go | 14 +- .../internal/config/config.go | 5 +- .../internal/config/version.go | 0 .../internal/frps/manager.go | 2 +- .../internal/frps/manager_test.go | 2 +- .../internal/heartbeat/service.go | 14 +- .../internal/httpclient/client.go | 2 +- .../internal/observability/collector.go | 8 +- .../internal/relay/runner.go | 14 +- .../internal/state/store.go | 0 .../internal/updater/restart_unix.go | 0 .../internal/updater/restart_windows.go | 0 .../internal/updater/updater.go | 5 +- .../internal/wsclient/client.go | 4 +- .../.dockerignore | 0 .../.gitignore | 0 .../Dockerfile | 76 +++--- .../common/constants.go | 0 .../common/init.go | 2 +- .../common/logger.go | 0 .../common/redis.go | 0 .../common/response/response.go | 0 .../controller/access_log.go | 7 +- .../controller/acme_account.go | 4 +- .../controller/agent.go | 11 +- .../controller/auth_source.go | 11 +- .../controller/bind/bind.go | 2 +- .../controller/config_version.go | 6 +- .../controller/dashboard.go | 4 +- .../controller/database.go | 6 +- .../controller/dns_account.go | 6 +- .../controller/flared.go | 11 +- .../controller/geoip.go | 6 +- .../controller/github.go | 7 +- .../controller/managed_domain.go | 7 +- .../controller/misc.go | 17 +- .../controller/node.go | 6 +- .../controller/option.go | 15 +- .../controller/option_test.go | 0 .../controller/origin.go | 6 +- .../controller/pages.go | 6 +- .../controller/proxy_route.go | 6 +- .../controller/relay.go | 9 +- .../controller/tls_certificate.go | 6 +- .../controller/update.go | 7 +- .../controller/uptimekuma.go | 4 +- .../controller/user.go | 15 +- .../controller/waf.go | 7 +- .../controller/wechat.go | 7 +- .../docker-compose.yaml | 0 .../docs/docs.go | 0 .../docs/swagger.json | 0 .../docs/swagger.yaml | 0 .../job/cron.go | 0 .../job/ssl_renew.go | 5 +- .../job/uptimekuma.go | 5 +- .../job/waf_ip_group_sync.go | 3 +- .../main.go | 17 +- .../middleware/agent-auth.go | 4 +- .../middleware/auth.go | 6 +- .../middleware/cache.go | 0 .../middleware/cors.go | 3 +- .../middleware/jwt.go | 7 +- .../middleware/rate-limit.go | 5 +- .../middleware/relay-auth.go | 4 +- .../middleware/tunnel-auth.go | 4 +- .../model/acme_account.go | 0 .../model/apply_log.go | 0 .../model/auth_source.go | 3 +- .../model/config_version.go | 0 .../model/database_schema_version.go | 3 +- .../model/dns_account.go | 0 .../model/goose/bridge.go | 0 ...202606020001_add_node_capabilities_json.go | 0 ...e_202606030001_add_pages_static_hosting.go | 0 ...02606030002_add_pages_spa_fallback_path.go | 0 ...02606030003_drop_proxy_route_legacy_pow.go | 0 ...06040004_add_pages_features_and_cleanup.go | 0 .../model/goose/migrations.go | 0 .../model/goose/provider.go | 0 .../model/main.go | 5 +- .../model/main_test.go | 0 .../model/managed_domain.go | 0 .../model/migrate/initial.go | 0 .../model/migrate/migration.go | 0 .../model/migrate/migration_test.go | 0 .../model/migrate/v10.go | 0 .../model/migrate/v11.go | 0 .../model/migrate/v12.go | 0 .../model/migrate/v13.go | 0 .../model/migrate/v14.go | 0 .../model/migrate/v15.go | 0 .../model/migrate/v16.go | 0 .../model/migrate/v17.go | 0 .../model/migrate/v8.go | 0 .../model/migrate/v9.go | 0 .../model/migrations.go | 3 +- .../model/node.go | 0 .../model/node_access_log.go | 0 .../model/node_health_event.go | 0 .../model/node_metric_snapshot.go | 3 +- .../model/node_observation_frpc.go | 3 +- .../model/node_observation_frps.go | 3 +- .../model/node_observation_openresty.go | 3 +- .../model/node_request_report.go | 3 +- .../model/node_system_profile.go | 0 .../model/option.go | 5 +- .../model/origin.go | 0 .../model/pages.go | 0 .../model/proxy_route.go | 0 .../model/schema_migration_context.go | 2 +- .../model/sharding.go | 0 .../model/tls_certificate.go | 0 .../model/user.go | 5 +- .../model/waf.go | 0 .../router/api-router.go | 4 +- .../router/api_flared_test.go | 9 +- .../router/api_phase1_test.go | 17 +- .../router/api_phase2_managed_domain_test.go | 9 +- .../router/api_phase2_test.go | 9 +- .../router/api_uptimekuma_test.go | 7 +- .../router/main.go | 3 +- .../router/swagger_test.go | 0 .../router/update_test.go | 7 +- .../router/web-router.go | 5 +- .../router/web-router_test.go | 2 +- .../service/access_log.go | 3 +- .../service/access_log_region.go | 3 +- .../service/access_log_test.go | 3 +- .../service/agent.go | 7 +- .../service/agent_test.go | 3 +- .../service/agent_ws.go | 0 .../service/auth_source.go | 5 +- .../service/auth_source_test.go | 2 +- .../service/config_version.go | 7 +- .../service/dashboard.go | 3 +- .../service/database_maintenance.go | 5 +- .../service/database_maintenance_test.go | 5 +- .../service/flared_ws.go | 0 .../service/geoip_lookup.go | 3 +- .../service/geoip_lookup_test.go | 3 +- .../service/https_phase1_test.go | 5 +- .../service/lego_client.go | 4 +- .../service/managed_domain.go | 3 +- .../service/managed_domain_phase2_test.go | 0 .../service/node.go | 9 +- .../service/node_agent_token_cache.go | 3 +- .../service/node_agent_token_cache_test.go | 3 +- .../service/node_observability.go | 3 +- .../service/node_update_test.go | 7 +- .../service/observability.go | 3 +- .../service/observability_analytics.go | 3 +- .../service/observability_trends.go | 3 +- .../service/observability_trends_test.go | 3 +- .../service/origin.go | 3 +- .../service/origin_helpers.go | 0 .../service/origin_test.go | 2 +- .../service/pages.go | 5 +- .../service/pages_test.go | 3 +- .../service/proxy_route.go | 5 +- .../service/relay.go | 5 +- .../service/relay_test.go | 3 +- .../service/relay_ws.go | 0 .../service/tls_acme_test.go | 3 +- .../service/tls_certificate.go | 3 +- .../service/tls_certificate_helpers.go | 0 .../service/update.go | 5 +- .../service/update_restart_unix.go | 0 .../service/update_restart_unix_test.go | 0 .../service/update_restart_windows.go | 0 .../service/update_test.go | 3 +- .../service/uptimekuma.go | 7 +- .../service/waf.go | 5 +- .../service/waf_ip_group.go | 3 +- .../service/waf_test.go | 3 +- .../service/ws_hub.go | 0 .../utils/acme/client.go | 0 .../utils/embedfs/static.go | 0 .../utils/format.go | 0 .../utils/geoip/emptyProvider.go | 0 .../utils/geoip/geoip.go | 0 .../utils/geoip/geoip_test.go | 0 .../utils/geoip/geojs.go | 0 .../utils/geoip/ipapi.go | 0 .../utils/geoip/ipinfo.go | 0 .../utils/geoip/iputil/iputil.go | 0 .../utils/geoip/iputil/iputil_test.go | 0 .../utils/geoip/mmdb.go | 0 .../utils/geoip/outboundip.go | 3 +- .../utils/geoip/outboundip_test.go | 0 .../utils/mail/email.go | 0 .../utils/network.go | 0 .../utils/ratelimit/in_memory.go | 0 .../utils/render/openresty/render.go | 0 .../utils/render/openresty/render_test.go | 0 .../utils/render/openresty/types.go | 0 .../utils/security/password.go | 0 .../utils/security/random.go | 0 .../utils/security/verification.go | 0 .../utils/slice.go | 0 .../utils/string.go | 0 .../utils/uptimekuma/client.go | 0 .../utils/validation/validator.go | 0 .../utils/value.go | 0 .../utils/version.go | 0 .../utils/wsclient/client.go | 0 .../web/.eslintrc.json | 0 .../web/.gitignore | 0 .../web/README.md | 2 +- .../web/app/(dashboard)/access-log/page.tsx | 5 + .../web/app/(dashboard)/apply-log/page.tsx | 5 + .../app/(dashboard)/config-version/page.tsx | 5 + .../web/app/(dashboard)/layout.tsx | 6 +- .../web/app/(dashboard)/node/detail/page.tsx | 4 +- .../web/app/(dashboard)/node/page.tsx | 5 + .../app/(dashboard)/origin/detail/page.tsx | 4 +- .../web/app/(dashboard)/origin/page.tsx | 5 + .../web/app/(dashboard)/page.tsx | 2 +- .../web/app/(dashboard)/pages/detail/page.tsx | 4 +- .../web/app/(dashboard)/pages/page.tsx | 5 + .../web/app/(dashboard)/performance/page.tsx | 5 + .../(dashboard)/proxy-route/detail/page.tsx | 4 +- .../web/app/(dashboard)/proxy-route/page.tsx | 5 + .../web/app/(dashboard)/setting/page.tsx | 5 + .../web/app/(dashboard)/user/page.tsx | 5 + .../app/(dashboard)/waf/ip-groups/page.tsx | 2 +- .../web/app/(dashboard)/waf/page.tsx | 2 +- .../(dashboard)/website/certificate/page.tsx | 5 + .../app/(dashboard)/website/detail/page.tsx | 4 +- .../(dashboard)/website/dns-account/page.tsx | 5 + .../web/app/(dashboard)/website/page.tsx | 5 + .../web/app/(public)/about/page.tsx | 5 + .../web/app/(public)/layout.tsx | 4 +- .../web/app/(public)/login/page.tsx | 12 + .../web/app/(public)/oauth/callback/page.tsx | 12 + .../web/app/(public)/oauth/github/page.tsx | 12 + .../web/app/(public)/oauth/link/page.tsx | 5 + .../web/app/(public)/reset/page.tsx | 12 + .../web/app/(public)/user/reset/page.tsx | 12 + .../web/app/globals.css | 0 .../web/app/layout.tsx | 12 +- .../web/app/not-found.tsx | 2 +- .../web/components.json | 0 .../web/components/data/rank-chart.tsx | 4 +- .../web/components/data/trend-chart.tsx | 0 .../web/components/feedback/empty-state.tsx | 2 +- .../web/components/feedback/error-state.tsx | 0 .../feedback/feature-placeholder.tsx | 4 +- .../components/feedback/inline-message.tsx | 6 +- .../web/components/feedback/loading-state.tsx | 2 +- .../web/components/layout/dashboard-shell.tsx | 0 .../components/layout/dashboard-sidebar.tsx | 0 .../components/layout/dashboard-topbar.tsx | 0 .../web/components/layout/page-header.tsx | 2 +- .../web/components/layout/public-shell.tsx | 4 +- .../components/providers/app-providers.tsx | 0 .../components/providers/auth-provider.tsx | 0 .../components/providers/theme-provider.tsx | 0 .../web/components/ui/app-card.tsx | 0 .../web/components/ui/app-modal.tsx | 0 .../web/components/ui/drawer.tsx | 26 +- .../web/components/ui/input.tsx | 2 +- .../web/components/ui/label.tsx | 2 +- .../web/components/ui/separator.tsx | 4 +- .../web/components/ui/sonner.tsx | 0 .../web/components/ui/status-badge.tsx | 0 .../web/components/ui/switch.tsx | 0 .../web/components/ui/textarea.tsx | 0 .../web/components/ui/theme-toggle.tsx | 0 .../features/about/components/about-page.tsx | 0 .../features/access-logs/api/access-logs.ts | 0 .../components/access-logs-page.tsx | 0 .../web/features/access-logs/types.ts | 0 .../acme-accounts/api/acme-accounts.ts | 0 .../web/features/acme-accounts/types.ts | 0 .../web/features/apply-logs/api/apply-logs.ts | 0 .../apply-logs/components/apply-logs-page.tsx | 0 .../web/features/apply-logs/types.ts | 0 .../web/features/auth/api/auth.ts | 0 .../web/features/auth/api/public.ts | 6 + .../auth/components/auth-form-primitives.tsx | 0 .../auth/components/dashboard-auth-guard.tsx | 0 .../auth/components/github-oauth-callback.tsx | 16 +- .../features/auth/components/login-form.tsx | 31 +-- .../auth/components/oauth-callback.tsx | 16 +- .../components/oauth-link-existing-form.tsx | 26 +- .../password-reset-confirm-form.tsx | 19 +- .../auth/components/password-reset-flow.tsx | 6 +- .../password-reset-request-form.tsx | 24 +- .../auth/components/public-auth-guard.tsx | 10 +- .../components/public-route-placeholder.tsx | 2 +- .../config-versions/api/config-versions.ts | 0 .../cleanup-config-versions-modal.tsx | 0 .../config-version-snapshot-modal.tsx | 0 .../components/config-versions-page.tsx | 0 .../web/features/config-versions/types.ts | 0 .../web/features/dashboard/api/overview.ts | 28 +-- .../components/dashboard-overview.tsx | 0 .../dashboard/components/world-stage-map.tsx | 0 .../dashboard/components/world-stage.tsx | 0 .../features/dashboard/data/world-geo.json | 0 .../web/features/dashboard/types.ts | 0 .../features/dns-accounts/api/dns-accounts.ts | 7 +- .../components/dns-accounts-page.tsx | 42 ++-- .../web/features/dns-accounts/types.ts | 0 .../managed-domains/api/managed-domains.ts | 8 +- .../web/features/managed-domains/types.ts | 0 .../web/features/nodes/api/nodes.ts | 16 +- .../nodes/components/node-detail-page.tsx | 130 +++++----- .../nodes/components/node-editor-modal.tsx | 24 +- .../features/nodes/components/node-shared.tsx | 2 +- .../features/nodes/components/nodes-page.tsx | 62 +++-- .../nodes/components/relay-detail-page.tsx | 102 ++++---- .../nodes/components/tunnel-detail-page.tsx | 0 .../web/features/nodes/types.ts | 0 .../web/features/nodes/utils.ts | 0 .../web/features/origins/api/origins.ts | 8 +- .../origins/components/origin-detail-page.tsx | 31 ++- .../components/origin-editor-modal.tsx | 29 +-- .../origins/components/origins-page.tsx | 32 ++- .../web/features/origins/types.ts | 0 .../web/features/pages/api/pages.ts | 10 +- .../pages-deployment-upload-modal.tsx | 26 +- .../pages/components/pages-detail-page.tsx | 44 ++-- .../features/pages/components/pages-page.tsx | 19 +- .../components/pages-project-editor-modal.tsx | 31 ++- .../components/pages-project-list-item.tsx | 6 +- .../web/features/pages/schemas.ts | 2 +- .../web/features/pages/types.ts | 0 .../web/features/pages/utils.ts | 0 .../components/performance-page.tsx | 26 +- .../features/proxy-routes/api/proxy-routes.ts | 10 +- .../components/domain-list-input.tsx | 13 +- .../components/proxy-route-config-page.tsx | 99 ++++---- .../components/proxy-route-create-drawer.tsx | 49 ++-- .../components/proxy-routes-page.tsx | 48 ++-- .../web/features/proxy-routes/helpers.ts | 6 +- .../web/features/proxy-routes/types.ts | 0 .../web/features/proxy-routes/utils.ts | 0 .../web/features/settings/api/settings.ts | 26 +- .../settings/components/auth-source-modal.tsx | 0 .../settings/components/settings-page.tsx | 0 .../settings/components/uptimekuma-modal.tsx | 0 .../web/features/settings/types.ts | 0 .../components/module-page-skeleton.tsx | 10 +- .../shared/components/resource-primitives.tsx | 12 +- .../tls-certificates/api/tls-certificates.ts | 0 .../components/tls-certificates-page.tsx | 0 .../web/features/tls-certificates/types.ts | 0 .../web/features/update/api/update.ts | 0 .../components/version-upgrade-modal.tsx | 0 .../web/features/update/types.ts | 0 .../web/features/users/api/users.ts | 0 .../features/users/components/users-page.tsx | 0 .../web/features/users/types.ts | 0 .../web/features/waf/api/waf.ts | 0 .../web/features/waf/components/helpers.ts | 18 +- .../waf/components/ip-groups-page.tsx | 72 +++--- .../features/waf/components/pow-tab-panel.tsx | 14 +- .../web/features/waf/components/rule-chip.tsx | 2 +- .../waf/components/rule-entry-modal.tsx | 27 +-- .../waf/components/rule-list-section.tsx | 2 +- .../waf/components/site-apply-drawer.tsx | 0 .../web/features/waf/components/stat-card.tsx | 0 .../features/waf/components/tab-button.tsx | 0 .../web/features/waf/components/types.ts | 0 .../web/features/waf/components/waf-page.tsx | 0 .../web/features/waf/types.ts | 0 .../components/certificate-apply-modal.tsx | 0 .../components/certificate-detail-modal.tsx | 0 .../components/certificate-editor-modal.tsx | 0 .../components/certificate-import-modal.tsx | 0 .../components/website-detail-page.tsx | 0 .../components/website-editor-modal.tsx | 0 .../websites/components/websites-page.tsx | 0 .../web/features/websites/schemas.ts | 2 +- .../web/features/websites/utils.ts | 0 .../web/lib/api/auth-token.ts | 0 .../web/lib/api/client.ts | 0 .../web/lib/constants/navigation.ts | 2 +- .../web/lib/env/public-env.ts | 2 +- .../web/lib/theme/theme.ts | 0 .../web/lib/utils.ts | 0 .../web/lib/utils/cn.ts | 0 .../web/lib/utils/date.ts | 0 .../web/lib/utils/metrics.ts | 0 .../web/lib/utils/navigation.ts | 4 +- .../web/next-env.d.ts | 0 .../web/next.config.mjs | 0 .../web/package.json | 0 .../web/playwright.config.ts | 2 +- .../web/pnpm-lock.yaml | 0 .../web/postcss.config.mjs | 0 .../web/prettier.config.mjs | 0 .../web/public/favicon.ico | Bin .../web/public/logo.png | Bin .../web/public/robots.txt | 0 .../web/scripts/dev-server.mjs | 0 .../web/scripts/prepare-static-export.mjs | 4 +- .../web/store/app-shell.ts | 0 .../web/styles/tokens.css | 0 .../web/tests/e2e/.gitkeep | 0 .../web/tests/setup/vitest.setup.ts | 0 .../tests/unit/dashboard-overview.test.tsx | 0 .../tests/unit/github-oauth-callback.test.tsx | 10 +- .../web/tests/unit/metrics-utils.test.ts | 9 +- .../web/tests/unit/navigation-utils.test.ts | 4 +- .../web/tests/unit/nodes-utils.test.ts | 6 +- .../web/tests/unit/proxy-routes-page.test.tsx | 14 +- .../web/tests/unit/theme-utils.test.ts | 0 .../tests/unit/waf-ip-groups-page.test.tsx | 0 .../web/tsconfig.json | 0 .../web/types/api.ts | 0 .../web/types/auth.ts | 0 .../web/types/navigation.ts | 0 .../web/types/public-status.ts | 0 .../web/vercel.json | 0 .../web/vitest.config.ts | 0 openflare_agent/go.mod | 16 -- openflare_agent/go.sum | 22 -- openflare_relay/Dockerfile | 35 --- openflare_relay/go.mod | 75 ------ openflare_relay/go.sum | 224 ------------------ .../web/app/(dashboard)/access-log/page.tsx | 5 - .../web/app/(dashboard)/apply-log/page.tsx | 5 - .../app/(dashboard)/config-version/page.tsx | 5 - .../web/app/(dashboard)/node/page.tsx | 5 - .../web/app/(dashboard)/origin/page.tsx | 5 - .../web/app/(dashboard)/pages/page.tsx | 5 - .../web/app/(dashboard)/performance/page.tsx | 5 - .../web/app/(dashboard)/proxy-route/page.tsx | 5 - .../web/app/(dashboard)/setting/page.tsx | 5 - .../web/app/(dashboard)/user/page.tsx | 5 - .../(dashboard)/website/certificate/page.tsx | 5 - .../(dashboard)/website/dns-account/page.tsx | 5 - .../web/app/(dashboard)/website/page.tsx | 5 - .../web/app/(public)/about/page.tsx | 5 - .../web/app/(public)/login/page.tsx | 12 - .../web/app/(public)/oauth/callback/page.tsx | 12 - .../web/app/(public)/oauth/github/page.tsx | 12 - .../web/app/(public)/oauth/link/page.tsx | 5 - .../web/app/(public)/reset/page.tsx | 12 - .../web/app/(public)/user/reset/page.tsx | 12 - .../web/features/auth/api/public.ts | 6 - openflared/Dockerfile | 9 +- openflared/cmd/flared/main.go | 14 +- openflared/go.mod | 75 ------ openflared/go.sum | 224 ------------------ openflared/internal/flared/runner.go | 12 +- openflared/internal/frpc/manager.go | 4 +- openflared/internal/frpc/manager_test.go | 4 +- openflared/internal/heartbeat/service.go | 14 +- openflared/internal/httpclient/client.go | 2 +- openflared/internal/sync/service.go | 8 +- openflared/internal/updater/updater.go | 5 +- openflared/internal/wsclient/client.go | 4 +- 552 files changed, 1642 insertions(+), 2185 deletions(-) create mode 100644 docs/plan/20260606-replace-import-paths-evaluation.md rename openflare_server/go.mod => go.mod (95%) rename openflare_server/go.sum => go.sum (92%) rename {openflare_agent => openflare-agent}/.gitignore (100%) rename {openflare_agent => openflare-agent}/Dockerfile (61%) rename {openflare_agent => openflare-agent}/agent.json (100%) rename {openflare_agent => openflare-agent}/cmd/agent/main.go (83%) rename {openflare_agent => openflare-agent}/internal/agent/runner.go (98%) rename {openflare_agent => openflare-agent}/internal/agent/runner_test.go (99%) rename {openflare_agent => openflare-agent}/internal/config/config.go (98%) rename {openflare_agent => openflare-agent}/internal/config/config_test.go (99%) rename {openflare_agent => openflare-agent}/internal/config/duration.go (100%) rename {openflare_agent => openflare-agent}/internal/config/version.go (100%) rename {openflare_agent => openflare-agent}/internal/geoipdata/GeoLite2-Country.mmdb (100%) rename {openflare_agent => openflare-agent}/internal/geoipdata/data.go (100%) rename {openflare_agent => openflare-agent}/internal/geoipupdate/updater.go (92%) rename {openflare_agent => openflare-agent}/internal/geoipupdate/updater_test.go (100%) rename {openflare_agent => openflare-agent}/internal/heartbeat/service.go (92%) rename {openflare_agent => openflare-agent}/internal/httpclient/client.go (98%) rename {openflare_agent => openflare-agent}/internal/logging/logger.go (100%) rename {openflare_agent => openflare-agent}/internal/nginx/manager.go (99%) rename {openflare_agent => openflare-agent}/internal/nginx/manager_test.go (99%) rename {openflare_agent => openflare-agent}/internal/nginx/mimetypes.go (100%) rename {openflare_agent => openflare-agent}/internal/nginx/observability_assets.go (98%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_assets.go (99%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/css/static/geist.woff2 (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/css/static/iosevka-curly.woff2 (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/css/static/podkova.css (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/css/static/podkova.woff2 (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/css/xess.css (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/img/happy.webp (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/img/pensive.webp (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/img/reject.webp (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/js/algorithms/index.mjs (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/js/main.mjs (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/js/worker/sha256-purejs.mjs (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/js/worker/sha256-webcrypto.mjs (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/locales/en.json (100%) rename {openflare_agent => openflare-agent}/internal/nginx/pow_static/locales/zh-CN.json (100%) rename {openflare_agent => openflare-agent}/internal/nginx/waf_assets.go (99%) rename {openflare_agent => openflare-agent}/internal/observability/collector.go (97%) rename {openflare_agent => openflare-agent}/internal/observability/openresty_local.go (96%) rename {openflare_agent => openflare-agent}/internal/observability/openresty_local_test.go (97%) rename {openflare_agent => openflare-agent}/internal/observability/traffic.go (98%) rename {openflare_agent => openflare-agent}/internal/observability/traffic_test.go (97%) rename {openflare_agent => openflare-agent}/internal/protocol/agent_api.go (100%) rename {openflare_agent => openflare-agent}/internal/state/observability_buffer.go (99%) rename {openflare_agent => openflare-agent}/internal/state/observability_buffer_test.go (98%) rename {openflare_agent => openflare-agent}/internal/state/state.go (100%) rename {openflare_agent => openflare-agent}/internal/state/state_test.go (100%) rename {openflare_agent => openflare-agent}/internal/sync/pages.go (99%) rename {openflare_agent => openflare-agent}/internal/sync/service.go (98%) rename {openflare_agent => openflare-agent}/internal/sync/service_test.go (99%) rename {openflare_agent => openflare-agent}/internal/updater/restart_unix.go (100%) rename {openflare_agent => openflare-agent}/internal/updater/restart_unix_test.go (100%) rename {openflare_agent => openflare-agent}/internal/updater/restart_windows.go (100%) rename {openflare_agent => openflare-agent}/internal/updater/updater.go (98%) rename {openflare_agent => openflare-agent}/internal/updater/updater_test.go (98%) rename {openflare_agent => openflare-agent}/internal/wsclient/client.go (92%) create mode 100644 openflare-relay/.gitignore create mode 100644 openflare-relay/Dockerfile rename {openflare_relay => openflare-relay}/cmd/relay/main.go (81%) rename {openflare_relay => openflare-relay}/internal/config/config.go (97%) rename {openflare_relay => openflare-relay}/internal/config/version.go (100%) rename {openflare_relay => openflare-relay}/internal/frps/manager.go (99%) rename {openflare_relay => openflare-relay}/internal/frps/manager_test.go (99%) rename {openflare_relay => openflare-relay}/internal/heartbeat/service.go (85%) rename {openflare_relay => openflare-relay}/internal/httpclient/client.go (98%) rename {openflare_relay => openflare-relay}/internal/observability/collector.go (96%) rename {openflare_relay => openflare-relay}/internal/relay/runner.go (80%) rename {openflare_relay => openflare-relay}/internal/state/store.go (100%) rename {openflare_relay => openflare-relay}/internal/updater/restart_unix.go (100%) rename {openflare_relay => openflare-relay}/internal/updater/restart_windows.go (100%) rename {openflare_relay => openflare-relay}/internal/updater/updater.go (98%) rename {openflare_relay => openflare-relay}/internal/wsclient/client.go (92%) rename {openflare_server => openflare-server}/.dockerignore (100%) rename {openflare_server => openflare-server}/.gitignore (100%) rename {openflare_server => openflare-server}/Dockerfile (72%) rename {openflare_server => openflare-server}/common/constants.go (100%) rename {openflare_server => openflare-server}/common/init.go (97%) rename {openflare_server => openflare-server}/common/logger.go (100%) rename {openflare_server => openflare-server}/common/redis.go (100%) rename {openflare_server => openflare-server}/common/response/response.go (100%) rename {openflare_server => openflare-server}/controller/access_log.go (97%) rename {openflare_server => openflare-server}/controller/acme_account.go (80%) rename {openflare_server => openflare-server}/controller/agent.go (97%) rename {openflare_server => openflare-server}/controller/auth_source.go (97%) rename {openflare_server => openflare-server}/controller/bind/bind.go (94%) rename {openflare_server => openflare-server}/controller/config_version.go (95%) rename {openflare_server => openflare-server}/controller/dashboard.go (97%) rename {openflare_server => openflare-server}/controller/database.go (78%) rename {openflare_server => openflare-server}/controller/dns_account.go (94%) rename {openflare_server => openflare-server}/controller/flared.go (94%) rename {openflare_server => openflare-server}/controller/geoip.go (80%) rename {openflare_server => openflare-server}/controller/github.go (95%) rename {openflare_server => openflare-server}/controller/managed_domain.go (94%) rename {openflare_server => openflare-server}/controller/misc.go (90%) rename {openflare_server => openflare-server}/controller/node.go (97%) rename {openflare_server => openflare-server}/controller/option.go (96%) rename {openflare_server => openflare-server}/controller/option_test.go (100%) rename {openflare_server => openflare-server}/controller/origin.go (87%) rename {openflare_server => openflare-server}/controller/pages.go (94%) rename {openflare_server => openflare-server}/controller/proxy_route.go (93%) rename {openflare_server => openflare-server}/controller/relay.go (93%) rename {openflare_server => openflare-server}/controller/tls_certificate.go (97%) rename {openflare_server => openflare-server}/controller/update.go (95%) rename {openflare_server => openflare-server}/controller/uptimekuma.go (80%) rename {openflare_server => openflare-server}/controller/user.go (95%) rename {openflare_server => openflare-server}/controller/waf.go (95%) rename {openflare_server => openflare-server}/controller/wechat.go (93%) rename {openflare_server => openflare-server}/docker-compose.yaml (100%) rename {openflare_server => openflare-server}/docs/docs.go (100%) rename {openflare_server => openflare-server}/docs/swagger.json (100%) rename {openflare_server => openflare-server}/docs/swagger.yaml (100%) rename {openflare_server => openflare-server}/job/cron.go (100%) rename {openflare_server => openflare-server}/job/ssl_renew.go (90%) rename {openflare_server => openflare-server}/job/uptimekuma.go (88%) rename {openflare_server => openflare-server}/job/waf_ip_group_sync.go (79%) rename {openflare_server => openflare-server}/main.go (87%) rename {openflare_server => openflare-server}/middleware/agent-auth.go (87%) rename {openflare_server => openflare-server}/middleware/auth.go (92%) rename {openflare_server => openflare-server}/middleware/cache.go (100%) rename {openflare_server => openflare-server}/middleware/cors.go (91%) rename {openflare_server => openflare-server}/middleware/jwt.go (90%) rename {openflare_server => openflare-server}/middleware/rate-limit.go (95%) rename {openflare_server => openflare-server}/middleware/relay-auth.go (84%) rename {openflare_server => openflare-server}/middleware/tunnel-auth.go (85%) rename {openflare_server => openflare-server}/model/acme_account.go (100%) rename {openflare_server => openflare-server}/model/apply_log.go (100%) rename {openflare_server => openflare-server}/model/auth_source.go (99%) rename {openflare_server => openflare-server}/model/config_version.go (100%) rename {openflare_server => openflare-server}/model/database_schema_version.go (91%) rename {openflare_server => openflare-server}/model/dns_account.go (100%) rename {openflare_server => openflare-server}/model/goose/bridge.go (100%) rename {openflare_server => openflare-server}/model/goose/goose_202606020001_add_node_capabilities_json.go (100%) rename {openflare_server => openflare-server}/model/goose/goose_202606030001_add_pages_static_hosting.go (100%) rename {openflare_server => openflare-server}/model/goose/goose_202606030002_add_pages_spa_fallback_path.go (100%) rename {openflare_server => openflare-server}/model/goose/goose_202606030003_drop_proxy_route_legacy_pow.go (100%) rename {openflare_server => openflare-server}/model/goose/goose_202606040004_add_pages_features_and_cleanup.go (100%) rename {openflare_server => openflare-server}/model/goose/migrations.go (100%) rename {openflare_server => openflare-server}/model/goose/provider.go (100%) rename {openflare_server => openflare-server}/model/main.go (98%) rename {openflare_server => openflare-server}/model/main_test.go (100%) rename {openflare_server => openflare-server}/model/managed_domain.go (100%) rename {openflare_server => openflare-server}/model/migrate/initial.go (100%) rename {openflare_server => openflare-server}/model/migrate/migration.go (100%) rename {openflare_server => openflare-server}/model/migrate/migration_test.go (100%) rename {openflare_server => openflare-server}/model/migrate/v10.go (100%) rename {openflare_server => openflare-server}/model/migrate/v11.go (100%) rename {openflare_server => openflare-server}/model/migrate/v12.go (100%) rename {openflare_server => openflare-server}/model/migrate/v13.go (100%) rename {openflare_server => openflare-server}/model/migrate/v14.go (100%) rename {openflare_server => openflare-server}/model/migrate/v15.go (100%) rename {openflare_server => openflare-server}/model/migrate/v16.go (100%) rename {openflare_server => openflare-server}/model/migrate/v17.go (100%) rename {openflare_server => openflare-server}/model/migrate/v8.go (100%) rename {openflare_server => openflare-server}/model/migrate/v9.go (100%) rename {openflare_server => openflare-server}/model/migrations.go (99%) rename {openflare_server => openflare-server}/model/node.go (100%) rename {openflare_server => openflare-server}/model/node_access_log.go (100%) rename {openflare_server => openflare-server}/model/node_health_event.go (100%) rename {openflare_server => openflare-server}/model/node_metric_snapshot.go (98%) rename {openflare_server => openflare-server}/model/node_observation_frpc.go (96%) rename {openflare_server => openflare-server}/model/node_observation_frps.go (96%) rename {openflare_server => openflare-server}/model/node_observation_openresty.go (97%) rename {openflare_server => openflare-server}/model/node_request_report.go (98%) rename {openflare_server => openflare-server}/model/node_system_profile.go (100%) rename {openflare_server => openflare-server}/model/option.go (99%) rename {openflare_server => openflare-server}/model/origin.go (100%) rename {openflare_server => openflare-server}/model/pages.go (100%) rename {openflare_server => openflare-server}/model/proxy_route.go (100%) rename {openflare_server => openflare-server}/model/schema_migration_context.go (96%) rename {openflare_server => openflare-server}/model/sharding.go (100%) rename {openflare_server => openflare-server}/model/tls_certificate.go (100%) rename {openflare_server => openflare-server}/model/user.go (97%) rename {openflare_server => openflare-server}/model/waf.go (100%) rename {openflare_server => openflare-server}/router/api-router.go (99%) rename {openflare_server => openflare-server}/router/api_flared_test.go (96%) rename {openflare_server => openflare-server}/router/api_phase1_test.go (98%) rename {openflare_server => openflare-server}/router/api_phase2_managed_domain_test.go (97%) rename {openflare_server => openflare-server}/router/api_phase2_test.go (99%) rename {openflare_server => openflare-server}/router/api_uptimekuma_test.go (98%) rename {openflare_server => openflare-server}/router/main.go (90%) rename {openflare_server => openflare-server}/router/swagger_test.go (100%) rename {openflare_server => openflare-server}/router/update_test.go (97%) rename {openflare_server => openflare-server}/router/web-router.go (95%) rename {openflare_server => openflare-server}/router/web-router_test.go (98%) rename {openflare_server => openflare-server}/service/access_log.go (99%) rename {openflare_server => openflare-server}/service/access_log_region.go (96%) rename {openflare_server => openflare-server}/service/access_log_test.go (99%) rename {openflare_server => openflare-server}/service/agent.go (99%) rename {openflare_server => openflare-server}/service/agent_test.go (99%) rename {openflare_server => openflare-server}/service/agent_ws.go (100%) rename {openflare_server => openflare-server}/service/auth_source.go (99%) rename {openflare_server => openflare-server}/service/auth_source_test.go (96%) rename {openflare_server => openflare-server}/service/config_version.go (99%) rename {openflare_server => openflare-server}/service/dashboard.go (99%) rename {openflare_server => openflare-server}/service/database_maintenance.go (97%) rename {openflare_server => openflare-server}/service/database_maintenance_test.go (97%) rename {openflare_server => openflare-server}/service/flared_ws.go (100%) rename {openflare_server => openflare-server}/service/geoip_lookup.go (95%) rename {openflare_server => openflare-server}/service/geoip_lookup_test.go (96%) rename {openflare_server => openflare-server}/service/https_phase1_test.go (99%) rename {openflare_server => openflare-server}/service/lego_client.go (95%) rename {openflare_server => openflare-server}/service/managed_domain.go (99%) rename {openflare_server => openflare-server}/service/managed_domain_phase2_test.go (100%) rename {openflare_server => openflare-server}/service/node.go (98%) rename {openflare_server => openflare-server}/service/node_agent_token_cache.go (98%) rename {openflare_server => openflare-server}/service/node_agent_token_cache_test.go (98%) rename {openflare_server => openflare-server}/service/node_observability.go (99%) rename {openflare_server => openflare-server}/service/node_update_test.go (99%) rename {openflare_server => openflare-server}/service/observability.go (99%) rename {openflare_server => openflare-server}/service/observability_analytics.go (98%) rename {openflare_server => openflare-server}/service/observability_trends.go (99%) rename {openflare_server => openflare-server}/service/observability_trends_test.go (92%) rename {openflare_server => openflare-server}/service/origin.go (99%) rename {openflare_server => openflare-server}/service/origin_helpers.go (100%) rename {openflare_server => openflare-server}/service/origin_test.go (98%) rename {openflare_server => openflare-server}/service/pages.go (99%) rename {openflare_server => openflare-server}/service/pages_test.go (99%) rename {openflare_server => openflare-server}/service/proxy_route.go (99%) rename {openflare_server => openflare-server}/service/relay.go (99%) rename {openflare_server => openflare-server}/service/relay_test.go (99%) rename {openflare_server => openflare-server}/service/relay_ws.go (100%) rename {openflare_server => openflare-server}/service/tls_acme_test.go (99%) rename {openflare_server => openflare-server}/service/tls_certificate.go (99%) rename {openflare_server => openflare-server}/service/tls_certificate_helpers.go (100%) rename {openflare_server => openflare-server}/service/update.go (99%) rename {openflare_server => openflare-server}/service/update_restart_unix.go (100%) rename {openflare_server => openflare-server}/service/update_restart_unix_test.go (100%) rename {openflare_server => openflare-server}/service/update_restart_windows.go (100%) rename {openflare_server => openflare-server}/service/update_test.go (99%) rename {openflare_server => openflare-server}/service/uptimekuma.go (98%) rename {openflare_server => openflare-server}/service/waf.go (99%) rename {openflare_server => openflare-server}/service/waf_ip_group.go (99%) rename {openflare_server => openflare-server}/service/waf_test.go (99%) rename {openflare_server => openflare-server}/service/ws_hub.go (100%) rename {openflare_server => openflare-server}/utils/acme/client.go (100%) rename {openflare_server => openflare-server}/utils/embedfs/static.go (100%) rename {openflare_server => openflare-server}/utils/format.go (100%) rename {openflare_server => openflare-server}/utils/geoip/emptyProvider.go (100%) rename {openflare_server => openflare-server}/utils/geoip/geoip.go (100%) rename {openflare_server => openflare-server}/utils/geoip/geoip_test.go (100%) rename {openflare_server => openflare-server}/utils/geoip/geojs.go (100%) rename {openflare_server => openflare-server}/utils/geoip/ipapi.go (100%) rename {openflare_server => openflare-server}/utils/geoip/ipinfo.go (100%) rename {openflare_server => openflare-server}/utils/geoip/iputil/iputil.go (100%) rename {openflare_server => openflare-server}/utils/geoip/iputil/iputil_test.go (100%) rename {openflare_server => openflare-server}/utils/geoip/mmdb.go (100%) rename {openflare_server => openflare-server}/utils/geoip/outboundip.go (98%) rename {openflare_server => openflare-server}/utils/geoip/outboundip_test.go (100%) rename {openflare_server => openflare-server}/utils/mail/email.go (100%) rename {openflare_server => openflare-server}/utils/network.go (100%) rename {openflare_server => openflare-server}/utils/ratelimit/in_memory.go (100%) rename {openflare_server => openflare-server}/utils/render/openresty/render.go (100%) rename {openflare_server => openflare-server}/utils/render/openresty/render_test.go (100%) rename {openflare_server => openflare-server}/utils/render/openresty/types.go (100%) rename {openflare_server => openflare-server}/utils/security/password.go (100%) rename {openflare_server => openflare-server}/utils/security/random.go (100%) rename {openflare_server => openflare-server}/utils/security/verification.go (100%) rename {openflare_server => openflare-server}/utils/slice.go (100%) rename {openflare_server => openflare-server}/utils/string.go (100%) rename {openflare_server => openflare-server}/utils/uptimekuma/client.go (100%) rename {openflare_server => openflare-server}/utils/validation/validator.go (100%) rename {openflare_server => openflare-server}/utils/value.go (100%) rename {openflare_server => openflare-server}/utils/version.go (100%) rename {openflare_server => openflare-server}/utils/wsclient/client.go (100%) rename {openflare_server => openflare-server}/web/.eslintrc.json (100%) rename {openflare_server => openflare-server}/web/.gitignore (100%) rename {openflare_server => openflare-server}/web/README.md (95%) create mode 100644 openflare-server/web/app/(dashboard)/access-log/page.tsx create mode 100644 openflare-server/web/app/(dashboard)/apply-log/page.tsx create mode 100644 openflare-server/web/app/(dashboard)/config-version/page.tsx rename {openflare_server => openflare-server}/web/app/(dashboard)/layout.tsx (56%) rename {openflare_server => openflare-server}/web/app/(dashboard)/node/detail/page.tsx (57%) create mode 100644 openflare-server/web/app/(dashboard)/node/page.tsx rename {openflare_server => openflare-server}/web/app/(dashboard)/origin/detail/page.tsx (56%) create mode 100644 openflare-server/web/app/(dashboard)/origin/page.tsx rename {openflare_server => openflare-server}/web/app/(dashboard)/page.tsx (60%) rename {openflare_server => openflare-server}/web/app/(dashboard)/pages/detail/page.tsx (59%) create mode 100644 openflare-server/web/app/(dashboard)/pages/page.tsx create mode 100644 openflare-server/web/app/(dashboard)/performance/page.tsx rename {openflare_server => openflare-server}/web/app/(dashboard)/proxy-route/detail/page.tsx (64%) create mode 100644 openflare-server/web/app/(dashboard)/proxy-route/page.tsx create mode 100644 openflare-server/web/app/(dashboard)/setting/page.tsx create mode 100644 openflare-server/web/app/(dashboard)/user/page.tsx rename {openflare_server => openflare-server}/web/app/(dashboard)/waf/ip-groups/page.tsx (50%) rename {openflare_server => openflare-server}/web/app/(dashboard)/waf/page.tsx (50%) create mode 100644 openflare-server/web/app/(dashboard)/website/certificate/page.tsx rename {openflare_server => openflare-server}/web/app/(dashboard)/website/detail/page.tsx (56%) create mode 100644 openflare-server/web/app/(dashboard)/website/dns-account/page.tsx create mode 100644 openflare-server/web/app/(dashboard)/website/page.tsx create mode 100644 openflare-server/web/app/(public)/about/page.tsx rename {openflare_server => openflare-server}/web/app/(public)/layout.tsx (63%) create mode 100644 openflare-server/web/app/(public)/login/page.tsx create mode 100644 openflare-server/web/app/(public)/oauth/callback/page.tsx create mode 100644 openflare-server/web/app/(public)/oauth/github/page.tsx create mode 100644 openflare-server/web/app/(public)/oauth/link/page.tsx create mode 100644 openflare-server/web/app/(public)/reset/page.tsx create mode 100644 openflare-server/web/app/(public)/user/reset/page.tsx rename {openflare_server => openflare-server}/web/app/globals.css (100%) rename {openflare_server => openflare-server}/web/app/layout.tsx (73%) rename {openflare_server => openflare-server}/web/app/not-found.tsx (93%) rename {openflare_server => openflare-server}/web/components.json (100%) rename {openflare_server => openflare-server}/web/components/data/rank-chart.tsx (97%) rename {openflare_server => openflare-server}/web/components/data/trend-chart.tsx (100%) rename {openflare_server => openflare-server}/web/components/feedback/empty-state.tsx (94%) rename {openflare_server => openflare-server}/web/components/feedback/error-state.tsx (100%) rename {openflare_server => openflare-server}/web/components/feedback/feature-placeholder.tsx (86%) rename {openflare_server => openflare-server}/web/components/feedback/inline-message.tsx (94%) rename {openflare_server => openflare-server}/web/components/feedback/loading-state.tsx (92%) rename {openflare_server => openflare-server}/web/components/layout/dashboard-shell.tsx (100%) rename {openflare_server => openflare-server}/web/components/layout/dashboard-sidebar.tsx (100%) rename {openflare_server => openflare-server}/web/components/layout/dashboard-topbar.tsx (100%) rename {openflare_server => openflare-server}/web/components/layout/page-header.tsx (95%) rename {openflare_server => openflare-server}/web/components/layout/public-shell.tsx (94%) rename {openflare_server => openflare-server}/web/components/providers/app-providers.tsx (100%) rename {openflare_server => openflare-server}/web/components/providers/auth-provider.tsx (100%) rename {openflare_server => openflare-server}/web/components/providers/theme-provider.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/app-card.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/app-modal.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/drawer.tsx (96%) rename {openflare_server => openflare-server}/web/components/ui/input.tsx (95%) rename {openflare_server => openflare-server}/web/components/ui/label.tsx (92%) rename {openflare_server => openflare-server}/web/components/ui/separator.tsx (85%) rename {openflare_server => openflare-server}/web/components/ui/sonner.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/status-badge.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/switch.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/textarea.tsx (100%) rename {openflare_server => openflare-server}/web/components/ui/theme-toggle.tsx (100%) rename {openflare_server => openflare-server}/web/features/about/components/about-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/access-logs/api/access-logs.ts (100%) rename {openflare_server => openflare-server}/web/features/access-logs/components/access-logs-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/access-logs/types.ts (100%) rename {openflare_server => openflare-server}/web/features/acme-accounts/api/acme-accounts.ts (100%) rename {openflare_server => openflare-server}/web/features/acme-accounts/types.ts (100%) rename {openflare_server => openflare-server}/web/features/apply-logs/api/apply-logs.ts (100%) rename {openflare_server => openflare-server}/web/features/apply-logs/components/apply-logs-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/apply-logs/types.ts (100%) rename {openflare_server => openflare-server}/web/features/auth/api/auth.ts (100%) create mode 100644 openflare-server/web/features/auth/api/public.ts rename {openflare_server => openflare-server}/web/features/auth/components/auth-form-primitives.tsx (100%) rename {openflare_server => openflare-server}/web/features/auth/components/dashboard-auth-guard.tsx (100%) rename {openflare_server => openflare-server}/web/features/auth/components/github-oauth-callback.tsx (76%) rename {openflare_server => openflare-server}/web/features/auth/components/login-form.tsx (85%) rename {openflare_server => openflare-server}/web/features/auth/components/oauth-callback.tsx (88%) rename {openflare_server => openflare-server}/web/features/auth/components/oauth-link-existing-form.tsx (81%) rename {openflare_server => openflare-server}/web/features/auth/components/password-reset-confirm-form.tsx (85%) rename {openflare_server => openflare-server}/web/features/auth/components/password-reset-flow.tsx (56%) rename {openflare_server => openflare-server}/web/features/auth/components/password-reset-request-form.tsx (80%) rename {openflare_server => openflare-server}/web/features/auth/components/public-auth-guard.tsx (69%) rename {openflare_server => openflare-server}/web/features/auth/components/public-route-placeholder.tsx (87%) rename {openflare_server => openflare-server}/web/features/config-versions/api/config-versions.ts (100%) rename {openflare_server => openflare-server}/web/features/config-versions/components/cleanup-config-versions-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/config-versions/components/config-version-snapshot-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/config-versions/components/config-versions-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/config-versions/types.ts (100%) rename {openflare_server => openflare-server}/web/features/dashboard/api/overview.ts (94%) rename {openflare_server => openflare-server}/web/features/dashboard/components/dashboard-overview.tsx (100%) rename {openflare_server => openflare-server}/web/features/dashboard/components/world-stage-map.tsx (100%) rename {openflare_server => openflare-server}/web/features/dashboard/components/world-stage.tsx (100%) rename {openflare_server => openflare-server}/web/features/dashboard/data/world-geo.json (100%) rename {openflare_server => openflare-server}/web/features/dashboard/types.ts (100%) rename {openflare_server => openflare-server}/web/features/dns-accounts/api/dns-accounts.ts (81%) rename {openflare_server => openflare-server}/web/features/dns-accounts/components/dns-accounts-page.tsx (87%) rename {openflare_server => openflare-server}/web/features/dns-accounts/types.ts (100%) rename {openflare_server => openflare-server}/web/features/managed-domains/api/managed-domains.ts (86%) rename {openflare_server => openflare-server}/web/features/managed-domains/types.ts (100%) rename {openflare_server => openflare-server}/web/features/nodes/api/nodes.ts (90%) rename {openflare_server => openflare-server}/web/features/nodes/components/node-detail-page.tsx (96%) rename {openflare_server => openflare-server}/web/features/nodes/components/node-editor-modal.tsx (97%) rename {openflare_server => openflare-server}/web/features/nodes/components/node-shared.tsx (98%) rename {openflare_server => openflare-server}/web/features/nodes/components/nodes-page.tsx (93%) rename {openflare_server => openflare-server}/web/features/nodes/components/relay-detail-page.tsx (96%) rename {openflare_server => openflare-server}/web/features/nodes/components/tunnel-detail-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/nodes/types.ts (100%) rename {openflare_server => openflare-server}/web/features/nodes/utils.ts (100%) rename {openflare_server => openflare-server}/web/features/origins/api/origins.ts (81%) rename {openflare_server => openflare-server}/web/features/origins/components/origin-detail-page.tsx (88%) rename {openflare_server => openflare-server}/web/features/origins/components/origin-editor-modal.tsx (88%) rename {openflare_server => openflare-server}/web/features/origins/components/origins-page.tsx (86%) rename {openflare_server => openflare-server}/web/features/origins/types.ts (100%) rename {openflare_server => openflare-server}/web/features/pages/api/pages.ts (94%) rename {openflare_server => openflare-server}/web/features/pages/components/pages-deployment-upload-modal.tsx (94%) rename {openflare_server => openflare-server}/web/features/pages/components/pages-detail-page.tsx (88%) rename {openflare_server => openflare-server}/web/features/pages/components/pages-page.tsx (81%) rename {openflare_server => openflare-server}/web/features/pages/components/pages-project-editor-modal.tsx (93%) rename {openflare_server => openflare-server}/web/features/pages/components/pages-project-list-item.tsx (94%) rename {openflare_server => openflare-server}/web/features/pages/schemas.ts (99%) rename {openflare_server => openflare-server}/web/features/pages/types.ts (100%) rename {openflare_server => openflare-server}/web/features/pages/utils.ts (100%) rename {openflare_server => openflare-server}/web/features/performance/components/performance-page.tsx (98%) rename {openflare_server => openflare-server}/web/features/proxy-routes/api/proxy-routes.ts (88%) rename {openflare_server => openflare-server}/web/features/proxy-routes/components/domain-list-input.tsx (96%) rename {openflare_server => openflare-server}/web/features/proxy-routes/components/proxy-route-config-page.tsx (95%) rename {openflare_server => openflare-server}/web/features/proxy-routes/components/proxy-route-create-drawer.tsx (94%) rename {openflare_server => openflare-server}/web/features/proxy-routes/components/proxy-routes-page.tsx (91%) rename {openflare_server => openflare-server}/web/features/proxy-routes/helpers.ts (98%) rename {openflare_server => openflare-server}/web/features/proxy-routes/types.ts (100%) rename {openflare_server => openflare-server}/web/features/proxy-routes/utils.ts (100%) rename {openflare_server => openflare-server}/web/features/settings/api/settings.ts (89%) rename {openflare_server => openflare-server}/web/features/settings/components/auth-source-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/settings/components/settings-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/settings/components/uptimekuma-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/settings/types.ts (100%) rename {openflare_server => openflare-server}/web/features/shared/components/module-page-skeleton.tsx (78%) rename {openflare_server => openflare-server}/web/features/shared/components/resource-primitives.tsx (97%) rename {openflare_server => openflare-server}/web/features/tls-certificates/api/tls-certificates.ts (100%) rename {openflare_server => openflare-server}/web/features/tls-certificates/components/tls-certificates-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/tls-certificates/types.ts (100%) rename {openflare_server => openflare-server}/web/features/update/api/update.ts (100%) rename {openflare_server => openflare-server}/web/features/update/components/version-upgrade-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/update/types.ts (100%) rename {openflare_server => openflare-server}/web/features/users/api/users.ts (100%) rename {openflare_server => openflare-server}/web/features/users/components/users-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/users/types.ts (100%) rename {openflare_server => openflare-server}/web/features/waf/api/waf.ts (100%) rename {openflare_server => openflare-server}/web/features/waf/components/helpers.ts (95%) rename {openflare_server => openflare-server}/web/features/waf/components/ip-groups-page.tsx (95%) rename {openflare_server => openflare-server}/web/features/waf/components/pow-tab-panel.tsx (96%) rename {openflare_server => openflare-server}/web/features/waf/components/rule-chip.tsx (95%) rename {openflare_server => openflare-server}/web/features/waf/components/rule-entry-modal.tsx (96%) rename {openflare_server => openflare-server}/web/features/waf/components/rule-list-section.tsx (97%) rename {openflare_server => openflare-server}/web/features/waf/components/site-apply-drawer.tsx (100%) rename {openflare_server => openflare-server}/web/features/waf/components/stat-card.tsx (100%) rename {openflare_server => openflare-server}/web/features/waf/components/tab-button.tsx (100%) rename {openflare_server => openflare-server}/web/features/waf/components/types.ts (100%) rename {openflare_server => openflare-server}/web/features/waf/components/waf-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/waf/types.ts (100%) rename {openflare_server => openflare-server}/web/features/websites/components/certificate-apply-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/components/certificate-detail-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/components/certificate-editor-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/components/certificate-import-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/components/website-detail-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/components/website-editor-modal.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/components/websites-page.tsx (100%) rename {openflare_server => openflare-server}/web/features/websites/schemas.ts (99%) rename {openflare_server => openflare-server}/web/features/websites/utils.ts (100%) rename {openflare_server => openflare-server}/web/lib/api/auth-token.ts (100%) rename {openflare_server => openflare-server}/web/lib/api/client.ts (100%) rename {openflare_server => openflare-server}/web/lib/constants/navigation.ts (93%) rename {openflare_server => openflare-server}/web/lib/env/public-env.ts (96%) rename {openflare_server => openflare-server}/web/lib/theme/theme.ts (100%) rename {openflare_server => openflare-server}/web/lib/utils.ts (100%) rename {openflare_server => openflare-server}/web/lib/utils/cn.ts (100%) rename {openflare_server => openflare-server}/web/lib/utils/date.ts (100%) rename {openflare_server => openflare-server}/web/lib/utils/metrics.ts (100%) rename {openflare_server => openflare-server}/web/lib/utils/navigation.ts (92%) rename {openflare_server => openflare-server}/web/next-env.d.ts (100%) rename {openflare_server => openflare-server}/web/next.config.mjs (100%) rename {openflare_server => openflare-server}/web/package.json (100%) rename {openflare_server => openflare-server}/web/playwright.config.ts (82%) rename {openflare_server => openflare-server}/web/pnpm-lock.yaml (100%) rename {openflare_server => openflare-server}/web/postcss.config.mjs (100%) rename {openflare_server => openflare-server}/web/prettier.config.mjs (100%) rename {openflare_server => openflare-server}/web/public/favicon.ico (100%) rename {openflare_server => openflare-server}/web/public/logo.png (100%) rename {openflare_server => openflare-server}/web/public/robots.txt (100%) rename {openflare_server => openflare-server}/web/scripts/dev-server.mjs (100%) rename {openflare_server => openflare-server}/web/scripts/prepare-static-export.mjs (77%) rename {openflare_server => openflare-server}/web/store/app-shell.ts (100%) rename {openflare_server => openflare-server}/web/styles/tokens.css (100%) rename {openflare_server => openflare-server}/web/tests/e2e/.gitkeep (100%) rename {openflare_server => openflare-server}/web/tests/setup/vitest.setup.ts (100%) rename {openflare_server => openflare-server}/web/tests/unit/dashboard-overview.test.tsx (100%) rename {openflare_server => openflare-server}/web/tests/unit/github-oauth-callback.test.tsx (85%) rename {openflare_server => openflare-server}/web/tests/unit/metrics-utils.test.ts (85%) rename {openflare_server => openflare-server}/web/tests/unit/navigation-utils.test.ts (81%) rename {openflare_server => openflare-server}/web/tests/unit/nodes-utils.test.ts (94%) rename {openflare_server => openflare-server}/web/tests/unit/proxy-routes-page.test.tsx (96%) rename {openflare_server => openflare-server}/web/tests/unit/theme-utils.test.ts (100%) rename {openflare_server => openflare-server}/web/tests/unit/waf-ip-groups-page.test.tsx (100%) rename {openflare_server => openflare-server}/web/tsconfig.json (100%) rename {openflare_server => openflare-server}/web/types/api.ts (100%) rename {openflare_server => openflare-server}/web/types/auth.ts (100%) rename {openflare_server => openflare-server}/web/types/navigation.ts (100%) rename {openflare_server => openflare-server}/web/types/public-status.ts (100%) rename {openflare_server => openflare-server}/web/vercel.json (100%) rename {openflare_server => openflare-server}/web/vitest.config.ts (100%) delete mode 100644 openflare_agent/go.mod delete mode 100644 openflare_agent/go.sum delete mode 100644 openflare_relay/Dockerfile delete mode 100644 openflare_relay/go.mod delete mode 100644 openflare_relay/go.sum delete mode 100644 openflare_server/web/app/(dashboard)/access-log/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/apply-log/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/config-version/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/node/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/origin/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/pages/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/performance/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/proxy-route/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/setting/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/user/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/website/certificate/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/website/dns-account/page.tsx delete mode 100644 openflare_server/web/app/(dashboard)/website/page.tsx delete mode 100644 openflare_server/web/app/(public)/about/page.tsx delete mode 100644 openflare_server/web/app/(public)/login/page.tsx delete mode 100644 openflare_server/web/app/(public)/oauth/callback/page.tsx delete mode 100644 openflare_server/web/app/(public)/oauth/github/page.tsx delete mode 100644 openflare_server/web/app/(public)/oauth/link/page.tsx delete mode 100644 openflare_server/web/app/(public)/reset/page.tsx delete mode 100644 openflare_server/web/app/(public)/user/reset/page.tsx delete mode 100644 openflare_server/web/features/auth/api/public.ts delete mode 100644 openflared/go.mod delete mode 100644 openflared/go.sum diff --git a/.github/workflows/docker-agent.yml b/.github/workflows/docker-agent.yml index 3da8f6a3..109e2053 100644 --- a/.github/workflows/docker-agent.yml +++ b/.github/workflows/docker-agent.yml @@ -75,7 +75,7 @@ jobs: uses: docker/build-push-action@v7 with: context: . - file: ./openflare_agent/Dockerfile + file: ./openflare-agent/Dockerfile platforms: ${{ matrix.platform }} outputs: type=image,name=${{ env.IMAGE }},push-by-digest=true,name-canonical=true,push=true build-args: | diff --git a/.github/workflows/docker-relay.yml b/.github/workflows/docker-relay.yml index 9ff2dfb8..5e32720b 100644 --- a/.github/workflows/docker-relay.yml +++ b/.github/workflows/docker-relay.yml @@ -75,7 +75,7 @@ jobs: uses: docker/build-push-action@v7 with: context: . - file: ./openflare_relay/Dockerfile + file: ./openflare-relay/Dockerfile platforms: ${{ matrix.platform }} outputs: type=image,name=${{ env.IMAGE }},push-by-digest=true,name-canonical=true,push=true build-args: | diff --git a/.github/workflows/docker-server.yml b/.github/workflows/docker-server.yml index 8aa26494..ab242f60 100644 --- a/.github/workflows/docker-server.yml +++ b/.github/workflows/docker-server.yml @@ -74,8 +74,8 @@ jobs: id: build uses: docker/build-push-action@v7 with: - context: ./openflare_server - file: ./openflare_server/Dockerfile + context: . + file: ./openflare-server/Dockerfile platforms: ${{ matrix.platform }} outputs: type=image,name=${{ env.IMAGE }},push-by-digest=true,name-canonical=true,push=true build-args: | diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 9c7c822a..6a2b0c7d 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -1,30 +1,30 @@ -name: Build GitHub Pages -on: - workflow_dispatch: - inputs: - name: - description: 'Reason' - required: false -jobs: - build-and-deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout 🛎️ - uses: actions/checkout@v2 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly. - with: - persist-credentials: false - - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. - env: - CI: "" - run: | - cd openflare_server/web - corepack enable - pnpm install --frozen-lockfile - pnpm build - - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@releases/v3 - with: - ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} - BRANCH: gh-pages # The branch the action should deploy to. - FOLDER: openflare_server/web/build # The folder the action should deploy. \ No newline at end of file +name: Build GitHub Pages +on: + workflow_dispatch: + inputs: + name: + description: 'Reason' + required: false +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v2 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly. + with: + persist-credentials: false + - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. + env: + CI: "" + run: | + cd openflare-server/web + corepack enable + pnpm install --frozen-lockfile + pnpm build + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@releases/v3 + with: + ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} + BRANCH: gh-pages # The branch the action should deploy to. + FOLDER: openflare-server/web/build # The folder the action should deploy. \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9304e230..6ee6d264 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,7 +79,7 @@ jobs: CI: "" VERSION: ${{ needs.prepare.outputs.version }} run: | - cd openflare_server/web + cd openflare-server/web corepack enable pnpm install --frozen-lockfile NEXT_PUBLIC_APP_VERSION="$VERSION" pnpm build @@ -88,7 +88,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: frontend-build - path: openflare_server/web/build + path: openflare-server/web/build retention-days: 1 build-binaries: @@ -127,15 +127,15 @@ jobs: uses: actions/download-artifact@v4 with: name: frontend-build - path: openflare_server/web/build + path: openflare-server/web/build - name: Set up Go uses: actions/setup-go@v5 with: - go-version-file: openflare_server/go.mod + go-version-file: go.mod - name: Build Server - working-directory: openflare_server + working-directory: openflare-server env: CGO_ENABLED: 0 GOOS: ${{ matrix.goos }} @@ -145,7 +145,7 @@ jobs: run: | go mod download mkdir -p ../dist - go build -trimpath -ldflags "-s -w -X 'openflare/common.Version=$VERSION'" -o "../dist/$ASSET_NAME" . + go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-server/common.Version=$VERSION'" -o "../dist/$ASSET_NAME" . - name: Upload Binary Artifact uses: actions/upload-artifact@v4 @@ -184,10 +184,10 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version-file: openflare_agent/go.mod + go-version-file: go.mod - name: Build Agent - working-directory: openflare_agent + working-directory: openflare-agent env: CGO_ENABLED: 0 GOOS: ${{ matrix.goos }} @@ -197,7 +197,7 @@ jobs: run: | go mod download mkdir -p ../dist - go build -trimpath -ldflags "-s -w -X 'openflare-agent/internal/config.Version=$VERSION'" -o "../dist/$ASSET_NAME" ./cmd/agent + go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-agent/internal/config.Version=$VERSION'" -o "../dist/$ASSET_NAME" ./cmd/agent (cd ../dist && sha256sum "$ASSET_NAME" > "$ASSET_NAME.sha256") - name: Upload Agent Artifact @@ -239,10 +239,10 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version-file: openflare_relay/go.mod + go-version-file: go.mod - name: Build Relay - working-directory: openflare_relay + working-directory: openflare-relay env: CGO_ENABLED: 0 GOOS: ${{ matrix.goos }} @@ -252,7 +252,7 @@ jobs: run: | go mod download mkdir -p ../dist - go build -trimpath -ldflags "-s -w -X 'openflare-relay/internal/config.Version=$VERSION'" -o "../dist/$ASSET_NAME" ./cmd/relay + go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-relay/internal/config.Version=$VERSION'" -o "../dist/$ASSET_NAME" ./cmd/relay (cd ../dist && sha256sum "$ASSET_NAME" > "$ASSET_NAME.sha256") - name: Upload Relay Artifact @@ -294,7 +294,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version-file: openflared/go.mod + go-version-file: go.mod - name: Build Flared working-directory: openflared @@ -307,7 +307,7 @@ jobs: run: | go mod download mkdir -p ../dist - go build -trimpath -ldflags "-s -w -X 'openflare-flared/internal/config.Version=$VERSION'" -o "../dist/$ASSET_NAME" ./cmd/flared + go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflared/internal/config.Version=$VERSION'" -o "../dist/$ASSET_NAME" ./cmd/flared (cd ../dist && sha256sum "$ASSET_NAME" > "$ASSET_NAME.sha256") - name: Upload Flared Artifact diff --git a/.gitignore b/.gitignore index e8967240..7bc5e245 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,6 @@ go.work.sum *-source *-source.* -.codex* \ No newline at end of file +.codex* + +/bin/ \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index dd4e8137..63e3bff2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,7 +2,7 @@ services: agent: build: context: . - dockerfile: openflare_agent/Dockerfile + dockerfile: openflare-agent/Dockerfile container_name: openflare-agent restart: unless-stopped @@ -12,7 +12,7 @@ services: - "127.0.0.1:18081:18081" volumes: - - ./openflare_agent/data/:/data + - ./openflare-agent/data/:/data environment: OPENFLARE_SERVER_URL: "http://host.docker.internal:3000" @@ -25,10 +25,12 @@ services: relay: build: context: . - dockerfile: openflare_relay/Dockerfile + dockerfile: openflare-relay/Dockerfile container_name: openflare-relay network_mode: host restart: unless-stopped + volumes: + - ./openflare-relay/data/:/app/data environment: OPENFLARE_SERVER_URL: http://host.docker.internal:3000 OPENFLARE_DISCOVERY_TOKEN: 85464eeb72c49abc430569d6b9c77f78 diff --git a/docs/changelog/index.md b/docs/changelog/index.md index 9e8effcc..1bfa5823 100644 --- a/docs/changelog/index.md +++ b/docs/changelog/index.md @@ -26,6 +26,11 @@ sidebar: false ### 变更 +- 重构 Go 包依赖结构为统一模块(Monorepo),模块命名为 `github.com/rain-kl/openflare` +- 移除各子目录下独立的 `go.mod`/`go.sum` 文件,统一由根目录 `go.mod` 进行全局依赖管理与依赖版本锁定 +- 替换全仓库 Go 源文件中的内部引用路径,由本地相对路径迁移为标准 GitHub 绝对导入路径 +- 适配 Docker 镜像构建,所有组件镜像的 Dockerfile 调整为基于根目录的上下文编译 +- 更新 GitHub release 自动化发布流水线,适配全新 monorepo 包结构与符号信息注入路径 --- diff --git a/docs/deployment/agent.md b/docs/deployment/agent.md index ffe44ebf..c0d8143c 100644 --- a/docs/deployment/agent.md +++ b/docs/deployment/agent.md @@ -126,7 +126,7 @@ journalctl -u openflare-agent -f 源码运行: ```bash -cd openflare_agent +cd openflare-agent export LOG_LEVEL='info' go run ./cmd/agent -config /path/to/agent.json ``` @@ -134,7 +134,7 @@ go run ./cmd/agent -config /path/to/agent.json 编译后二进制运行: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent export LOG_LEVEL='info' ./openflare-agent -config /path/to/agent.json diff --git a/docs/deployment/deployment.md b/docs/deployment/deployment.md index 9bd44559..686b92b9 100644 --- a/docs/deployment/deployment.md +++ b/docs/deployment/deployment.md @@ -134,7 +134,7 @@ docker compose logs -f openflare 先构建管理端前端: ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install pnpm build @@ -143,7 +143,7 @@ pnpm build 再启动 Server: ```bash -cd openflare_server +cd openflare-server export JWT_SECRET='replace-with-a-long-random-string' export SQLITE_PATH='./openflare.db' export LOG_LEVEL='info' @@ -230,7 +230,7 @@ journalctl -u openflare-agent -f 源码运行: ```bash -cd openflare_agent +cd openflare-agent export LOG_LEVEL='info' go run ./cmd/agent -config /path/to/agent.json ``` @@ -238,7 +238,7 @@ go run ./cmd/agent -config /path/to/agent.json 编译后二进制运行: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent export LOG_LEVEL='info' ./openflare-agent -config /path/to/agent.json diff --git a/docs/deployment/relay.md b/docs/deployment/relay.md index f9fd81a3..6ea02d74 100644 --- a/docs/deployment/relay.md +++ b/docs/deployment/relay.md @@ -1,6 +1,6 @@ # 部署 Relay (Tunnel 中继) -你会学到:TunnelRelay 节点的职责、`openflare_relay` 的配置项与环境变量、使用 Docker 运行 Relay 的方法,以及如何通过源码手动构建并部署 Relay。 +你会学到:TunnelRelay 节点的职责、`openflare-relay` 的配置项与环境变量、使用 Docker 运行 Relay 的方法,以及如何通过源码手动构建并部署 Relay。 在 OpenFlare 的内网穿透体系中,**TunnelRelay 节点** 扮演着关键的角色。它与普通的边缘节点(Edge Node)不同,除了运行传统的 Agent(托管 OpenResty 进行 HTTPS/WAF 处理)外,还同机运行了 **Relay (frps 隧道管理器)** 服务,负责监听内网客户端(OpenFlared)的隧道连接并进行流量中继。 @@ -21,7 +21,7 @@ ## 配置文件与环境变量 -`openflare_relay` 启动时默认会读取当前目录下的 `relay.json`。同时也完全支持通过环境变量进行覆盖。 +`openflare-relay` 启动时默认会读取当前目录下的 `relay.json`。同时也完全支持通过环境变量进行覆盖。 ### 配置字段详情 @@ -68,7 +68,7 @@ docker run -d --name openflare-relay --restart unless-stopped \ ### 1. 编译二进制 ```bash -cd openflare_relay +cd openflare-relay go build -o openflare-relay ./cmd/relay ``` diff --git a/docs/deployment/server.md b/docs/deployment/server.md index 02667a36..ad5a58ac 100644 --- a/docs/deployment/server.md +++ b/docs/deployment/server.md @@ -17,10 +17,10 @@ OpenFlare Server 是 Gin + GORM 单体控制面,负责管理端 UI、管理 AP ## 构建管理端前端 -Go Server 会托管 `openflare_server/web/build` 中的静态产物。源码启动前先构建前端: +Go Server 会托管 `openflare-server/web/build` 中的静态产物。源码启动前先构建前端: ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install pnpm build @@ -37,7 +37,7 @@ pnpm test ## 使用 SQLite 启动 ```bash -cd openflare_server +cd openflare-server export JWT_SECRET='replace-with-a-long-random-string' export SQLITE_PATH='./openflare.db' export LOG_LEVEL='info' @@ -53,7 +53,7 @@ http://localhost:3000 ## 使用 PostgreSQL 启动 ```bash -cd openflare_server +cd openflare-server export JWT_SECRET='replace-with-a-long-random-string' export DSN='postgres://openflare:secret@127.0.0.1:5432/openflare?sslmode=disable' export LOG_LEVEL='info' diff --git a/docs/design/architecture.md b/docs/design/architecture.md index 33100f00..e5b66829 100644 --- a/docs/design/architecture.md +++ b/docs/design/architecture.md @@ -77,7 +77,7 @@ OpenResty (Agent, TLS/WAF) ## 组件架构与分工 ### 1. Server (控制面) -`openflare_server` 是 Go 编写的单体控制面: +`openflare-server` 是 Go 编写的单体控制面: * 提供管理端 REST API,通过 `OPENFLARE_TOKEN` 请求头鉴权。 * 包含配置编译器(Compiler),将数据库中的规则、证书与全局参数统一编译为不可变的配置快照及 OpenResty 物理配置文件文本。 * 存储 Pages 部署 ZIP 包于本地 Artifacts 目录,并向 Agent 提供受控的下载接口。 @@ -85,7 +85,7 @@ OpenResty (Agent, TLS/WAF) * *详细设计请参阅:[Agent 与发布模型设计](./agent-design.md) 以及 [Uptime Kuma 监控同步设计](./kuma-design.md)* ### 2. Agent (配置落地端) -`openflare_agent` 是运行在节点本地的守护进程: +`openflare-agent` 是运行在节点本地的守护进程: * 启动后维持与控制面的周期性心跳,并通过可选的 WebSocket 接收实时的配置发布广播。 * 负责拉取最新激活版本的配置文件及证书,写入本地目录,并通过 `openresty -t` 执行安全校验后平滑重载 (`reload`)。 * 在本地处理 Pages 部署包的下载、SHA-256 校验与解压缩切换。 @@ -99,7 +99,7 @@ OpenResty (Agent, TLS/WAF) ### 4. Relay 与 OpenFlared (穿透组件) 扩展数据面反穿透能力: -* `openflare_relay` 守护本地 `frps`,接受 Server 的配置派发,自动更新中继端口。 +* `openflare-relay` 守护本地 `frps`,接受 Server 的配置派发,自动更新中继端口。 * `openflared` 在内网守护一组 `frpc` 客户端进程,实现多中继就近建连与高可用容灾。 * *详细设计请参阅:[内网穿透隧道设计文档](./tunnel-design.md)* diff --git a/docs/design/index.md b/docs/design/index.md index 9df4ebd8..daf1ec19 100644 --- a/docs/design/index.md +++ b/docs/design/index.md @@ -66,16 +66,16 @@ OpenFlare 适合需要统一管理多台 OpenResty 代理节点的团队,具 | 路径 | 职责 | | ---------------------- | ---------------------------------------------------- | -| `openflare_server` | Gin + GORM + SQLite/PostgreSQL 单体控制面 | -| `openflare_server/web` | Next.js 15 App Router 管理端前端,由 Go Server 托管 | -| `openflare_agent` | Go 单体 Agent,运行在节点侧 | -| `openflare_relay` | Tunnel 中继代理,运行在公网边缘管理 frps 进程 | +| `openflare-server` | Gin + GORM + SQLite/PostgreSQL 单体控制面 | +| `openflare-server/web` | Next.js 15 App Router 管理端前端,由 Go Server 托管 | +| `openflare-agent` | Go 单体 Agent,运行在节点侧 | +| `openflare-relay` | Tunnel 中继代理,运行在公网边缘管理 frps 进程 | | `openflared` | Tunnel 客户端,运行在内网服务器侧管理 frpc 进程 | | `scripts` | 安装、自更新等系统辅助脚本 | | `docs` | VitePress 文档站、设计基线、开发规范、部署与配置文档 | | `docs/en` | 英文版文档 | -### 1. Server 分层 (`openflare_server/`) +### 1. Server 分层 (`openflare-server/`) | 目录 | 职责 | | ------------- | ------------------------------------------------ | @@ -93,7 +93,7 @@ OpenFlare 适合需要统一管理多台 OpenResty 代理节点的团队,具 | `docs/` | API 文档(Swagger) | | `data/` | 静态数据(如 GeoIP 数据库) | -### 2. Agent 模块 (`openflare_agent/`) +### 2. Agent 模块 (`openflare-agent/`) | 目录/模块 | 职责 | | ----------------------------- | -------------------------------------------- | @@ -113,7 +113,7 @@ OpenFlare 适合需要统一管理多台 OpenResty 代理节点的团队,具 | `internal/geoipupdate/` | GeoIP 数据更新 | | `internal/agent/` | 核心 Agent 逻辑与生命周期 | -### 3. Frontend 分层 (`openflare_server/web/`) +### 3. Frontend 分层 (`openflare-server/web/`) | 目录 | 职责 | | ------------- | -------------------------------------------- | @@ -128,7 +128,7 @@ OpenFlare 适合需要统一管理多台 OpenResty 代理节点的团队,具 | `scripts/` | 构建和部署相关脚本 | | `public/` | 静态资源 | -### 4. Relay 模块 (`openflare_relay/`) +### 4. Relay 模块 (`openflare-relay/`) | 模块 | 职责 | | ---------------- | ------------------------------------------------ | diff --git a/docs/design/pages-design.md b/docs/design/pages-design.md index b4818c4b..410edb95 100644 --- a/docs/design/pages-design.md +++ b/docs/design/pages-design.md @@ -39,7 +39,7 @@ graph TD OpenResty -->|2. 转发 API 代理| BackEnd[4. 后端 API 服务] %% 控制流与心跳 - Server[OpenFlare Server 控制面] <-->|Agent API / Heartbeat| Agent[openflare_agent 进程] + Server[OpenFlare Server 控制面] <-->|Agent API / Heartbeat| Agent[openflare-agent 进程] Server -.->|5. 存储 ZIP 部署包| LocalStore[(Server 本地存储)] Agent -->|1. 发现新版本| Server diff --git a/docs/design/tunnel-design.md b/docs/design/tunnel-design.md index 2cbd9a77..d4c42e8b 100644 --- a/docs/design/tunnel-design.md +++ b/docs/design/tunnel-design.md @@ -40,7 +40,7 @@ graph TD FlaredFrpc -->|转发本地请求| LocalOrigin[5. 内网源站 192.168.x.x] %% 控制流与心跳 - Server[OpenFlare Server 控制面] <-->|Relay API / Heartbeat| RelayManager[openflare_relay 进程] + Server[OpenFlare Server 控制面] <-->|Relay API / Heartbeat| RelayManager[openflare-relay 进程] Server <-->|Client API / Heartbeat| ClientManager[openflared 进程] RelayManager -.->|管控进程及配置| RelayFrps @@ -51,14 +51,14 @@ graph TD style Server fill:#f96,stroke:#333,stroke-width:2px ``` -* **控制面(Control Plane)**:Server 维护数据库状态;中继节点上的 `openflare_relay` 进程与内网服务器上的 `openflared` 进程通过 HTTP 心跳与 WebSocket 长通道同步隧道配置。 -* **数据面(Data Plane)**:公网流量首先进入公网边缘的 Agent (OpenResty),在此完成 HTTPS 握手、TLS 终止和 WAF 过滤,接着通过 `proxy_pass` 转发到同机部署的 `openflare_relay (frps)`。`frps` 再将请求封包通过与内网 `openflared (frpc)` 建立的持久隧道传输过去,最后由 `frpc` 拆包并分发给内网实际的源站服务。 +* **控制面(Control Plane)**:Server 维护数据库状态;中继节点上的 `openflare-relay` 进程与内网服务器上的 `openflared` 进程通过 HTTP 心跳与 WebSocket 长通道同步隧道配置。 +* **数据面(Data Plane)**:公网流量首先进入公网边缘的 Agent (OpenResty),在此完成 HTTPS 握手、TLS 终止和 WAF 过滤,接着通过 `proxy_pass` 转发到同机部署的 `openflare-relay (frps)`。`frps` 再将请求封包通过与内网 `openflared (frpc)` 建立的持久隧道传输过去,最后由 `frpc` 拆包并分发给内网实际的源站服务。 --- ## Relay (中继端) 设计 -`openflare_relay` 是部署在公网边缘的中继管理器,运行在 `tunnel_relay` 类型的节点上。 +`openflare-relay` 是部署在公网边缘的中继管理器,运行在 `tunnel_relay` 类型的节点上。 ### 1. 核心架构与逻辑 * **进程守护**:Relay 进程内部持有 `frps` 二进制,通过 `exec.Command` 拉起 `frps -c frps.toml` 子进程,并启动 goroutine 异步监听其退出状态。如果发现 `frps` 异常退出,会结合退避机制自动拉起。 @@ -98,7 +98,7 @@ graph TD +-------------------------------------------+-------------------------------------------+ | | v (中继端) v (内网客户端) -openflare_relay 心跳检测到 frps 端口/Token 变化 openflared 心跳检测到 tunnel_version 发生变更 +openflare-relay 心跳检测到 frps 端口/Token 变化 openflared 心跳检测到 tunnel_version 发生变更 重新渲染本地 frps.toml 请求拉取最新代理映射包 Kill 并重新拉起 frps 进程 重新渲染 frpc_.toml 上报健康状态为 healthy 对有变更的 Relay 进程执行重启与配置热重载 diff --git a/docs/en/deployment/agent.md b/docs/en/deployment/agent.md index 138ac2e0..fc5c7408 100644 --- a/docs/en/deployment/agent.md +++ b/docs/en/deployment/agent.md @@ -127,7 +127,7 @@ Manual execution: Running from source: ```bash -cd openflare_agent +cd openflare-agent export LOG_LEVEL='info' go run ./cmd/agent -config /path/to/agent.json ``` @@ -135,7 +135,7 @@ go run ./cmd/agent -config /path/to/agent.json Running compiled binary: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent export LOG_LEVEL='info' ./openflare-agent -config /path/to/agent.json diff --git a/docs/en/deployment/deployment.md b/docs/en/deployment/deployment.md index b50ba033..f17e9834 100644 --- a/docs/en/deployment/deployment.md +++ b/docs/en/deployment/deployment.md @@ -134,7 +134,7 @@ Access `http://localhost:3000` for the first time, using the default credentials First, build the admin frontend: ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install pnpm build @@ -143,7 +143,7 @@ pnpm build Then, launch the Server: ```bash -cd openflare_server +cd openflare-server export SESSION_SECRET='replace-with-a-long-random-string' export SQLITE_PATH='./openflare.db' export LOG_LEVEL='info' @@ -230,7 +230,7 @@ journalctl -u openflare-agent -f Running from source: ```bash -cd openflare_agent +cd openflare-agent export LOG_LEVEL='info' go run ./cmd/agent -config /path/to/agent.json ``` @@ -238,7 +238,7 @@ go run ./cmd/agent -config /path/to/agent.json Running compiled binary: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent export LOG_LEVEL='info' ./openflare-agent -config /path/to/agent.json diff --git a/docs/en/deployment/relay.md b/docs/en/deployment/relay.md index 1ee16844..ee0b8eb9 100644 --- a/docs/en/deployment/relay.md +++ b/docs/en/deployment/relay.md @@ -1,6 +1,6 @@ # Deploy Relay (Tunnel Relay) -You will learn: The responsibilities of a TunnelRelay node, `openflare_relay` configuration parameters and environment variables, how to run the Relay via Docker, and how to build and deploy the Relay from source manually. +You will learn: The responsibilities of a TunnelRelay node, `openflare-relay` configuration parameters and environment variables, how to run the Relay via Docker, and how to build and deploy the Relay from source manually. In the OpenFlare intranet penetration architecture, the **TunnelRelay node** plays a key role. Unlike standard Edge Nodes, in addition to running the traditional Agent (managing OpenResty for HTTPS/WAF processing), it co-locates the **Relay (frps tunnel manager)** service, responsible for listening to intranet client (OpenFlared) tunnel connections and relaying traffic. @@ -21,7 +21,7 @@ Before deploying a TunnelRelay node, ensure: ## Configuration & Environment Variables -`openflare_relay` reads `relay.json` in the working directory by default on startup. Overriding options via environment variables is fully supported. +`openflare-relay` reads `relay.json` in the working directory by default on startup. Overriding options via environment variables is fully supported. ### Configuration Fields Details @@ -68,7 +68,7 @@ If you prefer to run the Relay directly on a physical host or VM: ### 1. Compile the Binary ```bash -cd openflare_relay +cd openflare-relay go build -o openflare-relay ./cmd/relay ``` diff --git a/docs/en/deployment/server.md b/docs/en/deployment/server.md index a7e4c8c6..9f862980 100644 --- a/docs/en/deployment/server.md +++ b/docs/en/deployment/server.md @@ -17,10 +17,10 @@ In production environments, we highly recommend explicitly configuring `SESSION_ ## Build the Admin Frontend -The Go Server hosts static assets located in `openflare_server/web/build`. Before starting the Server from source, build the frontend: +The Go Server hosts static assets located in `openflare-server/web/build`. Before starting the Server from source, build the frontend: ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install pnpm build @@ -37,7 +37,7 @@ pnpm test ## Start with SQLite ```bash -cd openflare_server +cd openflare-server export SESSION_SECRET='replace-with-a-long-random-string' export SQLITE_PATH='./openflare.db' export LOG_LEVEL='info' @@ -53,7 +53,7 @@ http://localhost:3000 ## Start with PostgreSQL ```bash -cd openflare_server +cd openflare-server export SESSION_SECRET='replace-with-a-long-random-string' export DSN='postgres://openflare:secret@127.0.0.1:5432/openflare?sslmode=disable' export LOG_LEVEL='info' diff --git a/docs/en/design/architecture.md b/docs/en/design/architecture.md index bb77120a..7dc48291 100644 --- a/docs/en/design/architecture.md +++ b/docs/en/design/architecture.md @@ -61,19 +61,19 @@ Internal Service (192.168.x.x) ## Server -`openflare_server` is the single-control-plane monolith: +`openflare-server` is the single-control-plane monolith: * Gin provides the HTTP services. * GORM accesses SQLite or PostgreSQL. * The existing login system provides Admin Session management. * Authentication sources support GitHub OAuth and standard OIDC logins with external account binding. -* The Go Server hosts the `openflare_server/web` static build assets. +* The Go Server hosts the `openflare-server/web` static build assets. The Server does not directly SSH to nodes, nor does it modify node files online. It only stores control plane state, generates complete configuration versions, and lets nodes actively pull them via the Agent API. ## Agent -`openflare_agent` is a Go monolithic application: +`openflare-agent` is a Go monolithic application: * Runs as a single binary on the node side. * Reads or generates local node information on startup. @@ -88,7 +88,7 @@ The node IP is maintained by default through Agent registration and heartbeat re ## Frontend -`openflare_server/web` is the official Next.js-based frontend: +`openflare-server/web` is the official Next.js-based frontend: * Next.js 15 App Router. * React 19. diff --git a/docs/en/design/development.md b/docs/en/design/development.md index 334d4470..0b22c546 100644 --- a/docs/en/design/development.md +++ b/docs/en/design/development.md @@ -22,7 +22,7 @@ For details on the physical directory structure and responsibilities of each mod ## Initializing Frontend Dependencies ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install ``` @@ -38,7 +38,7 @@ pnpm build SQLite Mode: ```bash -cd openflare_server +cd openflare-server export SESSION_SECRET='dev-session-secret' export SQLITE_PATH='./openflare-dev.db' export LOG_LEVEL='debug' @@ -48,7 +48,7 @@ go run . PostgreSQL Mode: ```bash -cd openflare_server +cd openflare-server export SESSION_SECRET='dev-session-secret' export DSN='postgres://openflare:secret@127.0.0.1:5432/openflare?sslmode=disable' export LOG_LEVEL='debug' @@ -68,7 +68,7 @@ The default credentials are `root` / `123456`. The frontend dev server listens to port `3001` by default and proxies requests to the backend via `NEXT_DEV_BACKEND_URL`: ```bash -cd openflare_server/web +cd openflare-server/web export NEXT_DEV_BACKEND_URL='http://127.0.0.1:3000' pnpm dev ``` @@ -96,7 +96,7 @@ Create a local `agent.json`: Run: ```bash -cd openflare_agent +cd openflare-agent export LOG_LEVEL='debug' go run ./cmd/agent -config ./agent.json ``` @@ -108,21 +108,21 @@ If `openresty_path` is not configured, the Agent calls `openresty` by default. F Server: ```bash -cd openflare_server +cd openflare-server GOCACHE=/tmp/openflare-go-cache go test ./... ``` Agent: ```bash -cd openflare_agent +cd openflare-agent GOCACHE=/tmp/openflare-go-cache go test ./... ``` Frontend: ```bash -cd openflare_server/web +cd openflare-server/web pnpm lint pnpm typecheck pnpm test @@ -141,21 +141,21 @@ pnpm build Admin static assets: ```bash -cd openflare_server/web +cd openflare-server/web pnpm build ``` Server binary: ```bash -cd openflare_server +cd openflare-server go build -o openflare-server . ``` Agent binary: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent ``` diff --git a/docs/en/design/repository.md b/docs/en/design/repository.md index f3186441..75ae3203 100644 --- a/docs/en/design/repository.md +++ b/docs/en/design/repository.md @@ -4,10 +4,10 @@ You will learn: The responsibilities of Server, Agent, Frontend, scripts, and do | Path | Responsibility | | --- | --- | -| `openflare_server` | Gin + GORM + SQLite/PostgreSQL single monolithic control plane | -| `openflare_server/web` | Next.js 15 App Router Admin Frontend, hosted by Go Server | -| `openflare_agent` | Go monolithic Agent running on the node side | -| `openflare_relay` | Tunnel relay daemon running on public edges, managing frps processes | +| `openflare-server` | Gin + GORM + SQLite/PostgreSQL single monolithic control plane | +| `openflare-server/web` | Next.js 15 App Router Admin Frontend, hosted by Go Server | +| `openflare-agent` | Go monolithic Agent running on the node side | +| `openflare-relay` | Tunnel relay daemon running on public edges, managing frps processes | | `openflared` | Tunnel client running on intranet servers, managing frpc processes | | `scripts` | System helper scripts for installation, self-updating, etc. | | `docs` | VitePress documentation website, design baselines, specifications, and configurations | diff --git a/docs/en/design/tunnel-design.md b/docs/en/design/tunnel-design.md index 73b7e3c9..84955ad7 100644 --- a/docs/en/design/tunnel-design.md +++ b/docs/en/design/tunnel-design.md @@ -40,7 +40,7 @@ graph TD FlaredFrpc -->|Forward Local Request| LocalOrigin[5. Intranet Origin 192.168.x.x] %% Control Flow & Heartbeats - Server[OpenFlare Server Control Plane] <-->|Relay API / Heartbeat| RelayManager[openflare_relay process] + Server[OpenFlare Server Control Plane] <-->|Relay API / Heartbeat| RelayManager[openflare-relay process] Server <-->|Client API / Heartbeat| ClientManager[openflared process] RelayManager -.->|Control Process & Config| RelayFrps @@ -51,14 +51,14 @@ graph TD style Server fill:#f96,stroke:#333,stroke-width:2px ``` -* **Control Plane**: The Server maintains the database state. The `openflare_relay` process on relay nodes and the `openflared` process on intranet servers synchronize tunnel configurations via HTTP heartbeats and long-lived WebSocket connections. -* **Data Plane**: Public traffic enters the public edge Agent (OpenResty), where the TLS handshake, HTTPS termination, and WAF filtering are executed. It is then forwarded via `proxy_pass` to the co-located `openflare_relay (frps)` on the loopback address. `frps` encapsulates the HTTP requests into the encrypted TCP tunnel and sends them down to the intranet `openflared (frpc)`. Finally, `frpc` unpacks the requests and forwards them to the actual intranet origin service. +* **Control Plane**: The Server maintains the database state. The `openflare-relay` process on relay nodes and the `openflared` process on intranet servers synchronize tunnel configurations via HTTP heartbeats and long-lived WebSocket connections. +* **Data Plane**: Public traffic enters the public edge Agent (OpenResty), where the TLS handshake, HTTPS termination, and WAF filtering are executed. It is then forwarded via `proxy_pass` to the co-located `openflare-relay (frps)` on the loopback address. `frps` encapsulates the HTTP requests into the encrypted TCP tunnel and sends them down to the intranet `openflared (frpc)`. Finally, `frpc` unpacks the requests and forwards them to the actual intranet origin service. --- ## Relay (Server-side) Design -`openflare_relay` is a relay manager deployed on the public edge, running on nodes of type `tunnel_relay`. +`openflare-relay` is a relay manager deployed on the public edge, running on nodes of type `tunnel_relay`. ### 1. Core Architecture & Logic * **Process Daemon**: The Relay process embeds the `frps` binary, spawning the `frps -c frps.toml` subprocess via `exec.Command` and using goroutines to asynchronously listen to its exit status. If `frps` exits unexpectedly, it automatically restarts using an exponential backoff policy. @@ -98,7 +98,7 @@ Admin modifies tunnel/intranet port mappings -> Click Publish -> Generate new Tu +-----------------------------------------------------------------------+-----------------------------------------------------------------------+ | | v (Relay Side) v (Client Side) -openflare_relay heartbeat detects frps port/Token change openflared heartbeat detects tunnel_version change +openflare-relay heartbeat detects frps port/Token change openflared heartbeat detects tunnel_version change Re-render local frps.toml Request full proxy configuration details Kill and restart the frps process Re-render frpc_.toml configs Report health status as healthy Restart or hot-reload changed frpc processes diff --git a/docs/en/guide/troubleshooting.md b/docs/en/guide/troubleshooting.md index a4b561b7..8975e8be 100644 --- a/docs/en/guide/troubleshooting.md +++ b/docs/en/guide/troubleshooting.md @@ -64,7 +64,7 @@ curl -I http://127.0.0.1:3000 2. If running from source, verify that the frontend static assets have been built: ```bash -cd openflare_server/web +cd openflare-server/web pnpm build ``` @@ -73,7 +73,7 @@ pnpm build 4. If accessing via the frontend dev server, verify the backend proxy configuration: ```bash -cd openflare_server/web +cd openflare-server/web NEXT_DEV_BACKEND_URL=http://127.0.0.1:3000 pnpm dev ``` @@ -220,7 +220,7 @@ Domains without a bound certificate will not be added to the HTTPS configuration Execute: ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install pnpm lint diff --git a/docs/en/reference/api.md b/docs/en/reference/api.md index b18e6da6..fcdb556d 100644 --- a/docs/en/reference/api.md +++ b/docs/en/reference/api.md @@ -152,4 +152,4 @@ Once logged into the management console, the Swagger page is accessible at: /swagger/index.html ``` -The Swagger definition file is stored in `openflare_server/docs`, generated by `swag init`. +The Swagger definition file is stored in `openflare-server/docs`, generated by `swag init`. diff --git a/docs/en/reference/cli.md b/docs/en/reference/cli.md index ffd24503..1e468631 100644 --- a/docs/en/reference/cli.md +++ b/docs/en/reference/cli.md @@ -7,7 +7,7 @@ You will learn: Common commands for starting, building, testing, installing, and Start from source: ```bash -cd openflare_server +cd openflare-server export SESSION_SECRET='replace-with-random-string' export SQLITE_PATH='./openflare.db' export LOG_LEVEL='info' @@ -23,7 +23,7 @@ go run . --port 3000 --log-dir ./logs Run tests: ```bash -cd openflare_server +cd openflare-server GOCACHE=/tmp/openflare-go-cache go test ./... ``` @@ -32,7 +32,7 @@ GOCACHE=/tmp/openflare-go-cache go test ./... Development: ```bash -cd openflare_server/web +cd openflare-server/web pnpm install pnpm dev ``` @@ -40,14 +40,14 @@ pnpm dev Build static assets: ```bash -cd openflare_server/web +cd openflare-server/web pnpm build ``` Linting and testing checks: ```bash -cd openflare_server/web +cd openflare-server/web pnpm lint pnpm typecheck pnpm test @@ -58,21 +58,21 @@ pnpm test Run from source: ```bash -cd openflare_agent +cd openflare-agent go run ./cmd/agent -config /path/to/agent.json ``` Compile: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent ``` Run tests: ```bash -cd openflare_agent +cd openflare-agent GOCACHE=/tmp/openflare-go-cache go test ./... ``` @@ -81,14 +81,14 @@ GOCACHE=/tmp/openflare-go-cache go test ./... Run from source: ```bash -cd openflare_relay +cd openflare-relay go run ./cmd -config /path/to/relay.json ``` Compile: ```bash -cd openflare_relay +cd openflare-relay go build -o openflare-relay ./cmd ``` @@ -128,7 +128,7 @@ Regenerate Swagger documentation: ```bash go install github.com/swaggo/swag/cmd/swag@v1.16.4 -cd openflare_server +cd openflare-server swag init -g main.go -o docs ``` diff --git a/docs/en/reference/configuration.md b/docs/en/reference/configuration.md index 07c474e8..4282cc33 100644 --- a/docs/en/reference/configuration.md +++ b/docs/en/reference/configuration.md @@ -46,7 +46,7 @@ The Client (Intranet Client) supports: ## Server CLI Arguments ```bash -cd openflare_server +cd openflare-server go run . --port 3000 --log-dir ./logs ``` diff --git a/docs/guide/troubleshooting.md b/docs/guide/troubleshooting.md index 1c1146f5..216f6976 100644 --- a/docs/guide/troubleshooting.md +++ b/docs/guide/troubleshooting.md @@ -64,7 +64,7 @@ curl -I http://127.0.0.1:3000 2. 如果是源码运行,确认已经构建前端静态产物: ```bash -cd openflare_server/web +cd openflare-server/web pnpm build ``` @@ -73,7 +73,7 @@ pnpm build 4. 如果通过前端开发服务器访问,确认后端代理地址: ```bash -cd openflare_server/web +cd openflare-server/web NEXT_DEV_BACKEND_URL=http://127.0.0.1:3000 pnpm dev ``` @@ -220,7 +220,7 @@ curl -Iv https://your-domain 执行: ```bash -cd openflare_server/web +cd openflare-server/web corepack enable pnpm install pnpm lint diff --git a/docs/guideline/Constraints.md b/docs/guideline/Constraints.md index 8c00912c..c41c9479 100644 --- a/docs/guideline/Constraints.md +++ b/docs/guideline/Constraints.md @@ -76,20 +76,20 @@ Frontend: 任何涉及表结构、索引、列类型、分表规则或内部持久化元数据的修改,都必须同步提升数据库版本号。 -数据库版本号定义在 `openflare_server/model`,不得只依赖 `AutoMigrate` 隐式升级存量数据库。 +数据库版本号定义在 `openflare-server/model`,不得只依赖 `AutoMigrate` 隐式升级存量数据库。 每次提升数据库版本号时,必须补充从上一版本升级到新版本的显式迁移方法。迁移方法必须包含升级后的校验逻辑;只有校验通过,才能写入新的数据库版本记录。 -数据库升级统一使用 goose。新的 goose provider、桥接逻辑、注册入口和具体迁移文件必须全部放在 `openflare_server/model/goose` 包下,`openflare_server/model` 根包只保留纯净实体类、旧框架兼容适配和必要的上下文注入。每次新增数据库升级都必须新建一个单独的 Go 文件,文件名使用 `openflare_server/model/goose/goose__.go`,例如 `openflare_server/model/goose/goose_202606020001_add_node_capabilities_json.go`。迁移文件必须同时包含该版本的 goose migration 构造函数、升级逻辑和校验逻辑;`model/goose/migrations.go` 只能作为注册入口和公共构造工具,禁止把具体迁移逻辑集中堆放在该文件中。 +数据库升级统一使用 goose。新的 goose provider、桥接逻辑、注册入口和具体迁移文件必须全部放在 `openflare-server/model/goose` 包下,`openflare-server/model` 根包只保留纯净实体类、旧框架兼容适配和必要的上下文注入。每次新增数据库升级都必须新建一个单独的 Go 文件,文件名使用 `openflare-server/model/goose/goose__.go`,例如 `openflare-server/model/goose/goose_202606020001_add_node_capabilities_json.go`。迁移文件必须同时包含该版本的 goose migration 构造函数、升级逻辑和校验逻辑;`model/goose/migrations.go` 只能作为注册入口和公共构造工具,禁止把具体迁移逻辑集中堆放在该文件中。 执行数据库升级时必须按以下步骤完成: 1. 判断是否需要升级数据库版本:凡是新增/删除/重命名表、字段、索引、约束、列类型、分表规则,或改变持久化数据语义,都必须升级。 -2. 新增 `openflare_server/model/goose/goose__.go`,其中 `` 为 goose 版本号。文件头部或迁移构造函数附近必须包含注释,说明本次升级了什么内容,以及为什么需要升级。 -3. 在该文件中实现独立迁移构造函数,并返回通过 `newGORMMigration(...)` 创建的 migration;随后只在 `openflare_server/model/goose/migrations.go` 的 `registeredMigrations(...)` 中新增一条注册项。 +2. 新增 `openflare-server/model/goose/goose__.go`,其中 `` 为 goose 版本号。文件头部或迁移构造函数附近必须包含注释,说明本次升级了什么内容,以及为什么需要升级。 +3. 在该文件中实现独立迁移构造函数,并返回通过 `newGORMMigration(...)` 创建的 migration;随后只在 `openflare-server/model/goose/migrations.go` 的 `registeredMigrations(...)` 中新增一条注册项。 4. 在同一个单独迁移文件中写入升级逻辑。可通过 goose `Context` 调用 `ApplyCurrentSchema`、历史 backfill、默认数据初始化等公共能力;复杂数据修复必须显式处理,不得只依赖 `AutoMigrate`。 5. 在同一个单独迁移文件中写入升级后的校验逻辑。校验至少要覆盖新增表/字段/索引是否存在、关键默认数据是否存在、必要的数据回填是否成功。 -6. 如果新迁移需要新的公共 backfill 或校验辅助函数,优先放在该迁移文件中;只有多个迁移共同复用时,才放到 `openflare_server/model/goose` 包内的公共文件中。不要把新 goose 框架代码放回 `openflare_server/model` 根包。 +6. 如果新迁移需要新的公共 backfill 或校验辅助函数,优先放在该迁移文件中;只有多个迁移共同复用时,才放到 `openflare-server/model/goose` 包内的公共文件中。不要把新 goose 框架代码放回 `openflare-server/model` 根包。 7. 补充迁移测试:至少覆盖从旧框架终点或上一 goose 版本升级后 schema version、字段/表结构、关键数据回填和校验结果。还应保留旧库从 v15/v17 桥接到 goose 的回归覆盖。 新包启动后必须先检查数据库当前版本,再按顺序逐步升级到目标版本;禁止跳过中间升级步骤直接写目标版本。 diff --git a/docs/plan/20260606-replace-import-paths-evaluation.md b/docs/plan/20260606-replace-import-paths-evaluation.md new file mode 100644 index 00000000..7cfcbec7 --- /dev/null +++ b/docs/plan/20260606-replace-import-paths-evaluation.md @@ -0,0 +1,147 @@ +# OpenFlare 引用替换为 GitHub 路径方案评估计划 + +## 1. 目标与背景 (Goal & Context) +* **需求背景**:当前 OpenFlare 内部组件(Server、Agent、Relay、Flared)之间采用本地包名引用(例如 `openflare`、`openflare-agent`),并使用 Go `replace` 相对路径指向本地目录。这导致代码无法直接以标准的 GitHub 路径(如 `github.com/rain-kl/openflare`)进行分发、远程安装或被外部引用(例如 `go install` 远程二进制会因为 replace 指令失效而报错)。 +* **评估目标**:评估将本地引用替换为 `github.com/rain-kl/openflare` 格式的两种可行方案(单模块 Monorepo 方案 vs 多模块 Multi-Module 方案),分析各自的优缺点、工作量及对现有 CI/CD、Docker 镜像构建的影响,给出推荐方案。 + +## 2. 设计与决策 (Design & Decisions) + +### 方案 A:标准 Go 多模块方案 (Multi-Module with Sub-paths) +保留当前 4 个独立的 Go 模块结构,在各自的 `go.mod` 中将模块名改写为符合 GitHub 结构的子路径: +- `openflare-server/go.mod` -> `module github.com/rain-kl/openflare/openflare-server` +- `openflare-relay/go.mod` -> `module github.com/rain-kl/openflare/openflare-relay` +- `openflare-agent/go.mod` -> `module github.com/rain-kl/openflare/openflare-agent` +- `openflared/go.mod` -> `module github.com/rain-kl/openflare/openflared` + +同时,其他模块(Relay, Agent, Flared)的 `go.mod` 中的 `replace` 修改为: +`replace github.com/rain-kl/openflare/openflare-server => ../openflare-server` + +#### 优缺点分析: +* **优点**: + - **模块边界清晰**:各二进制模块依赖独立。例如 `openflare-agent` 不会引入 Server 依赖的 GORM、Gin、Swagger 等库,保持各自模块的 `go.sum` 纯净。 + - **改动小**:对 Dockerfile 和 GitHub Workflows 影响极小,构建上下文仍可保持原样。 +* **缺点**: + - **远程安装不可用**:仍然需要在 `go.mod` 中保留 `replace` 指令。由于 Go 不允许在远程 `go install` 或 `go get` 时解析本地相对路径的 `replace` 指令,用户依然无法直接通过 `go install github.com/rain-kl/openflare/openflared/cmd/flared@latest` 安装,必须先克隆整个仓库到本地再构建。 + +--- + +### 方案 B:统一单模块方案 (Unified Single Module Monorepo - 推荐) +将整个仓库合并为一个 Go 模块。在仓库根目录下创建 `go.mod`,模块名为 `github.com/rain-kl/openflare`,并删除子目录中的所有 `go.mod` 和 `go.sum`。 + +所有内部包导入路径统一改写为: +- `"github.com/rain-kl/openflare/openflare-server/..."` +- `"github.com/rain-kl/openflare/openflare-relay/..."` +- `"github.com/rain-kl/openflare/openflare-agent/..."` +- `"github.com/rain-kl/openflare/openflared/..."` + +#### 优缺点分析: +* **优点**: + - **彻底摆脱 replace**:完全不需要在 `go.mod` 中写 `replace` 指令,代码清爽、易于维持。 + - **支持远程 Go 工具链**:用户和开发者可以直接使用 `go install github.com/rain-kl/openflare/openflared/cmd/flared@latest` 或 `go install github.com/rain-kl/openflare/openflare-agent/cmd/agent@latest` 远程下载并安装最新二进制。 + - **版本依赖统一**:所有组件共享相同的依赖版本,避免了组件间因第三方库版本不一致导致潜在的运行时兼容问题。 +* **缺点**: + - **依赖库大一统**:根目录的 `go.mod` 会包含 Server、Agent、Relay 等所有组件的依赖,但这只影响开发时的依赖下载,对最终编译出的二进制大小和运行效率**没有任何影响**(Go 编译器会自动进行死代码消除/树摇)。 + - **构建配置变动**:Dockerfile 以及 GitHub Actions 需要修改构建上下文,从原本 COPY 子目录改为从根目录统一进行 COPY 和 `go build`。 + +--- + +## 3. 具体修改文件清单 (Proposed Changes) +如果采用**方案 B(推荐)**,需要修改的文件清单和逻辑如下: + +### 根目录与配置文件 +* #### [NEW] [go.mod](file:///Users/ryan/DEV/Go/OpenFlare/go.mod) + - 职责:全局单一 Go 模块定义,模块名:`github.com/rain-kl/openflare`。 +* #### [DELETE] `openflare-server/go.mod` / `go.sum` +* #### [DELETE] `openflare-relay/go.mod` / `go.sum` +* #### [DELETE] `openflare-agent/go.mod` / `go.sum` +* #### [DELETE] `openflared/go.mod` / `go.sum` + +### 源代码文件 (约 252 个 Go 文件) +* #### [MODIFY] `openflare-server/**/*.go` + - 职责:将 `import "openflare/..."` 替换为 `import "github.com/rain-kl/openflare/openflare-server/..."`。 +* #### [MODIFY] `openflare-relay/**/*.go` + - 职责:将 `import "openflare-relay/..."` 替换为 `import "github.com/rain-kl/openflare/openflare-relay/..."`,将 `import "openflare/..."` 替换为 `import "github.com/rain-kl/openflare/openflare-server/..."`。 +* #### [MODIFY] `openflare-agent/**/*.go` + - 职责:将 `import "openflare-agent/..."` 替换为 `import "github.com/rain-kl/openflare/openflare-agent/..."`,将 `import "openflare/..."` 替换为 `import "github.com/rain-kl/openflare/openflare-server/..."`。 +* #### [MODIFY] `openflared/**/*.go` + - 职责:将 `import "openflare-flared/..."` 替换为 `import "github.com/rain-kl/openflare/openflared/..."`,将 `import "openflare/..."` 替换为 `import "github.com/rain-kl/openflare/openflare-server/..."`。 + +### Dockerfile & Workflows + +如果采用**方案 B(推荐)**,我们将继续保持每个组件(Server、Agent、Relay、Flared)编译并产生自己独立的 Docker 镜像(共 4 个镜像),但其 Dockerfile 的构建上下文(Build Context)统一提升至仓库根目录。具体调整细节如下: + +* #### [MODIFY] [openflare-server/Dockerfile](file:///Users/ryan/DEV/Go/OpenFlare/openflare-server/Dockerfile) + - 职责:由于 `openflare-server` 中没有独立的 `go.mod`,构建上下文必须在**仓库根目录**执行。 + - 修改内容: + ```dockerfile + # 更改 go-builder 阶段的 COPY 方式: + COPY go.mod go.sum ./ + RUN go mod download + COPY openflare-server/ ./openflare-server/ + # go build 指定编译子包: + RUN go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-server/common.Version=$VERSION'" -o openflare ./openflare-server + ``` + +* #### [MODIFY] [openflare-relay/Dockerfile](file:///Users/ryan/DEV/Go/OpenFlare/openflare-relay/Dockerfile) + - 职责:适配单 go.mod 构建上下文。 + - 修改内容: + ```dockerfile + # 更改 builder 阶段的 COPY 方式: + COPY go.mod go.sum ./ + RUN go mod download + COPY openflare-server/ ./openflare-server/ + COPY openflare-relay/ ./openflare-relay/ + # go build 指定编译子包: + RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-relay/internal/config.Version=$VERSION'" -o openflare-relay ./openflare-relay/cmd/relay + ``` + +* #### [MODIFY] [openflare-agent/Dockerfile](file:///Users/ryan/DEV/Go/OpenFlare/openflare-agent/Dockerfile) + - 职责:适配单 go.mod 构建上下文。 + - 修改内容: + ```dockerfile + # 更改 builder 阶段的 COPY 方式: + COPY go.mod go.sum ./ + RUN go mod download + COPY openflare-server/ ./openflare-server/ + COPY openflare-agent/ ./openflare-agent/ + # go build 指定编译子包: + RUN go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-agent/internal/config.Version=$VERSION'" -o /build/openflare-agent ./openflare-agent/cmd/agent + ``` + +* #### [MODIFY] [openflared/Dockerfile](file:///Users/ryan/DEV/Go/OpenFlare/openflared/Dockerfile) + - 职责:适配单 go.mod 构建上下文。 + - 修改内容: + ```dockerfile + # 更改 builder 阶段的 COPY 方式: + COPY go.mod go.sum ./ + RUN go mod download + COPY openflare-server/ ./openflare-server/ + COPY openflared/ ./openflared/ + # go build 指定编译子包: + RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflared/internal/config.Version=$VERSION'" -o flared ./openflared/cmd/flared + ``` + +* #### [MODIFY] [.github/workflows/release.yml](file:///Users/ryan/DEV/Go/OpenFlare/.github/workflows/release.yml) + - 职责:更新 go build 构建命令及 ldflags 版本注入参数(例如将 `-ldflags "-X 'openflare/common.Version=$VERSION'"` 替换为 `-ldflags "-X 'github.com/rain-kl/openflare/openflare-server/common.Version=$VERSION'"`,同时编译命令需要指向正确的子包目录,如 `./openflare-server`)。 + +--- + +## 4. 验证计划 (Verification Plan) + +### 编译与运行测试 +* 运行单测以确保各包逻辑正常: + `go test ./...`(在根目录执行) +* 本地编译各个二进制: + `go build -o bin/openflare-server ./openflare-server` + `go build -o bin/openflare-agent ./openflare-agent/cmd/agent` + `go build -o bin/openflare-relay ./openflare-relay/cmd/relay` + `go build -o bin/openflared ./openflared/cmd/flared` +* 启动服务并检查版本输出: + `./bin/openflare-server --version` + +### Docker 构建验证 +* 验证镜像构建命令: + `docker build -t openflare-server -f openflare-server/Dockerfile .` + `docker build -t openflare-agent -f openflare-agent/Dockerfile .` + `docker build -t openflare-relay -f openflare-relay/Dockerfile .` + `docker build -t openflared -f openflared/Dockerfile .` diff --git a/docs/plan/handover-plan-template.md b/docs/plan/handover-plan-template.md index 06f6b22d..b0e8f4cd 100644 --- a/docs/plan/handover-plan-template.md +++ b/docs/plan/handover-plan-template.md @@ -28,5 +28,5 @@ ## 4. 下一步行动指南 (Next Steps) 新接手 AI 进来后应当立即执行的前 3 步命令或编辑操作: 1. **第一步**:执行 `go test ./controller/...` 确认环境并复现 Fail 异常。 -2. **第二步**:修改 `openflare_server/controller/xxx.go` 中的逻辑以修复该 Fail。 +2. **第二步**:修改 `openflare-server/controller/xxx.go` 中的逻辑以修复该 Fail。 3. **第三步**:在管理端前端页面调试 xxx 表单的提交是否正常。 diff --git a/docs/plan/implementation-plan-template.md b/docs/plan/implementation-plan-template.md index 68670637..74239d9e 100644 --- a/docs/plan/implementation-plan-template.md +++ b/docs/plan/implementation-plan-template.md @@ -22,17 +22,17 @@ 按模块或组件列出需要修改的物理文件路径及修改点: ### 后端 Server -* #### [NEW] `openflare_server/model/entity.go` +* #### [NEW] `openflare-server/model/entity.go` * 职责:... -* #### [MODIFY] `openflare_server/service/feature.go` +* #### [MODIFY] `openflare-server/service/feature.go` * 职责:... ### 边缘 Agent 与 OpenResty -* #### [MODIFY] `openflare_agent/sync/sync.go` +* #### [MODIFY] `openflare-agent/sync/sync.go` * 职责:... ### 前端 Web -* #### [NEW] `openflare_server/web/features/feature-view.tsx` +* #### [NEW] `openflare-server/web/features/feature-view.tsx` * 职责:... --- diff --git a/docs/reference/cli.md b/docs/reference/cli.md index de953cf4..94cf316d 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -7,7 +7,7 @@ 源码启动: ```bash -cd openflare_server +cd openflare-server export JWT_SECRET='replace-with-random-string' export SQLITE_PATH='./openflare.db' export LOG_LEVEL='info' @@ -23,7 +23,7 @@ go run . --port 3000 --log-dir ./logs 测试: ```bash -cd openflare_server +cd openflare-server GOCACHE=/tmp/openflare-go-cache go test ./... ``` @@ -32,7 +32,7 @@ GOCACHE=/tmp/openflare-go-cache go test ./... 开发: ```bash -cd openflare_server/web +cd openflare-server/web pnpm install pnpm dev ``` @@ -40,14 +40,14 @@ pnpm dev 构建静态产物: ```bash -cd openflare_server/web +cd openflare-server/web pnpm build ``` 检查: ```bash -cd openflare_server/web +cd openflare-server/web pnpm lint pnpm typecheck pnpm test @@ -58,21 +58,21 @@ pnpm test 源码运行: ```bash -cd openflare_agent +cd openflare-agent go run ./cmd/agent -config /path/to/agent.json ``` 编译: ```bash -cd openflare_agent +cd openflare-agent go build -o openflare-agent ./cmd/agent ``` 测试: ```bash -cd openflare_agent +cd openflare-agent GOCACHE=/tmp/openflare-go-cache go test ./... ``` @@ -81,14 +81,14 @@ GOCACHE=/tmp/openflare-go-cache go test ./... 源码运行: ```bash -cd openflare_relay +cd openflare-relay go run ./cmd -config /path/to/relay.json ``` 编译: ```bash -cd openflare_relay +cd openflare-relay go build -o openflare-relay ./cmd ``` @@ -129,7 +129,7 @@ curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/unin ```bash go install github.com/swaggo/swag/cmd/swag@v1.16.4 -cd openflare_server +cd openflare-server swag init -g main.go -o docs ``` diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index 1a0e18a1..8b14b383 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -46,7 +46,7 @@ Client (内网客户端) 支持: ## Server 命令行参数 ```bash -cd openflare_server +cd openflare-server go run . --port 3000 --log-dir ./logs ``` diff --git a/docs/reference/index.md b/docs/reference/index.md index 1cbd0e7b..24977b8f 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -8,4 +8,4 @@ | --- | --- | | [配置项](./configuration.md) | Server 环境变量、命令行参数、运行时 Option 与 Agent 配置字段 | | [命令与脚本](./cli.md) | 常用启动、构建、测试、安装和卸载命令 | -| [仓库结构](../design/index.md#仓库结构) | `openflare_server`、`openflare_agent`、`openflare_relay`、`openflared` 模块的职责与分层目录说明 | +| [仓库结构](../design/index.md#仓库结构) | `openflare-server`、`openflare-agent`、`openflare-relay`、`openflared` 模块的职责与分层目录说明 | diff --git a/openflare_server/go.mod b/go.mod similarity index 95% rename from openflare_server/go.mod rename to go.mod index e6ff2ba9..bc6f8358 100644 --- a/openflare_server/go.mod +++ b/go.mod @@ -1,8 +1,9 @@ -module openflare +module github.com/rain-kl/openflare go 1.25.7 require ( + github.com/appleboy/gin-jwt/v2 v2.10.3 github.com/bwmarrin/snowflake v0.3.0 github.com/dgraph-io/ristretto/v2 v2.2.0 github.com/expr-lang/expr v1.17.8 @@ -32,14 +33,11 @@ require ( github.com/KyleBanks/depth v1.2.1 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/appleboy/gin-jwt/v2 v2.10.3 // indirect github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect github.com/bytedance/sonic v1.12.9 // indirect github.com/bytedance/sonic/loader v0.2.3 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect - github.com/chenzhuoyu/iasm v0.9.1 // indirect github.com/cloudwego/base64x v0.1.5 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.1 // indirect diff --git a/openflare_server/go.sum b/go.sum similarity index 92% rename from openflare_server/go.sum rename to go.sum index 4dccddfd..cfa3d8ff 100644 --- a/openflare_server/go.sum +++ b/go.sum @@ -8,14 +8,12 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/appleboy/gin-jwt/v2 v2.10.3 h1:KNcPC+XPRNpuoBh+j+rgs5bQxN+SwG/0tHbIqpRoBGc= github.com/appleboy/gin-jwt/v2 v2.10.3/go.mod h1:LDUaQ8mF2W6LyXIbd5wqlV2SFebuyYs4RDwqMNgpsp8= +github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= +github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff h1:RmdPFa+slIr4SCBg4st/l/vZWVe9QJKMXGO60Bxbe04= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= -github.com/bytedance/sonic v1.11.2 h1:ywfwo0a/3j9HR8wsYGWsIWl2mvRsI950HyoxiBERw5A= -github.com/bytedance/sonic v1.11.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/bytedance/sonic v1.12.9 h1:Od1BvK55NnewtGaJsTDeAOSnLVO2BTSLOe0+ooKokmQ= github.com/bytedance/sonic v1.12.9/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -25,13 +23,6 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= -github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= -github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= -github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= -github.com/chenzhuoyu/iasm v0.9.1 h1:tUHQJXo3NhBqw6s33wkGn9SP3bvrWLdlVIJ3hQBL7P0= -github.com/chenzhuoyu/iasm v0.9.1/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= @@ -60,15 +51,12 @@ github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sessions v0.0.5 h1:CATtfHmLMQrMNpJRgzjWXD7worTh7g7ritsQfmF+0jE= github.com/gin-contrib/sessions v0.0.5/go.mod h1:vYAuaUPqie3WUSsft6HUlCjlwwoJQs97miaG2+7neKY= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E= github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0= github.com/gin-contrib/static v0.0.1 h1:JVxuvHPuUfkoul12N7dtQw7KRn/pSMq7Ue1Va9Swm1U= github.com/gin-contrib/static v0.0.1/go.mod h1:CSxeF+wep05e0kCOsqWdAWbSszmc31zTIbD8TvWl7Hs= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= @@ -99,8 +87,6 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.23.0 h1:/PwmTwZhS0dPkav3cdK9kV1FsAmrL8sThn8IHr/sO+o= -github.com/go-playground/validator/v10 v10.23.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= @@ -109,8 +95,6 @@ github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1 github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= @@ -152,8 +136,6 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 h1:9Nu54bhS/H/Kgo2/7xNSUuC5G28VR8ljfrLKU2G4IjU= github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12/go.mod h1:TBzl5BIHNXfS9+C35ZyJaklL7mLDbgUkcgXzSLa8Tk0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= @@ -200,8 +182,6 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE= github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8= -github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI= -github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -238,6 +218,12 @@ github.com/swaggo/gin-swagger v1.6.1 h1:Ri06G4gc9N4t4k8hekMigJ9zKTFSlqj/9paAQCQs github.com/swaggo/gin-swagger v1.6.1/go.mod h1:LQ+hJStHakCWRiK/YNYtJOu4mR2FP+pxLnILT/qNiTw= github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= +github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= +github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -249,9 +235,6 @@ github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfS github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc= -golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4= golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -359,4 +342,3 @@ modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/openflare_agent/.gitignore b/openflare-agent/.gitignore similarity index 100% rename from openflare_agent/.gitignore rename to openflare-agent/.gitignore diff --git a/openflare_agent/Dockerfile b/openflare-agent/Dockerfile similarity index 61% rename from openflare_agent/Dockerfile rename to openflare-agent/Dockerfile index 2811cfad..f82d4a40 100644 --- a/openflare_agent/Dockerfile +++ b/openflare-agent/Dockerfile @@ -12,19 +12,15 @@ ENV CGO_ENABLED=0 \ GOARCH=${TARGETARCH} WORKDIR /build -COPY openflare_server/go.mod openflare_server/go.sum ./openflare_server/ -COPY openflare_agent/go.mod openflare_agent/go.sum ./openflare_agent/ -WORKDIR /build/openflare_agent +COPY go.mod go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ go mod download -WORKDIR /build -COPY openflare_server ./openflare_server -COPY openflare_agent ./openflare_agent -WORKDIR /build/openflare_agent +COPY openflare-server ./openflare-server +COPY openflare-agent ./openflare-agent RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ - go build -trimpath -ldflags "-s -w -X 'openflare-agent/internal/config.Version=$VERSION'" -o /build/openflare-agent ./cmd/agent + go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-agent/internal/config.Version=$VERSION'" -o /build/bin/openflare-agent ./openflare-agent/cmd/agent FROM openresty/openresty:alpine @@ -36,7 +32,7 @@ RUN apk add --no-cache ca-certificates tzdata perl libmaxminddb \ ENV OPENFLARE_OPENRESTY_PATH=openresty \ OPENFLARE_DATA_DIR=/data -COPY --from=builder /build/openflare-agent /usr/local/bin/openflare-agent +COPY --from=builder /build/bin/openflare-agent /usr/local/bin/openflare-agent EXPOSE 80 443 18081 ENTRYPOINT ["/usr/local/bin/openflare-agent"] diff --git a/openflare_agent/agent.json b/openflare-agent/agent.json similarity index 100% rename from openflare_agent/agent.json rename to openflare-agent/agent.json diff --git a/openflare_agent/cmd/agent/main.go b/openflare-agent/cmd/agent/main.go similarity index 83% rename from openflare_agent/cmd/agent/main.go rename to openflare-agent/cmd/agent/main.go index e4ab8fd9..cb3f62a7 100644 --- a/openflare_agent/cmd/agent/main.go +++ b/openflare-agent/cmd/agent/main.go @@ -8,17 +8,17 @@ import ( "os/signal" "syscall" - "openflare-agent/internal/agent" - "openflare-agent/internal/config" - "openflare-agent/internal/geoipupdate" - "openflare-agent/internal/heartbeat" - "openflare-agent/internal/httpclient" - "openflare-agent/internal/logging" - "openflare-agent/internal/nginx" - "openflare-agent/internal/state" - syncservice "openflare-agent/internal/sync" - "openflare-agent/internal/updater" - "openflare-agent/internal/wsclient" + "github.com/rain-kl/openflare/openflare-agent/internal/agent" + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/geoipupdate" + "github.com/rain-kl/openflare/openflare-agent/internal/heartbeat" + "github.com/rain-kl/openflare/openflare-agent/internal/httpclient" + "github.com/rain-kl/openflare/openflare-agent/internal/logging" + "github.com/rain-kl/openflare/openflare-agent/internal/nginx" + "github.com/rain-kl/openflare/openflare-agent/internal/state" + syncservice "github.com/rain-kl/openflare/openflare-agent/internal/sync" + "github.com/rain-kl/openflare/openflare-agent/internal/updater" + "github.com/rain-kl/openflare/openflare-agent/internal/wsclient" ) func main() { diff --git a/openflare_agent/internal/agent/runner.go b/openflare-agent/internal/agent/runner.go similarity index 98% rename from openflare_agent/internal/agent/runner.go rename to openflare-agent/internal/agent/runner.go index 54ccee78..de6ac82d 100644 --- a/openflare_agent/internal/agent/runner.go +++ b/openflare-agent/internal/agent/runner.go @@ -8,11 +8,11 @@ import ( "strings" "time" - "openflare-agent/internal/config" - "openflare-agent/internal/observability" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" - "openflare-agent/internal/wsclient" + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/observability" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" + "github.com/rain-kl/openflare/openflare-agent/internal/wsclient" ) type HeartbeatService interface { diff --git a/openflare_agent/internal/agent/runner_test.go b/openflare-agent/internal/agent/runner_test.go similarity index 99% rename from openflare_agent/internal/agent/runner_test.go rename to openflare-agent/internal/agent/runner_test.go index 45f4ca14..4edc3be4 100644 --- a/openflare_agent/internal/agent/runner_test.go +++ b/openflare-agent/internal/agent/runner_test.go @@ -10,9 +10,9 @@ import ( "testing" "time" - "openflare-agent/internal/config" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" ) type fakeHeartbeatService struct { diff --git a/openflare_agent/internal/config/config.go b/openflare-agent/internal/config/config.go similarity index 98% rename from openflare_agent/internal/config/config.go rename to openflare-agent/internal/config/config.go index 988e94ec..25322df7 100644 --- a/openflare_agent/internal/config/config.go +++ b/openflare-agent/internal/config/config.go @@ -6,15 +6,16 @@ import ( "errors" "fmt" "net" - "openflare/utils" - "openflare/utils/geoip" - "openflare/utils/geoip/iputil" "os" pathpkg "path" "path/filepath" "strconv" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/utils" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "github.com/rain-kl/openflare/openflare-server/utils/geoip/iputil" ) const ( diff --git a/openflare_agent/internal/config/config_test.go b/openflare-agent/internal/config/config_test.go similarity index 99% rename from openflare_agent/internal/config/config_test.go rename to openflare-agent/internal/config/config_test.go index 6328035e..9eb13363 100644 --- a/openflare_agent/internal/config/config_test.go +++ b/openflare-agent/internal/config/config_test.go @@ -5,11 +5,12 @@ import ( "encoding/json" "errors" "net" - "openflare/utils/geoip" "os" "path/filepath" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/utils/geoip" ) func TestLoadDefaultsToManagedBinaryPaths(t *testing.T) { diff --git a/openflare_agent/internal/config/duration.go b/openflare-agent/internal/config/duration.go similarity index 100% rename from openflare_agent/internal/config/duration.go rename to openflare-agent/internal/config/duration.go diff --git a/openflare_agent/internal/config/version.go b/openflare-agent/internal/config/version.go similarity index 100% rename from openflare_agent/internal/config/version.go rename to openflare-agent/internal/config/version.go diff --git a/openflare_agent/internal/geoipdata/GeoLite2-Country.mmdb b/openflare-agent/internal/geoipdata/GeoLite2-Country.mmdb similarity index 100% rename from openflare_agent/internal/geoipdata/GeoLite2-Country.mmdb rename to openflare-agent/internal/geoipdata/GeoLite2-Country.mmdb diff --git a/openflare_agent/internal/geoipdata/data.go b/openflare-agent/internal/geoipdata/data.go similarity index 100% rename from openflare_agent/internal/geoipdata/data.go rename to openflare-agent/internal/geoipdata/data.go diff --git a/openflare_agent/internal/geoipupdate/updater.go b/openflare-agent/internal/geoipupdate/updater.go similarity index 92% rename from openflare_agent/internal/geoipupdate/updater.go rename to openflare-agent/internal/geoipupdate/updater.go index 5e7ae45c..f20843aa 100644 --- a/openflare_agent/internal/geoipupdate/updater.go +++ b/openflare-agent/internal/geoipupdate/updater.go @@ -9,8 +9,8 @@ import ( "path/filepath" "time" - "openflare-agent/internal/geoipdata" - "openflare/utils/geoip" + "github.com/rain-kl/openflare/openflare-agent/internal/geoipdata" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" ) type Updater struct { diff --git a/openflare_agent/internal/geoipupdate/updater_test.go b/openflare-agent/internal/geoipupdate/updater_test.go similarity index 100% rename from openflare_agent/internal/geoipupdate/updater_test.go rename to openflare-agent/internal/geoipupdate/updater_test.go diff --git a/openflare_agent/internal/heartbeat/service.go b/openflare-agent/internal/heartbeat/service.go similarity index 92% rename from openflare_agent/internal/heartbeat/service.go rename to openflare-agent/internal/heartbeat/service.go index 861f8bff..8defec2c 100644 --- a/openflare_agent/internal/heartbeat/service.go +++ b/openflare-agent/internal/heartbeat/service.go @@ -3,7 +3,7 @@ package heartbeat import ( "context" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) type Client interface { diff --git a/openflare_agent/internal/httpclient/client.go b/openflare-agent/internal/httpclient/client.go similarity index 98% rename from openflare_agent/internal/httpclient/client.go rename to openflare-agent/internal/httpclient/client.go index 16ab44f8..1f0327f8 100644 --- a/openflare_agent/internal/httpclient/client.go +++ b/openflare-agent/internal/httpclient/client.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) type Client struct { diff --git a/openflare_agent/internal/logging/logger.go b/openflare-agent/internal/logging/logger.go similarity index 100% rename from openflare_agent/internal/logging/logger.go rename to openflare-agent/internal/logging/logger.go diff --git a/openflare_agent/internal/nginx/manager.go b/openflare-agent/internal/nginx/manager.go similarity index 99% rename from openflare_agent/internal/nginx/manager.go rename to openflare-agent/internal/nginx/manager.go index e585950e..ee7378b6 100644 --- a/openflare_agent/internal/nginx/manager.go +++ b/openflare-agent/internal/nginx/manager.go @@ -20,10 +20,10 @@ import ( "strings" "time" - "openflare/utils" - openrestyrender "openflare/utils/render/openresty" + "github.com/rain-kl/openflare/openflare-server/utils" + openrestyrender "github.com/rain-kl/openflare/openflare-server/utils/render/openresty" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) const RuntimeConfigDirPlaceholder = "__OPENFLARE_RUNTIME_CONFIG_DIR__" diff --git a/openflare_agent/internal/nginx/manager_test.go b/openflare-agent/internal/nginx/manager_test.go similarity index 99% rename from openflare_agent/internal/nginx/manager_test.go rename to openflare-agent/internal/nginx/manager_test.go index f7d271cc..17e65825 100644 --- a/openflare_agent/internal/nginx/manager_test.go +++ b/openflare-agent/internal/nginx/manager_test.go @@ -12,7 +12,7 @@ import ( "strings" "testing" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) type runCall struct { diff --git a/openflare_agent/internal/nginx/mimetypes.go b/openflare-agent/internal/nginx/mimetypes.go similarity index 100% rename from openflare_agent/internal/nginx/mimetypes.go rename to openflare-agent/internal/nginx/mimetypes.go diff --git a/openflare_agent/internal/nginx/observability_assets.go b/openflare-agent/internal/nginx/observability_assets.go similarity index 98% rename from openflare_agent/internal/nginx/observability_assets.go rename to openflare-agent/internal/nginx/observability_assets.go index e830bba4..4d08aebd 100644 --- a/openflare_agent/internal/nginx/observability_assets.go +++ b/openflare-agent/internal/nginx/observability_assets.go @@ -1,6 +1,6 @@ package nginx -import "openflare-agent/internal/protocol" +import "github.com/rain-kl/openflare/openflare-agent/internal/protocol" const ( openRestyObservabilityWindowTTL = "7200" diff --git a/openflare_agent/internal/nginx/pow_assets.go b/openflare-agent/internal/nginx/pow_assets.go similarity index 99% rename from openflare_agent/internal/nginx/pow_assets.go rename to openflare-agent/internal/nginx/pow_assets.go index 7c013bf8..747145a1 100644 --- a/openflare_agent/internal/nginx/pow_assets.go +++ b/openflare-agent/internal/nginx/pow_assets.go @@ -2,9 +2,10 @@ package nginx import ( "embed" - "openflare-agent/internal/protocol" "path/filepath" "strings" + + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) //go:embed pow_static diff --git a/openflare_agent/internal/nginx/pow_static/css/static/geist.woff2 b/openflare-agent/internal/nginx/pow_static/css/static/geist.woff2 similarity index 100% rename from openflare_agent/internal/nginx/pow_static/css/static/geist.woff2 rename to openflare-agent/internal/nginx/pow_static/css/static/geist.woff2 diff --git a/openflare_agent/internal/nginx/pow_static/css/static/iosevka-curly.woff2 b/openflare-agent/internal/nginx/pow_static/css/static/iosevka-curly.woff2 similarity index 100% rename from openflare_agent/internal/nginx/pow_static/css/static/iosevka-curly.woff2 rename to openflare-agent/internal/nginx/pow_static/css/static/iosevka-curly.woff2 diff --git a/openflare_agent/internal/nginx/pow_static/css/static/podkova.css b/openflare-agent/internal/nginx/pow_static/css/static/podkova.css similarity index 100% rename from openflare_agent/internal/nginx/pow_static/css/static/podkova.css rename to openflare-agent/internal/nginx/pow_static/css/static/podkova.css diff --git a/openflare_agent/internal/nginx/pow_static/css/static/podkova.woff2 b/openflare-agent/internal/nginx/pow_static/css/static/podkova.woff2 similarity index 100% rename from openflare_agent/internal/nginx/pow_static/css/static/podkova.woff2 rename to openflare-agent/internal/nginx/pow_static/css/static/podkova.woff2 diff --git a/openflare_agent/internal/nginx/pow_static/css/xess.css b/openflare-agent/internal/nginx/pow_static/css/xess.css similarity index 100% rename from openflare_agent/internal/nginx/pow_static/css/xess.css rename to openflare-agent/internal/nginx/pow_static/css/xess.css diff --git a/openflare_agent/internal/nginx/pow_static/img/happy.webp b/openflare-agent/internal/nginx/pow_static/img/happy.webp similarity index 100% rename from openflare_agent/internal/nginx/pow_static/img/happy.webp rename to openflare-agent/internal/nginx/pow_static/img/happy.webp diff --git a/openflare_agent/internal/nginx/pow_static/img/pensive.webp b/openflare-agent/internal/nginx/pow_static/img/pensive.webp similarity index 100% rename from openflare_agent/internal/nginx/pow_static/img/pensive.webp rename to openflare-agent/internal/nginx/pow_static/img/pensive.webp diff --git a/openflare_agent/internal/nginx/pow_static/img/reject.webp b/openflare-agent/internal/nginx/pow_static/img/reject.webp similarity index 100% rename from openflare_agent/internal/nginx/pow_static/img/reject.webp rename to openflare-agent/internal/nginx/pow_static/img/reject.webp diff --git a/openflare_agent/internal/nginx/pow_static/js/algorithms/index.mjs b/openflare-agent/internal/nginx/pow_static/js/algorithms/index.mjs similarity index 100% rename from openflare_agent/internal/nginx/pow_static/js/algorithms/index.mjs rename to openflare-agent/internal/nginx/pow_static/js/algorithms/index.mjs diff --git a/openflare_agent/internal/nginx/pow_static/js/main.mjs b/openflare-agent/internal/nginx/pow_static/js/main.mjs similarity index 100% rename from openflare_agent/internal/nginx/pow_static/js/main.mjs rename to openflare-agent/internal/nginx/pow_static/js/main.mjs diff --git a/openflare_agent/internal/nginx/pow_static/js/worker/sha256-purejs.mjs b/openflare-agent/internal/nginx/pow_static/js/worker/sha256-purejs.mjs similarity index 100% rename from openflare_agent/internal/nginx/pow_static/js/worker/sha256-purejs.mjs rename to openflare-agent/internal/nginx/pow_static/js/worker/sha256-purejs.mjs diff --git a/openflare_agent/internal/nginx/pow_static/js/worker/sha256-webcrypto.mjs b/openflare-agent/internal/nginx/pow_static/js/worker/sha256-webcrypto.mjs similarity index 100% rename from openflare_agent/internal/nginx/pow_static/js/worker/sha256-webcrypto.mjs rename to openflare-agent/internal/nginx/pow_static/js/worker/sha256-webcrypto.mjs diff --git a/openflare_agent/internal/nginx/pow_static/locales/en.json b/openflare-agent/internal/nginx/pow_static/locales/en.json similarity index 100% rename from openflare_agent/internal/nginx/pow_static/locales/en.json rename to openflare-agent/internal/nginx/pow_static/locales/en.json diff --git a/openflare_agent/internal/nginx/pow_static/locales/zh-CN.json b/openflare-agent/internal/nginx/pow_static/locales/zh-CN.json similarity index 100% rename from openflare_agent/internal/nginx/pow_static/locales/zh-CN.json rename to openflare-agent/internal/nginx/pow_static/locales/zh-CN.json diff --git a/openflare_agent/internal/nginx/waf_assets.go b/openflare-agent/internal/nginx/waf_assets.go similarity index 99% rename from openflare_agent/internal/nginx/waf_assets.go rename to openflare-agent/internal/nginx/waf_assets.go index bfa024b6..18ddfc39 100644 --- a/openflare_agent/internal/nginx/waf_assets.go +++ b/openflare-agent/internal/nginx/waf_assets.go @@ -1,6 +1,6 @@ package nginx -import "openflare-agent/internal/protocol" +import "github.com/rain-kl/openflare/openflare-agent/internal/protocol" const openRestyWAFRuntimeLua = `local _M = {} diff --git a/openflare_agent/internal/observability/collector.go b/openflare-agent/internal/observability/collector.go similarity index 97% rename from openflare_agent/internal/observability/collector.go rename to openflare-agent/internal/observability/collector.go index 54a5b61a..a9b13a61 100644 --- a/openflare_agent/internal/observability/collector.go +++ b/openflare-agent/internal/observability/collector.go @@ -5,9 +5,6 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" - "openflare-agent/internal/config" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" "os" "path/filepath" "runtime" @@ -15,6 +12,10 @@ import ( "strings" "syscall" "time" + + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" ) func BuildProfile(cfg *config.Config, stateStore *state.Store) *protocol.NodeSystemProfile { diff --git a/openflare_agent/internal/observability/openresty_local.go b/openflare-agent/internal/observability/openresty_local.go similarity index 96% rename from openflare_agent/internal/observability/openresty_local.go rename to openflare-agent/internal/observability/openresty_local.go index 876f7c48..c2357ddc 100644 --- a/openflare_agent/internal/observability/openresty_local.go +++ b/openflare-agent/internal/observability/openresty_local.go @@ -5,12 +5,13 @@ import ( "fmt" "io" "net/http" - "openflare-agent/internal/config" - "openflare-agent/internal/protocol" "regexp" "strconv" "strings" "time" + + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) const openRestyObservabilityPath = "/openflare/observability" diff --git a/openflare_agent/internal/observability/openresty_local_test.go b/openflare-agent/internal/observability/openresty_local_test.go similarity index 97% rename from openflare_agent/internal/observability/openresty_local_test.go rename to openflare-agent/internal/observability/openresty_local_test.go index 2b8d3456..81e213e4 100644 --- a/openflare_agent/internal/observability/openresty_local_test.go +++ b/openflare-agent/internal/observability/openresty_local_test.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/config" ) func TestCollectManagedOpenRestyMetrics(t *testing.T) { diff --git a/openflare_agent/internal/observability/traffic.go b/openflare-agent/internal/observability/traffic.go similarity index 98% rename from openflare_agent/internal/observability/traffic.go rename to openflare-agent/internal/observability/traffic.go index 16b50ba5..7ceed5d4 100644 --- a/openflare_agent/internal/observability/traffic.go +++ b/openflare-agent/internal/observability/traffic.go @@ -6,15 +6,16 @@ import ( "errors" "io" "log/slog" - "openflare-agent/internal/config" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" "os" "regexp" "sort" "strconv" "strings" "time" + + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" ) type accessLogRecord struct { diff --git a/openflare_agent/internal/observability/traffic_test.go b/openflare-agent/internal/observability/traffic_test.go similarity index 97% rename from openflare_agent/internal/observability/traffic_test.go rename to openflare-agent/internal/observability/traffic_test.go index 5c19e216..700d5135 100644 --- a/openflare_agent/internal/observability/traffic_test.go +++ b/openflare-agent/internal/observability/traffic_test.go @@ -6,9 +6,9 @@ import ( "strings" "testing" - "openflare-agent/internal/config" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" + "github.com/rain-kl/openflare/openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" ) func TestBuildTrafficReportAggregatesManagedAccessLog(t *testing.T) { diff --git a/openflare_agent/internal/protocol/agent_api.go b/openflare-agent/internal/protocol/agent_api.go similarity index 100% rename from openflare_agent/internal/protocol/agent_api.go rename to openflare-agent/internal/protocol/agent_api.go diff --git a/openflare_agent/internal/state/observability_buffer.go b/openflare-agent/internal/state/observability_buffer.go similarity index 99% rename from openflare_agent/internal/state/observability_buffer.go rename to openflare-agent/internal/state/observability_buffer.go index 236564db..21a1436c 100644 --- a/openflare_agent/internal/state/observability_buffer.go +++ b/openflare-agent/internal/state/observability_buffer.go @@ -8,7 +8,7 @@ import ( "strconv" "sync" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) const observabilityBufferWindowSeconds = 60 diff --git a/openflare_agent/internal/state/observability_buffer_test.go b/openflare-agent/internal/state/observability_buffer_test.go similarity index 98% rename from openflare_agent/internal/state/observability_buffer_test.go rename to openflare-agent/internal/state/observability_buffer_test.go index 93aab010..5764f8cb 100644 --- a/openflare_agent/internal/state/observability_buffer_test.go +++ b/openflare-agent/internal/state/observability_buffer_test.go @@ -4,7 +4,7 @@ import ( "path/filepath" "testing" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) func TestObservabilityBufferStoreUpsertReplayAndAck(t *testing.T) { diff --git a/openflare_agent/internal/state/state.go b/openflare-agent/internal/state/state.go similarity index 100% rename from openflare_agent/internal/state/state.go rename to openflare-agent/internal/state/state.go diff --git a/openflare_agent/internal/state/state_test.go b/openflare-agent/internal/state/state_test.go similarity index 100% rename from openflare_agent/internal/state/state_test.go rename to openflare-agent/internal/state/state_test.go diff --git a/openflare_agent/internal/sync/pages.go b/openflare-agent/internal/sync/pages.go similarity index 99% rename from openflare_agent/internal/sync/pages.go rename to openflare-agent/internal/sync/pages.go index e3025442..3faa89ac 100644 --- a/openflare_agent/internal/sync/pages.go +++ b/openflare-agent/internal/sync/pages.go @@ -15,7 +15,7 @@ import ( "path/filepath" "strings" - "openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" ) type pagesSourceDocument struct { diff --git a/openflare_agent/internal/sync/service.go b/openflare-agent/internal/sync/service.go similarity index 98% rename from openflare_agent/internal/sync/service.go rename to openflare-agent/internal/sync/service.go index 132b3a2d..4138f963 100644 --- a/openflare_agent/internal/sync/service.go +++ b/openflare-agent/internal/sync/service.go @@ -8,13 +8,14 @@ import ( "errors" "fmt" "log/slog" - openrestyrender "openflare/utils/render/openresty" "sort" "strings" - "openflare-agent/internal/nginx" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" + openrestyrender "github.com/rain-kl/openflare/openflare-server/utils/render/openresty" + + "github.com/rain-kl/openflare/openflare-agent/internal/nginx" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" ) const ( diff --git a/openflare_agent/internal/sync/service_test.go b/openflare-agent/internal/sync/service_test.go similarity index 99% rename from openflare_agent/internal/sync/service_test.go rename to openflare-agent/internal/sync/service_test.go index bf989e24..033bc623 100644 --- a/openflare_agent/internal/sync/service_test.go +++ b/openflare-agent/internal/sync/service_test.go @@ -13,9 +13,9 @@ import ( "testing" "time" - "openflare-agent/internal/nginx" - "openflare-agent/internal/protocol" - "openflare-agent/internal/state" + "github.com/rain-kl/openflare/openflare-agent/internal/nginx" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + "github.com/rain-kl/openflare/openflare-agent/internal/state" ) type fakeExecutor struct { diff --git a/openflare_agent/internal/updater/restart_unix.go b/openflare-agent/internal/updater/restart_unix.go similarity index 100% rename from openflare_agent/internal/updater/restart_unix.go rename to openflare-agent/internal/updater/restart_unix.go diff --git a/openflare_agent/internal/updater/restart_unix_test.go b/openflare-agent/internal/updater/restart_unix_test.go similarity index 100% rename from openflare_agent/internal/updater/restart_unix_test.go rename to openflare-agent/internal/updater/restart_unix_test.go diff --git a/openflare_agent/internal/updater/restart_windows.go b/openflare-agent/internal/updater/restart_windows.go similarity index 100% rename from openflare_agent/internal/updater/restart_windows.go rename to openflare-agent/internal/updater/restart_windows.go diff --git a/openflare_agent/internal/updater/updater.go b/openflare-agent/internal/updater/updater.go similarity index 98% rename from openflare_agent/internal/updater/updater.go rename to openflare-agent/internal/updater/updater.go index 44986180..02fc2bbb 100644 --- a/openflare_agent/internal/updater/updater.go +++ b/openflare-agent/internal/updater/updater.go @@ -9,14 +9,15 @@ import ( "io" "log/slog" "net/http" - "openflare/utils" "os" "runtime" "strings" "time" - "openflare-agent/internal/agent" - "openflare-agent/internal/config" + "github.com/rain-kl/openflare/openflare-server/utils" + + "github.com/rain-kl/openflare/openflare-agent/internal/agent" + "github.com/rain-kl/openflare/openflare-agent/internal/config" ) const maxChecksumAssetSize = 64 * 1024 diff --git a/openflare_agent/internal/updater/updater_test.go b/openflare-agent/internal/updater/updater_test.go similarity index 98% rename from openflare_agent/internal/updater/updater_test.go rename to openflare-agent/internal/updater/updater_test.go index f4a34293..43b29e41 100644 --- a/openflare_agent/internal/updater/updater_test.go +++ b/openflare-agent/internal/updater/updater_test.go @@ -6,13 +6,14 @@ import ( "encoding/hex" "io" "net/http" - "openflare-agent/internal/agent" - "openflare-agent/internal/config" "os" "path/filepath" "runtime" "strings" "testing" + + "github.com/rain-kl/openflare/openflare-agent/internal/agent" + "github.com/rain-kl/openflare/openflare-agent/internal/config" ) type roundTripFunc func(req *http.Request) (*http.Response, error) diff --git a/openflare_agent/internal/wsclient/client.go b/openflare-agent/internal/wsclient/client.go similarity index 92% rename from openflare_agent/internal/wsclient/client.go rename to openflare-agent/internal/wsclient/client.go index 2e85a96e..cb2792c0 100644 --- a/openflare_agent/internal/wsclient/client.go +++ b/openflare-agent/internal/wsclient/client.go @@ -4,8 +4,8 @@ import ( "context" "time" - "openflare-agent/internal/protocol" - shared "openflare/utils/wsclient" + "github.com/rain-kl/openflare/openflare-agent/internal/protocol" + shared "github.com/rain-kl/openflare/openflare-server/utils/wsclient" ) type WSMessage = shared.WSMessage diff --git a/openflare-relay/.gitignore b/openflare-relay/.gitignore new file mode 100644 index 00000000..5fac6285 --- /dev/null +++ b/openflare-relay/.gitignore @@ -0,0 +1 @@ +/data/ \ No newline at end of file diff --git a/openflare-relay/Dockerfile b/openflare-relay/Dockerfile new file mode 100644 index 00000000..64c2d5b8 --- /dev/null +++ b/openflare-relay/Dockerfile @@ -0,0 +1,33 @@ +# syntax=docker/dockerfile:1.7 +ARG VERSION=dev + +FROM golang:1.25-alpine AS builder + +ARG VERSION + +WORKDIR /build +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download + +COPY openflare-server ./openflare-server +COPY openflare-relay ./openflare-relay +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-relay/internal/config.Version=$VERSION'" -o /build/bin/openflare-relay ./openflare-relay/cmd/relay + +# Final runtime image +FROM fatedier/frps:v0.69.0 + +WORKDIR /app + +# Copy openflare-relay binary +COPY --from=builder /build/bin/openflare-relay ./openflare-relay + +VOLUME ["/app/data"] + +ENV OPENFLARE_FRPS_PATH=/usr/bin/frps +ENV OPENFLARE_DATA_DIR=/app/data + +ENTRYPOINT ["/app/openflare-relay"] + diff --git a/openflare_relay/cmd/relay/main.go b/openflare-relay/cmd/relay/main.go similarity index 81% rename from openflare_relay/cmd/relay/main.go rename to openflare-relay/cmd/relay/main.go index 61d5a910..06137f45 100644 --- a/openflare_relay/cmd/relay/main.go +++ b/openflare-relay/cmd/relay/main.go @@ -9,13 +9,13 @@ import ( "strings" "syscall" - "openflare-relay/internal/config" - "openflare-relay/internal/frps" - "openflare-relay/internal/heartbeat" - "openflare-relay/internal/httpclient" - "openflare-relay/internal/relay" - "openflare-relay/internal/state" - "openflare-relay/internal/wsclient" + "github.com/rain-kl/openflare/openflare-relay/internal/config" + "github.com/rain-kl/openflare/openflare-relay/internal/frps" + "github.com/rain-kl/openflare/openflare-relay/internal/heartbeat" + "github.com/rain-kl/openflare/openflare-relay/internal/httpclient" + "github.com/rain-kl/openflare/openflare-relay/internal/relay" + "github.com/rain-kl/openflare/openflare-relay/internal/state" + "github.com/rain-kl/openflare/openflare-relay/internal/wsclient" ) func main() { diff --git a/openflare_relay/internal/config/config.go b/openflare-relay/internal/config/config.go similarity index 97% rename from openflare_relay/internal/config/config.go rename to openflare-relay/internal/config/config.go index 07382997..7a28c1fd 100644 --- a/openflare_relay/internal/config/config.go +++ b/openflare-relay/internal/config/config.go @@ -5,12 +5,13 @@ import ( "encoding/json" "errors" "net" - "openflare/utils/geoip" - "openflare/utils/geoip/iputil" "os" "path/filepath" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "github.com/rain-kl/openflare/openflare-server/utils/geoip/iputil" ) type MillisecondDuration time.Duration diff --git a/openflare_relay/internal/config/version.go b/openflare-relay/internal/config/version.go similarity index 100% rename from openflare_relay/internal/config/version.go rename to openflare-relay/internal/config/version.go diff --git a/openflare_relay/internal/frps/manager.go b/openflare-relay/internal/frps/manager.go similarity index 99% rename from openflare_relay/internal/frps/manager.go rename to openflare-relay/internal/frps/manager.go index 650b487e..b2168b4a 100644 --- a/openflare_relay/internal/frps/manager.go +++ b/openflare-relay/internal/frps/manager.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" ) type Manager struct { diff --git a/openflare_relay/internal/frps/manager_test.go b/openflare-relay/internal/frps/manager_test.go similarity index 99% rename from openflare_relay/internal/frps/manager_test.go rename to openflare-relay/internal/frps/manager_test.go index d4092e07..ba63a634 100644 --- a/openflare_relay/internal/frps/manager_test.go +++ b/openflare-relay/internal/frps/manager_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" ) // Helper to write control file for the dummy script diff --git a/openflare_relay/internal/heartbeat/service.go b/openflare-relay/internal/heartbeat/service.go similarity index 85% rename from openflare_relay/internal/heartbeat/service.go rename to openflare-relay/internal/heartbeat/service.go index 8b3f24d0..0bf5fff6 100644 --- a/openflare_relay/internal/heartbeat/service.go +++ b/openflare-relay/internal/heartbeat/service.go @@ -5,13 +5,13 @@ import ( "log/slog" "time" - "openflare-relay/internal/config" - "openflare-relay/internal/frps" - "openflare-relay/internal/httpclient" - "openflare-relay/internal/observability" - "openflare-relay/internal/state" - "openflare-relay/internal/updater" - "openflare/service" + "github.com/rain-kl/openflare/openflare-relay/internal/config" + "github.com/rain-kl/openflare/openflare-relay/internal/frps" + "github.com/rain-kl/openflare/openflare-relay/internal/httpclient" + "github.com/rain-kl/openflare/openflare-relay/internal/observability" + "github.com/rain-kl/openflare/openflare-relay/internal/state" + "github.com/rain-kl/openflare/openflare-relay/internal/updater" + "github.com/rain-kl/openflare/openflare-server/service" ) type Service struct { diff --git a/openflare_relay/internal/httpclient/client.go b/openflare-relay/internal/httpclient/client.go similarity index 98% rename from openflare_relay/internal/httpclient/client.go rename to openflare-relay/internal/httpclient/client.go index 30a7aa7b..5a27ccaf 100644 --- a/openflare_relay/internal/httpclient/client.go +++ b/openflare-relay/internal/httpclient/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" ) type APIResponse[T any] struct { diff --git a/openflare_relay/internal/observability/collector.go b/openflare-relay/internal/observability/collector.go similarity index 96% rename from openflare_relay/internal/observability/collector.go rename to openflare-relay/internal/observability/collector.go index f0c0ad9d..ad12c891 100644 --- a/openflare_relay/internal/observability/collector.go +++ b/openflare-relay/internal/observability/collector.go @@ -13,10 +13,10 @@ import ( "syscall" "time" - "openflare-relay/internal/config" - "openflare-relay/internal/frps" - "openflare-relay/internal/state" - "openflare/service" + "github.com/rain-kl/openflare/openflare-relay/internal/config" + "github.com/rain-kl/openflare/openflare-relay/internal/frps" + "github.com/rain-kl/openflare/openflare-relay/internal/state" + "github.com/rain-kl/openflare/openflare-server/service" ) func BuildProfile(cfg *config.Config, stateStore *state.Store) *service.AgentNodeSystemProfile { diff --git a/openflare_relay/internal/relay/runner.go b/openflare-relay/internal/relay/runner.go similarity index 80% rename from openflare_relay/internal/relay/runner.go rename to openflare-relay/internal/relay/runner.go index 752c673c..1c899b36 100644 --- a/openflare_relay/internal/relay/runner.go +++ b/openflare-relay/internal/relay/runner.go @@ -6,13 +6,13 @@ import ( "log/slog" "time" - "openflare-relay/internal/config" - "openflare-relay/internal/frps" - "openflare-relay/internal/heartbeat" - "openflare-relay/internal/httpclient" - "openflare-relay/internal/state" - "openflare-relay/internal/wsclient" - "openflare/service" + "github.com/rain-kl/openflare/openflare-relay/internal/config" + "github.com/rain-kl/openflare/openflare-relay/internal/frps" + "github.com/rain-kl/openflare/openflare-relay/internal/heartbeat" + "github.com/rain-kl/openflare/openflare-relay/internal/httpclient" + "github.com/rain-kl/openflare/openflare-relay/internal/state" + "github.com/rain-kl/openflare/openflare-relay/internal/wsclient" + "github.com/rain-kl/openflare/openflare-server/service" ) type Runner struct { diff --git a/openflare_relay/internal/state/store.go b/openflare-relay/internal/state/store.go similarity index 100% rename from openflare_relay/internal/state/store.go rename to openflare-relay/internal/state/store.go diff --git a/openflare_relay/internal/updater/restart_unix.go b/openflare-relay/internal/updater/restart_unix.go similarity index 100% rename from openflare_relay/internal/updater/restart_unix.go rename to openflare-relay/internal/updater/restart_unix.go diff --git a/openflare_relay/internal/updater/restart_windows.go b/openflare-relay/internal/updater/restart_windows.go similarity index 100% rename from openflare_relay/internal/updater/restart_windows.go rename to openflare-relay/internal/updater/restart_windows.go diff --git a/openflare_relay/internal/updater/updater.go b/openflare-relay/internal/updater/updater.go similarity index 98% rename from openflare_relay/internal/updater/updater.go rename to openflare-relay/internal/updater/updater.go index f4e52a87..5332243b 100644 --- a/openflare_relay/internal/updater/updater.go +++ b/openflare-relay/internal/updater/updater.go @@ -9,13 +9,14 @@ import ( "io" "log/slog" "net/http" - "openflare/utils" "os" "runtime" "strings" "time" - "openflare-relay/internal/config" + "github.com/rain-kl/openflare/openflare-server/utils" + + "github.com/rain-kl/openflare/openflare-relay/internal/config" ) const maxChecksumAssetSize = 64 * 1024 diff --git a/openflare_relay/internal/wsclient/client.go b/openflare-relay/internal/wsclient/client.go similarity index 92% rename from openflare_relay/internal/wsclient/client.go rename to openflare-relay/internal/wsclient/client.go index e2438ea6..42fe160e 100644 --- a/openflare_relay/internal/wsclient/client.go +++ b/openflare-relay/internal/wsclient/client.go @@ -5,8 +5,8 @@ import ( "encoding/json" "time" - "openflare/service" - shared "openflare/utils/wsclient" + "github.com/rain-kl/openflare/openflare-server/service" + shared "github.com/rain-kl/openflare/openflare-server/utils/wsclient" ) type WSMessage = shared.WSMessage diff --git a/openflare_server/.dockerignore b/openflare-server/.dockerignore similarity index 100% rename from openflare_server/.dockerignore rename to openflare-server/.dockerignore diff --git a/openflare_server/.gitignore b/openflare-server/.gitignore similarity index 100% rename from openflare_server/.gitignore rename to openflare-server/.gitignore diff --git a/openflare_server/Dockerfile b/openflare-server/Dockerfile similarity index 72% rename from openflare_server/Dockerfile rename to openflare-server/Dockerfile index d5dd33bd..aaeb7655 100644 --- a/openflare_server/Dockerfile +++ b/openflare-server/Dockerfile @@ -1,38 +1,38 @@ -# syntax=docker/dockerfile:1.7 -ARG VERSION=dev -FROM node:20 AS web-builder -ARG VERSION -WORKDIR /build -RUN corepack enable -COPY ./web/package.json ./web/pnpm-lock.yaml ./ -RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ - pnpm install --frozen-lockfile -COPY ./web ./ -RUN --mount=type=cache,id=next-cache,target=/build/.next/cache \ - NEXT_PUBLIC_APP_VERSION="$VERSION" pnpm build - -FROM golang:1.25 AS go-builder -ARG VERSION -ENV GO111MODULE=on \ - CGO_ENABLED=0 \ - GOOS=linux -WORKDIR /build -COPY go.mod go.sum ./ -RUN --mount=type=cache,target=/go/pkg/mod \ - go mod download -COPY . . -COPY --from=web-builder /build/build ./web/build -RUN --mount=type=cache,target=/go/pkg/mod \ - --mount=type=cache,target=/root/.cache/go-build \ - go build -trimpath \ - -ldflags "-s -w -X 'openflare/common.Version=$VERSION'" \ - -o openflare - -FROM alpine:latest -RUN apk add --no-cache ca-certificates tzdata \ - && update-ca-certificates 2>/dev/null || true -ENV PORT=3000 -COPY --from=go-builder /build/openflare /openflare -EXPOSE 3000 -WORKDIR /data -ENTRYPOINT ["/openflare"] +# syntax=docker/dockerfile:1.7 +ARG VERSION=dev +FROM node:20 AS web-builder +ARG VERSION +WORKDIR /build +RUN corepack enable +COPY openflare-server/web/package.json openflare-server/web/pnpm-lock.yaml ./ +RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ + pnpm install --frozen-lockfile +COPY openflare-server/web ./ +RUN --mount=type=cache,id=next-cache,target=/build/.next/cache \ + NEXT_PUBLIC_APP_VERSION="$VERSION" pnpm build + +FROM golang:1.25 AS go-builder +ARG VERSION +ENV GO111MODULE=on \ + CGO_ENABLED=0 \ + GOOS=linux +WORKDIR /build +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download +COPY openflare-server ./openflare-server +COPY --from=web-builder /build/build ./openflare-server/web/build +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + go build -trimpath \ + -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflare-server/common.Version=$VERSION'" \ + -o openflare ./openflare-server + +FROM alpine:latest +RUN apk add --no-cache ca-certificates tzdata \ + && update-ca-certificates 2>/dev/null || true +ENV PORT=3000 +COPY --from=go-builder /build/openflare /openflare +EXPOSE 3000 +WORKDIR /data +ENTRYPOINT ["/openflare"] diff --git a/openflare_server/common/constants.go b/openflare-server/common/constants.go similarity index 100% rename from openflare_server/common/constants.go rename to openflare-server/common/constants.go diff --git a/openflare_server/common/init.go b/openflare-server/common/init.go similarity index 97% rename from openflare_server/common/init.go rename to openflare-server/common/init.go index fcd4b7a1..b8d409d0 100644 --- a/openflare_server/common/init.go +++ b/openflare-server/common/init.go @@ -24,7 +24,7 @@ func printHelp() { } // ParseFlags 在命令行参数被任何 import 链上的 init() 误解析之前, -// 由各 binary 的 main() 显式调用一次。openflare_server 与 openflare-relay +// 由各 binary 的 main() 显式调用一次。openflare-server 与 openflare-relay // 共用 flag.CommandLine,必须先注册各自的 flag 再调用本函数。 // 测试场景(go test)下不会执行本函数,单元测试可直接跳过命令行解析。 func ParseFlags() { diff --git a/openflare_server/common/logger.go b/openflare-server/common/logger.go similarity index 100% rename from openflare_server/common/logger.go rename to openflare-server/common/logger.go diff --git a/openflare_server/common/redis.go b/openflare-server/common/redis.go similarity index 100% rename from openflare_server/common/redis.go rename to openflare-server/common/redis.go diff --git a/openflare_server/common/response/response.go b/openflare-server/common/response/response.go similarity index 100% rename from openflare_server/common/response/response.go rename to openflare-server/common/response/response.go diff --git a/openflare_server/controller/access_log.go b/openflare-server/controller/access_log.go similarity index 97% rename from openflare_server/controller/access_log.go rename to openflare-server/controller/access_log.go index 9338eb24..1edcfade 100644 --- a/openflare_server/controller/access_log.go +++ b/openflare-server/controller/access_log.go @@ -1,11 +1,12 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" "strconv" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/acme_account.go b/openflare-server/controller/acme_account.go similarity index 80% rename from openflare_server/controller/acme_account.go rename to openflare-server/controller/acme_account.go index 4e0dbd18..d21f50a7 100644 --- a/openflare_server/controller/acme_account.go +++ b/openflare-server/controller/acme_account.go @@ -1,8 +1,8 @@ package controller import ( - "openflare/common/response" - "openflare/model" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/model" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/agent.go b/openflare-server/controller/agent.go similarity index 97% rename from openflare_server/controller/agent.go rename to openflare-server/controller/agent.go index 8862c5fa..c2e7d577 100644 --- a/openflare_server/controller/agent.go +++ b/openflare-server/controller/agent.go @@ -4,14 +4,15 @@ import ( "encoding/json" "log/slog" "net" - "openflare/common" - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" - "openflare/service" "strconv" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" "golang.org/x/net/websocket" ) diff --git a/openflare_server/controller/auth_source.go b/openflare-server/controller/auth_source.go similarity index 97% rename from openflare_server/controller/auth_source.go rename to openflare-server/controller/auth_source.go index 151625fa..cdefac83 100644 --- a/openflare_server/controller/auth_source.go +++ b/openflare-server/controller/auth_source.go @@ -4,14 +4,15 @@ import ( "encoding/json" "fmt" "net/url" - "openflare/common" - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" - "openflare/service" "strconv" "strings" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/bind/bind.go b/openflare-server/controller/bind/bind.go similarity index 94% rename from openflare_server/controller/bind/bind.go rename to openflare-server/controller/bind/bind.go index 0d91dd22..9db5efbd 100644 --- a/openflare_server/controller/bind/bind.go +++ b/openflare-server/controller/bind/bind.go @@ -8,7 +8,7 @@ import ( "github.com/gin-gonic/gin" - "openflare/common/response" + "github.com/rain-kl/openflare/openflare-server/common/response" ) // DecodeJSONBody decodes JSON reader to target diff --git a/openflare_server/controller/config_version.go b/openflare-server/controller/config_version.go similarity index 95% rename from openflare_server/controller/config_version.go rename to openflare-server/controller/config_version.go index 92aed5b6..27790e20 100644 --- a/openflare_server/controller/config_version.go +++ b/openflare-server/controller/config_version.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/dashboard.go b/openflare-server/controller/dashboard.go similarity index 97% rename from openflare_server/controller/dashboard.go rename to openflare-server/controller/dashboard.go index 0f15aa07..96fdb7c1 100644 --- a/openflare_server/controller/dashboard.go +++ b/openflare-server/controller/dashboard.go @@ -1,8 +1,8 @@ package controller import ( - "openflare/common/response" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/database.go b/openflare-server/controller/database.go similarity index 78% rename from openflare_server/controller/database.go rename to openflare-server/controller/database.go index 80ff0901..939cb7bb 100644 --- a/openflare_server/controller/database.go +++ b/openflare-server/controller/database.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/dns_account.go b/openflare-server/controller/dns_account.go similarity index 94% rename from openflare_server/controller/dns_account.go rename to openflare-server/controller/dns_account.go index a44a2dc7..ba1961ad 100644 --- a/openflare_server/controller/dns_account.go +++ b/openflare-server/controller/dns_account.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/flared.go b/openflare-server/controller/flared.go similarity index 94% rename from openflare_server/controller/flared.go rename to openflare-server/controller/flared.go index c28a0779..575c949d 100644 --- a/openflare_server/controller/flared.go +++ b/openflare-server/controller/flared.go @@ -3,13 +3,14 @@ package controller import ( "log/slog" "net" - "openflare/common" - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" - "openflare/service" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" "golang.org/x/net/websocket" ) diff --git a/openflare_server/controller/geoip.go b/openflare-server/controller/geoip.go similarity index 80% rename from openflare_server/controller/geoip.go rename to openflare-server/controller/geoip.go index ef7510a4..df5ac035 100644 --- a/openflare_server/controller/geoip.go +++ b/openflare-server/controller/geoip.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/github.go b/openflare-server/controller/github.go similarity index 95% rename from openflare_server/controller/github.go rename to openflare-server/controller/github.go index 68447c2c..461b8b7e 100644 --- a/openflare_server/controller/github.go +++ b/openflare-server/controller/github.go @@ -7,11 +7,12 @@ import ( "fmt" "log/slog" "net/http" - "openflare/common" - "openflare/common/response" - "openflare/model" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/managed_domain.go b/openflare-server/controller/managed_domain.go similarity index 94% rename from openflare_server/controller/managed_domain.go rename to openflare-server/controller/managed_domain.go index ca7df654..bd2c4b44 100644 --- a/openflare_server/controller/managed_domain.go +++ b/openflare-server/controller/managed_domain.go @@ -1,11 +1,12 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" "strings" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/misc.go b/openflare-server/controller/misc.go similarity index 90% rename from openflare_server/controller/misc.go rename to openflare-server/controller/misc.go index 432a53e2..2a549c6c 100644 --- a/openflare_server/controller/misc.go +++ b/openflare-server/controller/misc.go @@ -2,14 +2,15 @@ package controller import ( "fmt" - "openflare/common" - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" - "openflare/service" - "openflare/utils/mail" - "openflare/utils/security" - "openflare/utils/validation" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflare-server/utils/mail" + "github.com/rain-kl/openflare/openflare-server/utils/security" + "github.com/rain-kl/openflare/openflare-server/utils/validation" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/node.go b/openflare-server/controller/node.go similarity index 97% rename from openflare_server/controller/node.go rename to openflare-server/controller/node.go index 03820bf5..1d333d9f 100644 --- a/openflare_server/controller/node.go +++ b/openflare-server/controller/node.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/option.go b/openflare-server/controller/option.go similarity index 96% rename from openflare_server/controller/option.go rename to openflare-server/controller/option.go index 01026f28..68c1cc5e 100644 --- a/openflare_server/controller/option.go +++ b/openflare-server/controller/option.go @@ -2,17 +2,18 @@ package controller import ( "fmt" - "openflare/common" - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" - "openflare/service" - "openflare/utils" - "openflare/utils/geoip" "regexp" "strconv" "strings" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflare-server/utils" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/option_test.go b/openflare-server/controller/option_test.go similarity index 100% rename from openflare_server/controller/option_test.go rename to openflare-server/controller/option_test.go diff --git a/openflare_server/controller/origin.go b/openflare-server/controller/origin.go similarity index 87% rename from openflare_server/controller/origin.go rename to openflare-server/controller/origin.go index cd2505c9..3482343e 100644 --- a/openflare_server/controller/origin.go +++ b/openflare-server/controller/origin.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/pages.go b/openflare-server/controller/pages.go similarity index 94% rename from openflare_server/controller/pages.go rename to openflare-server/controller/pages.go index 84d0f4dc..8075fad1 100644 --- a/openflare_server/controller/pages.go +++ b/openflare-server/controller/pages.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/proxy_route.go b/openflare-server/controller/proxy_route.go similarity index 93% rename from openflare_server/controller/proxy_route.go rename to openflare-server/controller/proxy_route.go index 05c60ed6..9764bfcc 100644 --- a/openflare_server/controller/proxy_route.go +++ b/openflare-server/controller/proxy_route.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/relay.go b/openflare-server/controller/relay.go similarity index 93% rename from openflare_server/controller/relay.go rename to openflare-server/controller/relay.go index 12bd7693..e8b3d36c 100644 --- a/openflare_server/controller/relay.go +++ b/openflare-server/controller/relay.go @@ -3,12 +3,13 @@ package controller import ( "log/slog" "net" - "openflare/common/response" - "openflare/controller/bind" - "openflare/model" - "openflare/service" "time" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" "golang.org/x/net/websocket" ) diff --git a/openflare_server/controller/tls_certificate.go b/openflare-server/controller/tls_certificate.go similarity index 97% rename from openflare_server/controller/tls_certificate.go rename to openflare-server/controller/tls_certificate.go index ca8f56e9..960c8e29 100644 --- a/openflare_server/controller/tls_certificate.go +++ b/openflare-server/controller/tls_certificate.go @@ -1,9 +1,9 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/update.go b/openflare-server/controller/update.go similarity index 95% rename from openflare_server/controller/update.go rename to openflare-server/controller/update.go index 6510ddb6..49236213 100644 --- a/openflare_server/controller/update.go +++ b/openflare-server/controller/update.go @@ -1,11 +1,12 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" "time" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" "golang.org/x/net/websocket" ) diff --git a/openflare_server/controller/uptimekuma.go b/openflare-server/controller/uptimekuma.go similarity index 80% rename from openflare_server/controller/uptimekuma.go rename to openflare-server/controller/uptimekuma.go index 737be24a..5585b351 100644 --- a/openflare_server/controller/uptimekuma.go +++ b/openflare-server/controller/uptimekuma.go @@ -1,8 +1,8 @@ package controller import ( - "openflare/common/response" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/user.go b/openflare-server/controller/user.go similarity index 95% rename from openflare_server/controller/user.go rename to openflare-server/controller/user.go index fa5d2e90..06b008f3 100644 --- a/openflare_server/controller/user.go +++ b/openflare-server/controller/user.go @@ -1,15 +1,16 @@ package controller import ( - "openflare/common" - "openflare/common/response" - "openflare/controller/bind" - "openflare/middleware" - "openflare/model" - "openflare/utils/security" - "openflare/utils/validation" "strconv" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/middleware" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils/security" + "github.com/rain-kl/openflare/openflare-server/utils/validation" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/waf.go b/openflare-server/controller/waf.go similarity index 95% rename from openflare_server/controller/waf.go rename to openflare-server/controller/waf.go index e0b0c536..f7482a16 100644 --- a/openflare_server/controller/waf.go +++ b/openflare-server/controller/waf.go @@ -1,11 +1,12 @@ package controller import ( - "openflare/common/response" - "openflare/controller/bind" - "openflare/service" "strconv" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/controller/bind" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/controller/wechat.go b/openflare-server/controller/wechat.go similarity index 93% rename from openflare_server/controller/wechat.go rename to openflare-server/controller/wechat.go index 08611d38..9d5cbc66 100644 --- a/openflare_server/controller/wechat.go +++ b/openflare-server/controller/wechat.go @@ -7,11 +7,12 @@ import ( "io" "log/slog" "net/http" - "openflare/common" - "openflare/common/response" - "openflare/model" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/docker-compose.yaml b/openflare-server/docker-compose.yaml similarity index 100% rename from openflare_server/docker-compose.yaml rename to openflare-server/docker-compose.yaml diff --git a/openflare_server/docs/docs.go b/openflare-server/docs/docs.go similarity index 100% rename from openflare_server/docs/docs.go rename to openflare-server/docs/docs.go diff --git a/openflare_server/docs/swagger.json b/openflare-server/docs/swagger.json similarity index 100% rename from openflare_server/docs/swagger.json rename to openflare-server/docs/swagger.json diff --git a/openflare_server/docs/swagger.yaml b/openflare-server/docs/swagger.yaml similarity index 100% rename from openflare_server/docs/swagger.yaml rename to openflare-server/docs/swagger.yaml diff --git a/openflare_server/job/cron.go b/openflare-server/job/cron.go similarity index 100% rename from openflare_server/job/cron.go rename to openflare-server/job/cron.go diff --git a/openflare_server/job/ssl_renew.go b/openflare-server/job/ssl_renew.go similarity index 90% rename from openflare_server/job/ssl_renew.go rename to openflare-server/job/ssl_renew.go index 4c4af7e4..f7a15d11 100644 --- a/openflare_server/job/ssl_renew.go +++ b/openflare-server/job/ssl_renew.go @@ -2,9 +2,10 @@ package job import ( "log/slog" - "openflare/model" - "openflare/service" "time" + + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/service" ) type SSLRenewJob struct { diff --git a/openflare_server/job/uptimekuma.go b/openflare-server/job/uptimekuma.go similarity index 88% rename from openflare_server/job/uptimekuma.go rename to openflare-server/job/uptimekuma.go index 49578050..b092ef70 100644 --- a/openflare_server/job/uptimekuma.go +++ b/openflare-server/job/uptimekuma.go @@ -2,10 +2,11 @@ package job import ( "log/slog" - "openflare/common" - "openflare/service" "sync" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/service" ) var lastUptimeKumaSyncTime time.Time diff --git a/openflare_server/job/waf_ip_group_sync.go b/openflare-server/job/waf_ip_group_sync.go similarity index 79% rename from openflare_server/job/waf_ip_group_sync.go rename to openflare-server/job/waf_ip_group_sync.go index 3e2077e2..0b0edc7f 100644 --- a/openflare_server/job/waf_ip_group_sync.go +++ b/openflare-server/job/waf_ip_group_sync.go @@ -2,7 +2,8 @@ package job import ( "log/slog" - "openflare/service" + + "github.com/rain-kl/openflare/openflare-server/service" ) type WAFIPGroupSyncJob struct{} diff --git a/openflare_server/main.go b/openflare-server/main.go similarity index 87% rename from openflare_server/main.go rename to openflare-server/main.go index 21c7c5b8..607d48ed 100644 --- a/openflare_server/main.go +++ b/openflare-server/main.go @@ -5,17 +5,18 @@ import ( "embed" "fmt" "log/slog" - "openflare/common" - _ "openflare/docs" - "openflare/job" - "openflare/middleware" - "openflare/model" - "openflare/router" - "openflare/service" - "openflare/utils/geoip" "os" "strconv" + "github.com/rain-kl/openflare/openflare-server/common" + _ "github.com/rain-kl/openflare/openflare-server/docs" + "github.com/rain-kl/openflare/openflare-server/job" + "github.com/rain-kl/openflare/openflare-server/middleware" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/router" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-contrib/sessions/redis" diff --git a/openflare_server/middleware/agent-auth.go b/openflare-server/middleware/agent-auth.go similarity index 87% rename from openflare_server/middleware/agent-auth.go rename to openflare-server/middleware/agent-auth.go index b000bfa3..898a497a 100644 --- a/openflare_server/middleware/agent-auth.go +++ b/openflare-server/middleware/agent-auth.go @@ -2,8 +2,8 @@ package middleware import ( "github.com/gin-gonic/gin" - "openflare/common/response" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/service" ) func AgentAuth() func(c *gin.Context) { diff --git a/openflare_server/middleware/auth.go b/openflare-server/middleware/auth.go similarity index 92% rename from openflare_server/middleware/auth.go rename to openflare-server/middleware/auth.go index 0c100d5d..88ec0b9a 100644 --- a/openflare_server/middleware/auth.go +++ b/openflare-server/middleware/auth.go @@ -1,9 +1,9 @@ package middleware import ( - "openflare/common" - "openflare/common/response" - "openflare/model" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/model" jwt "github.com/appleboy/gin-jwt/v2" "github.com/gin-gonic/gin" diff --git a/openflare_server/middleware/cache.go b/openflare-server/middleware/cache.go similarity index 100% rename from openflare_server/middleware/cache.go rename to openflare-server/middleware/cache.go diff --git a/openflare_server/middleware/cors.go b/openflare-server/middleware/cors.go similarity index 91% rename from openflare_server/middleware/cors.go rename to openflare-server/middleware/cors.go index 4c97d520..8d9bc02d 100644 --- a/openflare_server/middleware/cors.go +++ b/openflare-server/middleware/cors.go @@ -1,9 +1,10 @@ package middleware import ( - "openflare/common" "strings" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/middleware/jwt.go b/openflare-server/middleware/jwt.go similarity index 90% rename from openflare_server/middleware/jwt.go rename to openflare-server/middleware/jwt.go index 01ef6e2f..9bc409c5 100644 --- a/openflare_server/middleware/jwt.go +++ b/openflare-server/middleware/jwt.go @@ -2,11 +2,12 @@ package middleware import ( "log" - "openflare/common" - "openflare/common/response" - "openflare/model" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/model" + jwt "github.com/appleboy/gin-jwt/v2" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/middleware/rate-limit.go b/openflare-server/middleware/rate-limit.go similarity index 95% rename from openflare_server/middleware/rate-limit.go rename to openflare-server/middleware/rate-limit.go index 6db459a7..b9f82723 100644 --- a/openflare_server/middleware/rate-limit.go +++ b/openflare-server/middleware/rate-limit.go @@ -4,10 +4,11 @@ import ( "context" "log/slog" "net/http" - "openflare/common" - "openflare/utils/ratelimit" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/utils/ratelimit" + "github.com/gin-gonic/gin" ) diff --git a/openflare_server/middleware/relay-auth.go b/openflare-server/middleware/relay-auth.go similarity index 84% rename from openflare_server/middleware/relay-auth.go rename to openflare-server/middleware/relay-auth.go index 1905c13f..3f846aa7 100644 --- a/openflare_server/middleware/relay-auth.go +++ b/openflare-server/middleware/relay-auth.go @@ -2,8 +2,8 @@ package middleware import ( "github.com/gin-gonic/gin" - "openflare/common/response" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/service" ) // RelayAuth authenticates Relay requests using the shared agent token, diff --git a/openflare_server/middleware/tunnel-auth.go b/openflare-server/middleware/tunnel-auth.go similarity index 85% rename from openflare_server/middleware/tunnel-auth.go rename to openflare-server/middleware/tunnel-auth.go index b0ac85c7..abf35548 100644 --- a/openflare_server/middleware/tunnel-auth.go +++ b/openflare-server/middleware/tunnel-auth.go @@ -1,8 +1,8 @@ package middleware import ( - "openflare/common/response" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/common/response" + "github.com/rain-kl/openflare/openflare-server/service" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/model/acme_account.go b/openflare-server/model/acme_account.go similarity index 100% rename from openflare_server/model/acme_account.go rename to openflare-server/model/acme_account.go diff --git a/openflare_server/model/apply_log.go b/openflare-server/model/apply_log.go similarity index 100% rename from openflare_server/model/apply_log.go rename to openflare-server/model/apply_log.go diff --git a/openflare_server/model/auth_source.go b/openflare-server/model/auth_source.go similarity index 99% rename from openflare_server/model/auth_source.go rename to openflare-server/model/auth_source.go index c5715a73..1ecaf7df 100644 --- a/openflare_server/model/auth_source.go +++ b/openflare-server/model/auth_source.go @@ -2,11 +2,12 @@ package model import ( "errors" - "openflare/utils" "regexp" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/model/config_version.go b/openflare-server/model/config_version.go similarity index 100% rename from openflare_server/model/config_version.go rename to openflare-server/model/config_version.go diff --git a/openflare_server/model/database_schema_version.go b/openflare-server/model/database_schema_version.go similarity index 91% rename from openflare_server/model/database_schema_version.go rename to openflare-server/model/database_schema_version.go index 2546c2f9..4ceeb0f6 100644 --- a/openflare_server/model/database_schema_version.go +++ b/openflare-server/model/database_schema_version.go @@ -1,8 +1,9 @@ package model import ( - "openflare/model/migrate" "time" + + "github.com/rain-kl/openflare/openflare-server/model/migrate" ) const ( diff --git a/openflare_server/model/dns_account.go b/openflare-server/model/dns_account.go similarity index 100% rename from openflare_server/model/dns_account.go rename to openflare-server/model/dns_account.go diff --git a/openflare_server/model/goose/bridge.go b/openflare-server/model/goose/bridge.go similarity index 100% rename from openflare_server/model/goose/bridge.go rename to openflare-server/model/goose/bridge.go diff --git a/openflare_server/model/goose/goose_202606020001_add_node_capabilities_json.go b/openflare-server/model/goose/goose_202606020001_add_node_capabilities_json.go similarity index 100% rename from openflare_server/model/goose/goose_202606020001_add_node_capabilities_json.go rename to openflare-server/model/goose/goose_202606020001_add_node_capabilities_json.go diff --git a/openflare_server/model/goose/goose_202606030001_add_pages_static_hosting.go b/openflare-server/model/goose/goose_202606030001_add_pages_static_hosting.go similarity index 100% rename from openflare_server/model/goose/goose_202606030001_add_pages_static_hosting.go rename to openflare-server/model/goose/goose_202606030001_add_pages_static_hosting.go diff --git a/openflare_server/model/goose/goose_202606030002_add_pages_spa_fallback_path.go b/openflare-server/model/goose/goose_202606030002_add_pages_spa_fallback_path.go similarity index 100% rename from openflare_server/model/goose/goose_202606030002_add_pages_spa_fallback_path.go rename to openflare-server/model/goose/goose_202606030002_add_pages_spa_fallback_path.go diff --git a/openflare_server/model/goose/goose_202606030003_drop_proxy_route_legacy_pow.go b/openflare-server/model/goose/goose_202606030003_drop_proxy_route_legacy_pow.go similarity index 100% rename from openflare_server/model/goose/goose_202606030003_drop_proxy_route_legacy_pow.go rename to openflare-server/model/goose/goose_202606030003_drop_proxy_route_legacy_pow.go diff --git a/openflare_server/model/goose/goose_202606040004_add_pages_features_and_cleanup.go b/openflare-server/model/goose/goose_202606040004_add_pages_features_and_cleanup.go similarity index 100% rename from openflare_server/model/goose/goose_202606040004_add_pages_features_and_cleanup.go rename to openflare-server/model/goose/goose_202606040004_add_pages_features_and_cleanup.go diff --git a/openflare_server/model/goose/migrations.go b/openflare-server/model/goose/migrations.go similarity index 100% rename from openflare_server/model/goose/migrations.go rename to openflare-server/model/goose/migrations.go diff --git a/openflare_server/model/goose/provider.go b/openflare-server/model/goose/provider.go similarity index 100% rename from openflare_server/model/goose/provider.go rename to openflare-server/model/goose/provider.go diff --git a/openflare_server/model/main.go b/openflare-server/model/main.go similarity index 98% rename from openflare_server/model/main.go rename to openflare-server/model/main.go index 861ad62c..ceec0457 100644 --- a/openflare_server/model/main.go +++ b/openflare-server/model/main.go @@ -3,13 +3,14 @@ package model import ( "fmt" "log/slog" - "openflare/common" - "openflare/utils/security" "os" "reflect" "strings" "sync" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/utils/security" + "github.com/glebarez/sqlite" "gorm.io/driver/postgres" "gorm.io/gorm" diff --git a/openflare_server/model/main_test.go b/openflare-server/model/main_test.go similarity index 100% rename from openflare_server/model/main_test.go rename to openflare-server/model/main_test.go diff --git a/openflare_server/model/managed_domain.go b/openflare-server/model/managed_domain.go similarity index 100% rename from openflare_server/model/managed_domain.go rename to openflare-server/model/managed_domain.go diff --git a/openflare_server/model/migrate/initial.go b/openflare-server/model/migrate/initial.go similarity index 100% rename from openflare_server/model/migrate/initial.go rename to openflare-server/model/migrate/initial.go diff --git a/openflare_server/model/migrate/migration.go b/openflare-server/model/migrate/migration.go similarity index 100% rename from openflare_server/model/migrate/migration.go rename to openflare-server/model/migrate/migration.go diff --git a/openflare_server/model/migrate/migration_test.go b/openflare-server/model/migrate/migration_test.go similarity index 100% rename from openflare_server/model/migrate/migration_test.go rename to openflare-server/model/migrate/migration_test.go diff --git a/openflare_server/model/migrate/v10.go b/openflare-server/model/migrate/v10.go similarity index 100% rename from openflare_server/model/migrate/v10.go rename to openflare-server/model/migrate/v10.go diff --git a/openflare_server/model/migrate/v11.go b/openflare-server/model/migrate/v11.go similarity index 100% rename from openflare_server/model/migrate/v11.go rename to openflare-server/model/migrate/v11.go diff --git a/openflare_server/model/migrate/v12.go b/openflare-server/model/migrate/v12.go similarity index 100% rename from openflare_server/model/migrate/v12.go rename to openflare-server/model/migrate/v12.go diff --git a/openflare_server/model/migrate/v13.go b/openflare-server/model/migrate/v13.go similarity index 100% rename from openflare_server/model/migrate/v13.go rename to openflare-server/model/migrate/v13.go diff --git a/openflare_server/model/migrate/v14.go b/openflare-server/model/migrate/v14.go similarity index 100% rename from openflare_server/model/migrate/v14.go rename to openflare-server/model/migrate/v14.go diff --git a/openflare_server/model/migrate/v15.go b/openflare-server/model/migrate/v15.go similarity index 100% rename from openflare_server/model/migrate/v15.go rename to openflare-server/model/migrate/v15.go diff --git a/openflare_server/model/migrate/v16.go b/openflare-server/model/migrate/v16.go similarity index 100% rename from openflare_server/model/migrate/v16.go rename to openflare-server/model/migrate/v16.go diff --git a/openflare_server/model/migrate/v17.go b/openflare-server/model/migrate/v17.go similarity index 100% rename from openflare_server/model/migrate/v17.go rename to openflare-server/model/migrate/v17.go diff --git a/openflare_server/model/migrate/v8.go b/openflare-server/model/migrate/v8.go similarity index 100% rename from openflare_server/model/migrate/v8.go rename to openflare-server/model/migrate/v8.go diff --git a/openflare_server/model/migrate/v9.go b/openflare-server/model/migrate/v9.go similarity index 100% rename from openflare_server/model/migrate/v9.go rename to openflare-server/model/migrate/v9.go diff --git a/openflare_server/model/migrations.go b/openflare-server/model/migrations.go similarity index 99% rename from openflare_server/model/migrations.go rename to openflare-server/model/migrations.go index 3d305a9f..4c28ace8 100644 --- a/openflare_server/model/migrations.go +++ b/openflare-server/model/migrations.go @@ -9,9 +9,10 @@ import ( "log/slog" "net" "net/url" - schemamigrate "openflare/model/migrate" "strings" + schemamigrate "github.com/rain-kl/openflare/openflare-server/model/migrate" + "gorm.io/gorm" ) diff --git a/openflare_server/model/node.go b/openflare-server/model/node.go similarity index 100% rename from openflare_server/model/node.go rename to openflare-server/model/node.go diff --git a/openflare_server/model/node_access_log.go b/openflare-server/model/node_access_log.go similarity index 100% rename from openflare_server/model/node_access_log.go rename to openflare-server/model/node_access_log.go diff --git a/openflare_server/model/node_health_event.go b/openflare-server/model/node_health_event.go similarity index 100% rename from openflare_server/model/node_health_event.go rename to openflare-server/model/node_health_event.go diff --git a/openflare_server/model/node_metric_snapshot.go b/openflare-server/model/node_metric_snapshot.go similarity index 98% rename from openflare_server/model/node_metric_snapshot.go rename to openflare-server/model/node_metric_snapshot.go index 66764a96..61b5b9d2 100644 --- a/openflare_server/model/node_metric_snapshot.go +++ b/openflare-server/model/node_metric_snapshot.go @@ -1,9 +1,10 @@ package model import ( - "openflare/utils" "time" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/model/node_observation_frpc.go b/openflare-server/model/node_observation_frpc.go similarity index 96% rename from openflare_server/model/node_observation_frpc.go rename to openflare-server/model/node_observation_frpc.go index c8beb2e4..edd5397b 100644 --- a/openflare_server/model/node_observation_frpc.go +++ b/openflare-server/model/node_observation_frpc.go @@ -1,9 +1,10 @@ package model import ( - "openflare/utils" "time" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/model/node_observation_frps.go b/openflare-server/model/node_observation_frps.go similarity index 96% rename from openflare_server/model/node_observation_frps.go rename to openflare-server/model/node_observation_frps.go index fb2a129b..9f5d9a72 100644 --- a/openflare_server/model/node_observation_frps.go +++ b/openflare-server/model/node_observation_frps.go @@ -1,9 +1,10 @@ package model import ( - "openflare/utils" "time" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/model/node_observation_openresty.go b/openflare-server/model/node_observation_openresty.go similarity index 97% rename from openflare_server/model/node_observation_openresty.go rename to openflare-server/model/node_observation_openresty.go index 2a14bf3d..c823d1bd 100644 --- a/openflare_server/model/node_observation_openresty.go +++ b/openflare-server/model/node_observation_openresty.go @@ -1,9 +1,10 @@ package model import ( - "openflare/utils" "time" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/model/node_request_report.go b/openflare-server/model/node_request_report.go similarity index 98% rename from openflare_server/model/node_request_report.go rename to openflare-server/model/node_request_report.go index e343a9ac..51696248 100644 --- a/openflare_server/model/node_request_report.go +++ b/openflare-server/model/node_request_report.go @@ -1,9 +1,10 @@ package model import ( - "openflare/utils" "time" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/model/node_system_profile.go b/openflare-server/model/node_system_profile.go similarity index 100% rename from openflare_server/model/node_system_profile.go rename to openflare-server/model/node_system_profile.go diff --git a/openflare_server/model/option.go b/openflare-server/model/option.go similarity index 99% rename from openflare_server/model/option.go rename to openflare-server/model/option.go index df188496..c9fc4471 100644 --- a/openflare_server/model/option.go +++ b/openflare-server/model/option.go @@ -1,12 +1,13 @@ package model import ( - "openflare/common" - "openflare/utils/geoip" "strconv" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "gorm.io/gorm" ) diff --git a/openflare_server/model/origin.go b/openflare-server/model/origin.go similarity index 100% rename from openflare_server/model/origin.go rename to openflare-server/model/origin.go diff --git a/openflare_server/model/pages.go b/openflare-server/model/pages.go similarity index 100% rename from openflare_server/model/pages.go rename to openflare-server/model/pages.go diff --git a/openflare_server/model/proxy_route.go b/openflare-server/model/proxy_route.go similarity index 100% rename from openflare_server/model/proxy_route.go rename to openflare-server/model/proxy_route.go diff --git a/openflare_server/model/schema_migration_context.go b/openflare-server/model/schema_migration_context.go similarity index 96% rename from openflare_server/model/schema_migration_context.go rename to openflare-server/model/schema_migration_context.go index 6f0548f6..12a52b41 100644 --- a/openflare_server/model/schema_migration_context.go +++ b/openflare-server/model/schema_migration_context.go @@ -1,7 +1,7 @@ package model import ( - schemagoose "openflare/model/goose" + schemagoose "github.com/rain-kl/openflare/openflare-server/model/goose" "gorm.io/gorm" ) diff --git a/openflare_server/model/sharding.go b/openflare-server/model/sharding.go similarity index 100% rename from openflare_server/model/sharding.go rename to openflare-server/model/sharding.go diff --git a/openflare_server/model/tls_certificate.go b/openflare-server/model/tls_certificate.go similarity index 100% rename from openflare_server/model/tls_certificate.go rename to openflare-server/model/tls_certificate.go diff --git a/openflare_server/model/user.go b/openflare-server/model/user.go similarity index 97% rename from openflare_server/model/user.go rename to openflare-server/model/user.go index a060d840..3417a142 100644 --- a/openflare_server/model/user.go +++ b/openflare-server/model/user.go @@ -2,8 +2,9 @@ package model import ( "errors" - "openflare/common" - "openflare/utils/security" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/utils/security" ) // User if you add sensitive fields, don't forget to clean them in setupLogin function. diff --git a/openflare_server/model/waf.go b/openflare-server/model/waf.go similarity index 100% rename from openflare_server/model/waf.go rename to openflare-server/model/waf.go diff --git a/openflare_server/router/api-router.go b/openflare-server/router/api-router.go similarity index 99% rename from openflare_server/router/api-router.go rename to openflare-server/router/api-router.go index 6f146892..b94da173 100644 --- a/openflare_server/router/api-router.go +++ b/openflare-server/router/api-router.go @@ -1,8 +1,8 @@ package router import ( - "openflare/controller" - "openflare/middleware" + "github.com/rain-kl/openflare/openflare-server/controller" + "github.com/rain-kl/openflare/openflare-server/middleware" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/router/api_flared_test.go b/openflare-server/router/api_flared_test.go similarity index 96% rename from openflare_server/router/api_flared_test.go rename to openflare-server/router/api_flared_test.go index 3694a58a..818e0684 100644 --- a/openflare_server/router/api_flared_test.go +++ b/openflare-server/router/api_flared_test.go @@ -5,12 +5,13 @@ import ( "encoding/json" "net/http" "net/http/httptest" - "openflare/common" - "openflare/model" - "openflare/router" - "openflare/service" "testing" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/router" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" diff --git a/openflare_server/router/api_phase1_test.go b/openflare-server/router/api_phase1_test.go similarity index 98% rename from openflare_server/router/api_phase1_test.go rename to openflare-server/router/api_phase1_test.go index 823783f2..96b3b8a0 100644 --- a/openflare_server/router/api_phase1_test.go +++ b/openflare-server/router/api_phase1_test.go @@ -9,23 +9,24 @@ import ( "encoding/json" "encoding/pem" "errors" - "github.com/gin-contrib/sessions" - "github.com/gin-contrib/sessions/cookie" - "github.com/gin-gonic/gin" "math/big" "mime/multipart" "net/http" "net/http/httptest" - "openflare/common" - "openflare/middleware" - "openflare/model" - "openflare/router" - "openflare/service" "path/filepath" "strconv" "strings" "testing" "time" + + "github.com/gin-contrib/sessions" + "github.com/gin-contrib/sessions/cookie" + "github.com/gin-gonic/gin" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/middleware" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/router" + "github.com/rain-kl/openflare/openflare-server/service" ) type apiResponse struct { diff --git a/openflare_server/router/api_phase2_managed_domain_test.go b/openflare-server/router/api_phase2_managed_domain_test.go similarity index 97% rename from openflare_server/router/api_phase2_managed_domain_test.go rename to openflare-server/router/api_phase2_managed_domain_test.go index 060c83bf..04e0b903 100644 --- a/openflare_server/router/api_phase2_managed_domain_test.go +++ b/openflare-server/router/api_phase2_managed_domain_test.go @@ -1,13 +1,14 @@ package router_test import ( + "net/http" + "testing" + "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" - "net/http" - "openflare/common" - "openflare/router" - "testing" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/router" ) func TestPhase2ManagedDomainLifecycle(t *testing.T) { diff --git a/openflare_server/router/api_phase2_test.go b/openflare-server/router/api_phase2_test.go similarity index 99% rename from openflare_server/router/api_phase2_test.go rename to openflare-server/router/api_phase2_test.go index 9effb752..7c502404 100644 --- a/openflare_server/router/api_phase2_test.go +++ b/openflare-server/router/api_phase2_test.go @@ -5,14 +5,15 @@ import ( "encoding/json" "net/http" "net/http/httptest" - "openflare/common" - "openflare/model" - "openflare/router" - "openflare/service" "strings" "testing" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/router" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" diff --git a/openflare_server/router/api_uptimekuma_test.go b/openflare-server/router/api_uptimekuma_test.go similarity index 98% rename from openflare_server/router/api_uptimekuma_test.go rename to openflare-server/router/api_uptimekuma_test.go index 2d193865..b854edfb 100644 --- a/openflare_server/router/api_uptimekuma_test.go +++ b/openflare-server/router/api_uptimekuma_test.go @@ -6,14 +6,15 @@ import ( "io" "net/http" "net/http/httptest" - "openflare/common" - "openflare/model" - "openflare/router" "strings" "sync" "testing" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/router" + "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" diff --git a/openflare_server/router/main.go b/openflare-server/router/main.go similarity index 90% rename from openflare_server/router/main.go rename to openflare-server/router/main.go index 7bd42d57..667911ed 100644 --- a/openflare_server/router/main.go +++ b/openflare-server/router/main.go @@ -2,7 +2,8 @@ package router import ( "embed" - "openflare/middleware" + + "github.com/rain-kl/openflare/openflare-server/middleware" "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" diff --git a/openflare_server/router/swagger_test.go b/openflare-server/router/swagger_test.go similarity index 100% rename from openflare_server/router/swagger_test.go rename to openflare-server/router/swagger_test.go diff --git a/openflare_server/router/update_test.go b/openflare-server/router/update_test.go similarity index 97% rename from openflare_server/router/update_test.go rename to openflare-server/router/update_test.go index be87a0fe..56484519 100644 --- a/openflare_server/router/update_test.go +++ b/openflare-server/router/update_test.go @@ -7,14 +7,15 @@ import ( "mime/multipart" "net/http" "net/http/httptest" - "openflare/common" - "openflare/router" - "openflare/service" "runtime" "strings" "testing" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/router" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" diff --git a/openflare_server/router/web-router.go b/openflare-server/router/web-router.go similarity index 95% rename from openflare_server/router/web-router.go rename to openflare-server/router/web-router.go index 2240f40e..ab331d15 100644 --- a/openflare_server/router/web-router.go +++ b/openflare-server/router/web-router.go @@ -4,11 +4,12 @@ import ( "embed" "io/fs" "net/http" - "openflare/middleware" - "openflare/utils/embedfs" pathpkg "path" "strings" + "github.com/rain-kl/openflare/openflare-server/middleware" + "github.com/rain-kl/openflare/openflare-server/utils/embedfs" + "github.com/gin-contrib/static" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/router/web-router_test.go b/openflare-server/router/web-router_test.go similarity index 98% rename from openflare_server/router/web-router_test.go rename to openflare-server/router/web-router_test.go index e3ae570a..cbeab4c4 100644 --- a/openflare_server/router/web-router_test.go +++ b/openflare-server/router/web-router_test.go @@ -5,7 +5,7 @@ import ( "net/http/httptest" "testing" - "openflare/middleware" + "github.com/rain-kl/openflare/openflare-server/middleware" "github.com/gin-gonic/gin" ) diff --git a/openflare_server/service/access_log.go b/openflare-server/service/access_log.go similarity index 99% rename from openflare_server/service/access_log.go rename to openflare-server/service/access_log.go index c169ac0a..a5614333 100644 --- a/openflare_server/service/access_log.go +++ b/openflare-server/service/access_log.go @@ -2,9 +2,10 @@ package service import ( "errors" - "openflare/model" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) const ( diff --git a/openflare_server/service/access_log_region.go b/openflare-server/service/access_log_region.go similarity index 96% rename from openflare_server/service/access_log_region.go rename to openflare-server/service/access_log_region.go index 8a892136..31993344 100644 --- a/openflare_server/service/access_log_region.go +++ b/openflare-server/service/access_log_region.go @@ -3,8 +3,9 @@ package service import ( "log/slog" "net" - "openflare/utils/geoip" "strings" + + "github.com/rain-kl/openflare/openflare-server/utils/geoip" ) var accessLogGeoProviderFactory = func() (geoip.GeoIPService, error) { diff --git a/openflare_server/service/access_log_test.go b/openflare-server/service/access_log_test.go similarity index 99% rename from openflare_server/service/access_log_test.go rename to openflare-server/service/access_log_test.go index 0d95a43c..3005de5a 100644 --- a/openflare_server/service/access_log_test.go +++ b/openflare-server/service/access_log_test.go @@ -1,10 +1,11 @@ package service import ( - "openflare/model" "strings" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) func TestListAccessLogsIncludesSummaryTotals(t *testing.T) { diff --git a/openflare_server/service/agent.go b/openflare-server/service/agent.go similarity index 99% rename from openflare_server/service/agent.go rename to openflare-server/service/agent.go index c2fd7ee7..17a5a422 100644 --- a/openflare_server/service/agent.go +++ b/openflare-server/service/agent.go @@ -4,12 +4,13 @@ import ( "encoding/json" "errors" "log/slog" - "openflare/common" - "openflare/model" - "openflare/utils" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/service/agent_test.go b/openflare-server/service/agent_test.go similarity index 99% rename from openflare_server/service/agent_test.go rename to openflare-server/service/agent_test.go index f3b126e0..c6ae66cb 100644 --- a/openflare_server/service/agent_test.go +++ b/openflare-server/service/agent_test.go @@ -2,12 +2,13 @@ package service import ( "errors" - "openflare/model" "strconv" "strings" "testing" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/agent_ws.go b/openflare-server/service/agent_ws.go similarity index 100% rename from openflare_server/service/agent_ws.go rename to openflare-server/service/agent_ws.go diff --git a/openflare_server/service/auth_source.go b/openflare-server/service/auth_source.go similarity index 99% rename from openflare_server/service/auth_source.go rename to openflare-server/service/auth_source.go index 3fefcf54..cac257f9 100644 --- a/openflare_server/service/auth_source.go +++ b/openflare-server/service/auth_source.go @@ -12,11 +12,12 @@ import ( "log/slog" "net/http" "net/url" - "openflare/common" - "openflare/model" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/auth_source_test.go b/openflare-server/service/auth_source_test.go similarity index 96% rename from openflare_server/service/auth_source_test.go rename to openflare-server/service/auth_source_test.go index ef7b06cb..6e11252f 100644 --- a/openflare_server/service/auth_source_test.go +++ b/openflare-server/service/auth_source_test.go @@ -3,7 +3,7 @@ package service import ( "testing" - "openflare/model" + "github.com/rain-kl/openflare/openflare-server/model" ) func TestCompleteOAuthLoginRequiresLinkWhenRegistrationDisabled(t *testing.T) { diff --git a/openflare_server/service/config_version.go b/openflare-server/service/config_version.go similarity index 99% rename from openflare_server/service/config_version.go rename to openflare-server/service/config_version.go index 6295db4f..b37572cd 100644 --- a/openflare_server/service/config_version.go +++ b/openflare-server/service/config_version.go @@ -4,15 +4,16 @@ import ( "encoding/json" "errors" "fmt" - "openflare/common" - "openflare/model" - openrestyrender "openflare/utils/render/openresty" "path" "sort" "strconv" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + openrestyrender "github.com/rain-kl/openflare/openflare-server/utils/render/openresty" + "gorm.io/gorm" ) diff --git a/openflare_server/service/dashboard.go b/openflare-server/service/dashboard.go similarity index 99% rename from openflare_server/service/dashboard.go rename to openflare-server/service/dashboard.go index 45c6595b..0fe71514 100644 --- a/openflare_server/service/dashboard.go +++ b/openflare-server/service/dashboard.go @@ -1,9 +1,10 @@ package service import ( - "openflare/model" "sort" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) type DashboardOverviewView struct { diff --git a/openflare_server/service/database_maintenance.go b/openflare-server/service/database_maintenance.go similarity index 97% rename from openflare_server/service/database_maintenance.go rename to openflare-server/service/database_maintenance.go index 8a3c0a76..0ceadc40 100644 --- a/openflare_server/service/database_maintenance.go +++ b/openflare-server/service/database_maintenance.go @@ -5,10 +5,11 @@ import ( "errors" "fmt" "log/slog" - "openflare/common" - "openflare/model" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" ) const ( diff --git a/openflare_server/service/database_maintenance_test.go b/openflare-server/service/database_maintenance_test.go similarity index 97% rename from openflare_server/service/database_maintenance_test.go rename to openflare-server/service/database_maintenance_test.go index 26d1f202..f0b09382 100644 --- a/openflare_server/service/database_maintenance_test.go +++ b/openflare-server/service/database_maintenance_test.go @@ -1,10 +1,11 @@ package service import ( - "openflare/common" - "openflare/model" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" ) func TestCleanupDatabaseObservabilityDeletesTargetedRows(t *testing.T) { diff --git a/openflare_server/service/flared_ws.go b/openflare-server/service/flared_ws.go similarity index 100% rename from openflare_server/service/flared_ws.go rename to openflare-server/service/flared_ws.go diff --git a/openflare_server/service/geoip_lookup.go b/openflare-server/service/geoip_lookup.go similarity index 95% rename from openflare_server/service/geoip_lookup.go rename to openflare-server/service/geoip_lookup.go index 9d1ce601..8c5fd322 100644 --- a/openflare_server/service/geoip_lookup.go +++ b/openflare-server/service/geoip_lookup.go @@ -3,8 +3,9 @@ package service import ( "errors" "net" - "openflare/utils/geoip" "strings" + + "github.com/rain-kl/openflare/openflare-server/utils/geoip" ) type GeoIPLookupView struct { diff --git a/openflare_server/service/geoip_lookup_test.go b/openflare-server/service/geoip_lookup_test.go similarity index 96% rename from openflare_server/service/geoip_lookup_test.go rename to openflare-server/service/geoip_lookup_test.go index 1dce6a77..06cb26bf 100644 --- a/openflare_server/service/geoip_lookup_test.go +++ b/openflare-server/service/geoip_lookup_test.go @@ -2,8 +2,9 @@ package service import ( "net" - "openflare/utils/geoip" "testing" + + "github.com/rain-kl/openflare/openflare-server/utils/geoip" ) type fakeLookupProvider struct{} diff --git a/openflare_server/service/https_phase1_test.go b/openflare-server/service/https_phase1_test.go similarity index 99% rename from openflare_server/service/https_phase1_test.go rename to openflare-server/service/https_phase1_test.go index bd36b164..a812b9d1 100644 --- a/openflare_server/service/https_phase1_test.go +++ b/openflare-server/service/https_phase1_test.go @@ -8,12 +8,13 @@ import ( "encoding/json" "encoding/pem" "math/big" - "openflare/common" - "openflare/model" "path/filepath" "strings" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" ) func TestCreateTLSCertificateAndRenderHTTPSConfig(t *testing.T) { diff --git a/openflare_server/service/lego_client.go b/openflare-server/service/lego_client.go similarity index 95% rename from openflare_server/service/lego_client.go rename to openflare-server/service/lego_client.go index 93f1ae91..b2a7e726 100644 --- a/openflare_server/service/lego_client.go +++ b/openflare-server/service/lego_client.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - "openflare/model" - "openflare/utils/acme" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils/acme" ) func ObtainSSL(cert *model.TLSCertificate) error { diff --git a/openflare_server/service/managed_domain.go b/openflare-server/service/managed_domain.go similarity index 99% rename from openflare_server/service/managed_domain.go rename to openflare-server/service/managed_domain.go index cd0031cc..47749045 100644 --- a/openflare_server/service/managed_domain.go +++ b/openflare-server/service/managed_domain.go @@ -3,10 +3,11 @@ package service import ( "errors" "fmt" - "openflare/model" "sort" "strings" "unicode" + + "github.com/rain-kl/openflare/openflare-server/model" ) const ( diff --git a/openflare_server/service/managed_domain_phase2_test.go b/openflare-server/service/managed_domain_phase2_test.go similarity index 100% rename from openflare_server/service/managed_domain_phase2_test.go rename to openflare-server/service/managed_domain_phase2_test.go diff --git a/openflare_server/service/node.go b/openflare-server/service/node.go similarity index 98% rename from openflare_server/service/node.go rename to openflare-server/service/node.go index 53b1ff00..610de0bd 100644 --- a/openflare_server/service/node.go +++ b/openflare-server/service/node.go @@ -7,12 +7,13 @@ import ( "errors" "log/slog" "net" - "openflare/common" - "openflare/model" - "openflare/utils/geoip" - "openflare/utils/geoip/iputil" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "github.com/rain-kl/openflare/openflare-server/utils/geoip/iputil" ) type NodeInput struct { diff --git a/openflare_server/service/node_agent_token_cache.go b/openflare-server/service/node_agent_token_cache.go similarity index 98% rename from openflare_server/service/node_agent_token_cache.go rename to openflare-server/service/node_agent_token_cache.go index 04edf307..d2ddad25 100644 --- a/openflare_server/service/node_agent_token_cache.go +++ b/openflare-server/service/node_agent_token_cache.go @@ -2,9 +2,10 @@ package service import ( "errors" - "openflare/model" "time" + "github.com/rain-kl/openflare/openflare-server/model" + ristretto "github.com/dgraph-io/ristretto/v2" "gorm.io/gorm" ) diff --git a/openflare_server/service/node_agent_token_cache_test.go b/openflare-server/service/node_agent_token_cache_test.go similarity index 98% rename from openflare_server/service/node_agent_token_cache_test.go rename to openflare-server/service/node_agent_token_cache_test.go index 2b4aeb1a..1479ca8a 100644 --- a/openflare_server/service/node_agent_token_cache_test.go +++ b/openflare-server/service/node_agent_token_cache_test.go @@ -3,10 +3,11 @@ package service import ( "errors" "fmt" - "openflare/model" "testing" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/node_observability.go b/openflare-server/service/node_observability.go similarity index 99% rename from openflare_server/service/node_observability.go rename to openflare-server/service/node_observability.go index 48e9c143..4c012b81 100644 --- a/openflare_server/service/node_observability.go +++ b/openflare-server/service/node_observability.go @@ -3,9 +3,10 @@ package service import ( "encoding/json" "errors" - "openflare/model" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/node_update_test.go b/openflare-server/service/node_update_test.go similarity index 99% rename from openflare_server/service/node_update_test.go rename to openflare-server/service/node_update_test.go index cbf07de8..b4217ebc 100644 --- a/openflare_server/service/node_update_test.go +++ b/openflare-server/service/node_update_test.go @@ -5,13 +5,14 @@ import ( "io" "net" "net/http" - "openflare/common" - "openflare/model" - "openflare/utils/geoip" "sort" "strings" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" ) type roundTripFunc func(req *http.Request) (*http.Response, error) diff --git a/openflare_server/service/observability.go b/openflare-server/service/observability.go similarity index 99% rename from openflare_server/service/observability.go rename to openflare-server/service/observability.go index a434cdd1..a804de8b 100644 --- a/openflare_server/service/observability.go +++ b/openflare-server/service/observability.go @@ -4,10 +4,11 @@ import ( "encoding/json" "errors" "log/slog" - "openflare/model" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/observability_analytics.go b/openflare-server/service/observability_analytics.go similarity index 98% rename from openflare_server/service/observability_analytics.go rename to openflare-server/service/observability_analytics.go index e1490f2a..8ba80cfc 100644 --- a/openflare_server/service/observability_analytics.go +++ b/openflare-server/service/observability_analytics.go @@ -2,10 +2,11 @@ package service import ( "encoding/json" - "openflare/model" "sort" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) type DistributionItem struct { diff --git a/openflare_server/service/observability_trends.go b/openflare-server/service/observability_trends.go similarity index 99% rename from openflare_server/service/observability_trends.go rename to openflare-server/service/observability_trends.go index c110e294..a6633d29 100644 --- a/openflare_server/service/observability_trends.go +++ b/openflare-server/service/observability_trends.go @@ -1,9 +1,10 @@ package service import ( - "openflare/model" "sort" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) const observabilityTrendBuckets = 24 diff --git a/openflare_server/service/observability_trends_test.go b/openflare-server/service/observability_trends_test.go similarity index 92% rename from openflare_server/service/observability_trends_test.go rename to openflare-server/service/observability_trends_test.go index 21391593..9800b9a5 100644 --- a/openflare_server/service/observability_trends_test.go +++ b/openflare-server/service/observability_trends_test.go @@ -1,9 +1,10 @@ package service import ( - "openflare/model" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) func TestBuildDiskIOTrendPointsUsesCounterDelta(t *testing.T) { diff --git a/openflare_server/service/origin.go b/openflare-server/service/origin.go similarity index 99% rename from openflare_server/service/origin.go rename to openflare-server/service/origin.go index 59c9392e..bd2f7f4a 100644 --- a/openflare_server/service/origin.go +++ b/openflare-server/service/origin.go @@ -4,11 +4,12 @@ import ( "encoding/json" "errors" "fmt" - "openflare/model" "sort" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/origin_helpers.go b/openflare-server/service/origin_helpers.go similarity index 100% rename from openflare_server/service/origin_helpers.go rename to openflare-server/service/origin_helpers.go diff --git a/openflare_server/service/origin_test.go b/openflare-server/service/origin_test.go similarity index 98% rename from openflare_server/service/origin_test.go rename to openflare-server/service/origin_test.go index 6f090a41..4abe0be2 100644 --- a/openflare_server/service/origin_test.go +++ b/openflare-server/service/origin_test.go @@ -3,7 +3,7 @@ package service import ( "testing" - "openflare/model" + "github.com/rain-kl/openflare/openflare-server/model" ) func TestCreateProxyRouteStructuredOriginAutoCreatesOrigin(t *testing.T) { diff --git a/openflare_server/service/pages.go b/openflare-server/service/pages.go similarity index 99% rename from openflare_server/service/pages.go rename to openflare-server/service/pages.go index d6539841..178fa31b 100644 --- a/openflare_server/service/pages.go +++ b/openflare-server/service/pages.go @@ -9,8 +9,6 @@ import ( "io" "mime/multipart" "net/url" - "openflare/common" - "openflare/model" "os" "path" "path/filepath" @@ -18,6 +16,9 @@ import ( "strings" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/pages_test.go b/openflare-server/service/pages_test.go similarity index 99% rename from openflare_server/service/pages_test.go rename to openflare-server/service/pages_test.go index 5f240ba1..0056a0c2 100644 --- a/openflare_server/service/pages_test.go +++ b/openflare-server/service/pages_test.go @@ -6,9 +6,10 @@ import ( "fmt" "mime/multipart" "net/http/httptest" - "openflare/model" "strings" "testing" + + "github.com/rain-kl/openflare/openflare-server/model" ) func TestPagesUploadActivateAndPublishStaticRoute(t *testing.T) { diff --git a/openflare_server/service/proxy_route.go b/openflare-server/service/proxy_route.go similarity index 99% rename from openflare_server/service/proxy_route.go rename to openflare-server/service/proxy_route.go index bda17435..a1b18314 100644 --- a/openflare_server/service/proxy_route.go +++ b/openflare-server/service/proxy_route.go @@ -6,12 +6,13 @@ import ( "fmt" "net" "net/url" - "openflare/model" - "openflare/utils" "regexp" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/service/relay.go b/openflare-server/service/relay.go similarity index 99% rename from openflare_server/service/relay.go rename to openflare-server/service/relay.go index 0be21554..02cd56db 100644 --- a/openflare_server/service/relay.go +++ b/openflare-server/service/relay.go @@ -5,12 +5,13 @@ import ( "fmt" "log/slog" "net" - "openflare/common" - "openflare/model" "strconv" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/relay_test.go b/openflare-server/service/relay_test.go similarity index 99% rename from openflare_server/service/relay_test.go rename to openflare-server/service/relay_test.go index ec8db4a5..b39215e4 100644 --- a/openflare_server/service/relay_test.go +++ b/openflare-server/service/relay_test.go @@ -2,11 +2,12 @@ package service import ( "errors" - "openflare/model" "strings" "testing" "time" + "github.com/rain-kl/openflare/openflare-server/model" + "gorm.io/gorm" ) diff --git a/openflare_server/service/relay_ws.go b/openflare-server/service/relay_ws.go similarity index 100% rename from openflare_server/service/relay_ws.go rename to openflare-server/service/relay_ws.go diff --git a/openflare_server/service/tls_acme_test.go b/openflare-server/service/tls_acme_test.go similarity index 99% rename from openflare_server/service/tls_acme_test.go rename to openflare-server/service/tls_acme_test.go index c1811ab1..efed7d98 100644 --- a/openflare_server/service/tls_acme_test.go +++ b/openflare-server/service/tls_acme_test.go @@ -2,10 +2,11 @@ package service import ( "errors" - "openflare/model" "strings" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) func TestAcmeAndDnsIntegration(t *testing.T) { diff --git a/openflare_server/service/tls_certificate.go b/openflare-server/service/tls_certificate.go similarity index 99% rename from openflare_server/service/tls_certificate.go rename to openflare-server/service/tls_certificate.go index 9f0a563b..493c8a7d 100644 --- a/openflare_server/service/tls_certificate.go +++ b/openflare-server/service/tls_certificate.go @@ -6,8 +6,9 @@ import ( "errors" "fmt" "mime/multipart" - "openflare/model" "strings" + + "github.com/rain-kl/openflare/openflare-server/model" ) type TLSCertificateInput struct { diff --git a/openflare_server/service/tls_certificate_helpers.go b/openflare-server/service/tls_certificate_helpers.go similarity index 100% rename from openflare_server/service/tls_certificate_helpers.go rename to openflare-server/service/tls_certificate_helpers.go diff --git a/openflare_server/service/update.go b/openflare-server/service/update.go similarity index 99% rename from openflare_server/service/update.go rename to openflare-server/service/update.go index 1a40b699..6e10fc68 100644 --- a/openflare_server/service/update.go +++ b/openflare-server/service/update.go @@ -10,8 +10,6 @@ import ( "io" "log/slog" "net/http" - "openflare/common" - "openflare/utils" "os" "os/exec" "path/filepath" @@ -19,6 +17,9 @@ import ( "strings" "sync" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/utils" ) const ( diff --git a/openflare_server/service/update_restart_unix.go b/openflare-server/service/update_restart_unix.go similarity index 100% rename from openflare_server/service/update_restart_unix.go rename to openflare-server/service/update_restart_unix.go diff --git a/openflare_server/service/update_restart_unix_test.go b/openflare-server/service/update_restart_unix_test.go similarity index 100% rename from openflare_server/service/update_restart_unix_test.go rename to openflare-server/service/update_restart_unix_test.go diff --git a/openflare_server/service/update_restart_windows.go b/openflare-server/service/update_restart_windows.go similarity index 100% rename from openflare_server/service/update_restart_windows.go rename to openflare-server/service/update_restart_windows.go diff --git a/openflare_server/service/update_test.go b/openflare-server/service/update_test.go similarity index 99% rename from openflare_server/service/update_test.go rename to openflare-server/service/update_test.go index 9c2516bc..38748e2a 100644 --- a/openflare_server/service/update_test.go +++ b/openflare-server/service/update_test.go @@ -5,13 +5,14 @@ import ( "context" "io" "net/http" - "openflare/common" "os" "path/filepath" "runtime" "strings" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/common" ) type serverUpdateRoundTripFunc func(req *http.Request) (*http.Response, error) diff --git a/openflare_server/service/uptimekuma.go b/openflare-server/service/uptimekuma.go similarity index 98% rename from openflare_server/service/uptimekuma.go rename to openflare-server/service/uptimekuma.go index 2f91093f..23453599 100644 --- a/openflare_server/service/uptimekuma.go +++ b/openflare-server/service/uptimekuma.go @@ -3,12 +3,13 @@ package service import ( "fmt" "log/slog" - "openflare/common" - "openflare/model" - "openflare/utils/uptimekuma" "strings" "sync/atomic" "time" + + "github.com/rain-kl/openflare/openflare-server/common" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils/uptimekuma" ) var isSyncing atomic.Bool diff --git a/openflare_server/service/waf.go b/openflare-server/service/waf.go similarity index 99% rename from openflare_server/service/waf.go rename to openflare-server/service/waf.go index 95f6cf78..9bc9a960 100644 --- a/openflare_server/service/waf.go +++ b/openflare-server/service/waf.go @@ -5,13 +5,14 @@ import ( "errors" "fmt" "net/netip" - "openflare/model" - "openflare/utils" "sort" "strings" "time" "unicode" + "github.com/rain-kl/openflare/openflare-server/model" + "github.com/rain-kl/openflare/openflare-server/utils" + "gorm.io/gorm" ) diff --git a/openflare_server/service/waf_ip_group.go b/openflare-server/service/waf_ip_group.go similarity index 99% rename from openflare_server/service/waf_ip_group.go rename to openflare-server/service/waf_ip_group.go index bc9448c2..0335d049 100644 --- a/openflare_server/service/waf_ip_group.go +++ b/openflare-server/service/waf_ip_group.go @@ -13,11 +13,12 @@ import ( "net/http" "net/netip" "net/url" - "openflare/model" "sort" "strings" "time" + "github.com/rain-kl/openflare/openflare-server/model" + exprlang "github.com/expr-lang/expr" "github.com/expr-lang/expr/vm" "gorm.io/gorm" diff --git a/openflare_server/service/waf_test.go b/openflare-server/service/waf_test.go similarity index 99% rename from openflare_server/service/waf_test.go rename to openflare-server/service/waf_test.go index 831f0b28..ef32442f 100644 --- a/openflare_server/service/waf_test.go +++ b/openflare-server/service/waf_test.go @@ -4,10 +4,11 @@ import ( "encoding/json" "net/http" "net/http/httptest" - "openflare/model" "strings" "testing" "time" + + "github.com/rain-kl/openflare/openflare-server/model" ) func TestWAFRuleGroupValidationAndNormalization(t *testing.T) { diff --git a/openflare_server/service/ws_hub.go b/openflare-server/service/ws_hub.go similarity index 100% rename from openflare_server/service/ws_hub.go rename to openflare-server/service/ws_hub.go diff --git a/openflare_server/utils/acme/client.go b/openflare-server/utils/acme/client.go similarity index 100% rename from openflare_server/utils/acme/client.go rename to openflare-server/utils/acme/client.go diff --git a/openflare_server/utils/embedfs/static.go b/openflare-server/utils/embedfs/static.go similarity index 100% rename from openflare_server/utils/embedfs/static.go rename to openflare-server/utils/embedfs/static.go diff --git a/openflare_server/utils/format.go b/openflare-server/utils/format.go similarity index 100% rename from openflare_server/utils/format.go rename to openflare-server/utils/format.go diff --git a/openflare_server/utils/geoip/emptyProvider.go b/openflare-server/utils/geoip/emptyProvider.go similarity index 100% rename from openflare_server/utils/geoip/emptyProvider.go rename to openflare-server/utils/geoip/emptyProvider.go diff --git a/openflare_server/utils/geoip/geoip.go b/openflare-server/utils/geoip/geoip.go similarity index 100% rename from openflare_server/utils/geoip/geoip.go rename to openflare-server/utils/geoip/geoip.go diff --git a/openflare_server/utils/geoip/geoip_test.go b/openflare-server/utils/geoip/geoip_test.go similarity index 100% rename from openflare_server/utils/geoip/geoip_test.go rename to openflare-server/utils/geoip/geoip_test.go diff --git a/openflare_server/utils/geoip/geojs.go b/openflare-server/utils/geoip/geojs.go similarity index 100% rename from openflare_server/utils/geoip/geojs.go rename to openflare-server/utils/geoip/geojs.go diff --git a/openflare_server/utils/geoip/ipapi.go b/openflare-server/utils/geoip/ipapi.go similarity index 100% rename from openflare_server/utils/geoip/ipapi.go rename to openflare-server/utils/geoip/ipapi.go diff --git a/openflare_server/utils/geoip/ipinfo.go b/openflare-server/utils/geoip/ipinfo.go similarity index 100% rename from openflare_server/utils/geoip/ipinfo.go rename to openflare-server/utils/geoip/ipinfo.go diff --git a/openflare_server/utils/geoip/iputil/iputil.go b/openflare-server/utils/geoip/iputil/iputil.go similarity index 100% rename from openflare_server/utils/geoip/iputil/iputil.go rename to openflare-server/utils/geoip/iputil/iputil.go diff --git a/openflare_server/utils/geoip/iputil/iputil_test.go b/openflare-server/utils/geoip/iputil/iputil_test.go similarity index 100% rename from openflare_server/utils/geoip/iputil/iputil_test.go rename to openflare-server/utils/geoip/iputil/iputil_test.go diff --git a/openflare_server/utils/geoip/mmdb.go b/openflare-server/utils/geoip/mmdb.go similarity index 100% rename from openflare_server/utils/geoip/mmdb.go rename to openflare-server/utils/geoip/mmdb.go diff --git a/openflare_server/utils/geoip/outboundip.go b/openflare-server/utils/geoip/outboundip.go similarity index 98% rename from openflare_server/utils/geoip/outboundip.go rename to openflare-server/utils/geoip/outboundip.go index cee30de8..68d0c890 100644 --- a/openflare_server/utils/geoip/outboundip.go +++ b/openflare-server/utils/geoip/outboundip.go @@ -8,9 +8,10 @@ import ( "io" "net" "net/http" - "openflare/utils/geoip/iputil" "strings" "time" + + "github.com/rain-kl/openflare/openflare-server/utils/geoip/iputil" ) const defaultOutboundIPLookupTimeout = 5 * time.Second diff --git a/openflare_server/utils/geoip/outboundip_test.go b/openflare-server/utils/geoip/outboundip_test.go similarity index 100% rename from openflare_server/utils/geoip/outboundip_test.go rename to openflare-server/utils/geoip/outboundip_test.go diff --git a/openflare_server/utils/mail/email.go b/openflare-server/utils/mail/email.go similarity index 100% rename from openflare_server/utils/mail/email.go rename to openflare-server/utils/mail/email.go diff --git a/openflare_server/utils/network.go b/openflare-server/utils/network.go similarity index 100% rename from openflare_server/utils/network.go rename to openflare-server/utils/network.go diff --git a/openflare_server/utils/ratelimit/in_memory.go b/openflare-server/utils/ratelimit/in_memory.go similarity index 100% rename from openflare_server/utils/ratelimit/in_memory.go rename to openflare-server/utils/ratelimit/in_memory.go diff --git a/openflare_server/utils/render/openresty/render.go b/openflare-server/utils/render/openresty/render.go similarity index 100% rename from openflare_server/utils/render/openresty/render.go rename to openflare-server/utils/render/openresty/render.go diff --git a/openflare_server/utils/render/openresty/render_test.go b/openflare-server/utils/render/openresty/render_test.go similarity index 100% rename from openflare_server/utils/render/openresty/render_test.go rename to openflare-server/utils/render/openresty/render_test.go diff --git a/openflare_server/utils/render/openresty/types.go b/openflare-server/utils/render/openresty/types.go similarity index 100% rename from openflare_server/utils/render/openresty/types.go rename to openflare-server/utils/render/openresty/types.go diff --git a/openflare_server/utils/security/password.go b/openflare-server/utils/security/password.go similarity index 100% rename from openflare_server/utils/security/password.go rename to openflare-server/utils/security/password.go diff --git a/openflare_server/utils/security/random.go b/openflare-server/utils/security/random.go similarity index 100% rename from openflare_server/utils/security/random.go rename to openflare-server/utils/security/random.go diff --git a/openflare_server/utils/security/verification.go b/openflare-server/utils/security/verification.go similarity index 100% rename from openflare_server/utils/security/verification.go rename to openflare-server/utils/security/verification.go diff --git a/openflare_server/utils/slice.go b/openflare-server/utils/slice.go similarity index 100% rename from openflare_server/utils/slice.go rename to openflare-server/utils/slice.go diff --git a/openflare_server/utils/string.go b/openflare-server/utils/string.go similarity index 100% rename from openflare_server/utils/string.go rename to openflare-server/utils/string.go diff --git a/openflare_server/utils/uptimekuma/client.go b/openflare-server/utils/uptimekuma/client.go similarity index 100% rename from openflare_server/utils/uptimekuma/client.go rename to openflare-server/utils/uptimekuma/client.go diff --git a/openflare_server/utils/validation/validator.go b/openflare-server/utils/validation/validator.go similarity index 100% rename from openflare_server/utils/validation/validator.go rename to openflare-server/utils/validation/validator.go diff --git a/openflare_server/utils/value.go b/openflare-server/utils/value.go similarity index 100% rename from openflare_server/utils/value.go rename to openflare-server/utils/value.go diff --git a/openflare_server/utils/version.go b/openflare-server/utils/version.go similarity index 100% rename from openflare_server/utils/version.go rename to openflare-server/utils/version.go diff --git a/openflare_server/utils/wsclient/client.go b/openflare-server/utils/wsclient/client.go similarity index 100% rename from openflare_server/utils/wsclient/client.go rename to openflare-server/utils/wsclient/client.go diff --git a/openflare_server/web/.eslintrc.json b/openflare-server/web/.eslintrc.json similarity index 100% rename from openflare_server/web/.eslintrc.json rename to openflare-server/web/.eslintrc.json diff --git a/openflare_server/web/.gitignore b/openflare-server/web/.gitignore similarity index 100% rename from openflare_server/web/.gitignore rename to openflare-server/web/.gitignore diff --git a/openflare_server/web/README.md b/openflare-server/web/README.md similarity index 95% rename from openflare_server/web/README.md rename to openflare-server/web/README.md index f29f9f1a..5b3eb455 100644 --- a/openflare_server/web/README.md +++ b/openflare-server/web/README.md @@ -38,7 +38,7 @@ pnpm build ## 开源协议 -`openflare_server/web` 跟随仓库根目录协议发布,当前采用 Apache License 2.0。 +`openflare-server/web` 跟随仓库根目录协议发布,当前采用 Apache License 2.0。 ## 目录约定 diff --git a/openflare-server/web/app/(dashboard)/access-log/page.tsx b/openflare-server/web/app/(dashboard)/access-log/page.tsx new file mode 100644 index 00000000..e019fc76 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/access-log/page.tsx @@ -0,0 +1,5 @@ +import {AccessLogsPage} from '@/features/access-logs/components/access-logs-page'; + +export default function AccessLogsRoute() { + return ; +} diff --git a/openflare-server/web/app/(dashboard)/apply-log/page.tsx b/openflare-server/web/app/(dashboard)/apply-log/page.tsx new file mode 100644 index 00000000..acfe609b --- /dev/null +++ b/openflare-server/web/app/(dashboard)/apply-log/page.tsx @@ -0,0 +1,5 @@ +import {ApplyLogsPage as ApplyLogsFeaturePage} from '@/features/apply-logs/components/apply-logs-page'; + +export default function ApplyLogsPage() { + return ; +} diff --git a/openflare-server/web/app/(dashboard)/config-version/page.tsx b/openflare-server/web/app/(dashboard)/config-version/page.tsx new file mode 100644 index 00000000..039b2f8e --- /dev/null +++ b/openflare-server/web/app/(dashboard)/config-version/page.tsx @@ -0,0 +1,5 @@ +import {ConfigVersionsPage} from '@/features/config-versions/components/config-versions-page'; + +export default function ConfigVersionsRoute() { + return ; +} diff --git a/openflare_server/web/app/(dashboard)/layout.tsx b/openflare-server/web/app/(dashboard)/layout.tsx similarity index 56% rename from openflare_server/web/app/(dashboard)/layout.tsx rename to openflare-server/web/app/(dashboard)/layout.tsx index 6e7e960a..b5ee90ae 100644 --- a/openflare_server/web/app/(dashboard)/layout.tsx +++ b/openflare-server/web/app/(dashboard)/layout.tsx @@ -1,7 +1,7 @@ -import type { ReactNode } from 'react'; +import type {ReactNode} from 'react'; -import { DashboardShell } from '@/components/layout/dashboard-shell'; -import { DashboardAuthGuard } from '@/features/auth/components/dashboard-auth-guard'; +import {DashboardShell} from '@/components/layout/dashboard-shell'; +import {DashboardAuthGuard} from '@/features/auth/components/dashboard-auth-guard'; interface DashboardLayoutProps { children: ReactNode; diff --git a/openflare_server/web/app/(dashboard)/node/detail/page.tsx b/openflare-server/web/app/(dashboard)/node/detail/page.tsx similarity index 57% rename from openflare_server/web/app/(dashboard)/node/detail/page.tsx rename to openflare-server/web/app/(dashboard)/node/detail/page.tsx index 05dc2aff..b76c2f95 100644 --- a/openflare_server/web/app/(dashboard)/node/detail/page.tsx +++ b/openflare-server/web/app/(dashboard)/node/detail/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useSearchParams } from 'next/navigation'; +import {useSearchParams} from 'next/navigation'; -import { NodeDetailPage } from '@/features/nodes/components/node-detail-page'; +import {NodeDetailPage} from '@/features/nodes/components/node-detail-page'; export default function NodeDetailRoute() { const searchParams = useSearchParams(); diff --git a/openflare-server/web/app/(dashboard)/node/page.tsx b/openflare-server/web/app/(dashboard)/node/page.tsx new file mode 100644 index 00000000..8e95bf51 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/node/page.tsx @@ -0,0 +1,5 @@ +import {NodesPage} from '@/features/nodes/components/nodes-page'; + +export default function NodesRoute() { + return ; +} diff --git a/openflare_server/web/app/(dashboard)/origin/detail/page.tsx b/openflare-server/web/app/(dashboard)/origin/detail/page.tsx similarity index 56% rename from openflare_server/web/app/(dashboard)/origin/detail/page.tsx rename to openflare-server/web/app/(dashboard)/origin/detail/page.tsx index 3aa9e57f..e89033f8 100644 --- a/openflare_server/web/app/(dashboard)/origin/detail/page.tsx +++ b/openflare-server/web/app/(dashboard)/origin/detail/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useSearchParams } from 'next/navigation'; +import {useSearchParams} from 'next/navigation'; -import { OriginDetailPage } from '@/features/origins/components/origin-detail-page'; +import {OriginDetailPage} from '@/features/origins/components/origin-detail-page'; export default function OriginDetailRoute() { const searchParams = useSearchParams(); diff --git a/openflare-server/web/app/(dashboard)/origin/page.tsx b/openflare-server/web/app/(dashboard)/origin/page.tsx new file mode 100644 index 00000000..4a207791 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/origin/page.tsx @@ -0,0 +1,5 @@ +import {OriginsPage} from '@/features/origins/components/origins-page'; + +export default function OriginRoute() { + return ; +} diff --git a/openflare_server/web/app/(dashboard)/page.tsx b/openflare-server/web/app/(dashboard)/page.tsx similarity index 60% rename from openflare_server/web/app/(dashboard)/page.tsx rename to openflare-server/web/app/(dashboard)/page.tsx index 18442b00..9ce6e790 100644 --- a/openflare_server/web/app/(dashboard)/page.tsx +++ b/openflare-server/web/app/(dashboard)/page.tsx @@ -1,4 +1,4 @@ -import { DashboardOverview } from '@/features/dashboard/components/dashboard-overview'; +import {DashboardOverview} from '@/features/dashboard/components/dashboard-overview'; export default function DashboardPage() { return ( diff --git a/openflare_server/web/app/(dashboard)/pages/detail/page.tsx b/openflare-server/web/app/(dashboard)/pages/detail/page.tsx similarity index 59% rename from openflare_server/web/app/(dashboard)/pages/detail/page.tsx rename to openflare-server/web/app/(dashboard)/pages/detail/page.tsx index 0902af12..ac4792a6 100644 --- a/openflare_server/web/app/(dashboard)/pages/detail/page.tsx +++ b/openflare-server/web/app/(dashboard)/pages/detail/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useSearchParams } from 'next/navigation'; +import {useSearchParams} from 'next/navigation'; -import { PagesProjectDetailPage } from '@/features/pages/components/pages-page'; +import {PagesProjectDetailPage} from '@/features/pages/components/pages-page'; export default function PagesProjectDetailRoute() { const searchParams = useSearchParams(); diff --git a/openflare-server/web/app/(dashboard)/pages/page.tsx b/openflare-server/web/app/(dashboard)/pages/page.tsx new file mode 100644 index 00000000..ed659cb0 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/pages/page.tsx @@ -0,0 +1,5 @@ +import {PagesPage} from '@/features/pages/components/pages-page'; + +export default function Page() { + return ; +} diff --git a/openflare-server/web/app/(dashboard)/performance/page.tsx b/openflare-server/web/app/(dashboard)/performance/page.tsx new file mode 100644 index 00000000..34e0ec38 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/performance/page.tsx @@ -0,0 +1,5 @@ +import {PerformancePage} from '@/features/performance/components/performance-page'; + +export default function PerformanceRoute() { + return ; +} diff --git a/openflare_server/web/app/(dashboard)/proxy-route/detail/page.tsx b/openflare-server/web/app/(dashboard)/proxy-route/detail/page.tsx similarity index 64% rename from openflare_server/web/app/(dashboard)/proxy-route/detail/page.tsx rename to openflare-server/web/app/(dashboard)/proxy-route/detail/page.tsx index aea4014e..ff53591d 100644 --- a/openflare_server/web/app/(dashboard)/proxy-route/detail/page.tsx +++ b/openflare-server/web/app/(dashboard)/proxy-route/detail/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useSearchParams } from 'next/navigation'; +import {useSearchParams} from 'next/navigation'; -import { ProxyRouteConfigPage } from '@/features/proxy-routes/components/proxy-route-config-page'; +import {ProxyRouteConfigPage} from '@/features/proxy-routes/components/proxy-route-config-page'; export default function ProxyRouteDetailRoute() { const searchParams = useSearchParams(); diff --git a/openflare-server/web/app/(dashboard)/proxy-route/page.tsx b/openflare-server/web/app/(dashboard)/proxy-route/page.tsx new file mode 100644 index 00000000..f60130b0 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/proxy-route/page.tsx @@ -0,0 +1,5 @@ +import {ProxyRoutesPage} from '@/features/proxy-routes/components/proxy-routes-page'; + +export default function ProxyRoutesRoute() { + return ; +} diff --git a/openflare-server/web/app/(dashboard)/setting/page.tsx b/openflare-server/web/app/(dashboard)/setting/page.tsx new file mode 100644 index 00000000..220eeef7 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/setting/page.tsx @@ -0,0 +1,5 @@ +import {SettingsPage} from '@/features/settings/components/settings-page'; + +export default function SettingsRoute() { + return ; +} diff --git a/openflare-server/web/app/(dashboard)/user/page.tsx b/openflare-server/web/app/(dashboard)/user/page.tsx new file mode 100644 index 00000000..e99a152c --- /dev/null +++ b/openflare-server/web/app/(dashboard)/user/page.tsx @@ -0,0 +1,5 @@ +import {UsersPage} from '@/features/users/components/users-page'; + +export default function UsersRoute() { + return ; +} diff --git a/openflare_server/web/app/(dashboard)/waf/ip-groups/page.tsx b/openflare-server/web/app/(dashboard)/waf/ip-groups/page.tsx similarity index 50% rename from openflare_server/web/app/(dashboard)/waf/ip-groups/page.tsx rename to openflare-server/web/app/(dashboard)/waf/ip-groups/page.tsx index 2cd010cd..95d416c4 100644 --- a/openflare_server/web/app/(dashboard)/waf/ip-groups/page.tsx +++ b/openflare-server/web/app/(dashboard)/waf/ip-groups/page.tsx @@ -1,4 +1,4 @@ -import { WAFIPGroupsPage } from '@/features/waf/components/ip-groups-page'; +import {WAFIPGroupsPage} from '@/features/waf/components/ip-groups-page'; export default function WAFIPGroupsRoute() { return ; diff --git a/openflare_server/web/app/(dashboard)/waf/page.tsx b/openflare-server/web/app/(dashboard)/waf/page.tsx similarity index 50% rename from openflare_server/web/app/(dashboard)/waf/page.tsx rename to openflare-server/web/app/(dashboard)/waf/page.tsx index 51235f53..e08cc74d 100644 --- a/openflare_server/web/app/(dashboard)/waf/page.tsx +++ b/openflare-server/web/app/(dashboard)/waf/page.tsx @@ -1,4 +1,4 @@ -import { WAFPage } from '@/features/waf/components/waf-page'; +import {WAFPage} from '@/features/waf/components/waf-page'; export default function WAFRoute() { return ; diff --git a/openflare-server/web/app/(dashboard)/website/certificate/page.tsx b/openflare-server/web/app/(dashboard)/website/certificate/page.tsx new file mode 100644 index 00000000..2217288d --- /dev/null +++ b/openflare-server/web/app/(dashboard)/website/certificate/page.tsx @@ -0,0 +1,5 @@ +import {TlsCertificatesPage} from '@/features/tls-certificates/components/tls-certificates-page'; + +export default function WebsiteCertificateRoute() { + return ; +} diff --git a/openflare_server/web/app/(dashboard)/website/detail/page.tsx b/openflare-server/web/app/(dashboard)/website/detail/page.tsx similarity index 56% rename from openflare_server/web/app/(dashboard)/website/detail/page.tsx rename to openflare-server/web/app/(dashboard)/website/detail/page.tsx index 621bc0d7..7f7d8ad6 100644 --- a/openflare_server/web/app/(dashboard)/website/detail/page.tsx +++ b/openflare-server/web/app/(dashboard)/website/detail/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useSearchParams } from 'next/navigation'; +import {useSearchParams} from 'next/navigation'; -import { WebsiteDetailPage } from '@/features/websites/components/website-detail-page'; +import {WebsiteDetailPage} from '@/features/websites/components/website-detail-page'; export default function WebsiteDetailRoute() { const searchParams = useSearchParams(); diff --git a/openflare-server/web/app/(dashboard)/website/dns-account/page.tsx b/openflare-server/web/app/(dashboard)/website/dns-account/page.tsx new file mode 100644 index 00000000..94018047 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/website/dns-account/page.tsx @@ -0,0 +1,5 @@ +import {DnsAccountsPage} from '@/features/dns-accounts/components/dns-accounts-page'; + +export default function Page() { + return ; +} diff --git a/openflare-server/web/app/(dashboard)/website/page.tsx b/openflare-server/web/app/(dashboard)/website/page.tsx new file mode 100644 index 00000000..424d5699 --- /dev/null +++ b/openflare-server/web/app/(dashboard)/website/page.tsx @@ -0,0 +1,5 @@ +import {WebsitesPage} from '@/features/websites/components/websites-page'; + +export default function WebsiteRoute() { + return ; +} diff --git a/openflare-server/web/app/(public)/about/page.tsx b/openflare-server/web/app/(public)/about/page.tsx new file mode 100644 index 00000000..5dec97c8 --- /dev/null +++ b/openflare-server/web/app/(public)/about/page.tsx @@ -0,0 +1,5 @@ +import {AboutPage} from '@/features/about/components/about-page'; + +export default function AboutRoute() { + return ; +} diff --git a/openflare_server/web/app/(public)/layout.tsx b/openflare-server/web/app/(public)/layout.tsx similarity index 63% rename from openflare_server/web/app/(public)/layout.tsx rename to openflare-server/web/app/(public)/layout.tsx index 3417f291..dff04a53 100644 --- a/openflare_server/web/app/(public)/layout.tsx +++ b/openflare-server/web/app/(public)/layout.tsx @@ -1,6 +1,6 @@ -import type { ReactNode } from 'react'; +import type {ReactNode} from 'react'; -import { PublicShell } from '@/components/layout/public-shell'; +import {PublicShell} from '@/components/layout/public-shell'; interface PublicLayoutProps { children: ReactNode; diff --git a/openflare-server/web/app/(public)/login/page.tsx b/openflare-server/web/app/(public)/login/page.tsx new file mode 100644 index 00000000..d5945ff5 --- /dev/null +++ b/openflare-server/web/app/(public)/login/page.tsx @@ -0,0 +1,12 @@ +import {Suspense} from 'react'; + +import {LoadingState} from '@/components/feedback/loading-state'; +import {LoginForm} from '@/features/auth/components/login-form'; + +export default function LoginPage() { + return ( + }> + + + ); +} diff --git a/openflare-server/web/app/(public)/oauth/callback/page.tsx b/openflare-server/web/app/(public)/oauth/callback/page.tsx new file mode 100644 index 00000000..a3e3f79b --- /dev/null +++ b/openflare-server/web/app/(public)/oauth/callback/page.tsx @@ -0,0 +1,12 @@ +import {Suspense} from 'react'; + +import {LoadingState} from '@/components/feedback/loading-state'; +import {OAuthCallback} from '@/features/auth/components/oauth-callback'; + +export default function OAuthSourceCallbackPage() { + return ( + }> + + + ); +} diff --git a/openflare-server/web/app/(public)/oauth/github/page.tsx b/openflare-server/web/app/(public)/oauth/github/page.tsx new file mode 100644 index 00000000..86097599 --- /dev/null +++ b/openflare-server/web/app/(public)/oauth/github/page.tsx @@ -0,0 +1,12 @@ +import {Suspense} from 'react'; + +import {LoadingState} from '@/components/feedback/loading-state'; +import {GitHubOAuthCallback} from '@/features/auth/components/github-oauth-callback'; + +export default function GithubOAuthPage() { + return ( + }> + + + ); +} diff --git a/openflare-server/web/app/(public)/oauth/link/page.tsx b/openflare-server/web/app/(public)/oauth/link/page.tsx new file mode 100644 index 00000000..b5547c64 --- /dev/null +++ b/openflare-server/web/app/(public)/oauth/link/page.tsx @@ -0,0 +1,5 @@ +import {OAuthLinkExistingForm} from '@/features/auth/components/oauth-link-existing-form'; + +export default function OAuthLinkPage() { + return ; +} diff --git a/openflare-server/web/app/(public)/reset/page.tsx b/openflare-server/web/app/(public)/reset/page.tsx new file mode 100644 index 00000000..3114914b --- /dev/null +++ b/openflare-server/web/app/(public)/reset/page.tsx @@ -0,0 +1,12 @@ +import {Suspense} from 'react'; + +import {LoadingState} from '@/components/feedback/loading-state'; +import {PasswordResetFlow} from '@/features/auth/components/password-reset-flow'; + +export default function ResetPasswordPage() { + return ( + }> + + + ); +} diff --git a/openflare-server/web/app/(public)/user/reset/page.tsx b/openflare-server/web/app/(public)/user/reset/page.tsx new file mode 100644 index 00000000..07736657 --- /dev/null +++ b/openflare-server/web/app/(public)/user/reset/page.tsx @@ -0,0 +1,12 @@ +import {Suspense} from 'react'; + +import {LoadingState} from '@/components/feedback/loading-state'; +import {PasswordResetFlow} from '@/features/auth/components/password-reset-flow'; + +export default function LegacyResetPasswordPage() { + return ( + }> + + + ); +} diff --git a/openflare_server/web/app/globals.css b/openflare-server/web/app/globals.css similarity index 100% rename from openflare_server/web/app/globals.css rename to openflare-server/web/app/globals.css diff --git a/openflare_server/web/app/layout.tsx b/openflare-server/web/app/layout.tsx similarity index 73% rename from openflare_server/web/app/layout.tsx rename to openflare-server/web/app/layout.tsx index 74538292..cda259e2 100644 --- a/openflare_server/web/app/layout.tsx +++ b/openflare-server/web/app/layout.tsx @@ -1,13 +1,13 @@ -import type { Metadata } from 'next'; +import type {Metadata} from 'next'; import Script from 'next/script'; -import type { ReactNode } from 'react'; +import type {ReactNode} from 'react'; -import { AppProviders } from '@/components/providers/app-providers'; -import { getThemeInitScript } from '@/lib/theme/theme'; +import {AppProviders} from '@/components/providers/app-providers'; +import {getThemeInitScript} from '@/lib/theme/theme'; import './globals.css'; -import { Geist } from 'next/font/google'; -import { cn } from '@/lib/utils'; +import {Geist} from 'next/font/google'; +import {cn} from '@/lib/utils'; const geist = Geist({ subsets: ['latin'], variable: '--font-sans' }); diff --git a/openflare_server/web/app/not-found.tsx b/openflare-server/web/app/not-found.tsx similarity index 93% rename from openflare_server/web/app/not-found.tsx rename to openflare-server/web/app/not-found.tsx index 66294afc..825bc501 100644 --- a/openflare_server/web/app/not-found.tsx +++ b/openflare-server/web/app/not-found.tsx @@ -1,6 +1,6 @@ import Link from 'next/link'; -import { AppCard } from '@/components/ui/app-card'; +import {AppCard} from '@/components/ui/app-card'; export default function NotFound() { return ( diff --git a/openflare_server/web/components.json b/openflare-server/web/components.json similarity index 100% rename from openflare_server/web/components.json rename to openflare-server/web/components.json diff --git a/openflare_server/web/components/data/rank-chart.tsx b/openflare-server/web/components/data/rank-chart.tsx similarity index 97% rename from openflare_server/web/components/data/rank-chart.tsx rename to openflare-server/web/components/data/rank-chart.tsx index 995b8ff3..e1bd75ad 100644 --- a/openflare_server/web/components/data/rank-chart.tsx +++ b/openflare-server/web/components/data/rank-chart.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useMemo } from 'react'; -import type { EChartsOption } from 'echarts'; +import {useMemo} from 'react'; +import type {EChartsOption} from 'echarts'; import ReactECharts from 'echarts-for-react'; type RankChartItem = { diff --git a/openflare_server/web/components/data/trend-chart.tsx b/openflare-server/web/components/data/trend-chart.tsx similarity index 100% rename from openflare_server/web/components/data/trend-chart.tsx rename to openflare-server/web/components/data/trend-chart.tsx diff --git a/openflare_server/web/components/feedback/empty-state.tsx b/openflare-server/web/components/feedback/empty-state.tsx similarity index 94% rename from openflare_server/web/components/feedback/empty-state.tsx rename to openflare-server/web/components/feedback/empty-state.tsx index f4d491b3..e3799f2f 100644 --- a/openflare_server/web/components/feedback/empty-state.tsx +++ b/openflare-server/web/components/feedback/empty-state.tsx @@ -1,4 +1,4 @@ -import type { ReactNode } from 'react'; +import type {ReactNode} from 'react'; interface EmptyStateProps { title: string; diff --git a/openflare_server/web/components/feedback/error-state.tsx b/openflare-server/web/components/feedback/error-state.tsx similarity index 100% rename from openflare_server/web/components/feedback/error-state.tsx rename to openflare-server/web/components/feedback/error-state.tsx diff --git a/openflare_server/web/components/feedback/feature-placeholder.tsx b/openflare-server/web/components/feedback/feature-placeholder.tsx similarity index 86% rename from openflare_server/web/components/feedback/feature-placeholder.tsx rename to openflare-server/web/components/feedback/feature-placeholder.tsx index 4f4ab1eb..64cb1560 100644 --- a/openflare_server/web/components/feedback/feature-placeholder.tsx +++ b/openflare-server/web/components/feedback/feature-placeholder.tsx @@ -1,5 +1,5 @@ -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; interface FeaturePlaceholderProps { title: string; diff --git a/openflare_server/web/components/feedback/inline-message.tsx b/openflare-server/web/components/feedback/inline-message.tsx similarity index 94% rename from openflare_server/web/components/feedback/inline-message.tsx rename to openflare-server/web/components/feedback/inline-message.tsx index c01bd48f..76a49bf6 100644 --- a/openflare_server/web/components/feedback/inline-message.tsx +++ b/openflare-server/web/components/feedback/inline-message.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useEffect, useRef } from 'react'; -import { toast } from 'sonner'; -import { cn } from '@/lib/utils/cn'; +import {useEffect, useRef} from 'react'; +import {toast} from 'sonner'; +import {cn} from '@/lib/utils/cn'; type InlineMessageTone = 'info' | 'success' | 'danger'; diff --git a/openflare_server/web/components/feedback/loading-state.tsx b/openflare-server/web/components/feedback/loading-state.tsx similarity index 92% rename from openflare_server/web/components/feedback/loading-state.tsx rename to openflare-server/web/components/feedback/loading-state.tsx index 1d72bcfd..74bd7eab 100644 --- a/openflare_server/web/components/feedback/loading-state.tsx +++ b/openflare-server/web/components/feedback/loading-state.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; interface LoadingStateProps { className?: string; diff --git a/openflare_server/web/components/layout/dashboard-shell.tsx b/openflare-server/web/components/layout/dashboard-shell.tsx similarity index 100% rename from openflare_server/web/components/layout/dashboard-shell.tsx rename to openflare-server/web/components/layout/dashboard-shell.tsx diff --git a/openflare_server/web/components/layout/dashboard-sidebar.tsx b/openflare-server/web/components/layout/dashboard-sidebar.tsx similarity index 100% rename from openflare_server/web/components/layout/dashboard-sidebar.tsx rename to openflare-server/web/components/layout/dashboard-sidebar.tsx diff --git a/openflare_server/web/components/layout/dashboard-topbar.tsx b/openflare-server/web/components/layout/dashboard-topbar.tsx similarity index 100% rename from openflare_server/web/components/layout/dashboard-topbar.tsx rename to openflare-server/web/components/layout/dashboard-topbar.tsx diff --git a/openflare_server/web/components/layout/page-header.tsx b/openflare-server/web/components/layout/page-header.tsx similarity index 95% rename from openflare_server/web/components/layout/page-header.tsx rename to openflare-server/web/components/layout/page-header.tsx index 5518af01..5d096304 100644 --- a/openflare_server/web/components/layout/page-header.tsx +++ b/openflare-server/web/components/layout/page-header.tsx @@ -1,4 +1,4 @@ -import type { ReactNode } from 'react'; +import type {ReactNode} from 'react'; interface PageHeaderProps { title: string; diff --git a/openflare_server/web/components/layout/public-shell.tsx b/openflare-server/web/components/layout/public-shell.tsx similarity index 94% rename from openflare_server/web/components/layout/public-shell.tsx rename to openflare-server/web/components/layout/public-shell.tsx index 493a68cf..d3ef65a2 100644 --- a/openflare_server/web/components/layout/public-shell.tsx +++ b/openflare-server/web/components/layout/public-shell.tsx @@ -1,7 +1,7 @@ import Link from 'next/link'; -import type { ReactNode } from 'react'; +import type {ReactNode} from 'react'; -import { publicEnv } from '@/lib/env/public-env'; +import {publicEnv} from '@/lib/env/public-env'; interface PublicShellProps { children: ReactNode; diff --git a/openflare_server/web/components/providers/app-providers.tsx b/openflare-server/web/components/providers/app-providers.tsx similarity index 100% rename from openflare_server/web/components/providers/app-providers.tsx rename to openflare-server/web/components/providers/app-providers.tsx diff --git a/openflare_server/web/components/providers/auth-provider.tsx b/openflare-server/web/components/providers/auth-provider.tsx similarity index 100% rename from openflare_server/web/components/providers/auth-provider.tsx rename to openflare-server/web/components/providers/auth-provider.tsx diff --git a/openflare_server/web/components/providers/theme-provider.tsx b/openflare-server/web/components/providers/theme-provider.tsx similarity index 100% rename from openflare_server/web/components/providers/theme-provider.tsx rename to openflare-server/web/components/providers/theme-provider.tsx diff --git a/openflare_server/web/components/ui/app-card.tsx b/openflare-server/web/components/ui/app-card.tsx similarity index 100% rename from openflare_server/web/components/ui/app-card.tsx rename to openflare-server/web/components/ui/app-card.tsx diff --git a/openflare_server/web/components/ui/app-modal.tsx b/openflare-server/web/components/ui/app-modal.tsx similarity index 100% rename from openflare_server/web/components/ui/app-modal.tsx rename to openflare-server/web/components/ui/app-modal.tsx diff --git a/openflare_server/web/components/ui/drawer.tsx b/openflare-server/web/components/ui/drawer.tsx similarity index 96% rename from openflare_server/web/components/ui/drawer.tsx rename to openflare-server/web/components/ui/drawer.tsx index 980e462e..98d778d4 100644 --- a/openflare_server/web/components/ui/drawer.tsx +++ b/openflare-server/web/components/ui/drawer.tsx @@ -1,21 +1,21 @@ 'use client'; import { - cloneElement, - createContext, - isValidElement, - useContext, - useEffect, - useId, - useMemo, - useState, - type HTMLAttributes, - type ReactElement, - type ReactNode, + cloneElement, + createContext, + type HTMLAttributes, + isValidElement, + type ReactElement, + type ReactNode, + useContext, + useEffect, + useId, + useMemo, + useState, } from 'react'; -import { createPortal } from 'react-dom'; +import {createPortal} from 'react-dom'; -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; type DrawerDirection = 'top' | 'right' | 'bottom' | 'left'; diff --git a/openflare_server/web/components/ui/input.tsx b/openflare-server/web/components/ui/input.tsx similarity index 95% rename from openflare_server/web/components/ui/input.tsx rename to openflare-server/web/components/ui/input.tsx index 8ada0f87..0283183c 100644 --- a/openflare_server/web/components/ui/input.tsx +++ b/openflare-server/web/components/ui/input.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; const Input = React.forwardRef>( ({ className, type, ...props }, ref) => { diff --git a/openflare_server/web/components/ui/label.tsx b/openflare-server/web/components/ui/label.tsx similarity index 92% rename from openflare_server/web/components/ui/label.tsx rename to openflare-server/web/components/ui/label.tsx index a5d21969..fcc43a1c 100644 --- a/openflare_server/web/components/ui/label.tsx +++ b/openflare-server/web/components/ui/label.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; const Label = React.forwardRef>( ({ className, ...props }, ref) => ( diff --git a/openflare_server/web/components/ui/separator.tsx b/openflare-server/web/components/ui/separator.tsx similarity index 85% rename from openflare_server/web/components/ui/separator.tsx rename to openflare-server/web/components/ui/separator.tsx index 0a4746b4..71659aac 100644 --- a/openflare_server/web/components/ui/separator.tsx +++ b/openflare-server/web/components/ui/separator.tsx @@ -1,9 +1,9 @@ 'use client'; import * as React from 'react'; -import { Separator as SeparatorPrimitive } from 'radix-ui'; +import {Separator as SeparatorPrimitive} from 'radix-ui'; -import { cn } from '@/lib/utils'; +import {cn} from '@/lib/utils'; function Separator({ className, diff --git a/openflare_server/web/components/ui/sonner.tsx b/openflare-server/web/components/ui/sonner.tsx similarity index 100% rename from openflare_server/web/components/ui/sonner.tsx rename to openflare-server/web/components/ui/sonner.tsx diff --git a/openflare_server/web/components/ui/status-badge.tsx b/openflare-server/web/components/ui/status-badge.tsx similarity index 100% rename from openflare_server/web/components/ui/status-badge.tsx rename to openflare-server/web/components/ui/status-badge.tsx diff --git a/openflare_server/web/components/ui/switch.tsx b/openflare-server/web/components/ui/switch.tsx similarity index 100% rename from openflare_server/web/components/ui/switch.tsx rename to openflare-server/web/components/ui/switch.tsx diff --git a/openflare_server/web/components/ui/textarea.tsx b/openflare-server/web/components/ui/textarea.tsx similarity index 100% rename from openflare_server/web/components/ui/textarea.tsx rename to openflare-server/web/components/ui/textarea.tsx diff --git a/openflare_server/web/components/ui/theme-toggle.tsx b/openflare-server/web/components/ui/theme-toggle.tsx similarity index 100% rename from openflare_server/web/components/ui/theme-toggle.tsx rename to openflare-server/web/components/ui/theme-toggle.tsx diff --git a/openflare_server/web/features/about/components/about-page.tsx b/openflare-server/web/features/about/components/about-page.tsx similarity index 100% rename from openflare_server/web/features/about/components/about-page.tsx rename to openflare-server/web/features/about/components/about-page.tsx diff --git a/openflare_server/web/features/access-logs/api/access-logs.ts b/openflare-server/web/features/access-logs/api/access-logs.ts similarity index 100% rename from openflare_server/web/features/access-logs/api/access-logs.ts rename to openflare-server/web/features/access-logs/api/access-logs.ts diff --git a/openflare_server/web/features/access-logs/components/access-logs-page.tsx b/openflare-server/web/features/access-logs/components/access-logs-page.tsx similarity index 100% rename from openflare_server/web/features/access-logs/components/access-logs-page.tsx rename to openflare-server/web/features/access-logs/components/access-logs-page.tsx diff --git a/openflare_server/web/features/access-logs/types.ts b/openflare-server/web/features/access-logs/types.ts similarity index 100% rename from openflare_server/web/features/access-logs/types.ts rename to openflare-server/web/features/access-logs/types.ts diff --git a/openflare_server/web/features/acme-accounts/api/acme-accounts.ts b/openflare-server/web/features/acme-accounts/api/acme-accounts.ts similarity index 100% rename from openflare_server/web/features/acme-accounts/api/acme-accounts.ts rename to openflare-server/web/features/acme-accounts/api/acme-accounts.ts diff --git a/openflare_server/web/features/acme-accounts/types.ts b/openflare-server/web/features/acme-accounts/types.ts similarity index 100% rename from openflare_server/web/features/acme-accounts/types.ts rename to openflare-server/web/features/acme-accounts/types.ts diff --git a/openflare_server/web/features/apply-logs/api/apply-logs.ts b/openflare-server/web/features/apply-logs/api/apply-logs.ts similarity index 100% rename from openflare_server/web/features/apply-logs/api/apply-logs.ts rename to openflare-server/web/features/apply-logs/api/apply-logs.ts diff --git a/openflare_server/web/features/apply-logs/components/apply-logs-page.tsx b/openflare-server/web/features/apply-logs/components/apply-logs-page.tsx similarity index 100% rename from openflare_server/web/features/apply-logs/components/apply-logs-page.tsx rename to openflare-server/web/features/apply-logs/components/apply-logs-page.tsx diff --git a/openflare_server/web/features/apply-logs/types.ts b/openflare-server/web/features/apply-logs/types.ts similarity index 100% rename from openflare_server/web/features/apply-logs/types.ts rename to openflare-server/web/features/apply-logs/types.ts diff --git a/openflare_server/web/features/auth/api/auth.ts b/openflare-server/web/features/auth/api/auth.ts similarity index 100% rename from openflare_server/web/features/auth/api/auth.ts rename to openflare-server/web/features/auth/api/auth.ts diff --git a/openflare-server/web/features/auth/api/public.ts b/openflare-server/web/features/auth/api/public.ts new file mode 100644 index 00000000..24d3748b --- /dev/null +++ b/openflare-server/web/features/auth/api/public.ts @@ -0,0 +1,6 @@ +import {apiRequest} from '@/lib/api/client'; +import type {PublicStatus} from '@/types/public-status'; + +export function getPublicStatus() { + return apiRequest('/status'); +} diff --git a/openflare_server/web/features/auth/components/auth-form-primitives.tsx b/openflare-server/web/features/auth/components/auth-form-primitives.tsx similarity index 100% rename from openflare_server/web/features/auth/components/auth-form-primitives.tsx rename to openflare-server/web/features/auth/components/auth-form-primitives.tsx diff --git a/openflare_server/web/features/auth/components/dashboard-auth-guard.tsx b/openflare-server/web/features/auth/components/dashboard-auth-guard.tsx similarity index 100% rename from openflare_server/web/features/auth/components/dashboard-auth-guard.tsx rename to openflare-server/web/features/auth/components/dashboard-auth-guard.tsx diff --git a/openflare_server/web/features/auth/components/github-oauth-callback.tsx b/openflare-server/web/features/auth/components/github-oauth-callback.tsx similarity index 76% rename from openflare_server/web/features/auth/components/github-oauth-callback.tsx rename to openflare-server/web/features/auth/components/github-oauth-callback.tsx index 31a318a5..ad6775eb 100644 --- a/openflare_server/web/features/auth/components/github-oauth-callback.tsx +++ b/openflare-server/web/features/auth/components/github-oauth-callback.tsx @@ -1,14 +1,14 @@ 'use client'; -import { useMutation } from '@tanstack/react-query'; -import { useRouter, useSearchParams } from 'next/navigation'; -import { useEffect, useRef, useState } from 'react'; +import {useMutation} from '@tanstack/react-query'; +import {useRouter, useSearchParams} from 'next/navigation'; +import {useEffect, useRef, useState} from 'react'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { useAuth } from '@/components/providers/auth-provider'; -import { AppCard } from '@/components/ui/app-card'; -import { exchangeGitHubCode } from '@/features/auth/api/auth'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {useAuth} from '@/components/providers/auth-provider'; +import {AppCard} from '@/components/ui/app-card'; +import {exchangeGitHubCode} from '@/features/auth/api/auth'; export function GitHubOAuthCallback() { const router = useRouter(); diff --git a/openflare_server/web/features/auth/components/login-form.tsx b/openflare-server/web/features/auth/components/login-form.tsx similarity index 85% rename from openflare_server/web/features/auth/components/login-form.tsx rename to openflare-server/web/features/auth/components/login-form.tsx index cc11e37c..5618f0ee 100644 --- a/openflare_server/web/features/auth/components/login-form.tsx +++ b/openflare-server/web/features/auth/components/login-form.tsx @@ -1,25 +1,20 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery } from '@tanstack/react-query'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation, useQuery} from '@tanstack/react-query'; import Link from 'next/link'; -import { useRouter, useSearchParams } from 'next/navigation'; -import { useState } from 'react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; +import {useRouter, useSearchParams} from 'next/navigation'; +import {useState} from 'react'; +import {useForm} from 'react-hook-form'; +import {z} from 'zod'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { useAuth } from '@/components/providers/auth-provider'; -import { AppCard } from '@/components/ui/app-card'; -import { getOAuthAuthorizeUrl, login } from '@/features/auth/api/auth'; -import { getPublicStatus } from '@/features/auth/api/public'; -import { - AuthButton, - AuthFormField, - AuthInput, - SecondaryButton, -} from '@/features/auth/components/auth-form-primitives'; -import { PublicAuthGuard } from '@/features/auth/components/public-auth-guard'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {useAuth} from '@/components/providers/auth-provider'; +import {AppCard} from '@/components/ui/app-card'; +import {getOAuthAuthorizeUrl, login} from '@/features/auth/api/auth'; +import {getPublicStatus} from '@/features/auth/api/public'; +import {AuthButton, AuthFormField, AuthInput, SecondaryButton,} from '@/features/auth/components/auth-form-primitives'; +import {PublicAuthGuard} from '@/features/auth/components/public-auth-guard'; const TEXT = { usernameRequired: '\u8bf7\u8f93\u5165\u7528\u6237\u540d', diff --git a/openflare_server/web/features/auth/components/oauth-callback.tsx b/openflare-server/web/features/auth/components/oauth-callback.tsx similarity index 88% rename from openflare_server/web/features/auth/components/oauth-callback.tsx rename to openflare-server/web/features/auth/components/oauth-callback.tsx index ec00f15c..feecdd1f 100644 --- a/openflare_server/web/features/auth/components/oauth-callback.tsx +++ b/openflare-server/web/features/auth/components/oauth-callback.tsx @@ -1,15 +1,15 @@ 'use client'; -import { useMutation } from '@tanstack/react-query'; +import {useMutation} from '@tanstack/react-query'; import Link from 'next/link'; -import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -import { useEffect, useRef, useState } from 'react'; +import {usePathname, useRouter, useSearchParams} from 'next/navigation'; +import {useEffect, useRef, useState} from 'react'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { useAuth } from '@/components/providers/auth-provider'; -import { AppCard } from '@/components/ui/app-card'; -import { exchangeOAuthCode } from '@/features/auth/api/auth'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {useAuth} from '@/components/providers/auth-provider'; +import {AppCard} from '@/components/ui/app-card'; +import {exchangeOAuthCode} from '@/features/auth/api/auth'; function parseOAuthSource(pathname: string | null, sourceParam: string) { const normalizedParam = sourceParam.trim(); diff --git a/openflare_server/web/features/auth/components/oauth-link-existing-form.tsx b/openflare-server/web/features/auth/components/oauth-link-existing-form.tsx similarity index 81% rename from openflare_server/web/features/auth/components/oauth-link-existing-form.tsx rename to openflare-server/web/features/auth/components/oauth-link-existing-form.tsx index 80b6f108..1fdafca4 100644 --- a/openflare_server/web/features/auth/components/oauth-link-existing-form.tsx +++ b/openflare-server/web/features/auth/components/oauth-link-existing-form.tsx @@ -1,22 +1,18 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation} from '@tanstack/react-query'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; -import { useState } from 'react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; +import {useRouter} from 'next/navigation'; +import {useState} from 'react'; +import {useForm} from 'react-hook-form'; +import {z} from 'zod'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { useAuth } from '@/components/providers/auth-provider'; -import { AppCard } from '@/components/ui/app-card'; -import { linkExistingOAuthAccount } from '@/features/auth/api/auth'; -import { - AuthButton, - AuthFormField, - AuthInput, -} from '@/features/auth/components/auth-form-primitives'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {useAuth} from '@/components/providers/auth-provider'; +import {AppCard} from '@/components/ui/app-card'; +import {linkExistingOAuthAccount} from '@/features/auth/api/auth'; +import {AuthButton, AuthFormField, AuthInput,} from '@/features/auth/components/auth-form-primitives'; const schema = z.object({ username: z.string().min(1, '请输入用户名'), diff --git a/openflare_server/web/features/auth/components/password-reset-confirm-form.tsx b/openflare-server/web/features/auth/components/password-reset-confirm-form.tsx similarity index 85% rename from openflare_server/web/features/auth/components/password-reset-confirm-form.tsx rename to openflare-server/web/features/auth/components/password-reset-confirm-form.tsx index c09ac22a..79996817 100644 --- a/openflare_server/web/features/auth/components/password-reset-confirm-form.tsx +++ b/openflare-server/web/features/auth/components/password-reset-confirm-form.tsx @@ -1,19 +1,14 @@ 'use client'; -import { useMutation } from '@tanstack/react-query'; +import {useMutation} from '@tanstack/react-query'; import Link from 'next/link'; -import { useSearchParams } from 'next/navigation'; -import { useState } from 'react'; +import {useSearchParams} from 'next/navigation'; +import {useState} from 'react'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { AppCard } from '@/components/ui/app-card'; -import { resetPassword } from '@/features/auth/api/auth'; -import { - AuthButton, - AuthFormField, - AuthInput, - SecondaryButton, -} from '@/features/auth/components/auth-form-primitives'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {AppCard} from '@/components/ui/app-card'; +import {resetPassword} from '@/features/auth/api/auth'; +import {AuthButton, AuthFormField, AuthInput, SecondaryButton,} from '@/features/auth/components/auth-form-primitives'; export function PasswordResetConfirmForm() { const searchParams = useSearchParams(); diff --git a/openflare_server/web/features/auth/components/password-reset-flow.tsx b/openflare-server/web/features/auth/components/password-reset-flow.tsx similarity index 56% rename from openflare_server/web/features/auth/components/password-reset-flow.tsx rename to openflare-server/web/features/auth/components/password-reset-flow.tsx index 66746fe6..ba0e1c37 100644 --- a/openflare_server/web/features/auth/components/password-reset-flow.tsx +++ b/openflare-server/web/features/auth/components/password-reset-flow.tsx @@ -1,9 +1,9 @@ 'use client'; -import { useSearchParams } from 'next/navigation'; +import {useSearchParams} from 'next/navigation'; -import { PasswordResetConfirmForm } from '@/features/auth/components/password-reset-confirm-form'; -import { PasswordResetRequestForm } from '@/features/auth/components/password-reset-request-form'; +import {PasswordResetConfirmForm} from '@/features/auth/components/password-reset-confirm-form'; +import {PasswordResetRequestForm} from '@/features/auth/components/password-reset-request-form'; export function PasswordResetFlow() { const searchParams = useSearchParams(); diff --git a/openflare_server/web/features/auth/components/password-reset-request-form.tsx b/openflare-server/web/features/auth/components/password-reset-request-form.tsx similarity index 80% rename from openflare_server/web/features/auth/components/password-reset-request-form.tsx rename to openflare-server/web/features/auth/components/password-reset-request-form.tsx index f16cbaf4..2e4668f9 100644 --- a/openflare_server/web/features/auth/components/password-reset-request-form.tsx +++ b/openflare-server/web/features/auth/components/password-reset-request-form.tsx @@ -1,21 +1,17 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation} from '@tanstack/react-query'; import Link from 'next/link'; -import { useState } from 'react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; +import {useState} from 'react'; +import {useForm} from 'react-hook-form'; +import {z} from 'zod'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { AppCard } from '@/components/ui/app-card'; -import { sendPasswordResetEmail } from '@/features/auth/api/auth'; -import { - AuthButton, - AuthFormField, - AuthInput, -} from '@/features/auth/components/auth-form-primitives'; -import { PublicAuthGuard } from '@/features/auth/components/public-auth-guard'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {AppCard} from '@/components/ui/app-card'; +import {sendPasswordResetEmail} from '@/features/auth/api/auth'; +import {AuthButton, AuthFormField, AuthInput,} from '@/features/auth/components/auth-form-primitives'; +import {PublicAuthGuard} from '@/features/auth/components/public-auth-guard'; const resetRequestSchema = z.object({ email: z.string().email('请输入有效邮箱地址'), diff --git a/openflare_server/web/features/auth/components/public-auth-guard.tsx b/openflare-server/web/features/auth/components/public-auth-guard.tsx similarity index 69% rename from openflare_server/web/features/auth/components/public-auth-guard.tsx rename to openflare-server/web/features/auth/components/public-auth-guard.tsx index 8c9427ac..dc0ce729 100644 --- a/openflare_server/web/features/auth/components/public-auth-guard.tsx +++ b/openflare-server/web/features/auth/components/public-auth-guard.tsx @@ -1,11 +1,11 @@ 'use client'; -import type { ReactNode } from 'react'; -import { useEffect } from 'react'; -import { useRouter, useSearchParams } from 'next/navigation'; +import type {ReactNode} from 'react'; +import {useEffect} from 'react'; +import {useRouter, useSearchParams} from 'next/navigation'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { useAuth } from '@/components/providers/auth-provider'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {useAuth} from '@/components/providers/auth-provider'; interface PublicAuthGuardProps { children: ReactNode; diff --git a/openflare_server/web/features/auth/components/public-route-placeholder.tsx b/openflare-server/web/features/auth/components/public-route-placeholder.tsx similarity index 87% rename from openflare_server/web/features/auth/components/public-route-placeholder.tsx rename to openflare-server/web/features/auth/components/public-route-placeholder.tsx index 1e64284c..c8a4b1b0 100644 --- a/openflare_server/web/features/auth/components/public-route-placeholder.tsx +++ b/openflare-server/web/features/auth/components/public-route-placeholder.tsx @@ -1,4 +1,4 @@ -import { FeaturePlaceholder } from '@/components/feedback/feature-placeholder'; +import {FeaturePlaceholder} from '@/components/feedback/feature-placeholder'; interface PublicRoutePlaceholderProps { title: string; diff --git a/openflare_server/web/features/config-versions/api/config-versions.ts b/openflare-server/web/features/config-versions/api/config-versions.ts similarity index 100% rename from openflare_server/web/features/config-versions/api/config-versions.ts rename to openflare-server/web/features/config-versions/api/config-versions.ts diff --git a/openflare_server/web/features/config-versions/components/cleanup-config-versions-modal.tsx b/openflare-server/web/features/config-versions/components/cleanup-config-versions-modal.tsx similarity index 100% rename from openflare_server/web/features/config-versions/components/cleanup-config-versions-modal.tsx rename to openflare-server/web/features/config-versions/components/cleanup-config-versions-modal.tsx diff --git a/openflare_server/web/features/config-versions/components/config-version-snapshot-modal.tsx b/openflare-server/web/features/config-versions/components/config-version-snapshot-modal.tsx similarity index 100% rename from openflare_server/web/features/config-versions/components/config-version-snapshot-modal.tsx rename to openflare-server/web/features/config-versions/components/config-version-snapshot-modal.tsx diff --git a/openflare_server/web/features/config-versions/components/config-versions-page.tsx b/openflare-server/web/features/config-versions/components/config-versions-page.tsx similarity index 100% rename from openflare_server/web/features/config-versions/components/config-versions-page.tsx rename to openflare-server/web/features/config-versions/components/config-versions-page.tsx diff --git a/openflare_server/web/features/config-versions/types.ts b/openflare-server/web/features/config-versions/types.ts similarity index 100% rename from openflare_server/web/features/config-versions/types.ts rename to openflare-server/web/features/config-versions/types.ts diff --git a/openflare_server/web/features/dashboard/api/overview.ts b/openflare-server/web/features/dashboard/api/overview.ts similarity index 94% rename from openflare_server/web/features/dashboard/api/overview.ts rename to openflare-server/web/features/dashboard/api/overview.ts index 3d1203cd..8d1425c2 100644 --- a/openflare_server/web/features/dashboard/api/overview.ts +++ b/openflare-server/web/features/dashboard/api/overview.ts @@ -1,19 +1,19 @@ -import { apiRequest } from '@/lib/api/client'; +import {apiRequest} from '@/lib/api/client'; import type { - CompactCapacityTrendPoint, - CompactDashboardNodeHealth, - CompactDiskIOTrendPoint, - CompactDistributionItem, - CompactNetworkTrendPoint, - CompactTrafficTrendPoint, - DashboardCapacity, - DashboardNodeHealth, - DashboardOverview, - DashboardOverviewCompact, - DashboardSummary, - DashboardTraffic, - DistributionItem, + CompactCapacityTrendPoint, + CompactDashboardNodeHealth, + CompactDiskIOTrendPoint, + CompactDistributionItem, + CompactNetworkTrendPoint, + CompactTrafficTrendPoint, + DashboardCapacity, + DashboardNodeHealth, + DashboardOverview, + DashboardOverviewCompact, + DashboardSummary, + DashboardTraffic, + DistributionItem, } from '@/features/dashboard/types'; function arrayOrEmpty(value: T[] | null | undefined) { diff --git a/openflare_server/web/features/dashboard/components/dashboard-overview.tsx b/openflare-server/web/features/dashboard/components/dashboard-overview.tsx similarity index 100% rename from openflare_server/web/features/dashboard/components/dashboard-overview.tsx rename to openflare-server/web/features/dashboard/components/dashboard-overview.tsx diff --git a/openflare_server/web/features/dashboard/components/world-stage-map.tsx b/openflare-server/web/features/dashboard/components/world-stage-map.tsx similarity index 100% rename from openflare_server/web/features/dashboard/components/world-stage-map.tsx rename to openflare-server/web/features/dashboard/components/world-stage-map.tsx diff --git a/openflare_server/web/features/dashboard/components/world-stage.tsx b/openflare-server/web/features/dashboard/components/world-stage.tsx similarity index 100% rename from openflare_server/web/features/dashboard/components/world-stage.tsx rename to openflare-server/web/features/dashboard/components/world-stage.tsx diff --git a/openflare_server/web/features/dashboard/data/world-geo.json b/openflare-server/web/features/dashboard/data/world-geo.json similarity index 100% rename from openflare_server/web/features/dashboard/data/world-geo.json rename to openflare-server/web/features/dashboard/data/world-geo.json diff --git a/openflare_server/web/features/dashboard/types.ts b/openflare-server/web/features/dashboard/types.ts similarity index 100% rename from openflare_server/web/features/dashboard/types.ts rename to openflare-server/web/features/dashboard/types.ts diff --git a/openflare_server/web/features/dns-accounts/api/dns-accounts.ts b/openflare-server/web/features/dns-accounts/api/dns-accounts.ts similarity index 81% rename from openflare_server/web/features/dns-accounts/api/dns-accounts.ts rename to openflare-server/web/features/dns-accounts/api/dns-accounts.ts index c5663928..5ccd4ab4 100644 --- a/openflare_server/web/features/dns-accounts/api/dns-accounts.ts +++ b/openflare-server/web/features/dns-accounts/api/dns-accounts.ts @@ -1,8 +1,5 @@ -import { apiRequest } from '@/lib/api/client'; -import type { - DnsAccountItem, - DnsAccountMutationPayload, -} from '@/features/dns-accounts/types'; +import {apiRequest} from '@/lib/api/client'; +import type {DnsAccountItem, DnsAccountMutationPayload,} from '@/features/dns-accounts/types'; export function getDnsAccounts() { return apiRequest('/dns-accounts/'); diff --git a/openflare_server/web/features/dns-accounts/components/dns-accounts-page.tsx b/openflare-server/web/features/dns-accounts/components/dns-accounts-page.tsx similarity index 87% rename from openflare_server/web/features/dns-accounts/components/dns-accounts-page.tsx rename to openflare-server/web/features/dns-accounts/components/dns-accounts-page.tsx index 4849ef17..e69c6639 100644 --- a/openflare_server/web/features/dns-accounts/components/dns-accounts-page.tsx +++ b/openflare-server/web/features/dns-accounts/components/dns-accounts-page.tsx @@ -1,32 +1,28 @@ 'use client'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useMemo, useState } from 'react'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useMemo, useState} from 'react'; import Link from 'next/link'; -import { useForm } from 'react-hook-form'; +import {useForm} from 'react-hook-form'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { AppModal } from '@/components/ui/app-modal'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {AppModal} from '@/components/ui/app-modal'; +import {createDnsAccount, deleteDnsAccount, getDnsAccounts,} from '@/features/dns-accounts/api/dns-accounts'; +import type {DnsAccountItem} from '@/features/dns-accounts/types'; +import {getErrorMessage} from '@/features/websites/utils'; import { - deleteDnsAccount, - getDnsAccounts, - createDnsAccount, -} from '@/features/dns-accounts/api/dns-accounts'; -import type { DnsAccountItem } from '@/features/dns-accounts/types'; -import { getErrorMessage } from '@/features/websites/utils'; -import { - DangerButton, - PrimaryButton, - ResourceField, - ResourceInput, - ResourceSelect, + DangerButton, + PrimaryButton, + ResourceField, + ResourceInput, + ResourceSelect, } from '@/features/shared/components/resource-primitives'; -import { formatDateTime } from '@/lib/utils/date'; +import {formatDateTime} from '@/lib/utils/date'; export function DnsAccountsPage() { const queryClient = useQueryClient(); diff --git a/openflare_server/web/features/dns-accounts/types.ts b/openflare-server/web/features/dns-accounts/types.ts similarity index 100% rename from openflare_server/web/features/dns-accounts/types.ts rename to openflare-server/web/features/dns-accounts/types.ts diff --git a/openflare_server/web/features/managed-domains/api/managed-domains.ts b/openflare-server/web/features/managed-domains/api/managed-domains.ts similarity index 86% rename from openflare_server/web/features/managed-domains/api/managed-domains.ts rename to openflare-server/web/features/managed-domains/api/managed-domains.ts index d0293735..780d80e8 100644 --- a/openflare_server/web/features/managed-domains/api/managed-domains.ts +++ b/openflare-server/web/features/managed-domains/api/managed-domains.ts @@ -1,9 +1,9 @@ -import { apiRequest } from '@/lib/api/client'; +import {apiRequest} from '@/lib/api/client'; import type { - ManagedDomainCertificateOption, - ManagedDomainItem, - ManagedDomainMutationPayload, + ManagedDomainCertificateOption, + ManagedDomainItem, + ManagedDomainMutationPayload, } from '@/features/managed-domains/types'; export function getManagedDomains() { diff --git a/openflare_server/web/features/managed-domains/types.ts b/openflare-server/web/features/managed-domains/types.ts similarity index 100% rename from openflare_server/web/features/managed-domains/types.ts rename to openflare-server/web/features/managed-domains/types.ts diff --git a/openflare_server/web/features/nodes/api/nodes.ts b/openflare-server/web/features/nodes/api/nodes.ts similarity index 90% rename from openflare_server/web/features/nodes/api/nodes.ts rename to openflare-server/web/features/nodes/api/nodes.ts index 9c5f142b..73618ce8 100644 --- a/openflare_server/web/features/nodes/api/nodes.ts +++ b/openflare-server/web/features/nodes/api/nodes.ts @@ -1,14 +1,14 @@ -import { apiRequest } from '@/lib/api/client'; +import {apiRequest} from '@/lib/api/client'; import type { - NodeAgentReleaseInfo, - NodeAgentUpdatePayload, - NodeBootstrapToken, - NodeItem, - NodeMutationPayload, - NodeObservability, + NodeAgentReleaseInfo, + NodeAgentUpdatePayload, + NodeBootstrapToken, + NodeItem, + NodeMutationPayload, + NodeObservability, } from '@/features/nodes/types'; -import type { ReleaseChannel } from '@/features/update/types'; +import type {ReleaseChannel} from '@/features/update/types'; export function getNodes() { return apiRequest('/nodes/'); diff --git a/openflare_server/web/features/nodes/components/node-detail-page.tsx b/openflare-server/web/features/nodes/components/node-detail-page.tsx similarity index 96% rename from openflare_server/web/features/nodes/components/node-detail-page.tsx rename to openflare-server/web/features/nodes/components/node-detail-page.tsx index 9567f4ec..5a4cf723 100644 --- a/openflare_server/web/features/nodes/components/node-detail-page.tsx +++ b/openflare-server/web/features/nodes/components/node-detail-page.tsx @@ -1,83 +1,79 @@ 'use client'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useEffect, useMemo, useState } from 'react'; +import {useRouter} from 'next/navigation'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useEffect, useMemo, useState} from 'react'; -import { RankChart } from '@/components/data/rank-chart'; -import { TrendChart } from '@/components/data/trend-chart'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppModal } from '@/components/ui/app-modal'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; -import { getConfigVersions } from '@/features/config-versions/api/config-versions'; -import { ConfigVersionSnapshotModal } from '@/features/config-versions/components/config-version-snapshot-modal'; -import type { ConfigVersionSummary } from '@/features/config-versions/types'; -import { getApplyLogs } from '@/features/apply-logs/api/apply-logs'; +import {RankChart} from '@/components/data/rank-chart'; +import {TrendChart} from '@/components/data/trend-chart'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppModal} from '@/components/ui/app-modal'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {getConfigVersions} from '@/features/config-versions/api/config-versions'; +import {ConfigVersionSnapshotModal} from '@/features/config-versions/components/config-version-snapshot-modal'; +import type {ConfigVersionSummary} from '@/features/config-versions/types'; +import {getApplyLogs} from '@/features/apply-logs/api/apply-logs'; import { - cleanupNodeHealthEvents, - deleteNode, - getNodeAgentRelease, - getNodeObservability, - getNodes, - requestNodeForceSync, - requestNodeOpenrestyRestart, - requestNodeAgentUpdate, - updateNode, + cleanupNodeHealthEvents, + deleteNode, + getNodeAgentRelease, + getNodeObservability, + getNodes, + requestNodeAgentUpdate, + requestNodeForceSync, + requestNodeOpenrestyRestart, + updateNode, } from '@/features/nodes/api/nodes'; -import { NodeEditorModal } from '@/features/nodes/components/node-editor-modal'; -import type { NodeItem, NodeAgentReleaseInfo } from '@/features/nodes/types'; +import {NodeEditorModal} from '@/features/nodes/components/node-editor-modal'; +import type {NodeAgentReleaseInfo, NodeItem} from '@/features/nodes/types'; import { - CodeBlock, - DangerButton, - PrimaryButton, - ResourceField, - ResourceInput, - SecondaryButton, + CodeBlock, + DangerButton, + PrimaryButton, + ResourceField, + ResourceInput, + SecondaryButton, } from '@/features/shared/components/resource-primitives'; -import type { ReleaseChannel } from '@/features/update/types'; -import { formatDateTime, formatRelativeTime } from '@/lib/utils/date'; +import type {ReleaseChannel} from '@/features/update/types'; +import {formatDateTime, formatRelativeTime} from '@/lib/utils/date'; +import {formatBytes, formatBytesPerSecond, formatPercent,} from '@/lib/utils/metrics'; import { - formatBytes, - formatBytesPerSecond, - formatPercent, -} from '@/lib/utils/metrics'; -import { - buildNodeInstallCommand, - buildNodeDockerInstallCommand, - getApplyLabel, - getApplyVariant, - getNodeStatusLabel, - getNodeStatusVariant, - getOpenrestyStatusLabel, - getOpenrestyStatusVariant, - getServerUrl, - getUpdateMode, - isMeaningfulTime, + buildNodeDockerInstallCommand, + buildNodeInstallCommand, + getApplyLabel, + getApplyVariant, + getNodeStatusLabel, + getNodeStatusVariant, + getOpenrestyStatusLabel, + getOpenrestyStatusVariant, + getServerUrl, + getUpdateMode, + isMeaningfulTime, } from '@/features/nodes/utils'; import { - copyToClipboard, - formatUsageRatio, - formatUptime, - formatTrendHour, - aggregateTrafficBreakdown, - getErrorMessage, - getHealthEventLabel, - getHealthEventVariant, - FeedbackState, - HealthEventFilter, - NodeDetailTab, - MetricBar, - SummaryStat, + aggregateTrafficBreakdown, + copyToClipboard, + FeedbackState, + formatTrendHour, + formatUptime, + formatUsageRatio, + getErrorMessage, + getHealthEventLabel, + getHealthEventVariant, + HealthEventFilter, + MetricBar, + NodeDetailTab, + SummaryStat, } from './node-shared'; -import { RelayDetailPage } from './relay-detail-page'; -import { TunnelDetailPage } from './tunnel-detail-page'; +import {RelayDetailPage} from './relay-detail-page'; +import {TunnelDetailPage} from './tunnel-detail-page'; const nodesQueryKey = ['nodes']; diff --git a/openflare_server/web/features/nodes/components/node-editor-modal.tsx b/openflare-server/web/features/nodes/components/node-editor-modal.tsx similarity index 97% rename from openflare_server/web/features/nodes/components/node-editor-modal.tsx rename to openflare-server/web/features/nodes/components/node-editor-modal.tsx index 1e453a3b..65f9cd5a 100644 --- a/openflare_server/web/features/nodes/components/node-editor-modal.tsx +++ b/openflare-server/web/features/nodes/components/node-editor-modal.tsx @@ -1,20 +1,20 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMemo, useEffect } from 'react'; -import { useForm, useWatch } from 'react-hook-form'; -import { z } from 'zod'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useEffect, useMemo} from 'react'; +import {useForm, useWatch} from 'react-hook-form'; +import {z} from 'zod'; -import { AppModal } from '@/components/ui/app-modal'; +import {AppModal} from '@/components/ui/app-modal'; import worldGeoJson from '@/features/dashboard/data/world-geo.json'; -import type { NodeItem, NodeMutationPayload } from '@/features/nodes/types'; +import type {NodeItem, NodeMutationPayload} from '@/features/nodes/types'; import { - PrimaryButton, - ResourceField, - ResourceInput, - ResourceSelect, - SecondaryButton, - ToggleField, + PrimaryButton, + ResourceField, + ResourceInput, + ResourceSelect, + SecondaryButton, + ToggleField, } from '@/features/shared/components/resource-primitives'; type GeoJsonGeometry = { diff --git a/openflare_server/web/features/nodes/components/node-shared.tsx b/openflare-server/web/features/nodes/components/node-shared.tsx similarity index 98% rename from openflare_server/web/features/nodes/components/node-shared.tsx rename to openflare-server/web/features/nodes/components/node-shared.tsx index aa446519..87ade91a 100644 --- a/openflare_server/web/features/nodes/components/node-shared.tsx +++ b/openflare-server/web/features/nodes/components/node-shared.tsx @@ -1,7 +1,7 @@ 'use client'; import React from 'react'; -import type { NodeObservability } from '@/features/nodes/types'; +import type {NodeObservability} from '@/features/nodes/types'; export type FeedbackState = { tone: 'info' | 'success' | 'danger'; diff --git a/openflare_server/web/features/nodes/components/nodes-page.tsx b/openflare-server/web/features/nodes/components/nodes-page.tsx similarity index 93% rename from openflare_server/web/features/nodes/components/nodes-page.tsx rename to openflare-server/web/features/nodes/components/nodes-page.tsx index 303d7886..962c2620 100644 --- a/openflare_server/web/features/nodes/components/nodes-page.tsx +++ b/openflare-server/web/features/nodes/components/nodes-page.tsx @@ -1,43 +1,35 @@ 'use client'; import Link from 'next/link'; -import { useSearchParams } from 'next/navigation'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useMemo, useState } from 'react'; +import {useSearchParams} from 'next/navigation'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useMemo, useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; -import { getConfigVersions } from '@/features/config-versions/api/config-versions'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {getConfigVersions} from '@/features/config-versions/api/config-versions'; +import {createNode, deleteNode, getNodes, updateNode,} from '@/features/nodes/api/nodes'; +import {NodeEditorModal} from '@/features/nodes/components/node-editor-modal'; +import type {NodeItem, NodeMutationPayload} from '@/features/nodes/types'; +import {DangerButton, SecondaryButton,} from '@/features/shared/components/resource-primitives'; +import {formatDateTime, formatRelativeTime} from '@/lib/utils/date'; import { - createNode, - deleteNode, - getNodes, - updateNode, -} from '@/features/nodes/api/nodes'; -import { NodeEditorModal } from '@/features/nodes/components/node-editor-modal'; -import type { NodeItem, NodeMutationPayload } from '@/features/nodes/types'; -import { - DangerButton, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; -import { formatDateTime, formatRelativeTime } from '@/lib/utils/date'; -import { - getApplyLabel, - getApplyVariant, - getNodeStatusLabel, - getNodeStatusVariant, - getOpenrestyStatusLabel, - getOpenrestyStatusVariant, - getRelayStatusLabel, - getRelayStatusVariant, - isMeaningfulTime, - isNodeAbnormal, - isWSConnectedLastSeen, + getApplyLabel, + getApplyVariant, + getNodeStatusLabel, + getNodeStatusVariant, + getOpenrestyStatusLabel, + getOpenrestyStatusVariant, + getRelayStatusLabel, + getRelayStatusVariant, + isMeaningfulTime, + isNodeAbnormal, + isWSConnectedLastSeen, } from '@/features/nodes/utils'; const nodesQueryKey = ['nodes']; diff --git a/openflare_server/web/features/nodes/components/relay-detail-page.tsx b/openflare-server/web/features/nodes/components/relay-detail-page.tsx similarity index 96% rename from openflare_server/web/features/nodes/components/relay-detail-page.tsx rename to openflare-server/web/features/nodes/components/relay-detail-page.tsx index 3d8132d8..311d8445 100644 --- a/openflare_server/web/features/nodes/components/relay-detail-page.tsx +++ b/openflare-server/web/features/nodes/components/relay-detail-page.tsx @@ -1,65 +1,65 @@ 'use client'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useEffect, useMemo, useState } from 'react'; +import {useRouter} from 'next/navigation'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useEffect, useMemo, useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppModal } from '@/components/ui/app-modal'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; -import { getConfigVersions } from '@/features/config-versions/api/config-versions'; -import { ConfigVersionSnapshotModal } from '@/features/config-versions/components/config-version-snapshot-modal'; -import type { ConfigVersionSummary } from '@/features/config-versions/types'; -import { getApplyLogs } from '@/features/apply-logs/api/apply-logs'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppModal} from '@/components/ui/app-modal'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {getConfigVersions} from '@/features/config-versions/api/config-versions'; +import {ConfigVersionSnapshotModal} from '@/features/config-versions/components/config-version-snapshot-modal'; +import type {ConfigVersionSummary} from '@/features/config-versions/types'; +import {getApplyLogs} from '@/features/apply-logs/api/apply-logs'; import { - cleanupNodeHealthEvents, - deleteNode, - getNodeAgentRelease, - getNodeObservability, - requestNodeForceSync, - requestNodeAgentUpdate, - updateNode, + cleanupNodeHealthEvents, + deleteNode, + getNodeAgentRelease, + getNodeObservability, + requestNodeAgentUpdate, + requestNodeForceSync, + updateNode, } from '@/features/nodes/api/nodes'; -import { NodeEditorModal } from '@/features/nodes/components/node-editor-modal'; -import type { NodeItem, NodeAgentReleaseInfo } from '@/features/nodes/types'; +import {NodeEditorModal} from '@/features/nodes/components/node-editor-modal'; +import type {NodeAgentReleaseInfo, NodeItem} from '@/features/nodes/types'; import { - CodeBlock, - DangerButton, - PrimaryButton, - ResourceField, - ResourceInput, - SecondaryButton, + CodeBlock, + DangerButton, + PrimaryButton, + ResourceField, + ResourceInput, + SecondaryButton, } from '@/features/shared/components/resource-primitives'; -import type { ReleaseChannel } from '@/features/update/types'; -import { formatDateTime, formatRelativeTime } from '@/lib/utils/date'; -import { formatBytes, formatPercent } from '@/lib/utils/metrics'; +import type {ReleaseChannel} from '@/features/update/types'; +import {formatDateTime, formatRelativeTime} from '@/lib/utils/date'; +import {formatBytes, formatPercent} from '@/lib/utils/metrics'; import { - buildRelayInstallCommand, - buildRelayDockerInstallCommand, - getApplyLabel, - getApplyVariant, - getServerUrl, - getUpdateMode, - isMeaningfulTime, - isWSConnectedLastSeen, + buildRelayDockerInstallCommand, + buildRelayInstallCommand, + getApplyLabel, + getApplyVariant, + getServerUrl, + getUpdateMode, + isMeaningfulTime, + isWSConnectedLastSeen, } from '@/features/nodes/utils'; import { - copyToClipboard, - formatUsageRatio, - formatUptime, - getErrorMessage, - getHealthEventLabel, - getHealthEventVariant, - FeedbackState, - HealthEventFilter, - NodeDetailTab, - MetricBar, + copyToClipboard, + FeedbackState, + formatUptime, + formatUsageRatio, + getErrorMessage, + getHealthEventLabel, + getHealthEventVariant, + HealthEventFilter, + MetricBar, + NodeDetailTab, } from './node-shared'; export function RelayDetailPage({ node }: { node: NodeItem }) { diff --git a/openflare_server/web/features/nodes/components/tunnel-detail-page.tsx b/openflare-server/web/features/nodes/components/tunnel-detail-page.tsx similarity index 100% rename from openflare_server/web/features/nodes/components/tunnel-detail-page.tsx rename to openflare-server/web/features/nodes/components/tunnel-detail-page.tsx diff --git a/openflare_server/web/features/nodes/types.ts b/openflare-server/web/features/nodes/types.ts similarity index 100% rename from openflare_server/web/features/nodes/types.ts rename to openflare-server/web/features/nodes/types.ts diff --git a/openflare_server/web/features/nodes/utils.ts b/openflare-server/web/features/nodes/utils.ts similarity index 100% rename from openflare_server/web/features/nodes/utils.ts rename to openflare-server/web/features/nodes/utils.ts diff --git a/openflare_server/web/features/origins/api/origins.ts b/openflare-server/web/features/origins/api/origins.ts similarity index 81% rename from openflare_server/web/features/origins/api/origins.ts rename to openflare-server/web/features/origins/api/origins.ts index 976048d9..17e4e236 100644 --- a/openflare_server/web/features/origins/api/origins.ts +++ b/openflare-server/web/features/origins/api/origins.ts @@ -1,10 +1,6 @@ -import { apiRequest } from '@/lib/api/client'; +import {apiRequest} from '@/lib/api/client'; -import type { - OriginDetail, - OriginItem, - OriginMutationPayload, -} from '@/features/origins/types'; +import type {OriginDetail, OriginItem, OriginMutationPayload,} from '@/features/origins/types'; export function getOrigins() { return apiRequest('/origins/'); diff --git a/openflare_server/web/features/origins/components/origin-detail-page.tsx b/openflare-server/web/features/origins/components/origin-detail-page.tsx similarity index 88% rename from openflare_server/web/features/origins/components/origin-detail-page.tsx rename to openflare-server/web/features/origins/components/origin-detail-page.tsx index 4b52bdaa..c42ea795 100644 --- a/openflare_server/web/features/origins/components/origin-detail-page.tsx +++ b/openflare-server/web/features/origins/components/origin-detail-page.tsx @@ -1,24 +1,21 @@ 'use client'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useState } from 'react'; +import {useRouter} from 'next/navigation'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; -import { deleteOrigin, getOrigin } from '@/features/origins/api/origins'; -import { OriginEditorModal } from '@/features/origins/components/origin-editor-modal'; -import { - DangerButton, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; -import { formatDateTime } from '@/lib/utils/date'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {deleteOrigin, getOrigin} from '@/features/origins/api/origins'; +import {OriginEditorModal} from '@/features/origins/components/origin-editor-modal'; +import {DangerButton, SecondaryButton,} from '@/features/shared/components/resource-primitives'; +import {formatDateTime} from '@/lib/utils/date'; export function OriginDetailPage({ originId }: { originId: string }) { const router = useRouter(); diff --git a/openflare_server/web/features/origins/components/origin-editor-modal.tsx b/openflare-server/web/features/origins/components/origin-editor-modal.tsx similarity index 88% rename from openflare_server/web/features/origins/components/origin-editor-modal.tsx rename to openflare-server/web/features/origins/components/origin-editor-modal.tsx index acfed78d..741e10c3 100644 --- a/openflare_server/web/features/origins/components/origin-editor-modal.tsx +++ b/openflare-server/web/features/origins/components/origin-editor-modal.tsx @@ -1,23 +1,20 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useEffect } from 'react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation, useQueryClient} from '@tanstack/react-query'; +import {useEffect} from 'react'; +import {useForm} from 'react-hook-form'; +import {z} from 'zod'; -import { AppModal } from '@/components/ui/app-modal'; -import { createOrigin, updateOrigin } from '@/features/origins/api/origins'; -import type { - OriginItem, - OriginMutationPayload, -} from '@/features/origins/types'; +import {AppModal} from '@/components/ui/app-modal'; +import {createOrigin, updateOrigin} from '@/features/origins/api/origins'; +import type {OriginItem, OriginMutationPayload,} from '@/features/origins/types'; import { - PrimaryButton, - ResourceField, - ResourceInput, - ResourceTextarea, - SecondaryButton, + PrimaryButton, + ResourceField, + ResourceInput, + ResourceTextarea, + SecondaryButton, } from '@/features/shared/components/resource-primitives'; const originSchema = z.object({ diff --git a/openflare_server/web/features/origins/components/origins-page.tsx b/openflare-server/web/features/origins/components/origins-page.tsx similarity index 86% rename from openflare_server/web/features/origins/components/origins-page.tsx rename to openflare-server/web/features/origins/components/origins-page.tsx index 39d129d4..c70a80c2 100644 --- a/openflare_server/web/features/origins/components/origins-page.tsx +++ b/openflare-server/web/features/origins/components/origins-page.tsx @@ -1,25 +1,21 @@ 'use client'; import Link from 'next/link'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useMemo, useState } from 'react'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useMemo, useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; -import { deleteOrigin, getOrigins } from '@/features/origins/api/origins'; -import { OriginEditorModal } from '@/features/origins/components/origin-editor-modal'; -import type { OriginItem } from '@/features/origins/types'; -import { - DangerButton, - PrimaryButton, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; -import { formatDateTime } from '@/lib/utils/date'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {deleteOrigin, getOrigins} from '@/features/origins/api/origins'; +import {OriginEditorModal} from '@/features/origins/components/origin-editor-modal'; +import type {OriginItem} from '@/features/origins/types'; +import {DangerButton, PrimaryButton, SecondaryButton,} from '@/features/shared/components/resource-primitives'; +import {formatDateTime} from '@/lib/utils/date'; type FeedbackState = { tone: 'success' | 'danger'; diff --git a/openflare_server/web/features/origins/types.ts b/openflare-server/web/features/origins/types.ts similarity index 100% rename from openflare_server/web/features/origins/types.ts rename to openflare-server/web/features/origins/types.ts diff --git a/openflare_server/web/features/pages/api/pages.ts b/openflare-server/web/features/pages/api/pages.ts similarity index 94% rename from openflare_server/web/features/pages/api/pages.ts rename to openflare-server/web/features/pages/api/pages.ts index 2f63700a..90b1d358 100644 --- a/openflare_server/web/features/pages/api/pages.ts +++ b/openflare-server/web/features/pages/api/pages.ts @@ -1,11 +1,7 @@ -import { apiRequest, getApiUrl, ApiError } from '@/lib/api/client'; -import type { ApiEnvelope } from '@/types/api'; +import {ApiError, apiRequest, getApiUrl} from '@/lib/api/client'; +import type {ApiEnvelope} from '@/types/api'; -import type { - PagesDeployment, - PagesProject, - PagesProjectPayload, -} from '@/features/pages/types'; +import type {PagesDeployment, PagesProject, PagesProjectPayload,} from '@/features/pages/types'; export function getPagesProjects() { return apiRequest('/pages/'); diff --git a/openflare_server/web/features/pages/components/pages-deployment-upload-modal.tsx b/openflare-server/web/features/pages/components/pages-deployment-upload-modal.tsx similarity index 94% rename from openflare_server/web/features/pages/components/pages-deployment-upload-modal.tsx rename to openflare-server/web/features/pages/components/pages-deployment-upload-modal.tsx index 1d647c75..2d421fef 100644 --- a/openflare_server/web/features/pages/components/pages-deployment-upload-modal.tsx +++ b/openflare-server/web/features/pages/components/pages-deployment-upload-modal.tsx @@ -1,24 +1,14 @@ 'use client'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useState, useRef } from 'react'; -import { UploadCloud, File as FileIcon, X } from 'lucide-react'; +import {useMutation, useQueryClient} from '@tanstack/react-query'; +import {useRef, useState} from 'react'; +import {File as FileIcon, UploadCloud, X} from 'lucide-react'; -import { AppModal } from '@/components/ui/app-modal'; -import { - activatePagesDeployment, - uploadPagesDeployment, -} from '@/features/pages/api/pages'; -import { - PrimaryButton, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; -import { cn } from '@/lib/utils/cn'; -import { - deploymentsQueryKey, - projectQueryKey, - projectsQueryKey, -} from '../utils'; +import {AppModal} from '@/components/ui/app-modal'; +import {activatePagesDeployment, uploadPagesDeployment,} from '@/features/pages/api/pages'; +import {PrimaryButton, SecondaryButton,} from '@/features/shared/components/resource-primitives'; +import {cn} from '@/lib/utils/cn'; +import {deploymentsQueryKey, projectQueryKey, projectsQueryKey,} from '../utils'; interface PagesDeploymentUploadModalProps { isOpen: boolean; diff --git a/openflare_server/web/features/pages/components/pages-detail-page.tsx b/openflare-server/web/features/pages/components/pages-detail-page.tsx similarity index 88% rename from openflare_server/web/features/pages/components/pages-detail-page.tsx rename to openflare-server/web/features/pages/components/pages-detail-page.tsx index 0bf20f3e..b13a0c3a 100644 --- a/openflare_server/web/features/pages/components/pages-detail-page.tsx +++ b/openflare-server/web/features/pages/components/pages-detail-page.tsx @@ -1,35 +1,27 @@ 'use client'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; -import { useState } from 'react'; +import {useRouter} from 'next/navigation'; +import {useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; import { - activatePagesDeployment, - deletePagesDeployment, - deletePagesProject, - getPagesProject, - getPagesDeployments, + activatePagesDeployment, + deletePagesDeployment, + deletePagesProject, + getPagesDeployments, + getPagesProject, } from '@/features/pages/api/pages'; -import { - DangerButton, - PrimaryButton, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; -import { PagesProjectEditorModal } from './pages-project-editor-modal'; -import { PagesDeploymentUploadModal } from './pages-deployment-upload-modal'; -import { formatBytes } from '@/lib/utils/metrics'; -import { - deploymentsQueryKey, - projectQueryKey, - projectsQueryKey, -} from '../utils'; +import {DangerButton, PrimaryButton, SecondaryButton,} from '@/features/shared/components/resource-primitives'; +import {PagesProjectEditorModal} from './pages-project-editor-modal'; +import {PagesDeploymentUploadModal} from './pages-deployment-upload-modal'; +import {formatBytes} from '@/lib/utils/metrics'; +import {deploymentsQueryKey, projectQueryKey, projectsQueryKey,} from '../utils'; export function PagesProjectDetailPage({ projectId }: { projectId: string }) { const router = useRouter(); diff --git a/openflare_server/web/features/pages/components/pages-page.tsx b/openflare-server/web/features/pages/components/pages-page.tsx similarity index 81% rename from openflare_server/web/features/pages/components/pages-page.tsx rename to openflare-server/web/features/pages/components/pages-page.tsx index 959bbc85..eecf48aa 100644 --- a/openflare_server/web/features/pages/components/pages-page.tsx +++ b/openflare-server/web/features/pages/components/pages-page.tsx @@ -1,17 +1,14 @@ 'use client'; -import { useQuery } from '@tanstack/react-query'; -import { useState } from 'react'; +import {useQuery} from '@tanstack/react-query'; +import {useState} from 'react'; -import { AppCard } from '@/components/ui/app-card'; -import { getPagesProjects } from '@/features/pages/api/pages'; -import { - PrimaryButton, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; -import { PagesProjectEditorModal } from './pages-project-editor-modal'; -import { PagesProjectListItem } from './pages-project-list-item'; -import { projectsQueryKey } from '../utils'; +import {AppCard} from '@/components/ui/app-card'; +import {getPagesProjects} from '@/features/pages/api/pages'; +import {PrimaryButton,} from '@/features/shared/components/resource-primitives'; +import {PagesProjectEditorModal} from './pages-project-editor-modal'; +import {PagesProjectListItem} from './pages-project-list-item'; +import {projectsQueryKey} from '../utils'; export { PagesProjectDetailPage } from './pages-detail-page'; diff --git a/openflare_server/web/features/pages/components/pages-project-editor-modal.tsx b/openflare-server/web/features/pages/components/pages-project-editor-modal.tsx similarity index 93% rename from openflare_server/web/features/pages/components/pages-project-editor-modal.tsx rename to openflare-server/web/features/pages/components/pages-project-editor-modal.tsx index 7e0258c7..aae8d179 100644 --- a/openflare_server/web/features/pages/components/pages-project-editor-modal.tsx +++ b/openflare-server/web/features/pages/components/pages-project-editor-modal.tsx @@ -1,25 +1,22 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useEffect } from 'react'; -import { useForm } from 'react-hook-form'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation, useQueryClient} from '@tanstack/react-query'; +import {useEffect} from 'react'; +import {useForm} from 'react-hook-form'; -import { AppModal } from '@/components/ui/app-modal'; +import {AppModal} from '@/components/ui/app-modal'; +import {createPagesProject, updatePagesProject,} from '@/features/pages/api/pages'; +import type {PagesProject} from '@/features/pages/types'; import { - createPagesProject, - updatePagesProject, -} from '@/features/pages/api/pages'; -import type { PagesProject } from '@/features/pages/types'; -import { - PrimaryButton, - ResourceField, - ResourceInput, - SecondaryButton, - ToggleField, + PrimaryButton, + ResourceField, + ResourceInput, + SecondaryButton, + ToggleField, } from '@/features/shared/components/resource-primitives'; -import { projectQueryKey, projectsQueryKey } from '../utils'; -import { pagesProjectSchema, type PagesProjectFormValues } from '../schemas'; +import {projectQueryKey, projectsQueryKey} from '../utils'; +import {type PagesProjectFormValues, pagesProjectSchema} from '../schemas'; interface PagesProjectEditorModalProps { isOpen: boolean; diff --git a/openflare_server/web/features/pages/components/pages-project-list-item.tsx b/openflare-server/web/features/pages/components/pages-project-list-item.tsx similarity index 94% rename from openflare_server/web/features/pages/components/pages-project-list-item.tsx rename to openflare-server/web/features/pages/components/pages-project-list-item.tsx index f7bcf404..a4dfd34b 100644 --- a/openflare_server/web/features/pages/components/pages-project-list-item.tsx +++ b/openflare-server/web/features/pages/components/pages-project-list-item.tsx @@ -2,9 +2,9 @@ import Link from 'next/link'; -import { StatusBadge } from '@/components/ui/status-badge'; -import type { PagesProject } from '@/features/pages/types'; -import { formatDateTime } from '@/lib/utils/date'; +import {StatusBadge} from '@/components/ui/status-badge'; +import type {PagesProject} from '@/features/pages/types'; +import {formatDateTime} from '@/lib/utils/date'; export function PagesProjectListItem({ project }: { project: PagesProject }) { return ( diff --git a/openflare_server/web/features/pages/schemas.ts b/openflare-server/web/features/pages/schemas.ts similarity index 99% rename from openflare_server/web/features/pages/schemas.ts rename to openflare-server/web/features/pages/schemas.ts index 54c36d0e..1dc0b320 100644 --- a/openflare_server/web/features/pages/schemas.ts +++ b/openflare-server/web/features/pages/schemas.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import {z} from 'zod'; export const pagesProjectSchema = z .object({ diff --git a/openflare_server/web/features/pages/types.ts b/openflare-server/web/features/pages/types.ts similarity index 100% rename from openflare_server/web/features/pages/types.ts rename to openflare-server/web/features/pages/types.ts diff --git a/openflare_server/web/features/pages/utils.ts b/openflare-server/web/features/pages/utils.ts similarity index 100% rename from openflare_server/web/features/pages/utils.ts rename to openflare-server/web/features/pages/utils.ts diff --git a/openflare_server/web/features/performance/components/performance-page.tsx b/openflare-server/web/features/performance/components/performance-page.tsx similarity index 98% rename from openflare_server/web/features/performance/components/performance-page.tsx rename to openflare-server/web/features/performance/components/performance-page.tsx index c350b132..b4b681f5 100644 --- a/openflare_server/web/features/performance/components/performance-page.tsx +++ b/openflare-server/web/features/performance/components/performance-page.tsx @@ -1,19 +1,19 @@ 'use client'; -import { useEffect, useState } from 'react'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; +import {useEffect, useState} from 'react'; +import {useQuery, useQueryClient} from '@tanstack/react-query'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { useAuth } from '@/components/providers/auth-provider'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; -import { getConfigVersionPreview } from '@/features/config-versions/api/config-versions'; -import { getOptions, updateOptions } from '@/features/settings/api/settings'; -import type { OptionItem } from '@/features/settings/types'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {useAuth} from '@/components/providers/auth-provider'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {getConfigVersionPreview} from '@/features/config-versions/api/config-versions'; +import {getOptions, updateOptions} from '@/features/settings/api/settings'; +import type {OptionItem} from '@/features/settings/types'; import { CodeBlock, PrimaryButton, diff --git a/openflare_server/web/features/proxy-routes/api/proxy-routes.ts b/openflare-server/web/features/proxy-routes/api/proxy-routes.ts similarity index 88% rename from openflare_server/web/features/proxy-routes/api/proxy-routes.ts rename to openflare-server/web/features/proxy-routes/api/proxy-routes.ts index 3fa7844d..d43dcb79 100644 --- a/openflare_server/web/features/proxy-routes/api/proxy-routes.ts +++ b/openflare-server/web/features/proxy-routes/api/proxy-routes.ts @@ -1,10 +1,10 @@ -import { apiRequest } from '@/lib/api/client'; +import {apiRequest} from '@/lib/api/client'; import type { - ManagedDomainMatchResult, - ProxyRouteItem, - ProxyRouteMutationPayload, - TlsCertificateItem, + ManagedDomainMatchResult, + ProxyRouteItem, + ProxyRouteMutationPayload, + TlsCertificateItem, } from '@/features/proxy-routes/types'; export function getProxyRoutes() { diff --git a/openflare_server/web/features/proxy-routes/components/domain-list-input.tsx b/openflare-server/web/features/proxy-routes/components/domain-list-input.tsx similarity index 96% rename from openflare_server/web/features/proxy-routes/components/domain-list-input.tsx rename to openflare-server/web/features/proxy-routes/components/domain-list-input.tsx index 77ba94f2..b28c99f1 100644 --- a/openflare_server/web/features/proxy-routes/components/domain-list-input.tsx +++ b/openflare-server/web/features/proxy-routes/components/domain-list-input.tsx @@ -1,14 +1,11 @@ 'use client'; -import { useId, useMemo } from 'react'; -import { Minus, Plus } from 'lucide-react'; +import {useId, useMemo} from 'react'; +import {Minus, Plus} from 'lucide-react'; + +import type {TlsCertificateItem} from '@/features/tls-certificates/types'; +import {ResourceInput, ResourceSelect, SecondaryButton,} from '@/features/shared/components/resource-primitives'; -import type { TlsCertificateItem } from '@/features/tls-certificates/types'; -import { - ResourceInput, - ResourceSelect, - SecondaryButton, -} from '@/features/shared/components/resource-primitives'; export type DomainListRow = { domain: string; certificateId: string; diff --git a/openflare_server/web/features/proxy-routes/components/proxy-route-config-page.tsx b/openflare-server/web/features/proxy-routes/components/proxy-route-config-page.tsx similarity index 95% rename from openflare_server/web/features/proxy-routes/components/proxy-route-config-page.tsx rename to openflare-server/web/features/proxy-routes/components/proxy-route-config-page.tsx index 04c5ff88..7a7dbdd4 100644 --- a/openflare_server/web/features/proxy-routes/components/proxy-route-config-page.tsx +++ b/openflare-server/web/features/proxy-routes/components/proxy-route-config-page.tsx @@ -1,67 +1,58 @@ 'use client'; import Link from 'next/link'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useEffect, useMemo, useState } from 'react'; -import type { ReactNode } from 'react'; -import { Controller, useForm } from 'react-hook-form'; -import { z } from 'zod'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import type {ReactNode} from 'react'; +import {useEffect, useMemo, useState} from 'react'; +import {Controller, useForm} from 'react-hook-form'; +import {z} from 'zod'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { getManagedDomains } from '@/features/managed-domains/api/managed-domains'; -import { getPagesProjects } from '@/features/pages/api/pages'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {getManagedDomains} from '@/features/managed-domains/api/managed-domains'; +import {getPagesProjects} from '@/features/pages/api/pages'; +import {getProxyRoute, updateProxyRoute,} from '@/features/proxy-routes/api/proxy-routes'; +import {getWAFSiteRuleGroups, replaceWAFSiteRuleGroups,} from '@/features/waf/api/waf'; +import {getNodes} from '@/features/nodes/api/nodes'; import { - getProxyRoute, - updateProxyRoute, -} from '@/features/proxy-routes/api/proxy-routes'; -import { - getWAFSiteRuleGroups, - replaceWAFSiteRuleGroups, -} from '@/features/waf/api/waf'; -import { getNodes } from '@/features/nodes/api/nodes'; -import { - buildDomainRowsFromRoute, - DomainListInput, - type DomainListRow, + buildDomainRowsFromRoute, + DomainListInput, + type DomainListRow, } from '@/features/proxy-routes/components/domain-list-input'; import { - buildPayloadFromRoute, - customHeadersToText, - getErrorMessage, - getWebsiteConfigSection, - linesFromTextarea, - normalizeLimitRate, - parseCustomHeadersText, - parseOriginUrl, - parseOriginUrls, - validateCacheRules, - validateDomains, - validateLimitRate, - validateOriginHost, - websiteConfigSections, + buildPayloadFromRoute, + customHeadersToText, + getErrorMessage, + getWebsiteConfigSection, + linesFromTextarea, + normalizeLimitRate, + parseCustomHeadersText, + parseOriginUrl, + parseOriginUrls, + validateCacheRules, + validateDomains, + validateLimitRate, + validateOriginHost, + websiteConfigSections, } from '@/features/proxy-routes/helpers'; -import type { - ProxyRouteItem, - ProxyRouteMutationPayload, -} from '@/features/proxy-routes/types'; -import { getTlsCertificates } from '@/features/tls-certificates/api/tls-certificates'; -import type { TlsCertificateItem } from '@/features/tls-certificates/types'; +import type {ProxyRouteItem, ProxyRouteMutationPayload,} from '@/features/proxy-routes/types'; +import {getTlsCertificates} from '@/features/tls-certificates/api/tls-certificates'; +import type {TlsCertificateItem} from '@/features/tls-certificates/types'; import { - PrimaryButton, - ResourceField, - ResourceInput, - ResourceSelect, - ResourceTextarea, - SecondaryButton, - ToggleField, + PrimaryButton, + ResourceField, + ResourceInput, + ResourceSelect, + ResourceTextarea, + SecondaryButton, + ToggleField, } from '@/features/shared/components/resource-primitives'; -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; type FeedbackState = { tone: 'success' | 'danger'; diff --git a/openflare_server/web/features/proxy-routes/components/proxy-route-create-drawer.tsx b/openflare-server/web/features/proxy-routes/components/proxy-route-create-drawer.tsx similarity index 94% rename from openflare_server/web/features/proxy-routes/components/proxy-route-create-drawer.tsx rename to openflare-server/web/features/proxy-routes/components/proxy-route-create-drawer.tsx index 346c0a6e..83481618 100644 --- a/openflare_server/web/features/proxy-routes/components/proxy-route-create-drawer.tsx +++ b/openflare-server/web/features/proxy-routes/components/proxy-route-create-drawer.tsx @@ -1,35 +1,32 @@ 'use client'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery } from '@tanstack/react-query'; -import { useEffect, useMemo } from 'react'; -import { Controller, useForm } from 'react-hook-form'; -import { z } from 'zod'; +import {zodResolver} from '@hookform/resolvers/zod'; +import {useMutation, useQuery} from '@tanstack/react-query'; +import {useEffect, useMemo} from 'react'; +import {Controller, useForm} from 'react-hook-form'; +import {z} from 'zod'; -import { Drawer } from '@/components/ui/drawer'; -import { getManagedDomains } from '@/features/managed-domains/api/managed-domains'; -import { getPagesProjects } from '@/features/pages/api/pages'; -import { createProxyRoute } from '@/features/proxy-routes/api/proxy-routes'; +import {Drawer} from '@/components/ui/drawer'; +import {getManagedDomains} from '@/features/managed-domains/api/managed-domains'; +import {getPagesProjects} from '@/features/pages/api/pages'; +import {createProxyRoute} from '@/features/proxy-routes/api/proxy-routes'; +import {DomainListInput, type DomainListRow,} from '@/features/proxy-routes/components/domain-list-input'; import { - DomainListInput, - type DomainListRow, -} from '@/features/proxy-routes/components/domain-list-input'; -import { - buildOriginUrl, - getErrorMessage, - parseOriginUrl, - parseOriginUrls, - validateDomains, + buildOriginUrl, + getErrorMessage, + parseOriginUrl, + parseOriginUrls, + validateDomains, } from '@/features/proxy-routes/helpers'; -import { getNodes } from '@/features/nodes/api/nodes'; -import type { ProxyRouteItem } from '@/features/proxy-routes/types'; -import { getTlsCertificates } from '@/features/tls-certificates/api/tls-certificates'; +import {getNodes} from '@/features/nodes/api/nodes'; +import type {ProxyRouteItem} from '@/features/proxy-routes/types'; +import {getTlsCertificates} from '@/features/tls-certificates/api/tls-certificates'; import { - PrimaryButton, - ResourceField, - ResourceInput, - ResourceTextarea, - ToggleField, + PrimaryButton, + ResourceField, + ResourceInput, + ResourceTextarea, + ToggleField, } from '@/features/shared/components/resource-primitives'; const domainRowSchema = z.object({ diff --git a/openflare_server/web/features/proxy-routes/components/proxy-routes-page.tsx b/openflare-server/web/features/proxy-routes/components/proxy-routes-page.tsx similarity index 91% rename from openflare_server/web/features/proxy-routes/components/proxy-routes-page.tsx rename to openflare-server/web/features/proxy-routes/components/proxy-routes-page.tsx index ae93745d..314bf12e 100644 --- a/openflare_server/web/features/proxy-routes/components/proxy-routes-page.tsx +++ b/openflare-server/web/features/proxy-routes/components/proxy-routes-page.tsx @@ -1,37 +1,27 @@ 'use client'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useMemo, useState } from 'react'; +import {useRouter} from 'next/navigation'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {useMemo, useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { StatusBadge } from '@/components/ui/status-badge'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {StatusBadge} from '@/components/ui/status-badge'; +import {getConfigVersionDiff, publishConfigVersion,} from '@/features/config-versions/api/config-versions'; +import {ProxyRouteCreateDrawer} from '@/features/proxy-routes/components/proxy-route-create-drawer'; +import {getErrorMessage, getUpstreamSummary, getWebsiteStatusBadges,} from '@/features/proxy-routes/helpers'; +import {deleteProxyRoute, getProxyRoutes,} from '@/features/proxy-routes/api/proxy-routes'; +import type {ProxyRouteItem} from '@/features/proxy-routes/types'; import { - getConfigVersionDiff, - publishConfigVersion, -} from '@/features/config-versions/api/config-versions'; -import { ProxyRouteCreateDrawer } from '@/features/proxy-routes/components/proxy-route-create-drawer'; -import { - getErrorMessage, - getUpstreamSummary, - getWebsiteStatusBadges, -} from '@/features/proxy-routes/helpers'; -import { - deleteProxyRoute, - getProxyRoutes, -} from '@/features/proxy-routes/api/proxy-routes'; -import type { ProxyRouteItem } from '@/features/proxy-routes/types'; -import { - DangerButton, - PrimaryButton, - ResourceInput, - SecondaryButton, + DangerButton, + PrimaryButton, + ResourceInput, + SecondaryButton, } from '@/features/shared/components/resource-primitives'; type FeedbackState = { diff --git a/openflare_server/web/features/proxy-routes/helpers.ts b/openflare-server/web/features/proxy-routes/helpers.ts similarity index 98% rename from openflare_server/web/features/proxy-routes/helpers.ts rename to openflare-server/web/features/proxy-routes/helpers.ts index 9dfdd6a7..197c1b92 100644 --- a/openflare_server/web/features/proxy-routes/helpers.ts +++ b/openflare-server/web/features/proxy-routes/helpers.ts @@ -1,8 +1,4 @@ -import type { - ProxyRouteCustomHeader, - ProxyRouteItem, - ProxyRouteMutationPayload, -} from '@/features/proxy-routes/types'; +import type {ProxyRouteCustomHeader, ProxyRouteItem, ProxyRouteMutationPayload,} from '@/features/proxy-routes/types'; export const websiteConfigSections = [ { diff --git a/openflare_server/web/features/proxy-routes/types.ts b/openflare-server/web/features/proxy-routes/types.ts similarity index 100% rename from openflare_server/web/features/proxy-routes/types.ts rename to openflare-server/web/features/proxy-routes/types.ts diff --git a/openflare_server/web/features/proxy-routes/utils.ts b/openflare-server/web/features/proxy-routes/utils.ts similarity index 100% rename from openflare_server/web/features/proxy-routes/utils.ts rename to openflare-server/web/features/proxy-routes/utils.ts diff --git a/openflare_server/web/features/settings/api/settings.ts b/openflare-server/web/features/settings/api/settings.ts similarity index 89% rename from openflare_server/web/features/settings/api/settings.ts rename to openflare-server/web/features/settings/api/settings.ts index 3474b3d7..8fafabf3 100644 --- a/openflare_server/web/features/settings/api/settings.ts +++ b/openflare-server/web/features/settings/api/settings.ts @@ -1,18 +1,18 @@ -import { apiRequest } from '@/lib/api/client'; -import { setStoredOpenFlareToken } from '@/lib/api/auth-token'; +import {apiRequest} from '@/lib/api/client'; +import {setStoredOpenFlareToken} from '@/lib/api/auth-token'; import type { - BootstrapTokenPayload, - AuthSource, - AuthSourcePayload, - DatabaseCleanupPayload, - DatabaseCleanupResult, - ExternalAccountBinding, - GeoIPLookupResult, - OptionBatchPayload, - OptionItem, - SettingsProfile, - UpdateSelfPayload, + AuthSource, + AuthSourcePayload, + BootstrapTokenPayload, + DatabaseCleanupPayload, + DatabaseCleanupResult, + ExternalAccountBinding, + GeoIPLookupResult, + OptionBatchPayload, + OptionItem, + SettingsProfile, + UpdateSelfPayload, } from '@/features/settings/types'; export function getOptions() { diff --git a/openflare_server/web/features/settings/components/auth-source-modal.tsx b/openflare-server/web/features/settings/components/auth-source-modal.tsx similarity index 100% rename from openflare_server/web/features/settings/components/auth-source-modal.tsx rename to openflare-server/web/features/settings/components/auth-source-modal.tsx diff --git a/openflare_server/web/features/settings/components/settings-page.tsx b/openflare-server/web/features/settings/components/settings-page.tsx similarity index 100% rename from openflare_server/web/features/settings/components/settings-page.tsx rename to openflare-server/web/features/settings/components/settings-page.tsx diff --git a/openflare_server/web/features/settings/components/uptimekuma-modal.tsx b/openflare-server/web/features/settings/components/uptimekuma-modal.tsx similarity index 100% rename from openflare_server/web/features/settings/components/uptimekuma-modal.tsx rename to openflare-server/web/features/settings/components/uptimekuma-modal.tsx diff --git a/openflare_server/web/features/settings/types.ts b/openflare-server/web/features/settings/types.ts similarity index 100% rename from openflare_server/web/features/settings/types.ts rename to openflare-server/web/features/settings/types.ts diff --git a/openflare_server/web/features/shared/components/module-page-skeleton.tsx b/openflare-server/web/features/shared/components/module-page-skeleton.tsx similarity index 78% rename from openflare_server/web/features/shared/components/module-page-skeleton.tsx rename to openflare-server/web/features/shared/components/module-page-skeleton.tsx index c82bf377..3bbf7074 100644 --- a/openflare_server/web/features/shared/components/module-page-skeleton.tsx +++ b/openflare-server/web/features/shared/components/module-page-skeleton.tsx @@ -1,8 +1,8 @@ -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { FeaturePlaceholder } from '@/components/feedback/feature-placeholder'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {FeaturePlaceholder} from '@/components/feedback/feature-placeholder'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; interface ModulePageSkeletonProps { title: string; diff --git a/openflare_server/web/features/shared/components/resource-primitives.tsx b/openflare-server/web/features/shared/components/resource-primitives.tsx similarity index 97% rename from openflare_server/web/features/shared/components/resource-primitives.tsx rename to openflare-server/web/features/shared/components/resource-primitives.tsx index 444abae3..eedd5377 100644 --- a/openflare_server/web/features/shared/components/resource-primitives.tsx +++ b/openflare-server/web/features/shared/components/resource-primitives.tsx @@ -1,12 +1,12 @@ import type { - ButtonHTMLAttributes, - InputHTMLAttributes, - ReactNode, - SelectHTMLAttributes, - TextareaHTMLAttributes, + ButtonHTMLAttributes, + InputHTMLAttributes, + ReactNode, + SelectHTMLAttributes, + TextareaHTMLAttributes, } from 'react'; -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; interface ResourceFieldProps { label: ReactNode; diff --git a/openflare_server/web/features/tls-certificates/api/tls-certificates.ts b/openflare-server/web/features/tls-certificates/api/tls-certificates.ts similarity index 100% rename from openflare_server/web/features/tls-certificates/api/tls-certificates.ts rename to openflare-server/web/features/tls-certificates/api/tls-certificates.ts diff --git a/openflare_server/web/features/tls-certificates/components/tls-certificates-page.tsx b/openflare-server/web/features/tls-certificates/components/tls-certificates-page.tsx similarity index 100% rename from openflare_server/web/features/tls-certificates/components/tls-certificates-page.tsx rename to openflare-server/web/features/tls-certificates/components/tls-certificates-page.tsx diff --git a/openflare_server/web/features/tls-certificates/types.ts b/openflare-server/web/features/tls-certificates/types.ts similarity index 100% rename from openflare_server/web/features/tls-certificates/types.ts rename to openflare-server/web/features/tls-certificates/types.ts diff --git a/openflare_server/web/features/update/api/update.ts b/openflare-server/web/features/update/api/update.ts similarity index 100% rename from openflare_server/web/features/update/api/update.ts rename to openflare-server/web/features/update/api/update.ts diff --git a/openflare_server/web/features/update/components/version-upgrade-modal.tsx b/openflare-server/web/features/update/components/version-upgrade-modal.tsx similarity index 100% rename from openflare_server/web/features/update/components/version-upgrade-modal.tsx rename to openflare-server/web/features/update/components/version-upgrade-modal.tsx diff --git a/openflare_server/web/features/update/types.ts b/openflare-server/web/features/update/types.ts similarity index 100% rename from openflare_server/web/features/update/types.ts rename to openflare-server/web/features/update/types.ts diff --git a/openflare_server/web/features/users/api/users.ts b/openflare-server/web/features/users/api/users.ts similarity index 100% rename from openflare_server/web/features/users/api/users.ts rename to openflare-server/web/features/users/api/users.ts diff --git a/openflare_server/web/features/users/components/users-page.tsx b/openflare-server/web/features/users/components/users-page.tsx similarity index 100% rename from openflare_server/web/features/users/components/users-page.tsx rename to openflare-server/web/features/users/components/users-page.tsx diff --git a/openflare_server/web/features/users/types.ts b/openflare-server/web/features/users/types.ts similarity index 100% rename from openflare_server/web/features/users/types.ts rename to openflare-server/web/features/users/types.ts diff --git a/openflare_server/web/features/waf/api/waf.ts b/openflare-server/web/features/waf/api/waf.ts similarity index 100% rename from openflare_server/web/features/waf/api/waf.ts rename to openflare-server/web/features/waf/api/waf.ts diff --git a/openflare_server/web/features/waf/components/helpers.ts b/openflare-server/web/features/waf/components/helpers.ts similarity index 95% rename from openflare_server/web/features/waf/components/helpers.ts rename to openflare-server/web/features/waf/components/helpers.ts index 0d9eb6d4..c3f09bf1 100644 --- a/openflare_server/web/features/waf/components/helpers.ts +++ b/openflare-server/web/features/waf/components/helpers.ts @@ -1,13 +1,13 @@ -import type { ProxyRoutePoWConfig } from '@/features/proxy-routes/types'; -import type { WAFRuleGroup, WAFRuleGroupPayload } from '@/features/waf/types'; +import type {ProxyRoutePoWConfig} from '@/features/proxy-routes/types'; +import type {WAFRuleGroup, WAFRuleGroupPayload} from '@/features/waf/types'; import type { - CountryOption, - ListFieldKey, - RuleDimension, - RuleListRenderable, - RuleListType, - RuleModalState, - WAFTab, + CountryOption, + ListFieldKey, + RuleDimension, + RuleListRenderable, + RuleListType, + RuleModalState, + WAFTab, } from './types'; export const defaultPowConfig: ProxyRoutePoWConfig = { diff --git a/openflare_server/web/features/waf/components/ip-groups-page.tsx b/openflare-server/web/features/waf/components/ip-groups-page.tsx similarity index 95% rename from openflare_server/web/features/waf/components/ip-groups-page.tsx rename to openflare-server/web/features/waf/components/ip-groups-page.tsx index fb5ed647..7bf08540 100644 --- a/openflare_server/web/features/waf/components/ip-groups-page.tsx +++ b/openflare-server/web/features/waf/components/ip-groups-page.tsx @@ -1,53 +1,45 @@ 'use client'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { - ArrowLeft, - Download, - Play, - Plus, - Save, - Trash2, - Eye, -} from 'lucide-react'; -import { useRouter } from 'next/navigation'; -import { useEffect, useMemo, useState } from 'react'; +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import {ArrowLeft, Download, Eye, Play, Plus, Save, Trash2,} from 'lucide-react'; +import {useRouter} from 'next/navigation'; +import {useEffect, useMemo, useState} from 'react'; -import { EmptyState } from '@/components/feedback/empty-state'; -import { ErrorState } from '@/components/feedback/error-state'; -import { InlineMessage } from '@/components/feedback/inline-message'; -import { LoadingState } from '@/components/feedback/loading-state'; -import { PageHeader } from '@/components/layout/page-header'; -import { AppCard } from '@/components/ui/app-card'; -import { AppModal } from '@/components/ui/app-modal'; +import {EmptyState} from '@/components/feedback/empty-state'; +import {ErrorState} from '@/components/feedback/error-state'; +import {InlineMessage} from '@/components/feedback/inline-message'; +import {LoadingState} from '@/components/feedback/loading-state'; +import {PageHeader} from '@/components/layout/page-header'; +import {AppCard} from '@/components/ui/app-card'; +import {AppModal} from '@/components/ui/app-modal'; import { - createWAFIPGroup, - deleteWAFIPGroup, - getWAFIPGroups, - syncWAFIPGroup, - testWAFIPGroupAutoConfig, - updateWAFIPGroup, + createWAFIPGroup, + deleteWAFIPGroup, + getWAFIPGroups, + syncWAFIPGroup, + testWAFIPGroupAutoConfig, + updateWAFIPGroup, } from '@/features/waf/api/waf'; import type { - WAFIPGroup, - WAFIPGroupAutoTestResult, - WAFIPGroupPayload, - WAFIPGroupSubscriptionFormat, - WAFIPGroupType, + WAFIPGroup, + WAFIPGroupAutoTestResult, + WAFIPGroupPayload, + WAFIPGroupSubscriptionFormat, + WAFIPGroupType, } from '@/features/waf/types'; import { - DangerButton, - PrimaryButton, - ResourceField, - ResourceInput, - ResourceSelect, - ResourceTextarea, - SecondaryButton, - ToggleField, + DangerButton, + PrimaryButton, + ResourceField, + ResourceInput, + ResourceSelect, + ResourceTextarea, + SecondaryButton, + ToggleField, } from '@/features/shared/components/resource-primitives'; -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; -import { getErrorMessage, listToText, parseTextareaList } from './helpers'; +import {getErrorMessage, listToText, parseTextareaList} from './helpers'; type FeedbackState = { tone: 'success' | 'danger' | 'info'; diff --git a/openflare_server/web/features/waf/components/pow-tab-panel.tsx b/openflare-server/web/features/waf/components/pow-tab-panel.tsx similarity index 96% rename from openflare_server/web/features/waf/components/pow-tab-panel.tsx rename to openflare-server/web/features/waf/components/pow-tab-panel.tsx index cf54ab4a..23c6d7c3 100644 --- a/openflare_server/web/features/waf/components/pow-tab-panel.tsx +++ b/openflare-server/web/features/waf/components/pow-tab-panel.tsx @@ -1,12 +1,12 @@ -import { useEffect, useState } from 'react'; -import type { ProxyRoutePoWConfig } from '@/features/proxy-routes/types'; +import {useEffect, useState} from 'react'; +import type {ProxyRoutePoWConfig} from '@/features/proxy-routes/types'; import { - ResourceField, - ResourceInput, - ResourceTextarea, - ToggleField, + ResourceField, + ResourceInput, + ResourceTextarea, + ToggleField, } from '@/features/shared/components/resource-primitives'; -import { listToText, parseTextareaList } from './helpers'; +import {listToText, parseTextareaList} from './helpers'; export function PowTabPanel({ enabled, diff --git a/openflare_server/web/features/waf/components/rule-chip.tsx b/openflare-server/web/features/waf/components/rule-chip.tsx similarity index 95% rename from openflare_server/web/features/waf/components/rule-chip.tsx rename to openflare-server/web/features/waf/components/rule-chip.tsx index 06ec483b..9d63f40c 100644 --- a/openflare_server/web/features/waf/components/rule-chip.tsx +++ b/openflare-server/web/features/waf/components/rule-chip.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/lib/utils/cn'; +import {cn} from '@/lib/utils/cn'; export function RuleChip({ label, diff --git a/openflare_server/web/features/waf/components/rule-entry-modal.tsx b/openflare-server/web/features/waf/components/rule-entry-modal.tsx similarity index 96% rename from openflare_server/web/features/waf/components/rule-entry-modal.tsx rename to openflare-server/web/features/waf/components/rule-entry-modal.tsx index 4e3011fd..3d65a766 100644 --- a/openflare_server/web/features/waf/components/rule-entry-modal.tsx +++ b/openflare-server/web/features/waf/components/rule-entry-modal.tsx @@ -1,21 +1,16 @@ -import { useEffect, useMemo, useState } from 'react'; -import { Search } from 'lucide-react'; -import { AppModal } from '@/components/ui/app-modal'; -import type { WAFIPGroup } from '@/features/waf/types'; +import {useEffect, useMemo, useState} from 'react'; +import {Search} from 'lucide-react'; +import {AppModal} from '@/components/ui/app-modal'; +import type {WAFIPGroup} from '@/features/waf/types'; import { - PrimaryButton, - ResourceField, - ResourceTextarea, - SecondaryButton, + PrimaryButton, + ResourceField, + ResourceTextarea, + SecondaryButton, } from '@/features/shared/components/resource-primitives'; -import { cn } from '@/lib/utils/cn'; -import { normalizeItems } from './helpers'; -import type { - CountryOption, - RuleListType, - RuleDimension, - RuleModalState, -} from './types'; +import {cn} from '@/lib/utils/cn'; +import {normalizeItems} from './helpers'; +import type {CountryOption, RuleDimension, RuleListType, RuleModalState,} from './types'; export function RuleEntryModal({ state, diff --git a/openflare_server/web/features/waf/components/rule-list-section.tsx b/openflare-server/web/features/waf/components/rule-list-section.tsx similarity index 97% rename from openflare_server/web/features/waf/components/rule-list-section.tsx rename to openflare-server/web/features/waf/components/rule-list-section.tsx index 2d8a734d..04e978b7 100644 --- a/openflare_server/web/features/waf/components/rule-list-section.tsx +++ b/openflare-server/web/features/waf/components/rule-list-section.tsx @@ -1,4 +1,4 @@ -import { RuleChip } from './rule-chip'; +import {RuleChip} from './rule-chip'; export function RuleListSection({ title, diff --git a/openflare_server/web/features/waf/components/site-apply-drawer.tsx b/openflare-server/web/features/waf/components/site-apply-drawer.tsx similarity index 100% rename from openflare_server/web/features/waf/components/site-apply-drawer.tsx rename to openflare-server/web/features/waf/components/site-apply-drawer.tsx diff --git a/openflare_server/web/features/waf/components/stat-card.tsx b/openflare-server/web/features/waf/components/stat-card.tsx similarity index 100% rename from openflare_server/web/features/waf/components/stat-card.tsx rename to openflare-server/web/features/waf/components/stat-card.tsx diff --git a/openflare_server/web/features/waf/components/tab-button.tsx b/openflare-server/web/features/waf/components/tab-button.tsx similarity index 100% rename from openflare_server/web/features/waf/components/tab-button.tsx rename to openflare-server/web/features/waf/components/tab-button.tsx diff --git a/openflare_server/web/features/waf/components/types.ts b/openflare-server/web/features/waf/components/types.ts similarity index 100% rename from openflare_server/web/features/waf/components/types.ts rename to openflare-server/web/features/waf/components/types.ts diff --git a/openflare_server/web/features/waf/components/waf-page.tsx b/openflare-server/web/features/waf/components/waf-page.tsx similarity index 100% rename from openflare_server/web/features/waf/components/waf-page.tsx rename to openflare-server/web/features/waf/components/waf-page.tsx diff --git a/openflare_server/web/features/waf/types.ts b/openflare-server/web/features/waf/types.ts similarity index 100% rename from openflare_server/web/features/waf/types.ts rename to openflare-server/web/features/waf/types.ts diff --git a/openflare_server/web/features/websites/components/certificate-apply-modal.tsx b/openflare-server/web/features/websites/components/certificate-apply-modal.tsx similarity index 100% rename from openflare_server/web/features/websites/components/certificate-apply-modal.tsx rename to openflare-server/web/features/websites/components/certificate-apply-modal.tsx diff --git a/openflare_server/web/features/websites/components/certificate-detail-modal.tsx b/openflare-server/web/features/websites/components/certificate-detail-modal.tsx similarity index 100% rename from openflare_server/web/features/websites/components/certificate-detail-modal.tsx rename to openflare-server/web/features/websites/components/certificate-detail-modal.tsx diff --git a/openflare_server/web/features/websites/components/certificate-editor-modal.tsx b/openflare-server/web/features/websites/components/certificate-editor-modal.tsx similarity index 100% rename from openflare_server/web/features/websites/components/certificate-editor-modal.tsx rename to openflare-server/web/features/websites/components/certificate-editor-modal.tsx diff --git a/openflare_server/web/features/websites/components/certificate-import-modal.tsx b/openflare-server/web/features/websites/components/certificate-import-modal.tsx similarity index 100% rename from openflare_server/web/features/websites/components/certificate-import-modal.tsx rename to openflare-server/web/features/websites/components/certificate-import-modal.tsx diff --git a/openflare_server/web/features/websites/components/website-detail-page.tsx b/openflare-server/web/features/websites/components/website-detail-page.tsx similarity index 100% rename from openflare_server/web/features/websites/components/website-detail-page.tsx rename to openflare-server/web/features/websites/components/website-detail-page.tsx diff --git a/openflare_server/web/features/websites/components/website-editor-modal.tsx b/openflare-server/web/features/websites/components/website-editor-modal.tsx similarity index 100% rename from openflare_server/web/features/websites/components/website-editor-modal.tsx rename to openflare-server/web/features/websites/components/website-editor-modal.tsx diff --git a/openflare_server/web/features/websites/components/websites-page.tsx b/openflare-server/web/features/websites/components/websites-page.tsx similarity index 100% rename from openflare_server/web/features/websites/components/websites-page.tsx rename to openflare-server/web/features/websites/components/websites-page.tsx diff --git a/openflare_server/web/features/websites/schemas.ts b/openflare-server/web/features/websites/schemas.ts similarity index 99% rename from openflare_server/web/features/websites/schemas.ts rename to openflare-server/web/features/websites/schemas.ts index 4578d6b5..dfea1d5f 100644 --- a/openflare_server/web/features/websites/schemas.ts +++ b/openflare-server/web/features/websites/schemas.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import {z} from 'zod'; export const managedDomainSchema = z.object({ domain: z diff --git a/openflare_server/web/features/websites/utils.ts b/openflare-server/web/features/websites/utils.ts similarity index 100% rename from openflare_server/web/features/websites/utils.ts rename to openflare-server/web/features/websites/utils.ts diff --git a/openflare_server/web/lib/api/auth-token.ts b/openflare-server/web/lib/api/auth-token.ts similarity index 100% rename from openflare_server/web/lib/api/auth-token.ts rename to openflare-server/web/lib/api/auth-token.ts diff --git a/openflare_server/web/lib/api/client.ts b/openflare-server/web/lib/api/client.ts similarity index 100% rename from openflare_server/web/lib/api/client.ts rename to openflare-server/web/lib/api/client.ts diff --git a/openflare_server/web/lib/constants/navigation.ts b/openflare-server/web/lib/constants/navigation.ts similarity index 93% rename from openflare_server/web/lib/constants/navigation.ts rename to openflare-server/web/lib/constants/navigation.ts index 17ea9444..8d69abdb 100644 --- a/openflare_server/web/lib/constants/navigation.ts +++ b/openflare-server/web/lib/constants/navigation.ts @@ -1,4 +1,4 @@ -import type { NavigationItem } from '@/types/navigation'; +import type {NavigationItem} from '@/types/navigation'; export const dashboardNavigation: NavigationItem[] = [ { diff --git a/openflare_server/web/lib/env/public-env.ts b/openflare-server/web/lib/env/public-env.ts similarity index 96% rename from openflare_server/web/lib/env/public-env.ts rename to openflare-server/web/lib/env/public-env.ts index de377e6f..41562444 100644 --- a/openflare_server/web/lib/env/public-env.ts +++ b/openflare-server/web/lib/env/public-env.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import {z} from 'zod'; const publicEnvSchema = z.object({ NEXT_PUBLIC_API_BASE_URL: z.string().default('/api'), diff --git a/openflare_server/web/lib/theme/theme.ts b/openflare-server/web/lib/theme/theme.ts similarity index 100% rename from openflare_server/web/lib/theme/theme.ts rename to openflare-server/web/lib/theme/theme.ts diff --git a/openflare_server/web/lib/utils.ts b/openflare-server/web/lib/utils.ts similarity index 100% rename from openflare_server/web/lib/utils.ts rename to openflare-server/web/lib/utils.ts diff --git a/openflare_server/web/lib/utils/cn.ts b/openflare-server/web/lib/utils/cn.ts similarity index 100% rename from openflare_server/web/lib/utils/cn.ts rename to openflare-server/web/lib/utils/cn.ts diff --git a/openflare_server/web/lib/utils/date.ts b/openflare-server/web/lib/utils/date.ts similarity index 100% rename from openflare_server/web/lib/utils/date.ts rename to openflare-server/web/lib/utils/date.ts diff --git a/openflare_server/web/lib/utils/metrics.ts b/openflare-server/web/lib/utils/metrics.ts similarity index 100% rename from openflare_server/web/lib/utils/metrics.ts rename to openflare-server/web/lib/utils/metrics.ts diff --git a/openflare_server/web/lib/utils/navigation.ts b/openflare-server/web/lib/utils/navigation.ts similarity index 92% rename from openflare_server/web/lib/utils/navigation.ts rename to openflare-server/web/lib/utils/navigation.ts index 6be737a0..866c450f 100644 --- a/openflare_server/web/lib/utils/navigation.ts +++ b/openflare-server/web/lib/utils/navigation.ts @@ -1,5 +1,5 @@ -import { dashboardNavigation } from '@/lib/constants/navigation'; -import type { NavigationItem } from '@/types/navigation'; +import {dashboardNavigation} from '@/lib/constants/navigation'; +import type {NavigationItem} from '@/types/navigation'; const navigationPathAliases: Record = { '/apply-log': '/node', diff --git a/openflare_server/web/next-env.d.ts b/openflare-server/web/next-env.d.ts similarity index 100% rename from openflare_server/web/next-env.d.ts rename to openflare-server/web/next-env.d.ts diff --git a/openflare_server/web/next.config.mjs b/openflare-server/web/next.config.mjs similarity index 100% rename from openflare_server/web/next.config.mjs rename to openflare-server/web/next.config.mjs diff --git a/openflare_server/web/package.json b/openflare-server/web/package.json similarity index 100% rename from openflare_server/web/package.json rename to openflare-server/web/package.json diff --git a/openflare_server/web/playwright.config.ts b/openflare-server/web/playwright.config.ts similarity index 82% rename from openflare_server/web/playwright.config.ts rename to openflare-server/web/playwright.config.ts index f0c1c720..0fba4937 100644 --- a/openflare_server/web/playwright.config.ts +++ b/openflare-server/web/playwright.config.ts @@ -1,4 +1,4 @@ -import { defineConfig, devices } from '@playwright/test'; +import {defineConfig, devices} from '@playwright/test'; export default defineConfig({ testDir: './tests/e2e', diff --git a/openflare_server/web/pnpm-lock.yaml b/openflare-server/web/pnpm-lock.yaml similarity index 100% rename from openflare_server/web/pnpm-lock.yaml rename to openflare-server/web/pnpm-lock.yaml diff --git a/openflare_server/web/postcss.config.mjs b/openflare-server/web/postcss.config.mjs similarity index 100% rename from openflare_server/web/postcss.config.mjs rename to openflare-server/web/postcss.config.mjs diff --git a/openflare_server/web/prettier.config.mjs b/openflare-server/web/prettier.config.mjs similarity index 100% rename from openflare_server/web/prettier.config.mjs rename to openflare-server/web/prettier.config.mjs diff --git a/openflare_server/web/public/favicon.ico b/openflare-server/web/public/favicon.ico similarity index 100% rename from openflare_server/web/public/favicon.ico rename to openflare-server/web/public/favicon.ico diff --git a/openflare_server/web/public/logo.png b/openflare-server/web/public/logo.png similarity index 100% rename from openflare_server/web/public/logo.png rename to openflare-server/web/public/logo.png diff --git a/openflare_server/web/public/robots.txt b/openflare-server/web/public/robots.txt similarity index 100% rename from openflare_server/web/public/robots.txt rename to openflare-server/web/public/robots.txt diff --git a/openflare_server/web/scripts/dev-server.mjs b/openflare-server/web/scripts/dev-server.mjs similarity index 100% rename from openflare_server/web/scripts/dev-server.mjs rename to openflare-server/web/scripts/dev-server.mjs diff --git a/openflare_server/web/scripts/prepare-static-export.mjs b/openflare-server/web/scripts/prepare-static-export.mjs similarity index 77% rename from openflare_server/web/scripts/prepare-static-export.mjs rename to openflare-server/web/scripts/prepare-static-export.mjs index a233323b..46765645 100644 --- a/openflare_server/web/scripts/prepare-static-export.mjs +++ b/openflare-server/web/scripts/prepare-static-export.mjs @@ -1,5 +1,5 @@ -import { cpSync, existsSync, mkdirSync, renameSync, rmSync } from 'node:fs'; -import { resolve } from 'node:path'; +import {cpSync, existsSync, mkdirSync, renameSync, rmSync} from 'node:fs'; +import {resolve} from 'node:path'; const root = process.cwd(); const outDir = resolve(root, 'out'); diff --git a/openflare_server/web/store/app-shell.ts b/openflare-server/web/store/app-shell.ts similarity index 100% rename from openflare_server/web/store/app-shell.ts rename to openflare-server/web/store/app-shell.ts diff --git a/openflare_server/web/styles/tokens.css b/openflare-server/web/styles/tokens.css similarity index 100% rename from openflare_server/web/styles/tokens.css rename to openflare-server/web/styles/tokens.css diff --git a/openflare_server/web/tests/e2e/.gitkeep b/openflare-server/web/tests/e2e/.gitkeep similarity index 100% rename from openflare_server/web/tests/e2e/.gitkeep rename to openflare-server/web/tests/e2e/.gitkeep diff --git a/openflare_server/web/tests/setup/vitest.setup.ts b/openflare-server/web/tests/setup/vitest.setup.ts similarity index 100% rename from openflare_server/web/tests/setup/vitest.setup.ts rename to openflare-server/web/tests/setup/vitest.setup.ts diff --git a/openflare_server/web/tests/unit/dashboard-overview.test.tsx b/openflare-server/web/tests/unit/dashboard-overview.test.tsx similarity index 100% rename from openflare_server/web/tests/unit/dashboard-overview.test.tsx rename to openflare-server/web/tests/unit/dashboard-overview.test.tsx diff --git a/openflare_server/web/tests/unit/github-oauth-callback.test.tsx b/openflare-server/web/tests/unit/github-oauth-callback.test.tsx similarity index 85% rename from openflare_server/web/tests/unit/github-oauth-callback.test.tsx rename to openflare-server/web/tests/unit/github-oauth-callback.test.tsx index cc5a889e..49adfb47 100644 --- a/openflare_server/web/tests/unit/github-oauth-callback.test.tsx +++ b/openflare-server/web/tests/unit/github-oauth-callback.test.tsx @@ -1,9 +1,9 @@ -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { render, waitFor } from '@testing-library/react'; -import { StrictMode, type ReactNode } from 'react'; -import { beforeEach, describe, expect, it, vi } from 'vitest'; +import {QueryClient, QueryClientProvider} from '@tanstack/react-query'; +import {render, waitFor} from '@testing-library/react'; +import {type ReactNode, StrictMode} from 'react'; +import {beforeEach, describe, expect, it, vi} from 'vitest'; -import { GitHubOAuthCallback } from '@/features/auth/components/github-oauth-callback'; +import {GitHubOAuthCallback} from '@/features/auth/components/github-oauth-callback'; const replaceMock = vi.fn(); const setUserMock = vi.fn(); diff --git a/openflare_server/web/tests/unit/metrics-utils.test.ts b/openflare-server/web/tests/unit/metrics-utils.test.ts similarity index 85% rename from openflare_server/web/tests/unit/metrics-utils.test.ts rename to openflare-server/web/tests/unit/metrics-utils.test.ts index 6cdaede3..3b68a3fc 100644 --- a/openflare_server/web/tests/unit/metrics-utils.test.ts +++ b/openflare-server/web/tests/unit/metrics-utils.test.ts @@ -1,11 +1,6 @@ -import { describe, expect, it } from 'vitest'; +import {describe, expect, it} from 'vitest'; -import { - calculateNiceAxisMax, - formatBytes, - formatBytesPerSecond, - formatPercent, -} from '@/lib/utils/metrics'; +import {calculateNiceAxisMax, formatBytes, formatBytesPerSecond, formatPercent,} from '@/lib/utils/metrics'; describe('metrics utils', () => { it('formats byte values with readable units', () => { diff --git a/openflare_server/web/tests/unit/navigation-utils.test.ts b/openflare-server/web/tests/unit/navigation-utils.test.ts similarity index 81% rename from openflare_server/web/tests/unit/navigation-utils.test.ts rename to openflare-server/web/tests/unit/navigation-utils.test.ts index 99af0a2b..79dff0bd 100644 --- a/openflare_server/web/tests/unit/navigation-utils.test.ts +++ b/openflare-server/web/tests/unit/navigation-utils.test.ts @@ -1,6 +1,6 @@ -import { describe, expect, it } from 'vitest'; +import {describe, expect, it} from 'vitest'; -import { getCurrentNavigationItem, isPathActive } from '@/lib/utils/navigation'; +import {getCurrentNavigationItem, isPathActive} from '@/lib/utils/navigation'; describe('navigation utils', () => { it('marks root path as active only for home', () => { diff --git a/openflare_server/web/tests/unit/nodes-utils.test.ts b/openflare-server/web/tests/unit/nodes-utils.test.ts similarity index 94% rename from openflare_server/web/tests/unit/nodes-utils.test.ts rename to openflare-server/web/tests/unit/nodes-utils.test.ts index a7b19335..f0c28a16 100644 --- a/openflare_server/web/tests/unit/nodes-utils.test.ts +++ b/openflare-server/web/tests/unit/nodes-utils.test.ts @@ -1,7 +1,7 @@ -import { describe, expect, it } from 'vitest'; +import {describe, expect, it} from 'vitest'; -import type { NodeItem } from '@/features/nodes/types'; -import { isNodeAbnormal } from '@/features/nodes/utils'; +import type {NodeItem} from '@/features/nodes/types'; +import {isNodeAbnormal} from '@/features/nodes/utils'; function buildNode(overrides: Partial = {}): NodeItem { return { diff --git a/openflare_server/web/tests/unit/proxy-routes-page.test.tsx b/openflare-server/web/tests/unit/proxy-routes-page.test.tsx similarity index 96% rename from openflare_server/web/tests/unit/proxy-routes-page.test.tsx rename to openflare-server/web/tests/unit/proxy-routes-page.test.tsx index 974b6597..58c847e3 100644 --- a/openflare_server/web/tests/unit/proxy-routes-page.test.tsx +++ b/openflare-server/web/tests/unit/proxy-routes-page.test.tsx @@ -1,12 +1,12 @@ -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { render, screen, waitFor, within } from '@testing-library/react'; +import {QueryClient, QueryClientProvider} from '@tanstack/react-query'; +import {render, screen, waitFor, within} from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import type { ReactNode } from 'react'; -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import type {ReactNode} from 'react'; +import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; -import { ThemeProvider } from '@/components/providers/theme-provider'; -import { ProxyRouteConfigPage } from '@/features/proxy-routes/components/proxy-route-config-page'; -import { ProxyRoutesPage } from '@/features/proxy-routes/components/proxy-routes-page'; +import {ThemeProvider} from '@/components/providers/theme-provider'; +import {ProxyRouteConfigPage} from '@/features/proxy-routes/components/proxy-route-config-page'; +import {ProxyRoutesPage} from '@/features/proxy-routes/components/proxy-routes-page'; const pushMock = vi.fn(); diff --git a/openflare_server/web/tests/unit/theme-utils.test.ts b/openflare-server/web/tests/unit/theme-utils.test.ts similarity index 100% rename from openflare_server/web/tests/unit/theme-utils.test.ts rename to openflare-server/web/tests/unit/theme-utils.test.ts diff --git a/openflare_server/web/tests/unit/waf-ip-groups-page.test.tsx b/openflare-server/web/tests/unit/waf-ip-groups-page.test.tsx similarity index 100% rename from openflare_server/web/tests/unit/waf-ip-groups-page.test.tsx rename to openflare-server/web/tests/unit/waf-ip-groups-page.test.tsx diff --git a/openflare_server/web/tsconfig.json b/openflare-server/web/tsconfig.json similarity index 100% rename from openflare_server/web/tsconfig.json rename to openflare-server/web/tsconfig.json diff --git a/openflare_server/web/types/api.ts b/openflare-server/web/types/api.ts similarity index 100% rename from openflare_server/web/types/api.ts rename to openflare-server/web/types/api.ts diff --git a/openflare_server/web/types/auth.ts b/openflare-server/web/types/auth.ts similarity index 100% rename from openflare_server/web/types/auth.ts rename to openflare-server/web/types/auth.ts diff --git a/openflare_server/web/types/navigation.ts b/openflare-server/web/types/navigation.ts similarity index 100% rename from openflare_server/web/types/navigation.ts rename to openflare-server/web/types/navigation.ts diff --git a/openflare_server/web/types/public-status.ts b/openflare-server/web/types/public-status.ts similarity index 100% rename from openflare_server/web/types/public-status.ts rename to openflare-server/web/types/public-status.ts diff --git a/openflare_server/web/vercel.json b/openflare-server/web/vercel.json similarity index 100% rename from openflare_server/web/vercel.json rename to openflare-server/web/vercel.json diff --git a/openflare_server/web/vitest.config.ts b/openflare-server/web/vitest.config.ts similarity index 100% rename from openflare_server/web/vitest.config.ts rename to openflare-server/web/vitest.config.ts diff --git a/openflare_agent/go.mod b/openflare_agent/go.mod deleted file mode 100644 index 51c6eae5..00000000 --- a/openflare_agent/go.mod +++ /dev/null @@ -1,16 +0,0 @@ -module openflare-agent - -go 1.25.7 - -require openflare v0.0.0 - -require ( - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/oschwald/maxminddb-golang v1.13.1 // indirect - golang.org/x/net v0.53.0 // indirect - golang.org/x/sys v0.43.0 // indirect -) - -replace openflare => ../openflare_server diff --git a/openflare_agent/go.sum b/openflare_agent/go.sum deleted file mode 100644 index 354949fc..00000000 --- a/openflare_agent/go.sum +++ /dev/null @@ -1,22 +0,0 @@ -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= -github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE= -github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/openflare_relay/Dockerfile b/openflare_relay/Dockerfile deleted file mode 100644 index 350fbecf..00000000 --- a/openflare_relay/Dockerfile +++ /dev/null @@ -1,35 +0,0 @@ -# syntax=docker/dockerfile:1.7 -ARG VERSION=dev - -FROM golang:1.25-alpine AS builder - -ARG VERSION - -WORKDIR /build -COPY openflare_server/go.mod openflare_server/go.sum /openflare_server/ -COPY openflare_relay/go.mod openflare_relay/go.sum /openflare_relay/ -WORKDIR /openflare_relay -RUN --mount=type=cache,target=/go/pkg/mod \ - go mod download - -WORKDIR /build -COPY openflare_server /openflare_server -COPY openflare_relay /openflare_relay -WORKDIR /openflare_relay -RUN --mount=type=cache,target=/go/pkg/mod \ - --mount=type=cache,target=/root/.cache/go-build \ - CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X 'openflare-relay/internal/config.Version=$VERSION'" -o openflare-relay ./cmd/relay - -# Final runtime image -FROM fatedier/frps:v0.69.0 - -# Copy openflare-relay binary -COPY --from=builder /openflare_relay/openflare-relay /usr/local/bin/openflare-relay - -VOLUME ["/var/lib/openflare-relay"] - -ENV OPENFLARE_FRPS_PATH=/usr/bin/frps -ENV OPENFLARE_DATA_DIR=/var/lib/openflare-relay - -ENTRYPOINT ["/usr/local/bin/openflare-relay"] - diff --git a/openflare_relay/go.mod b/openflare_relay/go.mod deleted file mode 100644 index 1373648c..00000000 --- a/openflare_relay/go.mod +++ /dev/null @@ -1,75 +0,0 @@ -module openflare-relay - -go 1.25.7 - -replace openflare => ../openflare_server - -require openflare v0.0.0-00010101000000-000000000000 - -require ( - github.com/bwmarrin/snowflake v0.3.0 // indirect - github.com/bytedance/sonic v1.12.9 // indirect - github.com/bytedance/sonic/loader v0.2.3 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cloudwego/base64x v0.1.5 // indirect - github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/expr-lang/expr v1.17.8 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect - github.com/gin-contrib/sse v1.0.0 // indirect - github.com/gin-gonic/gin v1.10.0 // indirect - github.com/glebarez/go-sqlite v1.21.2 // indirect - github.com/glebarez/sqlite v1.11.0 // indirect - github.com/go-acme/lego/v4 v4.35.2 // indirect - github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.25.0 // indirect - github.com/go-redis/redis/v8 v8.11.5 // indirect - github.com/goccy/go-json v0.10.5 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect - github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect - github.com/klauspost/cpuid/v2 v2.2.9 // indirect - github.com/leodido/go-urn v1.4.0 // indirect - github.com/longbridgeapp/sqlparser v0.3.1 // indirect - github.com/mattn/go-isatty v0.0.21 // indirect - github.com/mfridman/interpolate v0.0.2 // indirect - github.com/miekg/dns v1.1.72 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect - github.com/ncruces/go-strftime v1.0.0 // indirect - github.com/oschwald/maxminddb-golang v1.13.1 // indirect - github.com/pelletier/go-toml/v2 v2.2.3 // indirect - github.com/pressly/goose/v3 v3.27.1 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/sethvargo/go-retry v0.3.0 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.12 // indirect - go.uber.org/multierr v1.11.0 // indirect - golang.org/x/arch v0.14.0 // indirect - golang.org/x/crypto v0.51.0 // indirect - golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect - golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.55.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.44.0 // indirect - google.golang.org/protobuf v1.36.11 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - gorm.io/driver/postgres v1.6.0 // indirect - gorm.io/gorm v1.25.10 // indirect - gorm.io/sharding v0.6.2 // indirect - modernc.org/libc v1.72.1 // indirect - modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.11.0 // indirect - modernc.org/sqlite v1.49.1 // indirect -) diff --git a/openflare_relay/go.sum b/openflare_relay/go.sum deleted file mode 100644 index 77c51929..00000000 --- a/openflare_relay/go.sum +++ /dev/null @@ -1,224 +0,0 @@ -filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= -filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= -github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= -github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= -github.com/bytedance/sonic v1.12.9 h1:Od1BvK55NnewtGaJsTDeAOSnLVO2BTSLOe0+ooKokmQ= -github.com/bytedance/sonic v1.12.9/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8= -github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0= -github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= -github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= -github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= -github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E= -github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0= -github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= -github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= -github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= -github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= -github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= -github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= -github.com/go-acme/lego/v4 v4.35.2 h1:uVQg+KC/yj9R2g7Q9W5wDqhvQvxV5SMu5eqFVoN5xZU= -github.com/go-acme/lego/v4 v4.35.2/go.mod h1:pX2jN5n8OphMGY1IaMjYm5DAEzguBaKRt8AvJAgJXpc= -github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= -github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= -github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= -github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= -github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 h1:9Nu54bhS/H/Kgo2/7xNSUuC5G28VR8ljfrLKU2G4IjU= -github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12/go.mod h1:TBzl5BIHNXfS9+C35ZyJaklL7mLDbgUkcgXzSLa8Tk0= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= -github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= -github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/longbridgeapp/assert v1.1.0 h1:L+/HISOhuGbNAAmJNXgk3+Tm5QmSB70kwdktJXgjL+I= -github.com/longbridgeapp/assert v1.1.0/go.mod h1:UOI7O3rzlzlz715lQm0atWs6JbrYGuIJUEeOekutL6o= -github.com/longbridgeapp/sqlparser v0.3.1 h1:iWOZWGIFgQrJRgobLXUNJdvqGRpbVXkyKUKUA5CNJBE= -github.com/longbridgeapp/sqlparser v0.3.1/go.mod h1:GIHaUq8zvYyHLCLMJJykx1CdM6LHtkUih/QaJXySSx4= -github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= -github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= -github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= -github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= -github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= -github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= -github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= -github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE= -github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pressly/goose/v3 v3.27.1 h1:6uEvcprBybDmW4hcz3gYujhARhye+GoWKhEWyzD5sh4= -github.com/pressly/goose/v3 v3.27.1/go.mod h1:maruOxsPnIG2yHHyo8UqKWXYKFcH7Q76csUV7+7KYoM= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= -github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= -github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4= -golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= -google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= -google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw= -gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o= -gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4= -gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo= -gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= -gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= -gorm.io/hints v1.1.2 h1:b5j0kwk5p4+3BtDtYqqfY+ATSxjj+6ptPgVveuynn9o= -gorm.io/hints v1.1.2/go.mod h1:/ARdpUHAtyEMCh5NNi3tI7FsGh+Cj/MIUlvNxCNCFWg= -gorm.io/plugin/dbresolver v1.5.1 h1:s9Dj9f7r+1rE3nx/Ywzc85nXptUEaeOO0pt27xdopM8= -gorm.io/plugin/dbresolver v1.5.1/go.mod h1:l4Cn87EHLEYuqUncpEeTC2tTJQkjngPSD+lo8hIvcT0= -gorm.io/sharding v0.6.2 h1:V9inmbdhN+RfWPEKTvbKKKv7qxLz1CneBDQvuL5P7jg= -gorm.io/sharding v0.6.2/go.mod h1:dXaAZv0qyUmLkLAciQ+NH2O1D1A4/ttrrZ/XK4xW9HU= -modernc.org/cc/v4 v4.28.1 h1:XpLbkYVQ24E8tX5u8+yWGvaxerxkR/S4zqxI8ZoSBuc= -modernc.org/cc/v4 v4.28.1/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= -modernc.org/ccgo/v4 v4.33.0 h1:dspBCm75jsj8Y/ufwAMVfe375L2iYdMyQ2QG/v3hL54= -modernc.org/ccgo/v4 v4.33.0/go.mod h1:+RhXBoRYzRwaH21mV/aj6XvQRDtfjcZfAlPMsQo8CR0= -modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= -modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= -modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= -modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= -modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= -modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= -modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.72.1 h1:db1xwJ6u1kE3KHTFTTbe2GCrczHPKzlURP0aDC4NGD0= -modernc.org/libc v1.72.1/go.mod h1:HRMiC/PhPGLIPM7GzAFCbI+oSgE3dhZ8FWftmRrHVlY= -modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= -modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= -modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= -modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= -modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= -modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= -modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= -modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.49.1 h1:dYGHTKcX1sJ+EQDnUzvz4TJ5GbuvhNJa8Fg6ElGx73U= -modernc.org/sqlite v1.49.1/go.mod h1:m0w8xhwYUVY3H6pSDwc3gkJ/irZT/0YEXwBlhaxQEew= -modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= -modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= -modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= -modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= diff --git a/openflare_server/web/app/(dashboard)/access-log/page.tsx b/openflare_server/web/app/(dashboard)/access-log/page.tsx deleted file mode 100644 index 58a232d7..00000000 --- a/openflare_server/web/app/(dashboard)/access-log/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { AccessLogsPage } from '@/features/access-logs/components/access-logs-page'; - -export default function AccessLogsRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/apply-log/page.tsx b/openflare_server/web/app/(dashboard)/apply-log/page.tsx deleted file mode 100644 index 85200955..00000000 --- a/openflare_server/web/app/(dashboard)/apply-log/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ApplyLogsPage as ApplyLogsFeaturePage } from '@/features/apply-logs/components/apply-logs-page'; - -export default function ApplyLogsPage() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/config-version/page.tsx b/openflare_server/web/app/(dashboard)/config-version/page.tsx deleted file mode 100644 index ded737bc..00000000 --- a/openflare_server/web/app/(dashboard)/config-version/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ConfigVersionsPage } from '@/features/config-versions/components/config-versions-page'; - -export default function ConfigVersionsRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/node/page.tsx b/openflare_server/web/app/(dashboard)/node/page.tsx deleted file mode 100644 index a4310aa0..00000000 --- a/openflare_server/web/app/(dashboard)/node/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NodesPage } from '@/features/nodes/components/nodes-page'; - -export default function NodesRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/origin/page.tsx b/openflare_server/web/app/(dashboard)/origin/page.tsx deleted file mode 100644 index f386243d..00000000 --- a/openflare_server/web/app/(dashboard)/origin/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { OriginsPage } from '@/features/origins/components/origins-page'; - -export default function OriginRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/pages/page.tsx b/openflare_server/web/app/(dashboard)/pages/page.tsx deleted file mode 100644 index 3cd8a289..00000000 --- a/openflare_server/web/app/(dashboard)/pages/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { PagesPage } from '@/features/pages/components/pages-page'; - -export default function Page() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/performance/page.tsx b/openflare_server/web/app/(dashboard)/performance/page.tsx deleted file mode 100644 index a3cafbfb..00000000 --- a/openflare_server/web/app/(dashboard)/performance/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { PerformancePage } from '@/features/performance/components/performance-page'; - -export default function PerformanceRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/proxy-route/page.tsx b/openflare_server/web/app/(dashboard)/proxy-route/page.tsx deleted file mode 100644 index 7b5b52ea..00000000 --- a/openflare_server/web/app/(dashboard)/proxy-route/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ProxyRoutesPage } from '@/features/proxy-routes/components/proxy-routes-page'; - -export default function ProxyRoutesRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/setting/page.tsx b/openflare_server/web/app/(dashboard)/setting/page.tsx deleted file mode 100644 index 5945a5a0..00000000 --- a/openflare_server/web/app/(dashboard)/setting/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { SettingsPage } from '@/features/settings/components/settings-page'; - -export default function SettingsRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/user/page.tsx b/openflare_server/web/app/(dashboard)/user/page.tsx deleted file mode 100644 index d6015af7..00000000 --- a/openflare_server/web/app/(dashboard)/user/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { UsersPage } from '@/features/users/components/users-page'; - -export default function UsersRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/website/certificate/page.tsx b/openflare_server/web/app/(dashboard)/website/certificate/page.tsx deleted file mode 100644 index 39cad7d6..00000000 --- a/openflare_server/web/app/(dashboard)/website/certificate/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { TlsCertificatesPage } from '@/features/tls-certificates/components/tls-certificates-page'; - -export default function WebsiteCertificateRoute() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/website/dns-account/page.tsx b/openflare_server/web/app/(dashboard)/website/dns-account/page.tsx deleted file mode 100644 index 192ca6be..00000000 --- a/openflare_server/web/app/(dashboard)/website/dns-account/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { DnsAccountsPage } from '@/features/dns-accounts/components/dns-accounts-page'; - -export default function Page() { - return ; -} diff --git a/openflare_server/web/app/(dashboard)/website/page.tsx b/openflare_server/web/app/(dashboard)/website/page.tsx deleted file mode 100644 index d766483d..00000000 --- a/openflare_server/web/app/(dashboard)/website/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { WebsitesPage } from '@/features/websites/components/websites-page'; - -export default function WebsiteRoute() { - return ; -} diff --git a/openflare_server/web/app/(public)/about/page.tsx b/openflare_server/web/app/(public)/about/page.tsx deleted file mode 100644 index f193fb8c..00000000 --- a/openflare_server/web/app/(public)/about/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { AboutPage } from '@/features/about/components/about-page'; - -export default function AboutRoute() { - return ; -} diff --git a/openflare_server/web/app/(public)/login/page.tsx b/openflare_server/web/app/(public)/login/page.tsx deleted file mode 100644 index 61d6f7df..00000000 --- a/openflare_server/web/app/(public)/login/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Suspense } from 'react'; - -import { LoadingState } from '@/components/feedback/loading-state'; -import { LoginForm } from '@/features/auth/components/login-form'; - -export default function LoginPage() { - return ( - }> - - - ); -} diff --git a/openflare_server/web/app/(public)/oauth/callback/page.tsx b/openflare_server/web/app/(public)/oauth/callback/page.tsx deleted file mode 100644 index 69e9768b..00000000 --- a/openflare_server/web/app/(public)/oauth/callback/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Suspense } from 'react'; - -import { LoadingState } from '@/components/feedback/loading-state'; -import { OAuthCallback } from '@/features/auth/components/oauth-callback'; - -export default function OAuthSourceCallbackPage() { - return ( - }> - - - ); -} diff --git a/openflare_server/web/app/(public)/oauth/github/page.tsx b/openflare_server/web/app/(public)/oauth/github/page.tsx deleted file mode 100644 index c15f7d31..00000000 --- a/openflare_server/web/app/(public)/oauth/github/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Suspense } from 'react'; - -import { LoadingState } from '@/components/feedback/loading-state'; -import { GitHubOAuthCallback } from '@/features/auth/components/github-oauth-callback'; - -export default function GithubOAuthPage() { - return ( - }> - - - ); -} diff --git a/openflare_server/web/app/(public)/oauth/link/page.tsx b/openflare_server/web/app/(public)/oauth/link/page.tsx deleted file mode 100644 index ce44813f..00000000 --- a/openflare_server/web/app/(public)/oauth/link/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { OAuthLinkExistingForm } from '@/features/auth/components/oauth-link-existing-form'; - -export default function OAuthLinkPage() { - return ; -} diff --git a/openflare_server/web/app/(public)/reset/page.tsx b/openflare_server/web/app/(public)/reset/page.tsx deleted file mode 100644 index 633cb7d8..00000000 --- a/openflare_server/web/app/(public)/reset/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Suspense } from 'react'; - -import { LoadingState } from '@/components/feedback/loading-state'; -import { PasswordResetFlow } from '@/features/auth/components/password-reset-flow'; - -export default function ResetPasswordPage() { - return ( - }> - - - ); -} diff --git a/openflare_server/web/app/(public)/user/reset/page.tsx b/openflare_server/web/app/(public)/user/reset/page.tsx deleted file mode 100644 index 837f928e..00000000 --- a/openflare_server/web/app/(public)/user/reset/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Suspense } from 'react'; - -import { LoadingState } from '@/components/feedback/loading-state'; -import { PasswordResetFlow } from '@/features/auth/components/password-reset-flow'; - -export default function LegacyResetPasswordPage() { - return ( - }> - - - ); -} diff --git a/openflare_server/web/features/auth/api/public.ts b/openflare_server/web/features/auth/api/public.ts deleted file mode 100644 index 8b6d8ad0..00000000 --- a/openflare_server/web/features/auth/api/public.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { apiRequest } from '@/lib/api/client'; -import type { PublicStatus } from '@/types/public-status'; - -export function getPublicStatus() { - return apiRequest('/status'); -} diff --git a/openflared/Dockerfile b/openflared/Dockerfile index 5cb02307..1f825fe2 100644 --- a/openflared/Dockerfile +++ b/openflared/Dockerfile @@ -7,16 +7,15 @@ ARG VERSION WORKDIR /build -COPY openflared/go.mod openflared/go.sum ./ -COPY openflare_server/go.mod openflare_server/go.sum ../openflare_server/ +COPY go.mod go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ go mod download -COPY openflare_server/ ../openflare_server/ -COPY openflared/ . +COPY openflare-server/ ./openflare-server/ +COPY openflared/ ./openflared/ RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ - CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X 'openflare-flared/internal/config.Version=$VERSION'" -o flared ./cmd/flared + CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X 'github.com/rain-kl/openflare/openflared/internal/config.Version=$VERSION'" -o flared ./openflared/cmd/flared # Final runtime image FROM fatedier/frpc:v0.69.0 diff --git a/openflared/cmd/flared/main.go b/openflared/cmd/flared/main.go index 2c3043e5..4bca026f 100644 --- a/openflared/cmd/flared/main.go +++ b/openflared/cmd/flared/main.go @@ -9,13 +9,13 @@ import ( "strings" "syscall" - "openflare-flared/internal/config" - "openflare-flared/internal/flared" - "openflare-flared/internal/frpc" - "openflare-flared/internal/heartbeat" - "openflare-flared/internal/httpclient" - "openflare-flared/internal/sync" - "openflare-flared/internal/wsclient" + "github.com/rain-kl/openflare/openflared/internal/config" + "github.com/rain-kl/openflare/openflared/internal/flared" + "github.com/rain-kl/openflare/openflared/internal/frpc" + "github.com/rain-kl/openflare/openflared/internal/heartbeat" + "github.com/rain-kl/openflare/openflared/internal/httpclient" + "github.com/rain-kl/openflare/openflared/internal/sync" + "github.com/rain-kl/openflare/openflared/internal/wsclient" ) func main() { diff --git a/openflared/go.mod b/openflared/go.mod deleted file mode 100644 index 0fcb278c..00000000 --- a/openflared/go.mod +++ /dev/null @@ -1,75 +0,0 @@ -module openflare-flared - -go 1.25.7 - -replace openflare => ../openflare_server - -require openflare v0.0.0-00010101000000-000000000000 - -require ( - github.com/bwmarrin/snowflake v0.3.0 // indirect - github.com/bytedance/sonic v1.12.9 // indirect - github.com/bytedance/sonic/loader v0.2.3 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cloudwego/base64x v0.1.5 // indirect - github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/expr-lang/expr v1.17.8 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect - github.com/gin-contrib/sse v1.0.0 // indirect - github.com/gin-gonic/gin v1.10.0 // indirect - github.com/glebarez/go-sqlite v1.21.2 // indirect - github.com/glebarez/sqlite v1.11.0 // indirect - github.com/go-acme/lego/v4 v4.35.2 // indirect - github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.25.0 // indirect - github.com/go-redis/redis/v8 v8.11.5 // indirect - github.com/goccy/go-json v0.10.5 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect - github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect - github.com/klauspost/cpuid/v2 v2.2.9 // indirect - github.com/leodido/go-urn v1.4.0 // indirect - github.com/longbridgeapp/sqlparser v0.3.1 // indirect - github.com/mattn/go-isatty v0.0.21 // indirect - github.com/mfridman/interpolate v0.0.2 // indirect - github.com/miekg/dns v1.1.72 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect - github.com/ncruces/go-strftime v1.0.0 // indirect - github.com/oschwald/maxminddb-golang v1.13.1 // indirect - github.com/pelletier/go-toml/v2 v2.2.3 // indirect - github.com/pressly/goose/v3 v3.27.1 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/sethvargo/go-retry v0.3.0 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.12 // indirect - go.uber.org/multierr v1.11.0 // indirect - golang.org/x/arch v0.14.0 // indirect - golang.org/x/crypto v0.51.0 // indirect - golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect - golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.55.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.44.0 // indirect - google.golang.org/protobuf v1.36.11 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - gorm.io/driver/postgres v1.6.0 // indirect - gorm.io/gorm v1.25.10 // indirect - gorm.io/sharding v0.6.2 // indirect - modernc.org/libc v1.72.1 // indirect - modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.11.0 // indirect - modernc.org/sqlite v1.49.1 // indirect -) diff --git a/openflared/go.sum b/openflared/go.sum deleted file mode 100644 index 77c51929..00000000 --- a/openflared/go.sum +++ /dev/null @@ -1,224 +0,0 @@ -filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= -filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= -github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= -github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= -github.com/bytedance/sonic v1.12.9 h1:Od1BvK55NnewtGaJsTDeAOSnLVO2BTSLOe0+ooKokmQ= -github.com/bytedance/sonic v1.12.9/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8= -github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0= -github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= -github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= -github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= -github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E= -github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0= -github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= -github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= -github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= -github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= -github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= -github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= -github.com/go-acme/lego/v4 v4.35.2 h1:uVQg+KC/yj9R2g7Q9W5wDqhvQvxV5SMu5eqFVoN5xZU= -github.com/go-acme/lego/v4 v4.35.2/go.mod h1:pX2jN5n8OphMGY1IaMjYm5DAEzguBaKRt8AvJAgJXpc= -github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= -github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= -github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= -github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= -github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 h1:9Nu54bhS/H/Kgo2/7xNSUuC5G28VR8ljfrLKU2G4IjU= -github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12/go.mod h1:TBzl5BIHNXfS9+C35ZyJaklL7mLDbgUkcgXzSLa8Tk0= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= -github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= -github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/longbridgeapp/assert v1.1.0 h1:L+/HISOhuGbNAAmJNXgk3+Tm5QmSB70kwdktJXgjL+I= -github.com/longbridgeapp/assert v1.1.0/go.mod h1:UOI7O3rzlzlz715lQm0atWs6JbrYGuIJUEeOekutL6o= -github.com/longbridgeapp/sqlparser v0.3.1 h1:iWOZWGIFgQrJRgobLXUNJdvqGRpbVXkyKUKUA5CNJBE= -github.com/longbridgeapp/sqlparser v0.3.1/go.mod h1:GIHaUq8zvYyHLCLMJJykx1CdM6LHtkUih/QaJXySSx4= -github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= -github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= -github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= -github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= -github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= -github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= -github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= -github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE= -github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pressly/goose/v3 v3.27.1 h1:6uEvcprBybDmW4hcz3gYujhARhye+GoWKhEWyzD5sh4= -github.com/pressly/goose/v3 v3.27.1/go.mod h1:maruOxsPnIG2yHHyo8UqKWXYKFcH7Q76csUV7+7KYoM= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= -github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= -github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4= -golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= -google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= -google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw= -gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o= -gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4= -gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo= -gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= -gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= -gorm.io/hints v1.1.2 h1:b5j0kwk5p4+3BtDtYqqfY+ATSxjj+6ptPgVveuynn9o= -gorm.io/hints v1.1.2/go.mod h1:/ARdpUHAtyEMCh5NNi3tI7FsGh+Cj/MIUlvNxCNCFWg= -gorm.io/plugin/dbresolver v1.5.1 h1:s9Dj9f7r+1rE3nx/Ywzc85nXptUEaeOO0pt27xdopM8= -gorm.io/plugin/dbresolver v1.5.1/go.mod h1:l4Cn87EHLEYuqUncpEeTC2tTJQkjngPSD+lo8hIvcT0= -gorm.io/sharding v0.6.2 h1:V9inmbdhN+RfWPEKTvbKKKv7qxLz1CneBDQvuL5P7jg= -gorm.io/sharding v0.6.2/go.mod h1:dXaAZv0qyUmLkLAciQ+NH2O1D1A4/ttrrZ/XK4xW9HU= -modernc.org/cc/v4 v4.28.1 h1:XpLbkYVQ24E8tX5u8+yWGvaxerxkR/S4zqxI8ZoSBuc= -modernc.org/cc/v4 v4.28.1/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= -modernc.org/ccgo/v4 v4.33.0 h1:dspBCm75jsj8Y/ufwAMVfe375L2iYdMyQ2QG/v3hL54= -modernc.org/ccgo/v4 v4.33.0/go.mod h1:+RhXBoRYzRwaH21mV/aj6XvQRDtfjcZfAlPMsQo8CR0= -modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= -modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= -modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= -modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= -modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= -modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= -modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.72.1 h1:db1xwJ6u1kE3KHTFTTbe2GCrczHPKzlURP0aDC4NGD0= -modernc.org/libc v1.72.1/go.mod h1:HRMiC/PhPGLIPM7GzAFCbI+oSgE3dhZ8FWftmRrHVlY= -modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= -modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= -modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= -modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= -modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= -modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= -modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= -modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.49.1 h1:dYGHTKcX1sJ+EQDnUzvz4TJ5GbuvhNJa8Fg6ElGx73U= -modernc.org/sqlite v1.49.1/go.mod h1:m0w8xhwYUVY3H6pSDwc3gkJ/irZT/0YEXwBlhaxQEew= -modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= -modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= -modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= -modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= diff --git a/openflared/internal/flared/runner.go b/openflared/internal/flared/runner.go index 8f35dc8c..8dce39ef 100644 --- a/openflared/internal/flared/runner.go +++ b/openflared/internal/flared/runner.go @@ -5,12 +5,12 @@ import ( "log/slog" "time" - "openflare-flared/internal/config" - "openflare-flared/internal/frpc" - "openflare-flared/internal/heartbeat" - "openflare-flared/internal/httpclient" - "openflare-flared/internal/sync" - "openflare-flared/internal/wsclient" + "github.com/rain-kl/openflare/openflared/internal/config" + "github.com/rain-kl/openflare/openflared/internal/frpc" + "github.com/rain-kl/openflare/openflared/internal/heartbeat" + "github.com/rain-kl/openflare/openflared/internal/httpclient" + "github.com/rain-kl/openflare/openflared/internal/sync" + "github.com/rain-kl/openflare/openflared/internal/wsclient" ) type Runner struct { diff --git a/openflared/internal/frpc/manager.go b/openflared/internal/frpc/manager.go index 32f85503..a0a5ba95 100644 --- a/openflared/internal/frpc/manager.go +++ b/openflared/internal/frpc/manager.go @@ -14,8 +14,8 @@ import ( "sync" "time" - "openflare-flared/internal/config" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflared/internal/config" ) type Manager struct { diff --git a/openflared/internal/frpc/manager_test.go b/openflared/internal/frpc/manager_test.go index 3c85b829..e78abdfb 100644 --- a/openflared/internal/frpc/manager_test.go +++ b/openflared/internal/frpc/manager_test.go @@ -10,8 +10,8 @@ import ( "testing" "time" - "openflare-flared/internal/config" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflared/internal/config" ) // Helper to write control file for the dummy script diff --git a/openflared/internal/heartbeat/service.go b/openflared/internal/heartbeat/service.go index 85d3f5a3..7bfed19c 100644 --- a/openflared/internal/heartbeat/service.go +++ b/openflared/internal/heartbeat/service.go @@ -6,13 +6,13 @@ import ( "net" "time" - "openflare-flared/internal/config" - "openflare-flared/internal/frpc" - "openflare-flared/internal/httpclient" - "openflare-flared/internal/updater" - "openflare/service" - "openflare/utils/geoip" - "openflare/utils/geoip/iputil" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflare-server/utils/geoip" + "github.com/rain-kl/openflare/openflare-server/utils/geoip/iputil" + "github.com/rain-kl/openflare/openflared/internal/config" + "github.com/rain-kl/openflare/openflared/internal/frpc" + "github.com/rain-kl/openflare/openflared/internal/httpclient" + "github.com/rain-kl/openflare/openflared/internal/updater" ) var ( diff --git a/openflared/internal/httpclient/client.go b/openflared/internal/httpclient/client.go index e84f8c36..331724cc 100644 --- a/openflared/internal/httpclient/client.go +++ b/openflared/internal/httpclient/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" ) type APIResponse[T any] struct { diff --git a/openflared/internal/sync/service.go b/openflared/internal/sync/service.go index ff945a8a..4893cc2f 100644 --- a/openflared/internal/sync/service.go +++ b/openflared/internal/sync/service.go @@ -5,10 +5,10 @@ import ( "log/slog" "time" - "openflare-flared/internal/config" - "openflare-flared/internal/frpc" - "openflare-flared/internal/httpclient" - "openflare/service" + "github.com/rain-kl/openflare/openflare-server/service" + "github.com/rain-kl/openflare/openflared/internal/config" + "github.com/rain-kl/openflare/openflared/internal/frpc" + "github.com/rain-kl/openflare/openflared/internal/httpclient" ) type Service struct { diff --git a/openflared/internal/updater/updater.go b/openflared/internal/updater/updater.go index 8dbc6545..b3825720 100644 --- a/openflared/internal/updater/updater.go +++ b/openflared/internal/updater/updater.go @@ -9,13 +9,14 @@ import ( "io" "log/slog" "net/http" - "openflare/utils" "os" "runtime" "strings" "time" - "openflare-flared/internal/config" + "github.com/rain-kl/openflare/openflare-server/utils" + + "github.com/rain-kl/openflare/openflared/internal/config" ) const maxChecksumAssetSize = 64 * 1024 diff --git a/openflared/internal/wsclient/client.go b/openflared/internal/wsclient/client.go index 40564d59..4fbde9aa 100644 --- a/openflared/internal/wsclient/client.go +++ b/openflared/internal/wsclient/client.go @@ -5,8 +5,8 @@ import ( "encoding/json" "time" - "openflare/service" - shared "openflare/utils/wsclient" + "github.com/rain-kl/openflare/openflare-server/service" + shared "github.com/rain-kl/openflare/openflare-server/utils/wsclient" ) type WSMessage = shared.WSMessage