Files
rainyun-cli/internal/provider/rainyun/domain.go
T

77 lines
2.0 KiB
Go

package rainyun
import (
"context"
"fmt"
"git.yoresee.cc/nightstar/ry/internal/provider"
)
type DomainService struct {
client *client
}
type rainyunDomain struct {
ID int `json:"id"`
DomainName string `json:"domain_name"`
Status string `json:"status"`
ExpireDate string `json:"expire_date"`
}
func (d *DomainService) List(ctx context.Context) ([]provider.Domain, error) {
var raw []rainyunDomain
if err := d.client.getWithQuery(ctx, "/product/domain/", map[string]string{"options": "1"}, &raw); err != nil {
return nil, err
}
domains := make([]provider.Domain, len(raw))
for i, r := range raw {
domains[i] = provider.Domain{
ID: fmt.Sprintf("%d", r.ID),
Name: r.DomainName,
}
}
return domains, nil
}
func (d *DomainService) DNSList(ctx context.Context, domain string) ([]provider.DNSRecord, error) {
type rainyunDNSRecord struct {
ID int `json:"id"`
RecordType string `json:"record_type"`
Host string `json:"host"`
Value string `json:"value"`
TTL int `json:"ttl"`
}
var raw []rainyunDNSRecord
path := fmt.Sprintf("/product/domain/%s/dns/", domain)
if err := d.client.get(ctx, path, &raw); err != nil {
return nil, err
}
records := make([]provider.DNSRecord, len(raw))
for i, r := range raw {
records[i] = provider.DNSRecord{
ID: fmt.Sprintf("%d", r.ID),
Type: r.RecordType,
Name: r.Host,
Value: r.Value,
TTL: r.TTL,
}
}
return records, nil
}
func (d *DomainService) DNSAdd(ctx context.Context, domain string, record provider.DNSRecord) error {
body := map[string]any{
"record_type": record.Type,
"host": record.Name,
"value": record.Value,
"ttl": record.TTL,
}
path := fmt.Sprintf("/product/domain/%s/dns", domain)
return d.client.post(ctx, path, body, nil)
}
func (d *DomainService) DNSDelete(ctx context.Context, domain string, recordID string) error {
path := fmt.Sprintf("/product/domain/%s/dns/%s", domain, recordID)
return d.client.delete(ctx, path, nil)
}