golang-sdk/provider.go

78 lines
1.4 KiB
Go

package happydomain
import (
"bytes"
"encoding/json"
"net/url"
"path"
model "git.happydns.org/happyDomain/model"
)
type Provider struct {
model.ProviderCombined
session *HappyDomainAPI
}
func (h *HappyDomainAPI) NewProvider(p *model.ProviderCombined) *Provider {
return &Provider{
session: h,
ProviderCombined: *p,
}
}
func (p *Provider) getURL() *url.URL {
u := p.session.API
u.Path = path.Join(u.Path, "providers", p.ProviderCombined.Id.String())
return &u
}
func (p *Provider) DomainAdd(dn string) (Domain, error) {
formstream := new(bytes.Buffer)
err := json.NewEncoder(formstream).Encode(model.DomainMinimal{
IdProvider: p.Id,
DomainName: dn,
})
if err != nil {
return nil, err
}
u := p.session.API
u.Path = path.Join(u.Path, "domains")
resp, err := p.session.DoRequest("POST", &u, formstream)
if err != nil {
return nil, err
}
defer resp.Body.Close()
return p.session.NewDomainFromModel(resp.Body)
}
func (p *Provider) Update() error {
formstream := new(bytes.Buffer)
err := json.NewEncoder(formstream).Encode(p)
if err != nil {
return err
}
resp, err := p.session.DoRequest("PUT", p.getURL(), formstream)
if err != nil {
return err
}
defer resp.Body.Close()
return nil
}
func (p *Provider) Delete() error {
resp, err := p.session.DoRequest("DELETE", p.getURL(), nil)
if err != nil {
return err
}
defer resp.Body.Close()
return nil
}