]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | /* | |
4 | * Ceph - scalable distributed file system | |
5 | * | |
6 | * Copyright (C) 2015 Robin H. Johnson <robin.johnson@dreamhost.com> | |
7 | * | |
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. | |
12 | * | |
13 | */ | |
14 | #ifndef CEPH_RGW_REST_S3WEBSITE_H | |
15 | #define CEPH_RGW_REST_S3WEBSITE_H | |
16 | ||
17 | #include "rgw_rest_s3.h" | |
18 | ||
19 | class RGWHandler_REST_S3Website : public RGWHandler_REST_S3 { | |
20 | protected: | |
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; } | |
34 | ||
35 | int serve_errordoc(int http_ret, const string &errordoc_key); | |
36 | public: | |
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; | |
40 | }; | |
41 | ||
42 | class RGWHandler_REST_Service_S3Website : public RGWHandler_REST_S3Website { | |
43 | protected: | |
44 | RGWOp *get_obj_op(bool get_data) override; | |
45 | public: | |
46 | using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website; | |
47 | ~RGWHandler_REST_Service_S3Website() override = default; | |
48 | }; | |
49 | ||
50 | class RGWHandler_REST_Obj_S3Website : public RGWHandler_REST_S3Website { | |
51 | protected: | |
52 | RGWOp *get_obj_op(bool get_data) override; | |
53 | public: | |
54 | using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website; | |
55 | ~RGWHandler_REST_Obj_S3Website() override = default; | |
56 | }; | |
57 | ||
58 | /* The cross-inheritance from Obj to Bucket is deliberate! | |
59 | * S3Websites do NOT support any bucket operations | |
60 | */ | |
61 | class RGWHandler_REST_Bucket_S3Website : public RGWHandler_REST_S3Website { | |
62 | protected: | |
63 | RGWOp *get_obj_op(bool get_data) override; | |
64 | public: | |
65 | using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website; | |
66 | ~RGWHandler_REST_Bucket_S3Website() override = default; | |
67 | }; | |
68 | ||
69 | // TODO: do we actually need this? | |
70 | class RGWGetObj_ObjStore_S3Website : public RGWGetObj_ObjStore_S3 | |
71 | { | |
72 | friend class RGWHandler_REST_S3Website; | |
73 | private: | |
74 | bool is_errordoc_request; | |
75 | public: | |
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) { | |
85 | range_str = NULL; | |
86 | if_mod = NULL; | |
87 | if_unmod = NULL; | |
88 | if_match = NULL; | |
89 | if_nomatch = NULL; | |
90 | return 0; | |
91 | } else { | |
92 | return RGWGetObj_ObjStore_S3::get_params(); | |
93 | } | |
94 | } | |
95 | }; | |
96 | ||
97 | #endif |