Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_cors.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) 2013 eNovance SAS <licensing@enovance.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
15 #ifndef CEPH_RGW_CORS_H
16 #define CEPH_RGW_CORS_H
17
18 #include <map>
19 #include <string>
20 #include <include/types.h>
21
22 #define RGW_CORS_GET    0x1
23 #define RGW_CORS_PUT    0x2
24 #define RGW_CORS_HEAD   0x4
25 #define RGW_CORS_POST   0x8
26 #define RGW_CORS_DELETE 0x10
27 #define RGW_CORS_COPY   0x20
28 #define RGW_CORS_ALL    (RGW_CORS_GET    |  \
29                          RGW_CORS_PUT    |  \
30                          RGW_CORS_HEAD   |  \
31                          RGW_CORS_POST   |  \
32                          RGW_CORS_DELETE |  \
33                          RGW_CORS_COPY)
34
35 #define CORS_MAX_AGE_INVALID ((uint32_t)-1)
36
37 class RGWCORSRule
38 {
39 protected:
40   uint32_t       max_age;
41   uint8_t        allowed_methods;
42   std::string         id;
43   std::set<string> allowed_hdrs; /* If you change this, you need to discard lowercase_allowed_hdrs */
44   std::set<string> lowercase_allowed_hdrs; /* Not built until needed in RGWCORSRule::is_header_allowed */
45   std::set<string> allowed_origins;
46   std::list<string> exposable_hdrs;
47
48 public:
49   RGWCORSRule() : max_age(CORS_MAX_AGE_INVALID),allowed_methods(0) {}
50   RGWCORSRule(std::set<string>& o, std::set<string>& h, 
51               std::list<string>& e, uint8_t f, uint32_t a)
52       :max_age(a),
53        allowed_methods(f),
54        allowed_hdrs(h),
55        allowed_origins(o),
56        exposable_hdrs(e) {}
57   virtual ~RGWCORSRule() {}
58
59   std::string& get_id() { return id; }
60   uint32_t get_max_age() { return max_age; }
61   uint8_t get_allowed_methods() { return allowed_methods; }
62
63   void encode(bufferlist& bl) const {
64     ENCODE_START(1, 1, bl);
65     ::encode(max_age, bl);
66     ::encode(allowed_methods, bl);
67     ::encode(id, bl);
68     ::encode(allowed_hdrs, bl);
69     ::encode(allowed_origins, bl);
70     ::encode(exposable_hdrs, bl);
71     ENCODE_FINISH(bl);
72   }
73   void decode(bufferlist::iterator& bl) {
74     DECODE_START(1, bl);
75     ::decode(max_age, bl);
76     ::decode(allowed_methods, bl);
77     ::decode(id, bl);
78     ::decode(allowed_hdrs, bl);
79     ::decode(allowed_origins, bl);
80     ::decode(exposable_hdrs, bl);
81     DECODE_FINISH(bl);
82   }
83   bool has_wildcard_origin();
84   bool is_origin_present(const char *o);
85   void format_exp_headers(std::string& s);
86   void erase_origin_if_present(std::string& origin, bool *rule_empty);
87   void dump_origins(); 
88   void dump(Formatter *f) const;
89   bool is_header_allowed(const char *hdr, size_t len);
90 };
91 WRITE_CLASS_ENCODER(RGWCORSRule)
92
93 class RGWCORSConfiguration
94 {
95   protected:
96     std::list<RGWCORSRule> rules;
97   public:
98     RGWCORSConfiguration() {}
99     ~RGWCORSConfiguration() {}
100
101   void encode(bufferlist& bl) const {
102     ENCODE_START(1, 1, bl);
103     ::encode(rules, bl);
104     ENCODE_FINISH(bl);
105   }
106   void decode(bufferlist::iterator& bl) {
107     DECODE_START(1, bl);
108     ::decode(rules, bl);
109     DECODE_FINISH(bl);
110   }
111   void dump(Formatter *f) const;
112   std::list<RGWCORSRule>& get_rules() {
113     return rules;
114   }
115   bool is_empty() {
116     return rules.empty();
117   }
118   void get_origins_list(const char *origin, std::list<string>& origins);
119   RGWCORSRule * host_name_rule(const char *origin);
120   void erase_host_name_rule(std::string& origin);
121   void dump();
122   void stack_rule(RGWCORSRule& r) {
123     rules.push_front(r);    
124   }
125 };
126 WRITE_CLASS_ENCODER(RGWCORSConfiguration)
127
128 static inline int validate_name_string(string& o) {
129   if (o.length() == 0)
130     return -1;
131   if (o.find_first_of("*") != o.find_last_of("*"))
132     return -1;
133   return 0;
134 }
135 #endif /*CEPH_RGW_CORS_H*/