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
{
21 int retarget(RGWOp
*op
, RGWOp
**new_op
) override
;
22 // TODO: this should be virtual I think, and ensure that it's always
23 // overridden, but that conflates that op_get/op_head are defined in this
24 // class and call this; and don't need to be overridden later.
25 virtual RGWOp
*get_obj_op(bool get_data
) { return NULL
; }
26 RGWOp
*op_get() override
;
27 RGWOp
*op_head() override
;
28 // Only allowed to use GET+HEAD
29 RGWOp
*op_put() override
{ return NULL
; }
30 RGWOp
*op_delete() override
{ return NULL
; }
31 RGWOp
*op_post() override
{ return NULL
; }
32 RGWOp
*op_copy() override
{ return NULL
; }
33 RGWOp
*op_options() override
{ return NULL
; }
35 int serve_errordoc(int http_ret
, const string
&errordoc_key
);
37 using RGWHandler_REST_S3::RGWHandler_REST_S3
;
38 ~RGWHandler_REST_S3Website() override
= default;
39 int error_handler(int err_no
, string
*error_content
) override
;
42 class RGWHandler_REST_Service_S3Website
: public RGWHandler_REST_S3Website
{
44 RGWOp
*get_obj_op(bool get_data
) override
;
46 using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website
;
47 ~RGWHandler_REST_Service_S3Website() override
= default;
50 class RGWHandler_REST_Obj_S3Website
: public RGWHandler_REST_S3Website
{
52 RGWOp
*get_obj_op(bool get_data
) override
;
54 using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website
;
55 ~RGWHandler_REST_Obj_S3Website() override
= default;
58 /* The cross-inheritance from Obj to Bucket is deliberate!
59 * S3Websites do NOT support any bucket operations
61 class RGWHandler_REST_Bucket_S3Website
: public RGWHandler_REST_S3Website
{
63 RGWOp
*get_obj_op(bool get_data
) override
;
65 using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website
;
66 ~RGWHandler_REST_Bucket_S3Website() override
= default;
69 // TODO: do we actually need this?
70 class RGWGetObj_ObjStore_S3Website
: public RGWGetObj_ObjStore_S3
72 friend class RGWHandler_REST_S3Website
;
74 bool is_errordoc_request
;
76 RGWGetObj_ObjStore_S3Website() : is_errordoc_request(false) {}
77 explicit RGWGetObj_ObjStore_S3Website(bool is_errordoc_request
) : is_errordoc_request(false) { this->is_errordoc_request
= is_errordoc_request
; }
78 ~RGWGetObj_ObjStore_S3Website() override
{}
79 int send_response_data_error() override
;
80 int send_response_data(bufferlist
& bl
, off_t ofs
, off_t len
) override
;
81 // We override RGWGetObj_ObjStore::get_params here, to allow ignoring all
82 // conditional params for error pages.
83 int get_params() override
{
84 if (is_errordoc_request
) {
92 return RGWGetObj_ObjStore_S3::get_params();