SecurityResource.hpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef SECURITYRESOURCE_INCL
  14. #define SECURITYRESOURCE_INCL
  15. #include "seclib.hpp"
  16. class CSecurityResource : implements ISecResource, public CInterface
  17. {
  18. private:
  19. StringAttr m_name;
  20. StringBuffer m_value;
  21. SecAccessFlags m_access;
  22. SecAccessFlags m_required_access;
  23. Owned<IProperties> m_parameters;
  24. StringBuffer m_description;
  25. SecResourceType m_resourcetype;
  26. public:
  27. IMPLEMENT_IINTERFACE
  28. CSecurityResource(const char *name) : m_name(name), m_access(SecAccess_Unknown), m_required_access(SecAccess_Unknown), m_resourcetype(RT_DEFAULT)
  29. {
  30. }
  31. void addAccess(int flags)
  32. {
  33. m_access = SecAccessFlags((int)m_access | flags);
  34. }
  35. //interface ISecResource : extends IInterface
  36. const char * getName()
  37. {
  38. return m_name.get();
  39. }
  40. void setAccessFlags(SecAccessFlags flags)
  41. {
  42. m_access = flags;
  43. }
  44. SecAccessFlags getAccessFlags()
  45. {
  46. return m_access;
  47. }
  48. virtual int addParameter(const char* name, const char* value)
  49. {
  50. if (!m_parameters)
  51. m_parameters.setown(createProperties(false));
  52. m_parameters->setProp(name, value);
  53. return 0;
  54. }
  55. virtual const char * getParameter(const char * name)
  56. {
  57. if (m_parameters)
  58. {
  59. const char *value = m_parameters->queryProp(name);
  60. return value;
  61. }
  62. return NULL;
  63. }
  64. virtual IPropertyIterator * getParameterIterator() const override
  65. {
  66. return (m_parameters.get() ? m_parameters->getIterator() : nullptr);
  67. }
  68. virtual void setRequiredAccessFlags(SecAccessFlags flags)
  69. {
  70. m_required_access = flags;
  71. }
  72. virtual SecAccessFlags getRequiredAccessFlags()
  73. {
  74. return m_required_access;
  75. }
  76. virtual void setDescription(const char* description)
  77. {
  78. m_description.clear().append(description);
  79. }
  80. virtual const char* getDescription()
  81. {
  82. return m_description.str();
  83. }
  84. virtual void setValue(const char* Value) override
  85. {
  86. m_value.clear().append(Value);
  87. }
  88. virtual const char* getValue()
  89. {
  90. return m_value.str();
  91. }
  92. virtual ISecResource* clone()
  93. {
  94. CSecurityResource* _res = new CSecurityResource(m_name.get());
  95. if(!_res)
  96. return NULL;
  97. _res->setResourceType(m_resourcetype);
  98. _res->setDescription(m_description.str());
  99. _res->setValue(m_value.str());
  100. _res->setRequiredAccessFlags(getRequiredAccessFlags());
  101. _res->setAccessFlags(getAccessFlags());
  102. if(!m_parameters)
  103. return _res;
  104. Owned<IPropertyIterator> Itr = m_parameters->getIterator();
  105. Itr->first();
  106. while(Itr->isValid())
  107. {
  108. _res->addParameter(Itr->getPropKey(),m_parameters->queryProp(Itr->getPropKey()));
  109. Itr->next();
  110. }
  111. return _res;
  112. }
  113. virtual void copy(ISecResource* from)
  114. {
  115. if(!from)
  116. return;
  117. setDescription(from->getDescription());
  118. setValue(from->getValue());
  119. setAccessFlags(from->getAccessFlags());
  120. Owned<IPropertyIterator> Itr = from->getParameterIterator();
  121. if(!Itr.get())
  122. return;
  123. Itr->first();
  124. while(Itr->isValid())
  125. {
  126. addParameter(Itr->getPropKey(), from->getParameter(Itr->getPropKey()));
  127. Itr->next();
  128. }
  129. return;
  130. }
  131. virtual SecResourceType getResourceType()
  132. {
  133. return m_resourcetype;
  134. }
  135. virtual void setResourceType(SecResourceType resourcetype)
  136. {
  137. m_resourcetype = resourcetype;
  138. }
  139. StringBuffer& toString(StringBuffer& s)
  140. {
  141. s.appendf("%s: %s (value: %s, rqr'ed access: %d, type: %s)", m_name.get(), m_description.str(),
  142. m_value.str(), m_required_access, resTypeDesc(m_resourcetype));
  143. return s;
  144. }
  145. };
  146. #endif // SECURITYRESOURCE_INCL
  147. //end