more APIs on #12
This commit is contained in:
		
					parent
					
						
							
								db0026c507
							
						
					
				
			
			
				commit
				
					
						37d8d3afe9
					
				
			
		
					 10 changed files with 108 additions and 24 deletions
				
			
		| 
						 | 
					@ -1,6 +0,0 @@
 | 
				
			||||||
image: go1.3
 | 
					 | 
				
			||||||
env:
 | 
					 | 
				
			||||||
  - GOPATH=/var/cache/drone
 | 
					 | 
				
			||||||
script:
 | 
					 | 
				
			||||||
  - go get -u -v
 | 
					 | 
				
			||||||
  - go build -v
 | 
					 | 
				
			||||||
| 
						 | 
					@ -172,6 +172,14 @@ func runWeb(*cli.Context) {
 | 
				
			||||||
			// Users.
 | 
								// Users.
 | 
				
			||||||
			m.Group("/users", func() {
 | 
								m.Group("/users", func() {
 | 
				
			||||||
				m.Get("/search", v1.SearchUsers)
 | 
									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.
 | 
								// Repositories.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								gogs.go
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
										
									
									
									
								
							| 
						 | 
					@ -17,7 +17,7 @@ import (
 | 
				
			||||||
	"github.com/gogits/gogs/modules/setting"
 | 
						"github.com/gogits/gogs/modules/setting"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const APP_VER = "0.5.8.1117 Beta"
 | 
					const APP_VER = "0.5.8.1118 Beta"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	runtime.GOMAXPROCS(runtime.NumCPU())
 | 
						runtime.GOMAXPROCS(runtime.NumCPU())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,9 +60,9 @@ func SignedInId(req *http.Request, sess session.Store) int64 {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SignedInUser returns the user object of signed user.
 | 
					// 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 {
 | 
						if !models.HasEngine {
 | 
				
			||||||
		return nil
 | 
							return nil, false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uid := SignedInId(req, sess)
 | 
						uid := SignedInId(req, sess)
 | 
				
			||||||
| 
						 | 
					@ -76,9 +76,9 @@ func SignedInUser(req *http.Request, sess session.Store) *models.User {
 | 
				
			||||||
					if err != models.ErrUserNotExist {
 | 
										if err != models.ErrUserNotExist {
 | 
				
			||||||
						log.Error(4, "GetUserByName: %v", err)
 | 
											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 {
 | 
										if err != models.ErrUserNotExist {
 | 
				
			||||||
						log.Error(4, "GetUserByName: %v", err)
 | 
											log.Error(4, "GetUserByName: %v", err)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					return nil
 | 
										return nil, false
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if u.ValidtePassword(passwd) {
 | 
									if u.ValidtePassword(passwd) {
 | 
				
			||||||
					return u
 | 
										return u, true
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return nil
 | 
							return nil, false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	u, err := models.GetUserById(uid)
 | 
						u, err := models.GetUserById(uid)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error(4, "GetUserById: %v", err)
 | 
							log.Error(4, "GetUserById: %v", err)
 | 
				
			||||||
		return nil
 | 
							return nil, false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return u
 | 
						return u, false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Form interface {
 | 
					type Form interface {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,3 +76,12 @@ func ApiReqToken() macaron.Handler {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ApiReqBasicAuth() macaron.Handler {
 | 
				
			||||||
 | 
						return func(ctx *Context) {
 | 
				
			||||||
 | 
							if !ctx.IsBasicAuth {
 | 
				
			||||||
 | 
								ctx.Error(403)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@ type Context struct {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	User        *models.User
 | 
						User        *models.User
 | 
				
			||||||
	IsSigned    bool
 | 
						IsSigned    bool
 | 
				
			||||||
 | 
						IsBasicAuth bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Repo struct {
 | 
						Repo struct {
 | 
				
			||||||
		IsOwner     bool
 | 
							IsOwner     bool
 | 
				
			||||||
| 
						 | 
					@ -172,7 +173,7 @@ func Contexter() macaron.Handler {
 | 
				
			||||||
		ctx.Data["PageStartTime"] = time.Now()
 | 
							ctx.Data["PageStartTime"] = time.Now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Get user from session if logined.
 | 
							// 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 {
 | 
							if ctx.User != nil {
 | 
				
			||||||
			ctx.IsSigned = true
 | 
								ctx.IsSigned = true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,9 +107,21 @@ func CreateRepoHook(ctx *middleware.Context, form CreateRepoHookForm) {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.JSON(201, map[string]interface{}{
 | 
						apiHook := &api.Hook{
 | 
				
			||||||
		"ok": true,
 | 
							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 {
 | 
					type EditRepoHookForm struct {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,7 @@ import (
 | 
				
			||||||
	api "github.com/gogits/go-gogs-client"
 | 
						api "github.com/gogits/go-gogs-client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/gogits/gogs/models"
 | 
						"github.com/gogits/gogs/models"
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/modules/base"
 | 
				
			||||||
	"github.com/gogits/gogs/modules/middleware"
 | 
						"github.com/gogits/gogs/modules/middleware"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,3 +45,17 @@ func SearchUsers(ctx *middleware.Context) {
 | 
				
			||||||
		"data": results,
 | 
							"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
									
								
								routers/api/v1/user_app.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								routers/api/v1/user_app.go
									
										
									
									
									
										Normal 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 @@
 | 
				
			||||||
0.5.8.1117 Beta
 | 
					0.5.8.1118 Beta
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue