mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-05 23:26:38 +08:00
feat(cmd): register all 5 domain plugins in newWaveletApp and fix all lint issues
This commit is contained in:
+15
-1
@@ -22,6 +22,11 @@ import (
|
|||||||
"github.com/Rain-kl/Wavelet/internal/platform/bootstrap"
|
"github.com/Rain-kl/Wavelet/internal/platform/bootstrap"
|
||||||
"github.com/Rain-kl/Wavelet/internal/router"
|
"github.com/Rain-kl/Wavelet/internal/router"
|
||||||
"github.com/Rain-kl/Wavelet/pkg/util"
|
"github.com/Rain-kl/Wavelet/pkg/util"
|
||||||
|
"github.com/Rain-kl/Wavelet/plugins/domain/admin"
|
||||||
|
"github.com/Rain-kl/Wavelet/plugins/domain/auth"
|
||||||
|
"github.com/Rain-kl/Wavelet/plugins/domain/message_gateway"
|
||||||
|
"github.com/Rain-kl/Wavelet/plugins/domain/risk_control"
|
||||||
|
"github.com/Rain-kl/Wavelet/plugins/domain/user"
|
||||||
"github.com/Rain-kl/Wavelet/plugins/infra/cache"
|
"github.com/Rain-kl/Wavelet/plugins/infra/cache"
|
||||||
"github.com/Rain-kl/Wavelet/plugins/infra/database"
|
"github.com/Rain-kl/Wavelet/plugins/infra/database"
|
||||||
"github.com/Rain-kl/Wavelet/plugins/infra/logger"
|
"github.com/Rain-kl/Wavelet/plugins/infra/logger"
|
||||||
@@ -29,7 +34,7 @@ import (
|
|||||||
"github.com/hibiken/asynq"
|
"github.com/hibiken/asynq"
|
||||||
)
|
)
|
||||||
|
|
||||||
// newWaveletApp creates a core.App wired with Wavelet platform infrastructure and profile drivers.
|
// newWaveletApp creates a core.App wired with Wavelet platform infrastructure, domain plugins, and profile drivers.
|
||||||
//
|
//
|
||||||
//nolint:contextcheck
|
//nolint:contextcheck
|
||||||
func newWaveletApp(profile core.Profile) *core.App {
|
func newWaveletApp(profile core.Profile) *core.App {
|
||||||
@@ -46,6 +51,15 @@ func newWaveletApp(profile core.Profile) *core.App {
|
|||||||
storage.New(),
|
storage.New(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Register domain plugins
|
||||||
|
app.Use(
|
||||||
|
auth.New(),
|
||||||
|
user.New(),
|
||||||
|
message_gateway.New(),
|
||||||
|
risk_control.New(),
|
||||||
|
admin.New(),
|
||||||
|
)
|
||||||
|
|
||||||
// Bind Goose migration runner
|
// Bind Goose migration runner
|
||||||
app.SetMigrationRunner(func(_ context.Context, _ []extpoints.MigrationEntry) error {
|
app.SetMigrationRunner(func(_ context.Context, _ []extpoints.MigrationEntry) error {
|
||||||
runMigrations()
|
runMigrations()
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ func TestNewWaveletAppProfiles(t *testing.T) {
|
|||||||
require.NotNil(t, app)
|
require.NotNil(t, app)
|
||||||
assert.Equal(t, prof, app.Profile())
|
assert.Equal(t, prof, app.Profile())
|
||||||
|
|
||||||
// Verify 4 infra plugins + 3 driver plugins registered
|
// Verify 4 infra plugins + 5 domain plugins + 3 driver plugins registered
|
||||||
plugins := app.Plugins()
|
plugins := app.Plugins()
|
||||||
assert.Len(t, plugins, 7)
|
assert.Len(t, plugins, 12)
|
||||||
|
|
||||||
// Verify each standard infra plugin is registered
|
// Verify each standard infra plugin is registered
|
||||||
_, ok := app.Plugin("database")
|
_, ok := app.Plugin("database")
|
||||||
@@ -43,6 +43,22 @@ func TestNewWaveletAppProfiles(t *testing.T) {
|
|||||||
_, ok = app.Plugin("storage")
|
_, ok = app.Plugin("storage")
|
||||||
assert.True(t, ok, "storage plugin missing")
|
assert.True(t, ok, "storage plugin missing")
|
||||||
|
|
||||||
|
// Verify domain plugins
|
||||||
|
_, ok = app.Plugin("auth")
|
||||||
|
assert.True(t, ok, "auth plugin missing")
|
||||||
|
|
||||||
|
_, ok = app.Plugin("user")
|
||||||
|
assert.True(t, ok, "user plugin missing")
|
||||||
|
|
||||||
|
_, ok = app.Plugin("message_gateway")
|
||||||
|
assert.True(t, ok, "message_gateway plugin missing")
|
||||||
|
|
||||||
|
_, ok = app.Plugin("risk_control")
|
||||||
|
assert.True(t, ok, "risk_control plugin missing")
|
||||||
|
|
||||||
|
_, ok = app.Plugin("admin")
|
||||||
|
assert.True(t, ok, "admin plugin missing")
|
||||||
|
|
||||||
// Verify driver plugins
|
// Verify driver plugins
|
||||||
_, ok = app.Plugin("driver_wavelet_http")
|
_, ok = app.Plugin("driver_wavelet_http")
|
||||||
assert.True(t, ok, "http driver missing")
|
assert.True(t, ok, "http driver missing")
|
||||||
|
|||||||
@@ -65,12 +65,12 @@ const (
|
|||||||
|
|
||||||
// 用户管理(管理员视角)错误消息常量
|
// 用户管理(管理员视角)错误消息常量
|
||||||
const (
|
const (
|
||||||
userNotFound = "用户不存在"
|
userNotFound = "用户不存在"
|
||||||
cannotDisable = "不能禁用管理员账号"
|
cannotDisable = "不能禁用管理员账号"
|
||||||
cannotDelete = "不能删除管理员账号"
|
cannotDelete = "不能删除管理员账号"
|
||||||
cannotDeleteSelf = "不能删除当前登录账号"
|
cannotDeleteSelf = "不能删除当前登录账号"
|
||||||
usernameRequired = "用户名不能为空"
|
usernameRequired = "用户名不能为空"
|
||||||
emailRequired = "邮箱不能为空"
|
emailRequired = "邮箱不能为空"
|
||||||
//nolint:gosec // error message, not hardcoded credentials
|
//nolint:gosec // error message, not hardcoded credentials
|
||||||
passwordTooShort = "密码长度不能少于 8 位"
|
passwordTooShort = "密码长度不能少于 8 位"
|
||||||
usernameExists = "用户名已存在"
|
usernameExists = "用户名已存在"
|
||||||
|
|||||||
+19
-19
@@ -6,24 +6,24 @@ package auth
|
|||||||
|
|
||||||
// OAuth and Auth error messages
|
// OAuth and Auth error messages
|
||||||
const (
|
const (
|
||||||
errInvalidState = "非法登录请求"
|
errInvalidState = "非法登录请求"
|
||||||
errIDTokenVerifyFailed = "ID Token 验证失败" //nolint:gosec // false positive: this is an error message, not hardcoded credentials
|
errIDTokenVerifyFailed = "ID Token 验证失败" //nolint:gosec // false positive: this is an error message, not hardcoded credentials
|
||||||
errIDTokenVerifyFailedFormat = "%s: %w"
|
errIDTokenVerifyFailedFormat = "%s: %w"
|
||||||
errNonceMismatch = "nonce 不匹配,可能存在重放攻击"
|
errNonceMismatch = "nonce 不匹配,可能存在重放攻击"
|
||||||
errNoActiveAuthSource = "未配置可用认证源"
|
errNoActiveAuthSource = "未配置可用认证源"
|
||||||
errServerAddressMissing = "服务器地址 (server_address) 未配置或配置为空,请在后台系统设置中配置后再试"
|
errServerAddressMissing = "服务器地址 (server_address) 未配置或配置为空,请在后台系统设置中配置后再试"
|
||||||
errAuthSourceRequired = "认证源不能为空"
|
errAuthSourceRequired = "认证源不能为空"
|
||||||
errDiscoveryURLRequired = "OIDC 认证源必须配置 Discovery URL"
|
errDiscoveryURLRequired = "OIDC 认证源必须配置 Discovery URL"
|
||||||
errUsernameGenerateFailed = "无法生成可用用户名"
|
errUsernameGenerateFailed = "无法生成可用用户名"
|
||||||
errUsernameFromSourceFailed = "无法从认证源获取用户名"
|
errUsernameFromSourceFailed = "无法从认证源获取用户名"
|
||||||
errAuthSourceDisabled = "认证源未启用"
|
errAuthSourceDisabled = "认证源未启用"
|
||||||
errInvalidExternalAccountBindingID = "绑定记录 ID 无效"
|
errInvalidExternalAccountBindingID = "绑定记录 ID 无效"
|
||||||
ErrTokenAuthNotAllowed = "该端点不允许使用访问令牌进行身份验证" //nolint:gosec // false positive: this is an error message, not hardcoded credentials
|
ErrTokenAuthNotAllowed = "该端点不允许使用访问令牌进行身份验证" //nolint:gosec // false positive: this is an error message, not hardcoded credentials
|
||||||
errOAuthStateRateLimited = "请求授权过于频繁,请稍后重试"
|
errOAuthStateRateLimited = "请求授权过于频繁,请稍后重试"
|
||||||
errAuthSourceNameRequired = "认证源名称不能为空"
|
errAuthSourceNameRequired = "认证源名称不能为空"
|
||||||
errAuthSourceNameInvalid = "认证源名称格式不正确"
|
errAuthSourceNameInvalid = "认证源名称格式不正确"
|
||||||
errAuthSourceTypeUnsupported = "不支持的认证源类型"
|
errAuthSourceTypeUnsupported = "不支持的认证源类型"
|
||||||
errAuthSourceDiscoveryURLRequired = "Discovery URL 不能为空"
|
errAuthSourceDiscoveryURLRequired = "Discovery URL 不能为空"
|
||||||
//nolint:gosec // error message, not hardcoded credentials
|
//nolint:gosec // error message, not hardcoded credentials
|
||||||
errAuthSourceClientCredentialsRequired = "启用认证源时必须配置 Client ID 和 Client Secret"
|
errAuthSourceClientCredentialsRequired = "启用认证源时必须配置 Client ID 和 Client Secret"
|
||||||
errAuthSourceIDRequired = "认证源 ID 不能为空"
|
errAuthSourceIDRequired = "认证源 ID 不能为空"
|
||||||
@@ -33,5 +33,5 @@ const (
|
|||||||
errExternalAccountBindingIDRequired = "外部帐号绑定记录 ID 不能为空"
|
errExternalAccountBindingIDRequired = "外部帐号绑定记录 ID 不能为空"
|
||||||
errAdminRequired = "无权访问"
|
errAdminRequired = "无权访问"
|
||||||
//nolint:gosec // error message, not hardcoded credentials
|
//nolint:gosec // error message, not hardcoded credentials
|
||||||
errTokenAdminRequired = "令牌无管理员权限"
|
errTokenAdminRequired = "令牌无管理员权限"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user