/
user.go
66 lines (54 loc) · 1.48 KB
/
user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package server
import (
"net/http"
"strconv"
"github.com/keys-pub/keys"
"github.com/keys-pub/keys/user"
"github.com/keys-pub/keysd/http/api"
"github.com/labstack/echo/v4"
"github.com/pkg/errors"
)
func (s *Server) getUserSearch(c echo.Context) error {
s.logger.Infof("Server %s %s", c.Request().Method, c.Request().URL.String())
ctx := c.Request().Context()
q := c.QueryParam("q")
plimit := c.QueryParam("limit")
if plimit == "" {
plimit = "100"
}
limit, err := strconv.Atoi(plimit)
if err != nil {
return ErrBadRequest(c, errors.Wrapf(err, "invalid limit"))
}
results, err := s.users.Search(ctx, &user.SearchRequest{Query: q, Limit: limit})
if err != nil {
return s.internalError(c, err)
}
users := make([]*api.User, 0, len(results))
for _, res := range results {
users = append(users, api.UserFromResult(res.Result))
}
resp := api.UserSearchResponse{
Users: users,
}
return JSON(c, http.StatusOK, resp)
}
func (s *Server) getUser(c echo.Context) error {
s.logger.Infof("Server %s %s", c.Request().Method, c.Request().URL.String())
ctx := c.Request().Context()
kid, err := keys.ParseID(c.Param("kid"))
if err != nil {
return ErrNotFound(c, errors.Errorf("kid not found"))
}
userResult, err := s.users.Get(ctx, kid)
if err != nil {
return s.internalError(c, err)
}
if userResult == nil {
return ErrNotFound(c, errors.Errorf("user not found"))
}
resp := api.UserResponse{
User: api.UserFromResult(userResult),
}
return JSON(c, http.StatusOK, resp)
}