]>
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 { | |
224ce89b | 20 | bool web_dir() const; |
7c673cae FG |
21 | protected: |
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; } | |
35 | ||
36 | int serve_errordoc(int http_ret, const string &errordoc_key); | |
37 | public: | |
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; | |
41 | }; | |
42 | ||
43 | class RGWHandler_REST_Service_S3Website : public RGWHandler_REST_S3Website { | |
44 | protected: | |
45 | RGWOp *get_obj_op(bool get_data) override; | |
46 | public: | |
47 | using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website; | |
48 | ~RGWHandler_REST_Service_S3Website() override = default; | |
49 | }; | |
50 | ||
51 | class RGWHandler_REST_Obj_S3Website : public RGWHandler_REST_S3Website { | |
52 | protected: | |
53 | RGWOp *get_obj_op(bool get_data) override; | |
54 | public: | |
55 | using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website; | |
56 | ~RGWHandler_REST_Obj_S3Website() override = default; | |
57 | }; | |
58 | ||
59 | /* The cross-inheritance from Obj to Bucket is deliberate! | |
60 | * S3Websites do NOT support any bucket operations | |
61 | */ | |
62 | class RGWHandler_REST_Bucket_S3Website : public RGWHandler_REST_S3Website { | |
63 | protected: | |
64 | RGWOp *get_obj_op(bool get_data) override; | |
65 | public: | |
66 | using RGWHandler_REST_S3Website::RGWHandler_REST_S3Website; | |
67 | ~RGWHandler_REST_Bucket_S3Website() override = default; | |
68 | }; | |
69 | ||
70 | // TODO: do we actually need this? | |
71 | class RGWGetObj_ObjStore_S3Website : public RGWGetObj_ObjStore_S3 | |
72 | { | |
73 | friend class RGWHandler_REST_S3Website; | |
74 | private: | |
75 | bool is_errordoc_request; | |
76 | public: | |
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) { | |
86 | range_str = NULL; | |
87 | if_mod = NULL; | |
88 | if_unmod = NULL; | |
89 | if_match = NULL; | |
90 | if_nomatch = NULL; | |
91 | return 0; | |
92 | } else { | |
93 | return RGWGetObj_ObjStore_S3::get_params(); | |
94 | } | |
95 | } | |
96 | }; | |
97 | ||
98 | #endif |