@@ -35,7 +35,7 @@ func main() { | |||
CmdWeb, | |||
CmdServ, | |||
CmdUpdate, | |||
CmdFix, | |||
// CmdFix, | |||
} | |||
app.Flags = append(app.Flags, []cli.Flag{}...) | |||
app.Run(os.Args) |
@@ -70,12 +70,7 @@ func CreateIssue(userId, repoId, milestoneId, assigneeId int64, issueCount int, | |||
return nil, err | |||
} | |||
if err = sess.Commit(); err != nil { | |||
//sess.Rollback() | |||
return nil, err | |||
} | |||
return issue, nil | |||
return issue, sess.Commit() | |||
} | |||
// GetIssueById returns issue object by given id. |
@@ -409,6 +409,25 @@ func GetUserByEmail(email string) (*User, error) { | |||
return user, nil | |||
} | |||
// SearchUserByName returns given number of users whose name contains keyword. | |||
func SearchUserByName(key string, limit int) (us []*User, err error) { | |||
// Prevent SQL inject. | |||
key = strings.TrimSpace(key) | |||
if len(key) == 0 { | |||
return us, nil | |||
} | |||
key = strings.Split(key, " ")[0] | |||
if len(key) == 0 { | |||
return us, nil | |||
} | |||
key = strings.ToLower(key) | |||
us = make([]*User, 0, limit) | |||
err = orm.Limit(limit).Where("lower_name like '%" + key + "%'").Find(&us) | |||
return us, err | |||
} | |||
// LoginUserPlain validates user by raw user name and password. | |||
func LoginUserPlain(uname, passwd string) (*User, error) { | |||
var u *User |
@@ -0,0 +1,40 @@ | |||
// 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/gogits/gogs/models" | |||
"github.com/gogits/gogs/modules/base" | |||
"github.com/gogits/gogs/modules/middleware" | |||
) | |||
type user struct { | |||
UserName string `json:"username"` | |||
AvatarLink string `json:"avatar"` | |||
} | |||
func SearchUser(ctx *middleware.Context) { | |||
q := ctx.Query("q") | |||
limit, err := base.StrTo(ctx.Query("limit")).Int() | |||
if err != nil { | |||
limit = 10 | |||
} | |||
us, err := models.SearchUserByName(q, limit) | |||
if err != nil { | |||
ctx.JSON(500, nil) | |||
return | |||
} | |||
results := make([]*user, len(us)) | |||
for i := range us { | |||
results[i] = &user{us[i].Name, us[i].AvatarLink()} | |||
} | |||
ctx.Render.JSON(200, map[string]interface{}{ | |||
"ok": true, | |||
"data": results, | |||
}) | |||
} |
@@ -10,12 +10,12 @@ | |||
</p> | |||
</div> | |||
<div class="col-md-1" style="margin: -5px;"> | |||
<div class="col-md-2" style="margin: -5px;"> | |||
<a target="_blank" href="https://github.com/gogits/gogs"><i class="fa fa-github fa-2x"></i></a> | |||
</div> | |||
<div class="col-md-5"> | |||
<p class="desc"></p> | |||
<div class="col-md-4"> | |||
<p class="desc"><a href="http://gogits.org">Official Website</a></p> | |||
</div> | |||
</div> | |||
</div> |
@@ -75,7 +75,11 @@ func runWeb(*cli.Context) { | |||
m.Get("/help", routers.Help) | |||
m.Group("/api/v1", func(r martini.Router) { | |||
// Miscellaneous. | |||
r.Post("/markdown", v1.Markdown) | |||
// Users. | |||
r.Get("/users/search", v1.SearchUser) | |||
}) | |||
avt := avatar.CacheServer("public/img/avatar/", "public/img/avatar_default.jpg") |