forked from open-falcon/falcon-plus
/
session.go
99 lines (89 loc) · 2.03 KB
/
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package helper
import (
"errors"
"encoding/json"
log "github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/open-falcon/falcon-plus/modules/api/app/model/uic"
"github.com/open-falcon/falcon-plus/modules/api/config"
"github.com/spf13/viper"
)
type WebSession struct {
Name string
Sig string
}
func GetSession(c *gin.Context) (session WebSession, err error) {
var name, sig string
apiToken := c.Request.Header.Get("Apitoken")
if apiToken == "" {
err = errors.New("token key is not set")
return
}
log.Debugf("header: %v, apiToken: %v", c.Request.Header, apiToken)
var websession WebSession
err = json.Unmarshal([]byte(apiToken), &websession)
if err != nil {
return
}
name = websession.Name
log.Debugf("session got name: %s", name)
if name == "" {
err = errors.New("token key:name is empty")
return
}
sig = websession.Sig
log.Debugf("session got sig: %s", sig)
if sig == "" {
err = errors.New("token key:sig is empty")
return
}
if err != nil {
return
}
session = WebSession{name, sig}
return
}
func SessionChecking(c *gin.Context) (auth bool, err error) {
auth = false
var websessio WebSession
websessio, err = GetSession(c)
if err != nil {
return
}
//default_token used in server side access
default_token := viper.GetString("default_token")
if default_token != "" && websessio.Sig == default_token {
auth = true
return
}
db := config.Con().Uic
var user uic.User
db.Where("name = ?", websessio.Name).Find(&user)
if user.ID == 0 {
err = errors.New("not found this user")
return
}
var session uic.Session
db.Table("session").Where("sig = ? and uid = ?", websessio.Sig, user.ID).Scan(&session)
if session.ID == 0 {
err = errors.New("session not found")
return
} else {
auth = true
}
return
}
func GetUser(c *gin.Context) (user uic.User, err error) {
db := config.Con().Uic
websession, getserr := GetSession(c)
if getserr != nil {
err = getserr
return
}
user = uic.User{
Name: websession.Name,
}
dt := db.Table("user").Where(&user).Find(&user)
err = dt.Error
return
}