/
sessions.go
68 lines (56 loc) · 1.67 KB
/
sessions.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
68
package router
import (
"github.com/labstack/echo"
"github.com/traPtitech/traQ/sessions"
"net/http"
"time"
)
// GetMySessions GET /users/me/sessions
func GetMySessions(c echo.Context) error {
userID := getRequestUserID(c)
ses, err := sessions.GetByUserID(userID)
if err != nil {
c.Logger().Error(err)
return echo.NewHTTPError(http.StatusInternalServerError)
}
type response struct {
ID string `json:"id"`
LastIP string `json:"lastIP"`
LastUserAgent string `json:"lastUserAgent"`
LastAccess time.Time `json:"lastAccess"`
CreatedAt time.Time `json:"createdAt"`
}
res := make([]response, len(ses))
for k, v := range ses {
referenceID, created, lastAccess, lastIP, lastUserAgent := v.GetSessionInfo()
res[k] = response{
ID: referenceID.String(),
LastIP: lastIP,
LastUserAgent: lastUserAgent,
LastAccess: lastAccess,
CreatedAt: created,
}
}
return c.JSON(http.StatusOK, res)
}
// DeleteAllMySessions DELETE /users/me/sessions
func DeleteAllMySessions(c echo.Context) error {
userID := getRequestUserID(c)
err := sessions.DestroyByUserID(userID)
if err != nil {
c.Logger().Error(err)
return echo.NewHTTPError(http.StatusInternalServerError)
}
return c.NoContent(http.StatusNoContent)
}
// DeleteMySession DELETE /users/me/sessions/:referenceID
func DeleteMySession(c echo.Context) error {
userID := getRequestUserID(c)
referenceID := getRequestParamAsUUID(c, paramReferenceID)
err := sessions.DestroyByReferenceID(userID, referenceID)
if err != nil {
c.Logger().Error(err)
return echo.NewHTTPError(http.StatusInternalServerError)
}
return c.NoContent(http.StatusNoContent)
}