website.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package tos
  2. import (
  3. "bytes"
  4. "context"
  5. "net/http"
  6. )
  7. func (cli *ClientV2) PutBucketWebsite(ctx context.Context, input *PutBucketWebsiteInput) (*PutBucketWebsiteOutput, error) {
  8. if input == nil {
  9. return nil, InputIsNilClientError
  10. }
  11. if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
  12. return nil, err
  13. }
  14. body := putBucketWebsiteInput{
  15. RedirectAllRequestsTo: input.RedirectAllRequestsTo,
  16. IndexDocument: input.IndexDocument,
  17. ErrorDocument: input.ErrorDocument,
  18. }
  19. if input.RoutingRules != nil {
  20. body.RoutingRules = input.RoutingRules.Rules
  21. }
  22. data, contentMD5, err := marshalInput("PutBucketWebsiteInput", body)
  23. if err != nil {
  24. return nil, err
  25. }
  26. res, err := cli.newBuilder(input.Bucket, "").
  27. WithQuery("website", "").
  28. WithHeader(HeaderContentMD5, contentMD5).
  29. WithRetry(OnRetryFromStart, StatusCodeClassifier{}).
  30. Request(ctx, http.MethodPut, bytes.NewReader(data), cli.roundTripper(http.StatusOK))
  31. if err != nil {
  32. return nil, err
  33. }
  34. defer res.Close()
  35. output := PutBucketWebsiteOutput{RequestInfo: res.RequestInfo()}
  36. return &output, nil
  37. }
  38. func (cli *ClientV2) GetBucketWebsite(ctx context.Context, input *GetBucketWebsiteInput) (*GetBucketWebsiteOutput, error) {
  39. if input == nil {
  40. return nil, InputIsNilClientError
  41. }
  42. if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
  43. return nil, err
  44. }
  45. res, err := cli.newBuilder(input.Bucket, "").
  46. WithQuery("website", "").
  47. WithRetry(nil, StatusCodeClassifier{}).
  48. Request(ctx, http.MethodGet, nil, cli.roundTripper(http.StatusOK))
  49. if err != nil {
  50. return nil, err
  51. }
  52. defer res.Close()
  53. output := GetBucketWebsiteOutput{RequestInfo: res.RequestInfo()}
  54. if err = marshalOutput(output.RequestID, res.Body, &output); err != nil {
  55. return nil, err
  56. }
  57. return &output, nil
  58. }
  59. func (cli *ClientV2) DeleteBucketWebsite(ctx context.Context, input *DeleteBucketWebsiteInput) (*DeleteBucketWebsiteOutput, error) {
  60. if input == nil {
  61. return nil, InputIsNilClientError
  62. }
  63. if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
  64. return nil, err
  65. }
  66. res, err := cli.newBuilder(input.Bucket, "").
  67. WithQuery("website", "").
  68. WithRetry(nil, StatusCodeClassifier{}).
  69. Request(ctx, http.MethodDelete, nil, cli.roundTripper(http.StatusNoContent))
  70. if err != nil {
  71. return nil, err
  72. }
  73. defer res.Close()
  74. output := DeleteBucketWebsiteOutput{RequestInfo: res.RequestInfo()}
  75. return &output, nil
  76. }