Add user lookup (search for user with only initial part of their username)
This commit is contained in:
parent
35fb27e3c1
commit
42437bde44
|
@ -32,6 +32,7 @@ func Start(conf common.Conf, db *sql.DB) *gin.Engine {
|
||||||
gv1.GET("/users/whatid", Method(v1.UserWhatsTheIDGET, db, common.PrivilegeRead))
|
gv1.GET("/users/whatid", Method(v1.UserWhatsTheIDGET, db, common.PrivilegeRead))
|
||||||
gv1.GET("/users/full", Method(v1.UserFullGET, db, common.PrivilegeRead))
|
gv1.GET("/users/full", Method(v1.UserFullGET, db, common.PrivilegeRead))
|
||||||
gv1.GET("/users/userpage", Method(v1.UserUserpageGET, db, common.PrivilegeRead))
|
gv1.GET("/users/userpage", Method(v1.UserUserpageGET, db, common.PrivilegeRead))
|
||||||
|
gv1.GET("/users/lookup", Method(v1.UserLookupGET, db, common.PrivilegeRead))
|
||||||
gv1.GET("/badges", Method(v1.BadgesGET, db, common.PrivilegeRead))
|
gv1.GET("/badges", Method(v1.BadgesGET, db, common.PrivilegeRead))
|
||||||
|
|
||||||
// ReadConfidential privilege required
|
// ReadConfidential privilege required
|
||||||
|
|
|
@ -275,3 +275,44 @@ func whereClauseUser(md common.MethodData, tableName string) (*common.CodeMessag
|
||||||
a := common.SimpleResponse(400, "you need to pass either querystring parameters name or id")
|
a := common.SimpleResponse(400, "you need to pass either querystring parameters name or id")
|
||||||
return &a, "", nil
|
return &a, "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type userLookupResponse struct {
|
||||||
|
common.ResponseBase
|
||||||
|
Users []lookupUser `json:"users"`
|
||||||
|
}
|
||||||
|
type lookupUser struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserLookupGET does a quick lookup of users beginning with the passed
|
||||||
|
// querystring value name.
|
||||||
|
func UserLookupGET(md common.MethodData) common.CodeMessager {
|
||||||
|
name := strings.NewReplacer(
|
||||||
|
"%", "\\%",
|
||||||
|
"_", "\\_",
|
||||||
|
).Replace(md.C.Query("name"))
|
||||||
|
if name == "" {
|
||||||
|
return common.SimpleResponse(400, "please provide an username to start searching")
|
||||||
|
}
|
||||||
|
name += "%"
|
||||||
|
rows, err := md.DB.Query("SELECT users.id, users.username FROM users WHERE username LIKE ? AND allowed = '1' LIMIT 25", name)
|
||||||
|
if err != nil {
|
||||||
|
md.Err(err)
|
||||||
|
return Err500
|
||||||
|
}
|
||||||
|
|
||||||
|
var r userLookupResponse
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
var l lookupUser
|
||||||
|
err := rows.Scan(&l.ID, &l.Username)
|
||||||
|
if err != nil {
|
||||||
|
continue // can't be bothered to handle properly
|
||||||
|
}
|
||||||
|
r.Users = append(r.Users, l)
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Code = 200
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user