67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package services
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"gitea.com/gitea/pr-deployer/pkgs/settings"
|
|
"github.com/cloudflare/cloudflare-go"
|
|
"github.com/google/go-github/v39/github"
|
|
)
|
|
|
|
func getSubDomainName(number int) string {
|
|
return fmt.Sprintf("try-pr-%d", number)
|
|
}
|
|
|
|
func getFullSubDomain(number int) string {
|
|
return getSubDomainName(number) + "." + settings.PRParentDomain
|
|
}
|
|
|
|
func checkAndUpdateSubDomain(number int) error {
|
|
api, err := cloudflare.NewWithAPIToken(settings.CloudflareToken)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
zoneID, err := api.ZoneIDByName(settings.PRParentDomain)
|
|
if err != nil {
|
|
return fmt.Errorf("ZoneIDByName: %v", err)
|
|
}
|
|
|
|
var found bool
|
|
var name = getSubDomainName(number)
|
|
var filter = cloudflare.DNSRecord{
|
|
Type: "A",
|
|
Name: getFullSubDomain(number),
|
|
}
|
|
recs, err := api.DNSRecords(context.Background(), zoneID, filter)
|
|
if err != nil {
|
|
return fmt.Errorf("DNSRecords: %v", err)
|
|
}
|
|
|
|
for _, r := range recs {
|
|
if filter.Name == r.Name {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if found {
|
|
// TODO: check ip address
|
|
return nil
|
|
}
|
|
|
|
asciiInput := cloudflare.DNSRecord{
|
|
Type: "A",
|
|
Name: name,
|
|
Content: settings.DomainIP,
|
|
Proxiable: false,
|
|
Proxied: github.Bool(false),
|
|
}
|
|
|
|
_, err = api.CreateDNSRecord(context.Background(), zoneID, asciiInput)
|
|
if err != nil {
|
|
return fmt.Errorf("CreateDNSRecord: %v", err)
|
|
}
|
|
return nil
|
|
}
|