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