diff --git a/server/handlers/init.go b/server/handlers/init.go index 3203a72..106b074 100644 --- a/server/handlers/init.go +++ b/server/handlers/init.go @@ -165,6 +165,8 @@ func Init(e *gin.Engine) { needAuthUser.POST("/username", SetUsername) needAuthUser.POST("/password", SetUserPassword) + + needAuthUser.GET("/providers", UserBindProviders) } { diff --git a/server/handlers/user.go b/server/handlers/user.go index 76f2962..4b67031 100644 --- a/server/handlers/user.go +++ b/server/handlers/user.go @@ -7,6 +7,7 @@ import ( "github.com/synctv-org/synctv/internal/db" dbModel "github.com/synctv-org/synctv/internal/model" "github.com/synctv-org/synctv/internal/op" + "github.com/synctv-org/synctv/internal/provider/providers" "github.com/synctv-org/synctv/server/middlewares" "github.com/synctv-org/synctv/server/model" "gorm.io/gorm" @@ -173,12 +174,30 @@ func UserBindProviders(ctx *gin.Context) { return } - resp := make([]model.UserBindProviderResp, len(up)) - for i, v := range up { - resp[i] = model.UserBindProviderResp{ - Provider: v.Provider, - ProviderUserID: v.ProviderUserID, - CreatedAt: v.CreatedAt.UnixMilli(), + m := providers.EnabledProvider() + + resp := make(model.UserBindProviderResp, len(up)) + for _, v := range up { + if _, ok := m[v.Provider]; ok { + resp[v.Provider] = struct { + ProviderUserID string "json:\"providerUserID\"" + CreatedAt int64 "json:\"createdAt\"" + }{ + ProviderUserID: v.ProviderUserID, + CreatedAt: v.CreatedAt.UnixMilli(), + } + } + } + + for p := range m { + if _, ok := resp[p]; !ok { + resp[p] = struct { + ProviderUserID string "json:\"providerUserID\"" + CreatedAt int64 "json:\"createdAt\"" + }{ + ProviderUserID: "", + CreatedAt: 0, + } } } diff --git a/server/model/user.go b/server/model/user.go index 451607c..35736e6 100644 --- a/server/model/user.go +++ b/server/model/user.go @@ -97,8 +97,7 @@ func (u *UserIDReq) Validate() error { return nil } -type UserBindProviderResp struct { - Provider provider.OAuth2Provider `json:"provider"` - ProviderUserID string `json:"providerUserID"` - CreatedAt int64 `json:"createdAt"` +type UserBindProviderResp map[provider.OAuth2Provider]struct { + ProviderUserID string `json:"providerUserID"` + CreatedAt int64 `json:"createdAt"` }