old_console/correlator/rules/web_tools.go
2024-11-02 14:12:45 +03:00

74 lines
1.7 KiB
Go

package rules
import (
"bytes"
"crypto/tls"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"iwarma.ru/console/correlator/config"
)
// ObtainAuthToken Get auth token from web interface
func ObtainAuthToken() (string, error) {
body, err := json.Marshal(struct {
Username string `json:"username"`
Password string `json:"password"`
}{
Username: viper.GetString(config.ConsoleUsername),
Password: viper.GetString(config.ConsolePassword)})
if err != nil {
return "", err
}
request, err := http.NewRequest("POST", viper.GetString(config.ConsoleUrlToken), bytes.NewBuffer(body))
if err != nil {
log.Debugf("#0 Request to \"%v\"", viper.GetString(config.ConsoleUrlToken))
return "", err
}
request.Header.Set("Content-Type", "application/json")
var client *http.Client
if viper.GetBool(config.ConsoleIgnoreSSLErrors) {
transport := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client = &http.Client{Transport: transport}
} else {
client = &http.Client{}
}
resp, err := client.Do(request)
if err != nil {
log.Debugf("# 1Request to \"%v\"", viper.GetString(config.ConsoleUrlToken))
return "", err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("got bad status code: %v", resp.StatusCode)
}
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", nil
}
var data map[string]interface{}
err = json.Unmarshal(respBody, &data)
if err != nil {
return "", err
}
if token, ok := data["token"].(string); ok {
return token, nil
} else {
return "", fmt.Errorf("can't read response from %v", data)
}
}