00001 #ifndef __ARC_SECATTR__
00002 #define __ARC_SECATTR__
00003
00004 #include <string>
00005 #include <list>
00006 #include <cstring>
00007
00008 #include <arc/XMLNode.h>
00009
00010 namespace Arc {
00012
00014 class SecAttrFormat {
00015 private:
00016 const char* format_;
00017 public:
00018 inline SecAttrFormat(const SecAttrFormat& format):format_(format.format_) {};
00019 inline SecAttrFormat(const char* format = ""):format_(format) {};
00020 inline SecAttrFormat& operator=(SecAttrFormat format) { format_=format.format_; return *this; };
00021 inline SecAttrFormat& operator=(const char* format) { format_=format; return *this; };
00022 inline bool operator==(SecAttrFormat format) { return (strcmp(format_,format.format_) == 0); };
00023 inline bool operator==(const char* format) { return (strcmp(format_,format) == 0); };
00024 inline bool operator!=(SecAttrFormat format) { return (strcmp(format_,format.format_) != 0); };
00025 inline bool operator!=(const char* format) { return (strcmp(format_,format) != 0); };
00026 };
00028
00037 class SecAttr {
00038 public:
00039 static SecAttrFormat UNDEFINED;
00040 static SecAttrFormat ARCAuth;
00041 static SecAttrFormat XACML;
00042 static SecAttrFormat SAML;
00043 static SecAttrFormat GACL;
00044 SecAttr() {};
00045 virtual ~SecAttr() {};
00051 bool operator==(const SecAttr &b) const { return equal(b); };
00054 bool operator!=(const SecAttr &b) const { return !equal(b); };
00055
00059 virtual operator bool() const;
00060
00064 virtual bool Export(SecAttrFormat format,std::string &val) const;
00069 virtual bool Export(SecAttrFormat format,XMLNode &val) const;
00070
00076 virtual bool Import(SecAttrFormat format,const std::string &val);
00077 virtual bool Import(SecAttrFormat format,XMLNode val);
00078
00083 virtual std::string get(const std::string& id) const;
00084
00089 virtual std::list<std::string> getAll(const std::string& id) const;
00090
00091 protected:
00092 virtual bool equal(const SecAttr &b) const;
00093 };
00094
00096
00102 class MultiSecAttr: public SecAttr {
00103 public:
00104 MultiSecAttr() {};
00105 virtual ~MultiSecAttr() {};
00106 virtual operator bool() const;
00107 virtual bool Export(SecAttrFormat format,XMLNode &val) const;
00108 virtual bool Import(SecAttrFormat format,XMLNode val);
00109 protected:
00110 std::list<SecAttr*> attrs_;
00111 virtual bool equal(const SecAttr &b) const;
00112 virtual bool Add(SecAttrFormat format,XMLNode &val);
00113 };
00114
00115
00116
00117 }
00118
00119 #endif
00120