99 lines
2 KiB
Go
99 lines
2 KiB
Go
package users
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
|
|
"git.terah.dev/imterah/hermes/apiclient/backendstructs"
|
|
)
|
|
|
|
type refreshTokenResponse struct {
|
|
Success bool `json:"success"`
|
|
RefreshToken string `json:"refreshToken"`
|
|
}
|
|
|
|
type jwtTokenResponse struct {
|
|
Success bool `json:"success"`
|
|
JWT string `json:"token"`
|
|
}
|
|
|
|
func GetRefreshToken(url string, username, email *string, password string) (string, error) {
|
|
body, err := json.Marshal(&backendstructs.UserLoginRequest{
|
|
Username: username,
|
|
Email: email,
|
|
Password: password,
|
|
})
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
res, err := http.Post(fmt.Sprintf("%s/api/v1/users/login", url), "application/json", bytes.NewBuffer(body))
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
bodyContents, err := io.ReadAll(res.Body)
|
|
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to read response body: %s", err.Error())
|
|
}
|
|
|
|
response := &refreshTokenResponse{}
|
|
|
|
if err := json.Unmarshal(bodyContents, response); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if !response.Success {
|
|
return "", fmt.Errorf("failed to get refresh token")
|
|
}
|
|
|
|
if response.RefreshToken == "" {
|
|
return "", fmt.Errorf("refresh token is empty")
|
|
}
|
|
|
|
return response.RefreshToken, nil
|
|
}
|
|
|
|
func GetJWTFromToken(url, refreshToken string) (string, error) {
|
|
body, err := json.Marshal(&backendstructs.UserRefreshRequest{
|
|
Token: refreshToken,
|
|
})
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
res, err := http.Post(fmt.Sprintf("%s/api/v1/users/refresh", url), "application/json", bytes.NewBuffer(body))
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
bodyContents, err := io.ReadAll(res.Body)
|
|
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to read response body: %s", err.Error())
|
|
}
|
|
|
|
response := &jwtTokenResponse{}
|
|
|
|
if err := json.Unmarshal(bodyContents, response); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if !response.Success {
|
|
return "", fmt.Errorf("failed to get JWT token")
|
|
}
|
|
|
|
if response.JWT == "" {
|
|
return "", fmt.Errorf("JWT token is empty")
|
|
}
|
|
|
|
return response.JWT, nil
|
|
}
|