]> source.dussan.org Git - gitea.git/commitdiff
more APIs on #12
authorUnknwon <joe2010xtmf@163.com>
Tue, 18 Nov 2014 16:07:16 +0000 (11:07 -0500)
committerUnknwon <joe2010xtmf@163.com>
Tue, 18 Nov 2014 16:07:16 +0000 (11:07 -0500)
.drone.yml [deleted file]
cmd/web.go
gogs.go
modules/auth/auth.go
modules/middleware/auth.go
modules/middleware/context.go
routers/api/v1/repo_hooks.go
routers/api/v1/user.go [new file with mode: 0644]
routers/api/v1/user_app.go [new file with mode: 0644]
routers/api/v1/users.go [deleted file]
templates/.VERSION

diff --git a/.drone.yml b/.drone.yml
deleted file mode 100644 (file)
index 8b0e0bc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-image: go1.3
-env:
-  - GOPATH=/var/cache/drone
-script:
-  - go get -u -v
-  - go build -v
\ No newline at end of file
index 5b81537f7967eb518fbfe7d5f3b19a0062e8d118..de222d6faeebac491557deacbc296f2397a09711 100644 (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)
diff --git a/gogs.go b/gogs.go
index e432295555b891cc6b5d09694ddc0fea0d298da4..fc2ba8f4bc813bace86790e706938b14daa48f79 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -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())
index da89c20c1ba238566d20c149c3965363344c97f4..302620dbc84892643f16e9c4f098bd95e70d5c52 100644 (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 {
index 8388d2b25e07919fb1cd99119dda6e21bba66ee9..fc8e94bbd0db20d9fda545160bcf9e78ff841fa0 100644 (file)
@@ -76,3 +76,12 @@ func ApiReqToken() macaron.Handler {
                }
        }
 }
+
+func ApiReqBasicAuth() macaron.Handler {
+       return func(ctx *Context) {
+               if !ctx.IsBasicAuth {
+                       ctx.Error(403)
+                       return
+               }
+       }
+}
index cbc0b0cf3cd04197d09d5125a2737ea52b7a49b3..fb33c48e0e9931dcc88c64588cbdb11d527172c9 100644 (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
index 49bf8e467922709c0f416bb95f1e8f0ed36bbc8c..5dddbc5a3d93d5334e80a2e02ae0a24afcc82f51 100644 (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 {
diff --git a/routers/api/v1/user.go b/routers/api/v1/user.go
new file mode 100644 (file)
index 0000000..2b41ada
--- /dev/null
@@ -0,0 +1,61 @@
+// 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 (
+       "github.com/Unknwon/com"
+
+       api "github.com/gogits/go-gogs-client"
+
+       "github.com/gogits/gogs/models"
+       "github.com/gogits/gogs/modules/base"
+       "github.com/gogits/gogs/modules/middleware"
+)
+
+func SearchUsers(ctx *middleware.Context) {
+       opt := models.SearchOption{
+               Keyword: ctx.Query("q"),
+               Limit:   com.StrTo(ctx.Query("limit")).MustInt(),
+       }
+       if opt.Limit == 0 {
+               opt.Limit = 10
+       }
+
+       us, err := models.SearchUserByName(opt)
+       if err != nil {
+               ctx.JSON(500, map[string]interface{}{
+                       "ok":    false,
+                       "error": err.Error(),
+               })
+               return
+       }
+
+       results := make([]*api.User, len(us))
+       for i := range us {
+               results[i] = &api.User{
+                       UserName:  us[i].Name,
+                       AvatarUrl: us[i].AvatarLink(),
+               }
+       }
+
+       ctx.Render.JSON(200, map[string]interface{}{
+               "ok":   true,
+               "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()})
+}
diff --git a/routers/api/v1/user_app.go b/routers/api/v1/user_app.go
new file mode 100644 (file)
index 0000000..31da8a3
--- /dev/null
@@ -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})
+}
diff --git a/routers/api/v1/users.go b/routers/api/v1/users.go
deleted file mode 100644 (file)
index e0f51ca..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// 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 (
-       "github.com/Unknwon/com"
-
-       api "github.com/gogits/go-gogs-client"
-
-       "github.com/gogits/gogs/models"
-       "github.com/gogits/gogs/modules/middleware"
-)
-
-func SearchUsers(ctx *middleware.Context) {
-       opt := models.SearchOption{
-               Keyword: ctx.Query("q"),
-               Limit:   com.StrTo(ctx.Query("limit")).MustInt(),
-       }
-       if opt.Limit == 0 {
-               opt.Limit = 10
-       }
-
-       us, err := models.SearchUserByName(opt)
-       if err != nil {
-               ctx.JSON(500, map[string]interface{}{
-                       "ok":    false,
-                       "error": err.Error(),
-               })
-               return
-       }
-
-       results := make([]*api.User, len(us))
-       for i := range us {
-               results[i] = &api.User{
-                       UserName:  us[i].Name,
-                       AvatarUrl: us[i].AvatarLink(),
-               }
-       }
-
-       ctx.Render.JSON(200, map[string]interface{}{
-               "ok":   true,
-               "data": results,
-       })
-}
index 43806b4f3a325266c1aa17529601dffc2b274791..d368ef39900366060e84d6a4a706f991b139c48c 100644 (file)
@@ -1 +1 @@
-0.5.8.1117 Beta
\ No newline at end of file
+0.5.8.1118 Beta
\ No newline at end of file