github.com/webonyx/up@v0.7.4-0.20180808230834-91b94e551323/platform/aws/domains/domains.go (about) 1 // Package domains provides domain management for AWS platforms. 2 package domains 3 4 import ( 5 "github.com/aws/aws-sdk-go/aws" 6 "github.com/aws/aws-sdk-go/aws/session" 7 r "github.com/aws/aws-sdk-go/service/route53domains" 8 9 "github.com/apex/up" 10 ) 11 12 // Domains implementation. 13 type Domains struct { 14 client *r.Route53Domains 15 } 16 17 // New returns a new domain manager. 18 func New() *Domains { 19 return &Domains{ 20 client: r.New(session.New(aws.NewConfig().WithRegion("us-east-1"))), 21 } 22 } 23 24 // List implementation. 25 func (d *Domains) List() (v []*up.Domain, err error) { 26 res, err := d.client.ListDomains(&r.ListDomainsInput{ 27 MaxItems: aws.Int64(100), 28 }) 29 30 if err != nil { 31 return 32 } 33 34 for _, d := range res.Domains { 35 v = append(v, &up.Domain{ 36 Name: *d.DomainName, 37 Expiry: *d.Expiry, 38 AutoRenew: *d.AutoRenew, 39 }) 40 } 41 42 return 43 } 44 45 // Availability implementation. 46 func (d *Domains) Availability(domain string) (*up.Domain, error) { 47 res, err := d.client.CheckDomainAvailability(&r.CheckDomainAvailabilityInput{ 48 DomainName: &domain, 49 }) 50 51 if err != nil { 52 return nil, err 53 } 54 55 if *res.Availability == "AVAILABLE" { 56 return &up.Domain{ 57 Name: domain, 58 Available: true, 59 }, nil 60 } 61 62 return &up.Domain{ 63 Name: domain, 64 Available: false, 65 }, nil 66 } 67 68 // Suggestions implementation. 69 func (d *Domains) Suggestions(domain string) (domains []*up.Domain, err error) { 70 res, err := d.client.GetDomainSuggestions(&r.GetDomainSuggestionsInput{ 71 DomainName: &domain, 72 OnlyAvailable: aws.Bool(true), 73 SuggestionCount: aws.Int64(15), 74 }) 75 76 if err != nil { 77 return 78 } 79 80 for _, s := range res.SuggestionsList { 81 domains = append(domains, &up.Domain{ 82 Name: *s.DomainName, 83 Available: true, 84 }) 85 } 86 87 return 88 } 89 90 // Purchase implementation. 91 func (d *Domains) Purchase(domain string, contact up.DomainContact) error { 92 _, err := d.client.RegisterDomain(&r.RegisterDomainInput{ 93 DomainName: &domain, 94 AutoRenew: aws.Bool(true), 95 DurationInYears: aws.Int64(1), 96 RegistrantContact: contactDetails(contact), 97 AdminContact: contactDetails(contact), 98 TechContact: contactDetails(contact), 99 }) 100 101 return err 102 } 103 104 // contactDetails returns route53 contact details. 105 func contactDetails(c up.DomainContact) *r.ContactDetail { 106 return &r.ContactDetail{ 107 AddressLine1: aws.String(c.Address), 108 City: aws.String(c.City), 109 State: aws.String(c.State), 110 ZipCode: aws.String(c.ZipCode), 111 CountryCode: aws.String(c.CountryCode), 112 Email: aws.String(c.Email), 113 PhoneNumber: aws.String(c.PhoneNumber), 114 FirstName: aws.String(c.FirstName), 115 LastName: aws.String(c.LastName), 116 ContactType: aws.String("PERSON"), 117 } 118 }