Browse Source

more APIs on #12

tags/v0.9.99
Unknwon 9 years ago
parent
commit
37d8d3afe9

+ 0
- 6
.drone.yml View File

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

+ 9
- 1
cmd/web.go 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)

+ 1
- 1
gogs.go 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())

+ 9
- 9
modules/auth/auth.go 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 {

+ 9
- 0
modules/middleware/auth.go 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
}
}
}

+ 4
- 3
modules/middleware/context.go View File

@@ -34,8 +34,9 @@ type Context struct {
Flash *session.Flash
Session session.Store

User *models.User
IsSigned bool
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

+ 15
- 3
routers/api/v1/repo_hooks.go 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 {

routers/api/v1/users.go → routers/api/v1/user.go 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()})
}

+ 45
- 0
routers/api/v1/user_app.go 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})
}

+ 1
- 1
templates/.VERSION View File

@@ -1 +1 @@
0.5.8.1117 Beta
0.5.8.1118 Beta

Loading…
Cancel
Save