impl ntg auth refresh-cache
This commit is contained in:
@@ -3,12 +3,12 @@ package broker
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"local/truckstop/config"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -18,6 +18,8 @@ type NTGVision struct {
|
||||
}
|
||||
}
|
||||
|
||||
var ErrNoAuth = errors.New("not authorized")
|
||||
|
||||
type ntgVisionJob struct {
|
||||
ID int64 `json:"id"`
|
||||
PickupDate string `json:"sDate"`
|
||||
@@ -82,6 +84,56 @@ func (ntg NTGVision) Search(states []config.State) ([]Job, error) {
|
||||
}
|
||||
|
||||
func (ntg NTGVision) search(states []config.State) (io.ReadCloser, error) {
|
||||
if config.Get().Brokers.NTG.Token == "" {
|
||||
if err := ntg.refreshAuth(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
rc, err := ntg._search(states)
|
||||
if err == ErrNoAuth {
|
||||
if err := ntg.refreshAuth(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rc, err = ntg._search(states)
|
||||
}
|
||||
return rc, err
|
||||
}
|
||||
|
||||
func (ntg NTGVision) refreshAuth() error {
|
||||
b, _ := json.Marshal(map[string]string{
|
||||
"username": config.Get().Brokers.NTG.Username,
|
||||
"password": config.Get().Brokers.NTG.Password,
|
||||
})
|
||||
request, err := http.NewRequest(http.MethodPost, "https://ntgvision.com/api/v1/sts/Login", bytes.NewReader(b))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
setNTGHeaders(request)
|
||||
resp, err := http.DefaultClient.Do(request)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
b, _ := ioutil.ReadAll(resp.Body)
|
||||
return fmt.Errorf("failed refreshing token: (%d): %s", resp.StatusCode, b)
|
||||
}
|
||||
var v struct {
|
||||
Token string `json:"token"`
|
||||
}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&v); err != nil {
|
||||
return err
|
||||
}
|
||||
if len(v.Token) == 0 {
|
||||
return errors.New("failed to get token from login call")
|
||||
}
|
||||
conf := config.Get()
|
||||
conf.Brokers.NTG.Token = v.Token
|
||||
config.Set(*conf)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ntg NTGVision) _search(states []config.State) (io.ReadCloser, error) {
|
||||
request, err := ntg.newRequest(states)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -94,6 +146,9 @@ func (ntg NTGVision) search(states []config.State) (io.ReadCloser, error) {
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
b, _ := ioutil.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
if resp.StatusCode > 400 && resp.StatusCode < 404 {
|
||||
return nil, ErrNoAuth
|
||||
}
|
||||
return nil, fmt.Errorf("bad status searching ntg: %d: %s", resp.StatusCode, b)
|
||||
}
|
||||
return resp.Body, nil
|
||||
@@ -123,21 +178,26 @@ func (ntg NTGVision) newRequest(states []config.State) (*http.Request, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
setNTGHeaders(request)
|
||||
request.Header.Set("Authorization", "Bearer "+config.Get().Brokers.NTG.Token)
|
||||
|
||||
return request, nil
|
||||
}
|
||||
|
||||
func setNTGHeaders(request *http.Request) {
|
||||
request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0")
|
||||
request.Header.Set("Accept", "application/json, text/plain, */*")
|
||||
request.Header.Set("Accept-Language", "en-US,en;q=0.5")
|
||||
request.Header.Set("Accept-Encoding", "gzip, deflate, br")
|
||||
request.Header.Set("Content-Type", "application/json;charset=utf-8")
|
||||
request.Header.Set("Authorization", "Bearer "+strings.Split(strings.Split(config.Get().Brokers.NTG.Cookie, "; NTGAuthToken=")[1], "; ")[0])
|
||||
//request.Header.Set("Authorization", "Bearer "+config.Get().Brokers.NTG.Token)
|
||||
request.Header.Set("Origin", "https://ntgvision.com")
|
||||
request.Header.Set("DNT", "1")
|
||||
request.Header.Set("Connection", "keep-alive")
|
||||
request.Header.Set("Cookie", config.Get().Brokers.NTG.Cookie)
|
||||
//request.Header.Set("Cookie", config.Get().Brokers.NTG.Cookie)
|
||||
request.Header.Set("Sec-Fetch-Dest", "empty")
|
||||
request.Header.Set("Sec-Fetch-Mode", "cors")
|
||||
request.Header.Set("Sec-Fetch-Site", "same-origin")
|
||||
request.Header.Set("Pragma", "no-cache")
|
||||
request.Header.Set("Cache-Control", "no-cache")
|
||||
|
||||
return request, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user