/
api_login_required.go
50 lines (40 loc) · 1.16 KB
/
api_login_required.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
package api
import (
"strings"
pttbbsapi "github.com/Ptt-official-app/go-pttbbs/api"
"github.com/Ptt-official-app/go-pttbbs/bbs"
"github.com/gin-gonic/gin"
)
func LoginRequiredJSON(theFunc LoginRequiredAPIFunc, params interface{}, c *gin.Context) {
err := c.ShouldBindJSON(params)
if err != nil {
processResult(c, nil, 400, err, "")
return
}
loginRequiredProcess(theFunc, params, c)
}
func LoginRequiredQuery(theFunc LoginRequiredAPIFunc, params interface{}, c *gin.Context) {
err := c.ShouldBindQuery(params)
if err != nil {
processResult(c, nil, 400, err, "")
return
}
loginRequiredProcess(theFunc, params, c)
}
func loginRequiredProcess(theFunc LoginRequiredAPIFunc, params interface{}, c *gin.Context) {
remoteAddr := strings.TrimSpace(c.ClientIP())
if !isValidRemoteAddr(remoteAddr) {
processResult(c, nil, 403, ErrInvalidRemoteAddr, "")
return
}
if !isValidOriginReferer(c) {
processResult(c, nil, 403, ErrInvalidOrigin, "")
return
}
userID, err := verifyJwt(c)
if err != nil {
userID = bbs.UUserID(pttbbsapi.GUEST)
}
result, statusCode, err := theFunc(remoteAddr, userID, params, c)
processResult(c, result, statusCode, err, userID)
}