pages_domains.go

  1package gitlab
  2
  3import (
  4	"fmt"
  5	"time"
  6)
  7
  8// PagesDomainsService handles communication with the pages domains
  9// related methods of the GitLab API.
 10//
 11// GitLab API docs: https://docs.gitlab.com/ce/api/pages_domains.html
 12type PagesDomainsService struct {
 13	client *Client
 14}
 15
 16// PagesDomain represents a pages domain.
 17//
 18// GitLab API docs: https://docs.gitlab.com/ce/api/pages_domains.html
 19type PagesDomain struct {
 20	Domain           string     `json:"domain"`
 21	URL              string     `json:"url"`
 22	ProjectID        int        `json:"project_id"`
 23	Verified         bool       `json:"verified"`
 24	VerificationCode string     `json:"verification_code"`
 25	EnabledUntil     *time.Time `json:"enabled_until"`
 26	Certificate      struct {
 27		Expired    bool       `json:"expired"`
 28		Expiration *time.Time `json:"expiration"`
 29	} `json:"certificate"`
 30}
 31
 32// ListPagesDomainsOptions represents the available ListPagesDomains() options.
 33//
 34// GitLab API docs:
 35// https://docs.gitlab.com/ce/api/pages_domains.html#list-pages-domains
 36type ListPagesDomainsOptions ListOptions
 37
 38// ListPagesDomains gets a list of project pages domains.
 39//
 40// GitLab API docs:
 41// https://docs.gitlab.com/ce/api/pages_domains.html#list-pages-domains
 42func (s *PagesDomainsService) ListPagesDomains(pid interface{}, opt *ListPagesDomainsOptions, options ...OptionFunc) ([]*PagesDomain, *Response, error) {
 43	project, err := parseID(pid)
 44	if err != nil {
 45		return nil, nil, err
 46	}
 47	u := fmt.Sprintf("projects/%s/pages/domains", pathEscape(project))
 48
 49	req, err := s.client.NewRequest("GET", u, opt, options)
 50	if err != nil {
 51		return nil, nil, err
 52	}
 53
 54	var pd []*PagesDomain
 55	resp, err := s.client.Do(req, &pd)
 56	if err != nil {
 57		return nil, resp, err
 58	}
 59
 60	return pd, resp, err
 61}
 62
 63// ListAllPagesDomains gets a list of all pages domains.
 64//
 65// GitLab API docs:
 66// https://docs.gitlab.com/ce/api/pages_domains.html#list-all-pages-domains
 67func (s *PagesDomainsService) ListAllPagesDomains(options ...OptionFunc) ([]*PagesDomain, *Response, error) {
 68	req, err := s.client.NewRequest("GET", "pages/domains", nil, options)
 69	if err != nil {
 70		return nil, nil, err
 71	}
 72
 73	var pd []*PagesDomain
 74	resp, err := s.client.Do(req, &pd)
 75	if err != nil {
 76		return nil, resp, err
 77	}
 78
 79	return pd, resp, err
 80}
 81
 82// GetPagesDomain get a specific pages domain for a project.
 83//
 84// GitLab API docs:
 85// https://docs.gitlab.com/ce/api/pages_domains.html#single-pages-domain
 86func (s *PagesDomainsService) GetPagesDomain(pid interface{}, domain string, options ...OptionFunc) (*PagesDomain, *Response, error) {
 87	project, err := parseID(pid)
 88	if err != nil {
 89		return nil, nil, err
 90	}
 91	u := fmt.Sprintf("projects/%s/pages/domains/%s", pathEscape(project), domain)
 92
 93	req, err := s.client.NewRequest("GET", u, nil, options)
 94	if err != nil {
 95		return nil, nil, err
 96	}
 97
 98	pd := new(PagesDomain)
 99	resp, err := s.client.Do(req, pd)
100	if err != nil {
101		return nil, resp, err
102	}
103
104	return pd, resp, err
105}
106
107// CreatePagesDomainOptions represents the available CreatePagesDomain() options.
108//
109// GitLab API docs:
110// // https://docs.gitlab.com/ce/api/pages_domains.html#create-new-pages-domain
111type CreatePagesDomainOptions struct {
112	Domain      *string `url:"domain,omitempty" json:"domain,omitempty"`
113	Certificate *string `url:"certifiate,omitempty" json:"certifiate,omitempty"`
114	Key         *string `url:"key,omitempty" json:"key,omitempty"`
115}
116
117// CreatePagesDomain creates a new project pages domain.
118//
119// GitLab API docs:
120// https://docs.gitlab.com/ce/api/pages_domains.html#create-new-pages-domain
121func (s *PagesDomainsService) CreatePagesDomain(pid interface{}, opt *CreatePagesDomainOptions, options ...OptionFunc) (*PagesDomain, *Response, error) {
122	project, err := parseID(pid)
123	if err != nil {
124		return nil, nil, err
125	}
126	u := fmt.Sprintf("projects/%s/pages/domains", pathEscape(project))
127
128	req, err := s.client.NewRequest("POST", u, opt, options)
129	if err != nil {
130		return nil, nil, err
131	}
132
133	pd := new(PagesDomain)
134	resp, err := s.client.Do(req, pd)
135	if err != nil {
136		return nil, resp, err
137	}
138
139	return pd, resp, err
140}
141
142// UpdatePagesDomainOptions represents the available UpdatePagesDomain() options.
143//
144// GitLab API docs:
145// https://docs.gitlab.com/ce/api/pages_domains.html#update-pages-domain
146type UpdatePagesDomainOptions struct {
147	Cerificate *string `url:"certifiate" json:"certifiate"`
148	Key        *string `url:"key" json:"key"`
149}
150
151// UpdatePagesDomain updates an existing project pages domain.
152//
153// GitLab API docs:
154// https://docs.gitlab.com/ce/api/pages_domains.html#update-pages-domain
155func (s *PagesDomainsService) UpdatePagesDomain(pid interface{}, domain string, opt *UpdatePagesDomainOptions, options ...OptionFunc) (*PagesDomain, *Response, error) {
156	project, err := parseID(pid)
157	if err != nil {
158		return nil, nil, err
159	}
160	u := fmt.Sprintf("projects/%s/pages/domains/%s", pathEscape(project), domain)
161
162	req, err := s.client.NewRequest("PUT", u, opt, options)
163	if err != nil {
164		return nil, nil, err
165	}
166
167	pd := new(PagesDomain)
168	resp, err := s.client.Do(req, pd)
169	if err != nil {
170		return nil, resp, err
171	}
172
173	return pd, resp, err
174}
175
176// DeletePagesDomain deletes an existing prject pages domain.
177//
178// GitLab API docs:
179// https://docs.gitlab.com/ce/api/pages_domains.html#delete-pages-domain
180func (s *PagesDomainsService) DeletePagesDomain(pid interface{}, domain string, options ...OptionFunc) (*Response, error) {
181	project, err := parseID(pid)
182	if err != nil {
183		return nil, err
184	}
185	u := fmt.Sprintf("projects/%s/pages/domains/%s", pathEscape(project), domain)
186
187	req, err := s.client.NewRequest("DELETE", u, nil, options)
188	if err != nil {
189		return nil, err
190	}
191
192	return s.client.Do(req, nil)
193}