Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_rest_s3website.h
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   bool web_dir() const;
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