55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package integration
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"satusehat-rssa/internal/model"
|
|
"strings"
|
|
)
|
|
|
|
type OauthInterface interface {
|
|
GenerateToken(req model.OauthRequest) (*model.OauthResponse, error)
|
|
}
|
|
|
|
type OauthRepository struct {
|
|
akses *model.Akses
|
|
}
|
|
|
|
// GenerateToken implements OauthInterface.
|
|
func (o *OauthRepository) GenerateToken(req model.OauthRequest) (*model.OauthResponse, error) {
|
|
var (
|
|
data *model.OauthResponse
|
|
)
|
|
url := o.akses.AuthUrl + "/accesstoken?grant_type=client_credentials"
|
|
method := "POST"
|
|
|
|
req_data := "client_id=" + req.ClientId + "&client_secret=" + req.ClientSecret
|
|
payload := strings.NewReader(req_data)
|
|
|
|
client := &http.Client{}
|
|
request, err := http.NewRequest(method, url, payload)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
|
|
|
|
res, err := client.Do(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
err = json.NewDecoder(res.Body).Decode(&data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
func NewOauthRequestRepo(akses *model.Akses) OauthInterface {
|
|
return &OauthRepository{
|
|
akses: akses,
|
|
}
|
|
}
|