pages_domains.go 5.5 KB

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