/
route_session.go
67 lines (59 loc) · 1.48 KB
/
route_session.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
67
package user
import (
"github.com/labstack/echo/v4"
"net/http"
"strings"
"xorkevin.dev/governor"
"xorkevin.dev/governor/service/user/gate"
)
//go:generate forge validation -o validation_session_gen.go reqUserRmSessions
func (r *router) getSessions(c echo.Context) error {
req := reqUserGetID{
Userid: c.Get("userid").(string),
}
if err := req.valid(); err != nil {
return err
}
res, err := r.s.GetUserSessions(req.Userid)
if err != nil {
return err
}
return c.JSON(http.StatusOK, res)
}
type (
reqUserRmSessions struct {
Userid string `valid:"userid,has" json:"-"`
SessionIDs []string `valid:"sessionIDs" json:"session_ids"`
}
)
func (r *reqUserRmSessions) validUserid() error {
for _, i := range r.SessionIDs {
j := strings.SplitN(i, "|", 2)
if r.Userid != j[0] {
return governor.NewErrorUser("Invalid session ids", http.StatusForbidden, nil)
}
}
return nil
}
func (r *router) killSessions(c echo.Context) error {
req := reqUserRmSessions{}
if err := c.Bind(&req); err != nil {
return err
}
req.Userid = c.Get("userid").(string)
if err := req.valid(); err != nil {
return err
}
if err := req.validUserid(); err != nil {
return err
}
if err := r.s.KillSessions(req.SessionIDs); err != nil {
return err
}
return c.NoContent(http.StatusNoContent)
}
func (r *router) mountSession(debugMode bool, g *echo.Group) error {
g.GET("/sessions", r.getSessions, gate.User(r.s.gate))
g.DELETE("/sessions", r.killSessions, gate.User(r.s.gate))
return nil
}