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}