@ -6,6 +6,7 @@ package user
import (
import (
"net/http"
"net/http"
"strconv"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/context"
@ -15,10 +16,12 @@ import (
// listUserRepos - List the repositories owned by the given user.
// listUserRepos - List the repositories owned by the given user.
func listUserRepos ( ctx * context . APIContext , u * models . User , private bool ) {
func listUserRepos ( ctx * context . APIContext , u * models . User , private bool ) {
repos , err := models . GetUserRepositories ( & models . SearchRepoOptions {
opts := utils . GetListOptions ( ctx )
repos , count , err := models . GetUserRepositories ( & models . SearchRepoOptions {
Actor : u ,
Actor : u ,
Private : private ,
Private : private ,
ListOptions : utils . GetListOpti onspan>( c tx span>) ,
ListOptions : opts ,
} )
} )
if err != nil {
if err != nil {
ctx . Error ( http . StatusInternalServerError , "GetUserRepositories" , err )
ctx . Error ( http . StatusInternalServerError , "GetUserRepositories" , err )
@ -36,6 +39,9 @@ func listUserRepos(ctx *context.APIContext, u *models.User, private bool) {
apiRepos = append ( apiRepos , repos [ i ] . APIFormat ( access ) )
apiRepos = append ( apiRepos , repos [ i ] . APIFormat ( access ) )
}
}
}
}
ctx . SetLinkHeader ( int ( count ) , opts . PageSize )
ctx . Header ( ) . Set ( "X-Total-Count" , strconv . FormatInt ( count , 10 ) )
ctx . JSON ( http . StatusOK , & apiRepos )
ctx . JSON ( http . StatusOK , & apiRepos )
}
}
@ -92,31 +98,37 @@ func ListMyRepos(ctx *context.APIContext) {
// "200":
// "200":
// "$ref": "#/responses/RepositoryList"
// "$ref": "#/responses/RepositoryList"
ownRepos , err := models . GetUserRepositories ( & models . SearchRepoOptions {
Actor : ctx . User ,
Private : true ,
ListOptions : utils . GetListOptions ( ctx ) ,
} )
if err != nil {
ctx . Error ( http . StatusInternalServerError , "GetUserRepositories" , err )
return
opts := & models . SearchRepoOptions {
ListOptions : utils . GetListOptions ( ctx ) ,
Actor : ctx . User ,
OwnerID : ctx . User . ID ,
Private : ctx . IsSigned ,
IncludeDescription : true ,
}
}
accessibleReposMap , err := ctx . User . GetRepositoryAccesses ( )
var err error
repos , count , err := models . SearchRepository ( opts )
if err != nil {
if err != nil {
ctx . Error ( http . StatusInternalServerError , "GetRepositoryAccesses" , err )
ctx . Error ( http . StatusInternalServerError , "SearchRepository " , err )
return
return
}
}
apiRepos := make ( [ ] * api . Repository , len ( ownRepos ) + len ( accessibleReposMap ) )
for i := range ownRepos {
apiRepos [ i ] = ownRepos [ i ] . APIFormat ( models . AccessModeOwner )
}
i := len ( ownRepos )
for repo , access := range accessibleReposMap {
apiRepos [ i ] = repo . APIFormat ( access )
i ++
results := make ( [ ] * api . Repository , len ( repos ) )
for i , repo := range repos {
if err = repo . GetOwner ( ) ; err != nil {
ctx . Error ( http . StatusInternalServerError , "GetOwner" , err )
return
}
accessMode , err := models . AccessLevel ( ctx . User , repo )
if err != nil {
ctx . Error ( http . StatusInternalServerError , "AccessLevel" , err )
}
results [ i ] = repo . APIFormat ( accessMode )
}
}
ctx . JSON ( http . StatusOK , & apiRepos )
ctx . SetLinkHeader ( int ( count ) , opts . ListOptions . PageSize )
ctx . Header ( ) . Set ( "X-Total-Count" , strconv . FormatInt ( count , 10 ) )
ctx . JSON ( http . StatusOK , & results )
}
}
// ListOrgRepos - list the repositories of an organization.
// ListOrgRepos - list the repositories of an organization.