diff --git a/modules/structs/auth_oauth2.go b/modules/structs/auth_oauth2.go index af1f87facd..93dfabffb6 100644 --- a/modules/structs/auth_oauth2.go +++ b/modules/structs/auth_oauth2.go @@ -4,6 +4,12 @@ package structs +type AuthOauth2Option struct { + SourceID int64 `json:"source_id"` + AuthenticationName string `json:"authentication_name" binding:"Required"` + ProviderIconURL string `json:"provider_icon_url"` +} + // CreateUserOption create user options type CreateAuthOauth2Option struct { AuthenticationName string `json:"authentication_name" binding:"Required"` diff --git a/routers/api/v1/admin/auth_oauth.go b/routers/api/v1/admin/auth_oauth.go index 32422ebedf..ac563707bd 100644 --- a/routers/api/v1/admin/auth_oauth.go +++ b/routers/api/v1/admin/auth_oauth.go @@ -11,10 +11,14 @@ import ( auth_model "code.gitea.io/gitea/models/auth" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/routers/api/v1/utils" + "code.gitea.io/gitea/models/auth" + "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/services/auth/source/oauth2" "code.gitea.io/gitea/services/context" + "code.gitea.io/gitea/services/convert" ) // CreateOauthAuth create a new external authentication for oauth2 @@ -77,5 +81,22 @@ func DeleteOauthAuth(ctx *context.APIContext) { // // SearchOauthAuth API for getting information of the configured authentication methods according the filter conditions func SearchOauthAuth(ctx *context.APIContext) { + listOptions := utils.GetListOptions(ctx) + authSources, maxResults, err := db.FindAndCount[auth.Source](ctx, auth.FindSourcesOptions{}) + // fmt.Printf("Count: %d, models: %v, err: %v", count, models[0].Name, err) + + if err != nil { + ctx.APIErrorInternal(err) + return + } + + results := make([]*api.AuthOauth2Option, len(authSources)) + for i := range authSources { + results[i] = convert.ToOauthProvider(ctx, authSources[i]) + } + + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.SetTotalCountHeader(maxResults) + ctx.JSON(http.StatusOK, &results) } diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index d1f3c8dd9b..bdd25700a3 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -1650,6 +1650,7 @@ func Routes() *web.Router { m.Group("/admin", func() { m.Group("/identity-auth", func() { + m.Get("", admin.SearchOauthAuth) m.Post("/new", admin.CreateOauthAuth) }) diff --git a/services/convert/auth_oauth.go b/services/convert/auth_oauth.go new file mode 100644 index 0000000000..c2f12f19a3 --- /dev/null +++ b/services/convert/auth_oauth.go @@ -0,0 +1,37 @@ +// // Copyright 2020 The Gitea Authors. All rights reserved. +// // SPDX-License-Identifier: MIT + +package convert + +import ( + "context" + + auth_model "code.gitea.io/gitea/models/auth" + api "code.gitea.io/gitea/modules/structs" +) + +// ToUser convert user_model.User to api.User +// if doer is set, private information is added if the doer has the permission to see it +func ToOauthProvider(ctx context.Context, provider *auth_model.Source) *api.AuthOauth2Option { + if provider == nil { + return nil + } + + return toOauthProvider(ctx, provider) +} + +// ToUsers convert list of user_model.User to list of api.User +func ToOauthProviders(ctx context.Context, provider []*auth_model.Source) []*api.AuthOauth2Option { + result := make([]*api.AuthOauth2Option, len(provider)) + for i := range provider { + result[i] = ToOauthProvider(ctx, provider[i]) + } + return result +} + +func toOauthProvider(ctx context.Context, provider *auth_model.Source) *api.AuthOauth2Option { + return &api.AuthOauth2Option{ + SourceID: provider.ID, + AuthenticationName: provider.Name, + } +}