summaryrefslogtreecommitdiffstats
path: root/src/rgw/rgw_rest_metadata.h
blob: 728813c7329b0d73262836de14c7792f968b4aab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
// vim: ts=8 sw=2 smarttab

/*
 * Ceph - scalable distributed file system
 *
 * Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
 *
 * This is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1, as published by the Free Software
 * Foundation. See file COPYING.
 *
 */

#ifndef RGW_REST_METADATA_H
#define RGW_REST_METADATA_H

class RGWOp_Metadata_List : public RGWRESTOp {
public:
  RGWOp_Metadata_List() {}
  ~RGWOp_Metadata_List() override {}

  int check_caps(RGWUserCaps& caps) override {
    return caps.check_cap("metadata", RGW_CAP_READ);
  }
  void execute() override;
  const char* name() const override { return "list_metadata"; }
};

class RGWOp_Metadata_Get : public RGWRESTOp {
public:
  RGWOp_Metadata_Get() {}
  ~RGWOp_Metadata_Get() override {}

  int check_caps(RGWUserCaps& caps) override {
    return caps.check_cap("metadata", RGW_CAP_READ);
  }
  void execute() override;
  const char* name() const override { return "get_metadata"; }
};

class RGWOp_Metadata_Get_Myself : public RGWOp_Metadata_Get {
public:
  RGWOp_Metadata_Get_Myself() {}
  ~RGWOp_Metadata_Get_Myself() override {}

  void execute() override;
};

class RGWOp_Metadata_Put : public RGWRESTOp {
  int get_data(bufferlist& bl);
  string update_status;
  obj_version ondisk_version;
public:
  RGWOp_Metadata_Put() {}
  ~RGWOp_Metadata_Put() override {}

  int check_caps(RGWUserCaps& caps) override {
    return caps.check_cap("metadata", RGW_CAP_WRITE);
  }
  void execute() override;
  void send_response() override;
  const char* name() const override { return "set_metadata"; }
  RGWOpType get_type() override { return RGW_OP_ADMIN_SET_METADATA; }
};

class RGWOp_Metadata_Delete : public RGWRESTOp {
public:
  RGWOp_Metadata_Delete() {}
  ~RGWOp_Metadata_Delete() override {}

  int check_caps(RGWUserCaps& caps) override {
    return caps.check_cap("metadata", RGW_CAP_WRITE);
  }
  void execute() override;
  const char* name() const override { return "remove_metadata"; }
};

class RGWOp_Metadata_Lock : public RGWRESTOp {
public:
  RGWOp_Metadata_Lock() {}
  ~RGWOp_Metadata_Lock() override {}

  int check_caps(RGWUserCaps& caps) override {
    return caps.check_cap("metadata", RGW_CAP_WRITE);
  }
  void execute() override;
  const char* name() const override {
    return "lock_metadata_object";
  }
};

class RGWOp_Metadata_Unlock : public RGWRESTOp {
public:
  RGWOp_Metadata_Unlock() {}
  ~RGWOp_Metadata_Unlock() override {}

  int check_caps(RGWUserCaps& caps) override {
    return caps.check_cap("metadata", RGW_CAP_WRITE);
  }
  void execute() override;
  const char* name() const override {
    return "unlock_metadata_object";
  }
};

class RGWHandler_Metadata : public RGWHandler_Auth_S3 {
protected:
  RGWOp *op_get() override;
  RGWOp *op_put() override;
  RGWOp *op_delete() override;
  RGWOp *op_post() override;

  int read_permissions(RGWOp*) override {
    return 0;
  }
public:
  using RGWHandler_Auth_S3::RGWHandler_Auth_S3;
  ~RGWHandler_Metadata() override = default;
};

class RGWRESTMgr_Metadata : public RGWRESTMgr {
public:
  RGWRESTMgr_Metadata() = default;
  ~RGWRESTMgr_Metadata() override = default;

  RGWHandler_REST* get_handler(struct req_state* const s,
                               const rgw::auth::StrategyRegistry& auth_registry,
                               const std::string& frontend_prefix) override {
    return new RGWHandler_Metadata(auth_registry);
  }
};

#endif /* RGW_REST_METADATA_H */