caddybunnn
This commit is contained in:
64
porkbun.go
Normal file
64
porkbun.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type porkbunRequest struct {
|
||||
APIKey string `json:"apikey"`
|
||||
SecretAPIKey string `json:"secretapikey"`
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
Content string `json:"content"`
|
||||
TTL string `json:"ttl"`
|
||||
}
|
||||
|
||||
type porkbunResponse struct {
|
||||
Status string `json:"status"`
|
||||
ID json.Number `json:"id"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func CreateDNSRecord(cfg *Config, subdomain string) (string, error) {
|
||||
url := fmt.Sprintf("https://api.porkbun.com/api/json/v3/dns/create/%s", cfg.Domain)
|
||||
|
||||
body := porkbunRequest{
|
||||
APIKey: cfg.PorkbunAPIKey,
|
||||
SecretAPIKey: cfg.PorkbunSecretKey,
|
||||
Name: subdomain,
|
||||
Type: "CNAME",
|
||||
Content: cfg.Domain,
|
||||
TTL: "600",
|
||||
}
|
||||
|
||||
payload, err := json.Marshal(body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("marshaling request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := http.Post(url, "application/json", bytes.NewReader(payload))
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("sending request: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
respBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("reading response: %w", err)
|
||||
}
|
||||
|
||||
var result porkbunResponse
|
||||
if err := json.Unmarshal(respBody, &result); err != nil {
|
||||
return "", fmt.Errorf("parsing response: %w", err)
|
||||
}
|
||||
|
||||
if result.Status != "SUCCESS" {
|
||||
return "", fmt.Errorf("porkbun API error: %s", result.Message)
|
||||
}
|
||||
|
||||
return result.ID.String(), nil
|
||||
}
|
||||
Reference in New Issue
Block a user