1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2015 Robin H. Johnson <robin.johnson@dreamhost.com>
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
14 #ifndef CEPH_RGW_REST_S3WEBSITE_H
15 #define CEPH_RGW_REST_S3WEBSITE_H
17 #include "rgw_rest_s3.h"
19 class RGWHandler_REST_S3Website
: public RGWHandler_REST_S3
{
22 int retarget(RGWOp
*op
, RGWOp
**new_op
) override
;
23 // TODO: this should be virtual I think, and ensure that it's always
24 // overridden, but that conflates that op_get/op_head are defined in this
25 // class and call this; and don't need to be overridden later.
26 virtual RGWOp
*get_obj_op(bool get_data
) { return NULL
; }
27 RGWOp
*op_get() override
;
28 RGWOp
*op_head() override
;
29 // Only allowed to use GET+HEAD
30 RGWOp
*op_put() override
{ return NULL
; }
31 RGWOp
*op_delete() override
{ return NULL
; }
32 RGWOp
*op_post() override
{ return NULL
; }
33 RGWOp
*op_copy() override
{ return NULL
; }
34 RGWOp
*op_options() override
{ return NULL
; }
36 int serve_errordoc(int http_ret
, const string
&errordoc_key
);
38 using RGWHandler_REST_S3::RGWHandler_REST_S3
;
39 ~RGWHandler_REST_S3Website() override
= default;
40 int error_handler(int err_no
, string
*error_content
) override
;
43 class RGWHandler_REST_Service_S3Website
: public RGWHandler_REST_S3Website
{
45 RGWOp
*get_obj_op(bool get_data
) override
;
47 using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website
;
48 ~RGWHandler_REST_Service_S3Website() override
= default;
51 class RGWHandler_REST_Obj_S3Website
: public RGWHandler_REST_S3Website
{
53 RGWOp
*get_obj_op(bool get_data
) override
;
55 using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website
;
56 ~RGWHandler_REST_Obj_S3Website() override
= default;
59 /* The cross-inheritance from Obj to Bucket is deliberate!
60 * S3Websites do NOT support any bucket operations
62 class RGWHandler_REST_Bucket_S3Website
: public RGWHandler_REST_S3Website
{
64 RGWOp
*get_obj_op(bool get_data
) override
;
66 using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website
;
67 ~RGWHandler_REST_Bucket_S3Website() override
= default;
70 // TODO: do we actually need this?
71 class RGWGetObj_ObjStore_S3Website
: public RGWGetObj_ObjStore_S3
73 friend class RGWHandler_REST_S3Website
;
75 bool is_errordoc_request
;
77 RGWGetObj_ObjStore_S3Website() : is_errordoc_request(false) {}
78 explicit RGWGetObj_ObjStore_S3Website(bool is_errordoc_request
) : is_errordoc_request(false) { this->is_errordoc_request
= is_errordoc_request
; }
79 ~RGWGetObj_ObjStore_S3Website() override
{}
80 int send_response_data_error() override
;
81 int send_response_data(bufferlist
& bl
, off_t ofs
, off_t len
) override
;
82 // We override RGWGetObj_ObjStore::get_params here, to allow ignoring all
83 // conditional params for error pages.
84 int get_params() override
{
85 if (is_errordoc_request
) {
93 return RGWGetObj_ObjStore_S3::get_params();