/
login.go
99 lines (79 loc) · 2.01 KB
/
login.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 orchestra
import (
"bytes"
"encoding/json"
"fmt"
"github.com/go-openapi/runtime"
"github.com/qlcchain/go-lsobus/common/rest"
)
type LoginParams struct {
Username string `json:"username"`
Password string `json:"password"`
RspLogin *LoginResponse
}
type LoginResponse struct {
Data string `json:"data"`
}
func (p *PartnerImpl) TryUpdateApiToken() {
if p.cfg.Username == "" || p.cfg.Password == "" {
p.logger.Infof("partner %s username is empty", p.cfg.Name)
return
}
reqParams := &LoginParams{}
reqParams.Username = p.cfg.Username
reqParams.Password = p.cfg.Password
err := p.ExecAuthLogin(reqParams)
if err == nil {
p.logger.Infof("partner %s update api token, got new token %s", p.cfg.Name, reqParams.RspLogin.Data)
p.apiToken = reqParams.RspLogin.Data
} else {
p.logger.Errorf("partner %s ExecAuthLogin err %s", p.cfg.Name, err)
}
}
func (p *PartnerImpl) SetApiToken(token string) {
p.apiToken = token
}
func (p *PartnerImpl) GetApiToken() string {
if p.apiToken == "" {
p.TryUpdateApiToken()
}
return p.apiToken
}
func (p *PartnerImpl) RenewApiToken() string {
p.apiToken = ""
p.TryUpdateApiToken()
return p.apiToken
}
func (p *PartnerImpl) ClearApiToken() {
p.apiToken = ""
}
func (p *PartnerImpl) ExecAuthLogin(params *LoginParams) error {
var err error
req := rest.Request{Method: rest.Post}
req.BaseURL = p.GetSonataUrl() + "/api/login"
req.Body, err = json.Marshal(params)
if err != nil {
return err
}
p.logger.Debugf("send login, url %s, username %s", req.BaseURL, params.Username)
rsp, err := rest.Send(req)
if p.GetFakeMode() {
rsp = &rest.Response{}
rsp.StatusCode = 200
rsp.Body = "{\"data\": \"12345678\"}"
} else if err != nil {
return err
}
if rsp.StatusCode != 200 {
return fmt.Errorf("receive response, StatusCode(%d) is not OK", rsp.StatusCode)
}
resp := &LoginResponse{}
bdIO := bytes.NewBuffer([]byte(rsp.Body))
cs := runtime.JSONConsumer()
err = cs.Consume(bdIO, resp)
if err != nil {
return err
}
params.RspLogin = resp
return nil
}