2015-12-05 01:16:42 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package v1
import (
"strings"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
2016-11-11 12:39:44 +03:00
api "code.gitea.io/sdk/gitea"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/routers/api/v1/admin"
"code.gitea.io/gitea/routers/api/v1/misc"
"code.gitea.io/gitea/routers/api/v1/org"
"code.gitea.io/gitea/routers/api/v1/repo"
"code.gitea.io/gitea/routers/api/v1/user"
2015-12-05 01:16:42 +03:00
)
2016-08-05 03:08:01 +03:00
func repoAssignment ( ) macaron . Handler {
2016-03-14 01:49:16 +03:00
return func ( ctx * context . APIContext ) {
2015-12-05 01:16:42 +03:00
userName := ctx . Params ( ":username" )
repoName := ctx . Params ( ":reponame" )
var (
owner * models . User
err error
)
// Check if the user is the same as the repository owner.
if ctx . IsSigned && ctx . User . LowerName == strings . ToLower ( userName ) {
owner = ctx . User
} else {
owner , err = models . GetUserByName ( userName )
if err != nil {
if models . IsErrUserNotExist ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2015-12-05 01:16:42 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetUserByName" , err )
2015-12-05 01:16:42 +03:00
}
return
}
}
ctx . Repo . Owner = owner
// Get repository.
2016-07-23 20:08:22 +03:00
repo , err := models . GetRepositoryByName ( owner . ID , repoName )
2015-12-05 01:16:42 +03:00
if err != nil {
if models . IsErrRepoNotExist ( err ) {
2017-02-05 17:35:03 +03:00
redirectRepoID , err := models . LookupRepoRedirect ( owner . ID , repoName )
if err == nil {
context . RedirectToRepo ( ctx . Context , redirectRepoID )
} else if models . IsErrRepoRedirectNotExist ( err ) {
ctx . Status ( 404 )
} else {
ctx . Error ( 500 , "LookupRepoRedirect" , err )
}
2015-12-05 01:16:42 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetRepositoryByName" , err )
2015-12-05 01:16:42 +03:00
}
return
}
2017-02-02 15:33:56 +03:00
repo . Owner = owner
2015-12-05 01:16:42 +03:00
2016-03-14 06:20:22 +03:00
if ctx . IsSigned && ctx . User . IsAdmin {
2016-11-07 19:20:37 +03:00
ctx . Repo . AccessMode = models . AccessModeOwner
2016-03-14 06:20:22 +03:00
} else {
2017-03-15 03:51:46 +03:00
mode , err := models . AccessLevel ( ctx . User . ID , repo )
2016-03-14 06:20:22 +03:00
if err != nil {
ctx . Error ( 500 , "AccessLevel" , err )
return
}
ctx . Repo . AccessMode = mode
2015-12-05 01:16:42 +03:00
}
2016-03-14 06:20:22 +03:00
if ! ctx . Repo . HasAccess ( ) {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2015-12-05 01:16:42 +03:00
return
}
ctx . Repo . Repository = repo
}
}
// Contexter middleware already checks token for user sign in process.
2016-08-05 03:08:01 +03:00
func reqToken ( ) macaron . Handler {
2016-03-11 19:56:52 +03:00
return func ( ctx * context . Context ) {
2015-12-05 01:16:42 +03:00
if ! ctx . IsSigned {
ctx . Error ( 401 )
return
}
}
}
2016-08-05 03:08:01 +03:00
func reqBasicAuth ( ) macaron . Handler {
2016-03-11 19:56:52 +03:00
return func ( ctx * context . Context ) {
2015-12-05 01:16:42 +03:00
if ! ctx . IsBasicAuth {
ctx . Error ( 401 )
return
}
}
}
2016-08-05 03:08:01 +03:00
func reqAdmin ( ) macaron . Handler {
2016-03-11 19:56:52 +03:00
return func ( ctx * context . Context ) {
2016-07-23 12:56:37 +03:00
if ! ctx . IsSigned || ! ctx . User . IsAdmin {
2015-12-05 01:16:42 +03:00
ctx . Error ( 403 )
return
}
}
}
2016-08-25 02:05:56 +03:00
func reqRepoWriter ( ) macaron . Handler {
return func ( ctx * context . Context ) {
if ! ctx . Repo . IsWriter ( ) {
ctx . Error ( 403 )
return
}
}
}
2017-01-14 05:14:48 +03:00
func reqOrgMembership ( ) macaron . Handler {
return func ( ctx * context . APIContext ) {
var orgID int64
if ctx . Org . Organization != nil {
orgID = ctx . Org . Organization . ID
} else if ctx . Org . Team != nil {
orgID = ctx . Org . Team . OrgID
} else {
ctx . Error ( 500 , "" , "reqOrgMembership: unprepared context" )
return
}
if ! models . IsOrganizationMember ( orgID , ctx . User . ID ) {
2017-01-26 14:54:04 +03:00
if ctx . Org . Organization != nil {
ctx . Error ( 403 , "" , "Must be an organization member" )
} else {
ctx . Status ( 404 )
}
2017-01-14 05:14:48 +03:00
return
}
}
}
func reqOrgOwnership ( ) macaron . Handler {
return func ( ctx * context . APIContext ) {
var orgID int64
if ctx . Org . Organization != nil {
orgID = ctx . Org . Organization . ID
} else if ctx . Org . Team != nil {
orgID = ctx . Org . Team . OrgID
} else {
ctx . Error ( 500 , "" , "reqOrgOwnership: unprepared context" )
return
}
if ! models . IsOrganizationOwner ( orgID , ctx . User . ID ) {
2017-01-26 14:54:04 +03:00
if ctx . Org . Organization != nil {
ctx . Error ( 403 , "" , "Must be an organization owner" )
} else {
ctx . Status ( 404 )
}
2017-01-14 05:14:48 +03:00
return
}
}
}
2016-08-05 03:08:01 +03:00
func orgAssignment ( args ... bool ) macaron . Handler {
2016-03-26 01:04:02 +03:00
var (
2016-04-05 02:41:34 +03:00
assignOrg bool
2016-03-26 01:04:02 +03:00
assignTeam bool
)
if len ( args ) > 0 {
2016-04-05 02:41:34 +03:00
assignOrg = args [ 0 ]
}
if len ( args ) > 1 {
assignTeam = args [ 1 ]
2016-03-26 01:04:02 +03:00
}
return func ( ctx * context . APIContext ) {
2016-04-05 02:41:34 +03:00
ctx . Org = new ( context . APIOrganization )
var err error
if assignOrg {
ctx . Org . Organization , err = models . GetUserByName ( ctx . Params ( ":orgname" ) )
if err != nil {
if models . IsErrUserNotExist ( err ) {
ctx . Status ( 404 )
} else {
ctx . Error ( 500 , "GetUserByName" , err )
}
return
2016-03-26 01:04:02 +03:00
}
}
if assignTeam {
ctx . Org . Team , err = models . GetTeamByID ( ctx . ParamsInt64 ( ":teamid" ) )
if err != nil {
if models . IsErrUserNotExist ( err ) {
ctx . Status ( 404 )
} else {
ctx . Error ( 500 , "GetTeamById" , err )
}
return
}
}
}
}
2016-08-05 03:08:01 +03:00
func mustEnableIssues ( ctx * context . APIContext ) {
2017-02-04 18:53:46 +03:00
if ! ctx . Repo . Repository . EnableUnit ( models . UnitTypeIssues ) {
2016-08-05 02:32:02 +03:00
ctx . Status ( 404 )
return
}
}
2016-12-02 14:10:39 +03:00
func mustAllowPulls ( ctx * context . Context ) {
if ! ctx . Repo . Repository . AllowsPulls ( ) {
ctx . Status ( 404 )
return
}
}
2015-12-05 01:16:42 +03:00
// RegisterRoutes registers all v1 APIs routes to web application.
// FIXME: custom form error response
func RegisterRoutes ( m * macaron . Macaron ) {
bind := binding . Bind
m . Group ( "/v1" , func ( ) {
// Miscellaneous
2017-03-06 17:13:17 +03:00
m . Get ( "/version" , misc . Version )
2015-12-05 01:16:42 +03:00
m . Post ( "/markdown" , bind ( api . MarkdownOption { } ) , misc . Markdown )
m . Post ( "/markdown/raw" , misc . MarkdownRaw )
// Users
m . Group ( "/users" , func ( ) {
m . Get ( "/search" , user . Search )
m . Group ( "/:username" , func ( ) {
m . Get ( "" , user . GetInfo )
2017-02-25 00:39:49 +03:00
m . Get ( "/repos" , user . ListUserRepos )
2015-12-05 01:16:42 +03:00
m . Group ( "/tokens" , func ( ) {
m . Combo ( "" ) . Get ( user . ListAccessTokens ) .
Post ( bind ( api . CreateAccessTokenOption { } ) , user . CreateAccessToken )
2016-08-05 03:08:01 +03:00
} , reqBasicAuth ( ) )
2015-12-05 01:16:42 +03:00
} )
} )
m . Group ( "/users" , func ( ) {
m . Group ( "/:username" , func ( ) {
2015-12-06 01:13:13 +03:00
m . Get ( "/keys" , user . ListPublicKeys )
2017-03-16 04:27:35 +03:00
m . Get ( "/gpg_keys" , user . ListGPGKeys )
2015-12-21 15:24:11 +03:00
m . Get ( "/followers" , user . ListFollowers )
m . Group ( "/following" , func ( ) {
m . Get ( "" , user . ListFollowing )
m . Get ( "/:target" , user . CheckFollowing )
} )
2016-11-15 01:33:58 +03:00
m . Get ( "/starred" , user . GetStarredRepos )
2016-12-24 04:53:11 +03:00
m . Get ( "/subscriptions" , user . GetWatchedRepos )
2015-12-05 01:16:42 +03:00
} )
2016-08-05 03:08:01 +03:00
} , reqToken ( ) )
2015-12-05 01:16:42 +03:00
m . Group ( "/user" , func ( ) {
2016-08-12 01:29:39 +03:00
m . Get ( "" , user . GetAuthenticatedUser )
2015-12-21 15:24:11 +03:00
m . Combo ( "/emails" ) . Get ( user . ListEmails ) .
Post ( bind ( api . CreateEmailOption { } ) , user . AddEmail ) .
Delete ( bind ( api . CreateEmailOption { } ) , user . DeleteEmail )
m . Get ( "/followers" , user . ListMyFollowers )
m . Group ( "/following" , func ( ) {
m . Get ( "" , user . ListMyFollowing )
m . Combo ( "/:username" ) . Get ( user . CheckMyFollowing ) . Put ( user . Follow ) . Delete ( user . Unfollow )
} )
2015-12-05 01:16:42 +03:00
m . Group ( "/keys" , func ( ) {
m . Combo ( "" ) . Get ( user . ListMyPublicKeys ) .
Post ( bind ( api . CreateKeyOption { } ) , user . CreatePublicKey )
m . Combo ( "/:id" ) . Get ( user . GetPublicKey ) .
Delete ( user . DeletePublicKey )
} )
2016-11-15 01:33:58 +03:00
2017-03-16 04:27:35 +03:00
m . Group ( "/gpg_keys" , func ( ) {
m . Combo ( "" ) . Get ( user . ListMyGPGKeys ) .
Post ( bind ( api . CreateGPGKeyOption { } ) , user . CreateGPGKey )
m . Combo ( "/:id" ) . Get ( user . GetGPGKey ) .
Delete ( user . DeleteGPGKey )
} )
2017-02-25 00:39:49 +03:00
m . Combo ( "/repos" ) . Get ( user . ListMyRepos ) .
Post ( bind ( api . CreateRepoOption { } ) , repo . Create )
2016-11-15 01:33:58 +03:00
m . Group ( "/starred" , func ( ) {
m . Get ( "" , user . GetMyStarredRepos )
m . Group ( "/:username/:reponame" , func ( ) {
m . Get ( "" , user . IsStarring )
m . Put ( "" , user . Star )
m . Delete ( "" , user . Unstar )
2016-12-29 16:17:32 +03:00
} , repoAssignment ( ) )
2016-11-15 01:33:58 +03:00
} )
2016-12-24 04:53:11 +03:00
m . Get ( "/subscriptions" , user . GetMyWatchedRepos )
2016-08-05 03:08:01 +03:00
} , reqToken ( ) )
2015-12-05 01:16:42 +03:00
// Repositories
2016-08-05 03:08:01 +03:00
m . Post ( "/org/:org/repos" , reqToken ( ) , bind ( api . CreateRepoOption { } ) , repo . CreateOrgRepo )
2015-12-05 01:16:42 +03:00
m . Group ( "/repos" , func ( ) {
m . Get ( "/search" , repo . Search )
} )
2016-10-03 13:35:42 +03:00
m . Combo ( "/repositories/:id" , reqToken ( ) ) . Get ( repo . GetByID )
2015-12-05 01:16:42 +03:00
m . Group ( "/repos" , func ( ) {
m . Post ( "/migrate" , bind ( auth . MigrateRepoForm { } ) , repo . Migrate )
m . Group ( "/:username/:reponame" , func ( ) {
2016-12-29 16:17:32 +03:00
m . Combo ( "" ) . Get ( repo . Get ) . Delete ( repo . Delete )
2016-07-17 03:08:38 +03:00
m . Group ( "/hooks" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListHooks ) .
Post ( bind ( api . CreateHookOption { } ) , repo . CreateHook )
2016-12-07 07:36:28 +03:00
m . Combo ( "/:id" ) . Get ( repo . GetHook ) .
Patch ( bind ( api . EditHookOption { } ) , repo . EditHook ) .
2016-07-17 03:08:38 +03:00
Delete ( repo . DeleteHook )
2016-12-27 21:13:21 +03:00
} , reqRepoWriter ( ) )
2016-12-26 10:37:01 +03:00
m . Group ( "/collaborators" , func ( ) {
m . Get ( "" , repo . ListCollaborators )
m . Combo ( "/:collaborator" ) . Get ( repo . IsCollaborator ) .
Put ( bind ( api . AddCollaboratorOption { } ) , repo . AddCollaborator ) .
Delete ( repo . DeleteCollaborator )
} )
2016-03-11 19:56:52 +03:00
m . Get ( "/raw/*" , context . RepoRef ( ) , repo . GetRawFile )
2015-12-05 01:16:42 +03:00
m . Get ( "/archive/*" , repo . GetArchive )
2016-12-31 04:15:45 +03:00
m . Combo ( "/forks" ) . Get ( repo . ListForks ) .
Post ( bind ( api . CreateForkOption { } ) , repo . CreateFork )
2016-01-15 21:24:03 +03:00
m . Group ( "/branches" , func ( ) {
2016-03-11 19:56:52 +03:00
m . Get ( "" , repo . ListBranches )
m . Get ( "/:branchname" , repo . GetBranch )
2016-01-15 21:24:03 +03:00
} )
2015-12-05 01:16:42 +03:00
m . Group ( "/keys" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListDeployKeys ) .
Post ( bind ( api . CreateKeyOption { } ) , repo . CreateDeployKey )
m . Combo ( "/:id" ) . Get ( repo . GetDeployKey ) .
Delete ( repo . DeleteDeploykey )
} )
2016-03-14 06:20:22 +03:00
m . Group ( "/issues" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListIssues ) . Post ( bind ( api . CreateIssueOption { } ) , repo . CreateIssue )
2016-12-22 11:29:26 +03:00
m . Group ( "/comments" , func ( ) {
m . Get ( "" , repo . ListRepoIssueComments )
m . Combo ( "/:id" ) . Patch ( bind ( api . EditIssueCommentOption { } ) , repo . EditIssueComment )
} )
2016-08-03 19:24:16 +03:00
m . Group ( "/:index" , func ( ) {
m . Combo ( "" ) . Get ( repo . GetIssue ) . Patch ( bind ( api . EditIssueOption { } ) , repo . EditIssue )
2016-08-26 21:23:21 +03:00
m . Group ( "/comments" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListIssueComments ) . Post ( bind ( api . CreateIssueCommentOption { } ) , repo . CreateIssueComment )
2016-12-22 11:29:26 +03:00
m . Combo ( "/:id" ) . Patch ( bind ( api . EditIssueCommentOption { } ) , repo . EditIssueComment ) .
Delete ( repo . DeleteIssueComment )
2016-08-26 21:23:21 +03:00
} )
2016-08-03 19:24:16 +03:00
m . Group ( "/labels" , func ( ) {
2016-08-03 21:51:22 +03:00
m . Combo ( "" ) . Get ( repo . ListIssueLabels ) .
2016-08-03 19:24:16 +03:00
Post ( bind ( api . IssueLabelsOption { } ) , repo . AddIssueLabels ) .
Put ( bind ( api . IssueLabelsOption { } ) , repo . ReplaceIssueLabels ) .
Delete ( repo . ClearIssueLabels )
m . Delete ( "/:id" , repo . DeleteIssueLabel )
} )
} )
2016-08-05 03:08:01 +03:00
} , mustEnableIssues )
2016-08-03 19:24:16 +03:00
m . Group ( "/labels" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListLabels ) .
2016-08-03 21:51:22 +03:00
Post ( bind ( api . CreateLabelOption { } ) , repo . CreateLabel )
m . Combo ( "/:id" ) . Get ( repo . GetLabel ) . Patch ( bind ( api . EditLabelOption { } ) , repo . EditLabel ) .
2016-08-03 19:24:16 +03:00
Delete ( repo . DeleteLabel )
2016-03-14 01:49:16 +03:00
} )
2016-08-25 01:18:56 +03:00
m . Group ( "/milestones" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListMilestones ) .
2016-08-25 02:05:56 +03:00
Post ( reqRepoWriter ( ) , bind ( api . CreateMilestoneOption { } ) , repo . CreateMilestone )
m . Combo ( "/:id" ) . Get ( repo . GetMilestone ) .
Patch ( reqRepoWriter ( ) , bind ( api . EditMilestoneOption { } ) , repo . EditMilestone ) .
Delete ( reqRepoWriter ( ) , repo . DeleteMilestone )
2016-08-25 01:18:56 +03:00
} )
2017-01-06 10:05:09 +03:00
m . Get ( "/stargazers" , repo . ListStargazers )
2017-01-07 06:13:02 +03:00
m . Get ( "/subscribers" , repo . ListSubscribers )
2016-12-24 04:53:11 +03:00
m . Group ( "/subscription" , func ( ) {
m . Get ( "" , user . IsWatching )
m . Put ( "" , user . Watch )
m . Delete ( "" , user . Unwatch )
2016-12-29 16:17:32 +03:00
} )
2016-12-31 19:51:22 +03:00
m . Group ( "/releases" , func ( ) {
m . Combo ( "" ) . Get ( repo . ListReleases ) .
Post ( bind ( api . CreateReleaseOption { } ) , repo . CreateRelease )
m . Combo ( "/:id" ) . Get ( repo . GetRelease ) .
Patch ( bind ( api . EditReleaseOption { } ) , repo . EditRelease ) .
Delete ( repo . DeleteRelease )
} )
2017-04-19 14:09:49 +03:00
m . Post ( "/mirror-sync" , repo . MirrorSync )
2016-08-31 02:18:40 +03:00
m . Get ( "/editorconfig/:filename" , context . RepoRef ( ) , repo . GetEditorconfig )
2016-12-02 14:10:39 +03:00
m . Group ( "/pulls" , func ( ) {
m . Combo ( "" ) . Get ( bind ( api . ListPullRequestsOptions { } ) , repo . ListPullRequests ) . Post ( reqRepoWriter ( ) , bind ( api . CreatePullRequestOption { } ) , repo . CreatePullRequest )
m . Group ( "/:index" , func ( ) {
m . Combo ( "" ) . Get ( repo . GetPullRequest ) . Patch ( reqRepoWriter ( ) , bind ( api . EditPullRequestOption { } ) , repo . EditPullRequest )
m . Combo ( "/merge" ) . Get ( repo . IsPullRequestMerged ) . Post ( reqRepoWriter ( ) , repo . MergePullRequest )
} )
} , mustAllowPulls , context . ReferencesGitRepo ( ) )
2016-08-05 03:08:01 +03:00
} , repoAssignment ( ) )
} , reqToken ( ) )
2015-12-05 01:16:42 +03:00
2015-12-17 10:28:47 +03:00
// Organizations
2016-08-05 03:08:01 +03:00
m . Get ( "/user/orgs" , reqToken ( ) , org . ListMyOrgs )
2015-12-17 10:28:47 +03:00
m . Get ( "/users/:username/orgs" , org . ListUserOrgs )
2016-03-21 19:53:04 +03:00
m . Group ( "/orgs/:orgname" , func ( ) {
2017-01-26 14:54:04 +03:00
m . Combo ( "" ) . Get ( org . Get ) .
Patch ( reqOrgOwnership ( ) , bind ( api . EditOrgOption { } ) , org . Edit )
2017-01-20 05:31:46 +03:00
m . Group ( "/members" , func ( ) {
m . Get ( "" , org . ListMembers )
2017-01-26 14:54:04 +03:00
m . Combo ( "/:username" ) . Get ( org . IsMember ) .
Delete ( reqOrgOwnership ( ) , org . DeleteMember )
2017-01-20 05:31:46 +03:00
} )
m . Group ( "/public_members" , func ( ) {
m . Get ( "" , org . ListPublicMembers )
m . Combo ( "/:username" ) . Get ( org . IsPublicMember ) .
2017-01-26 14:54:04 +03:00
Put ( reqOrgMembership ( ) , org . PublicizeMember ) .
Delete ( reqOrgMembership ( ) , org . ConcealMember )
2017-01-20 05:31:46 +03:00
} )
2017-01-26 14:54:04 +03:00
m . Combo ( "/teams" , reqOrgMembership ( ) ) . Get ( org . ListTeams ) .
2017-01-20 16:47:09 +03:00
Post ( bind ( api . CreateTeamOption { } ) , org . CreateTeam )
2016-12-07 07:36:28 +03:00
m . Group ( "/hooks" , func ( ) {
m . Combo ( "" ) . Get ( org . ListHooks ) .
Post ( bind ( api . CreateHookOption { } ) , org . CreateHook )
m . Combo ( "/:id" ) . Get ( org . GetHook ) .
2017-01-14 05:14:48 +03:00
Patch ( reqOrgOwnership ( ) , bind ( api . EditHookOption { } ) , org . EditHook ) .
Delete ( reqOrgOwnership ( ) , org . DeleteHook )
} , reqOrgMembership ( ) )
2016-08-05 03:08:01 +03:00
} , orgAssignment ( true ) )
2016-12-28 04:36:04 +03:00
m . Group ( "/teams/:teamid" , func ( ) {
2017-01-20 08:16:10 +03:00
m . Combo ( "" ) . Get ( org . GetTeam ) .
2017-01-26 14:54:04 +03:00
Patch ( reqOrgOwnership ( ) , bind ( api . EditTeamOption { } ) , org . EditTeam ) .
Delete ( reqOrgOwnership ( ) , org . DeleteTeam )
2017-01-20 08:16:10 +03:00
m . Group ( "/members" , func ( ) {
m . Get ( "" , org . GetTeamMembers )
2017-01-26 14:54:04 +03:00
m . Combo ( "/:username" ) .
Put ( reqOrgOwnership ( ) , org . AddTeamMember ) .
Delete ( reqOrgOwnership ( ) , org . RemoveTeamMember )
2017-01-20 08:16:10 +03:00
} )
m . Group ( "/repos" , func ( ) {
m . Get ( "" , org . GetTeamRepos )
2017-01-26 14:54:04 +03:00
m . Combo ( ":orgname/:reponame" ) .
Put ( org . AddTeamRepository ) .
Delete ( org . RemoveTeamRepository )
2017-01-20 08:16:10 +03:00
} )
2017-01-26 14:54:04 +03:00
} , reqOrgMembership ( ) , orgAssignment ( false , true ) )
2015-12-17 10:28:47 +03:00
2016-03-11 19:56:52 +03:00
m . Any ( "/*" , func ( ctx * context . Context ) {
2015-12-05 01:16:42 +03:00
ctx . Error ( 404 )
} )
2015-12-06 01:13:13 +03:00
m . Group ( "/admin" , func ( ) {
m . Group ( "/users" , func ( ) {
m . Post ( "" , bind ( api . CreateUserOption { } ) , admin . CreateUser )
m . Group ( "/:username" , func ( ) {
m . Combo ( "" ) . Patch ( bind ( api . EditUserOption { } ) , admin . EditUser ) .
Delete ( admin . DeleteUser )
2016-01-08 03:49:03 +03:00
m . Post ( "/keys" , bind ( api . CreateKeyOption { } ) , admin . CreatePublicKey )
2015-12-17 10:28:47 +03:00
m . Post ( "/orgs" , bind ( api . CreateOrgOption { } ) , admin . CreateOrg )
2015-12-18 06:57:41 +03:00
m . Post ( "/repos" , bind ( api . CreateRepoOption { } ) , admin . CreateRepo )
2015-12-06 01:13:13 +03:00
} )
} )
2016-08-05 03:08:01 +03:00
} , reqAdmin ( ) )
2016-03-14 01:49:16 +03:00
} , context . APIContexter ( ) )
2015-12-05 01:16:42 +03:00
}