more APIs on #12

This commit is contained in:
Unknwon 2014-11-18 11:07:16 -05:00
parent db0026c507
commit 37d8d3afe9
10 changed files with 108 additions and 24 deletions

View File

@ -1,6 +0,0 @@
image: go1.3
env:
- GOPATH=/var/cache/drone
script:
- go get -u -v
- go build -v

View File

@ -172,6 +172,14 @@ func runWeb(*cli.Context) {
// Users.
m.Group("/users", func() {
m.Get("/search", v1.SearchUsers)
m.Group("/:username", func() {
m.Get("", v1.GetUserInfo)
m.Group("/tokens", func() {
m.Combo("").Get(v1.ListAccessTokens).Post(bind(v1.CreateAccessTokenForm{}), v1.CreateAccessToken)
}, middleware.ApiReqBasicAuth())
})
})
// Repositories.
@ -388,7 +396,7 @@ func runWeb(*cli.Context) {
m.Get("/archive/*", repo.Download)
m.Get("/issues2/", repo.Issues2)
m.Get("/pulls2/", repo.PullRequest2)
m.Get("/labels2/",repo.Labels2)
m.Get("/labels2/", repo.Labels2)
m.Group("", func() {
m.Get("/src/*", repo.Home)

View File

@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
const APP_VER = "0.5.8.1117 Beta"
const APP_VER = "0.5.8.1118 Beta"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())

View File

@ -60,9 +60,9 @@ func SignedInId(req *http.Request, sess session.Store) int64 {
}
// SignedInUser returns the user object of signed user.
func SignedInUser(req *http.Request, sess session.Store) *models.User {
func SignedInUser(req *http.Request, sess session.Store) (*models.User, bool) {
if !models.HasEngine {
return nil
return nil, false
}
uid := SignedInId(req, sess)
@ -76,9 +76,9 @@ func SignedInUser(req *http.Request, sess session.Store) *models.User {
if err != models.ErrUserNotExist {
log.Error(4, "GetUserByName: %v", err)
}
return nil
return nil, false
}
return u
return u, false
}
}
@ -93,23 +93,23 @@ func SignedInUser(req *http.Request, sess session.Store) *models.User {
if err != models.ErrUserNotExist {
log.Error(4, "GetUserByName: %v", err)
}
return nil
return nil, false
}
if u.ValidtePassword(passwd) {
return u
return u, true
}
}
}
return nil
return nil, false
}
u, err := models.GetUserById(uid)
if err != nil {
log.Error(4, "GetUserById: %v", err)
return nil
return nil, false
}
return u
return u, false
}
type Form interface {

View File

@ -76,3 +76,12 @@ func ApiReqToken() macaron.Handler {
}
}
}
func ApiReqBasicAuth() macaron.Handler {
return func(ctx *Context) {
if !ctx.IsBasicAuth {
ctx.Error(403)
return
}
}
}

View File

@ -36,6 +36,7 @@ type Context struct {
User *models.User
IsSigned bool
IsBasicAuth bool
Repo struct {
IsOwner bool
@ -172,7 +173,7 @@ func Contexter() macaron.Handler {
ctx.Data["PageStartTime"] = time.Now()
// Get user from session if logined.
ctx.User = auth.SignedInUser(ctx.Req.Request, ctx.Session)
ctx.User, ctx.IsBasicAuth = auth.SignedInUser(ctx.Req.Request, ctx.Session)
if ctx.User != nil {
ctx.IsSigned = true

View File

@ -107,9 +107,21 @@ func CreateRepoHook(ctx *middleware.Context, form CreateRepoHookForm) {
return
}
ctx.JSON(201, map[string]interface{}{
"ok": true,
})
apiHook := &api.Hook{
Id: w.Id,
Type: w.HookTaskType.Name(),
Events: []string{"push"},
Active: w.IsActive,
Config: map[string]string{
"url": w.Url,
"content_type": w.ContentType.Name(),
},
}
if w.HookTaskType == models.SLACK {
s := w.GetSlackHook()
apiHook.Config["channel"] = s.Channel
}
ctx.JSON(201, apiHook)
}
type EditRepoHookForm struct {

View File

@ -10,6 +10,7 @@ import (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware"
)
@ -44,3 +45,17 @@ func SearchUsers(ctx *middleware.Context) {
"data": results,
})
}
// GET /users/:username
func GetUserInfo(ctx *middleware.Context) {
u, err := models.GetUserByName(ctx.Params(":username"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Error(404)
} else {
ctx.JSON(500, &base.ApiJsonErr{"GetUserByName: " + err.Error(), base.DOC_URL})
}
return
}
ctx.JSON(200, &api.User{u.Id, u.Name, u.FullName, u.Email, u.AvatarLink()})
}

View File

@ -0,0 +1,45 @@
// Copyright 2014 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 (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware"
)
// GET /users/:username/tokens
func ListAccessTokens(ctx *middleware.Context) {
tokens, err := models.ListAccessTokens(ctx.User.Id)
if err != nil {
ctx.JSON(500, &base.ApiJsonErr{"ListAccessTokens: " + err.Error(), base.DOC_URL})
return
}
apiTokens := make([]*api.AccessToken, len(tokens))
for i := range tokens {
apiTokens[i] = &api.AccessToken{tokens[i].Name, tokens[i].Sha1}
}
ctx.JSON(200, &apiTokens)
}
type CreateAccessTokenForm struct {
Name string `json:"name" binding:"Required"`
}
// POST /users/:username/tokens
func CreateAccessToken(ctx *middleware.Context, form CreateAccessTokenForm) {
t := &models.AccessToken{
Uid: ctx.User.Id,
Name: form.Name,
}
if err := models.NewAccessToken(t); err != nil {
ctx.JSON(500, &base.ApiJsonErr{"NewAccessToken: " + err.Error(), base.DOC_URL})
return
}
ctx.JSON(201, &api.AccessToken{t.Name, t.Sha1})
}

View File

@ -1 +1 @@
0.5.8.1117 Beta
0.5.8.1118 Beta