Pavel Sinitsin
cea1f96bb4
Deleted client/credential.go and moved the Credentials struct to the api package for better modularity. Enhanced type safety in api by checking type assertions and added detailed comments in model structs.
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package client
|
|
|
|
import (
|
|
"gitea.24example.ru/spavelit/bpiek/api"
|
|
"github.com/go-resty/resty/v2"
|
|
)
|
|
|
|
const (
|
|
AuthApiUrl = "https://bp.iek.ru/oauth/login"
|
|
BaseApiUrl = "https://bp.iek.ru/api/catalog/v1/"
|
|
)
|
|
|
|
type (
|
|
Client struct {
|
|
HTTPClient *resty.Client
|
|
}
|
|
|
|
AuthSuccess struct {
|
|
TokenType string `json:"token_type"`
|
|
AccessToken string `json:"access_token"`
|
|
IdToken string `json:"id_token"`
|
|
RefreshToken string `json:"refresh_token"`
|
|
ExpiresIn int `json:"expires_in"`
|
|
Scope string `json:"scope"`
|
|
}
|
|
)
|
|
|
|
func NewClient(credentials api.Credentials) *Client {
|
|
authSuccess := &AuthSuccess{}
|
|
client := resty.New()
|
|
client.SetBaseURL(BaseApiUrl)
|
|
|
|
response, err := client.R().
|
|
SetFormData(map[string]string{
|
|
"username": credentials.Username,
|
|
"password": credentials.Password,
|
|
}).
|
|
SetResult(&authSuccess).
|
|
Post(AuthApiUrl)
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if response.StatusCode() != 200 {
|
|
panic("Auth failed. Invalid credentials")
|
|
}
|
|
|
|
client.SetHeader("Content-Type", "application/json")
|
|
client.SetHeader("Authorization", authSuccess.TokenType+" "+authSuccess.AccessToken)
|
|
|
|
return &Client{
|
|
HTTPClient: client,
|
|
}
|
|
}
|