LEFT | RIGHT |
1 # Copyright: 2011 MoinMoin:ThomasWaldmann | 1 # Copyright: 2011 MoinMoin:ThomasWaldmann |
2 # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. | 2 # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. |
3 | 3 |
4 """ | 4 """ |
5 MoinMoin - protecting middleware | 5 MoinMoin - protecting middleware |
6 | 6 |
7 This checks ACLs (access control lists), so a user will not be able to do | 7 This checks ACLs (access control lists), so a user will not be able to do |
8 operations without the respective permissions. | 8 operations without the respective permissions. |
9 | 9 |
10 Note: for method / attribute docs, please see the same methods / attributes in | 10 Note: for method / attribute docs, please see the same methods / attributes in |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 def get_acls(self, itemname): | 44 def get_acls(self, itemname): |
45 for prefix, acls in self.acl_mapping: | 45 for prefix, acls in self.acl_mapping: |
46 if itemname.startswith(prefix): | 46 if itemname.startswith(prefix): |
47 return acls | 47 return acls |
48 else: | 48 else: |
49 raise ValueError('No acl_mapping entry found for item {0!r}'.format(
itemname)) | 49 raise ValueError('No acl_mapping entry found for item {0!r}'.format(
itemname)) |
50 | 50 |
51 def query_parser(self, default_fields, idx_name=LATEST_REVS): | 51 def query_parser(self, default_fields, idx_name=LATEST_REVS): |
52 return self.indexer.query_parser(default_fields, idx_name=idx_name) | 52 return self.indexer.query_parser(default_fields, idx_name=idx_name) |
53 | 53 |
54 def search(self, q, idx_name=LATEST_REVS, **kw): | 54 def search(self, q, idx_name=ALL_REVS, **kw): |
55 for rev in self.indexer.search(q, idx_name, **kw): | 55 for rev in self.indexer.search(q, idx_name, **kw): |
56 rev = ProtectedRevision(self, rev) | 56 rev = ProtectedRevision(self, rev) |
57 if rev.allows(READ): | 57 if rev.allows(READ): |
58 yield rev | 58 yield rev |
59 | 59 |
60 def search_page(self, q, idx_name=LATEST_REVS, pagenum=1, pagelen=10, **kw): | 60 def search_page(self, q, idx_name=LATEST_REVS, pagenum=1, pagelen=10, **kw): |
61 for rev in self.indexer.search_page(q, idx_name, pagenum, pagelen, **kw)
: | 61 for rev in self.indexer.search_page(q, idx_name, pagenum, pagelen, **kw)
: |
62 rev = ProtectedRevision(self, rev) | 62 rev = ProtectedRevision(self, rev) |
63 if rev.allows(READ): | 63 if rev.allows(READ): |
64 yield rev | 64 yield rev |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 self.require(READ) | 204 self.require(READ) |
205 if self: | 205 if self: |
206 for rev in self.item.iter_revs(): | 206 for rev in self.item.iter_revs(): |
207 yield ProtectedRevision(self.protector, rev, p_item=self) | 207 yield ProtectedRevision(self.protector, rev, p_item=self) |
208 | 208 |
209 def __getitem__(self, revid): | 209 def __getitem__(self, revid): |
210 self.require(READ) # XXX | 210 self.require(READ) # XXX |
211 rev = self.item[revid] | 211 rev = self.item[revid] |
212 return ProtectedRevision(self.protector, rev, p_item=self) | 212 return ProtectedRevision(self.protector, rev, p_item=self) |
213 | 213 |
214 def get_revision(self, revid): | 214 def get_revision(self, revid, branch=None): |
215 return self[revid] | 215 rev = self.item.get_revision(revid, branch) |
216 | |
217 def get_revision_by_branch(self, branch): | |
218 self.require(READ) # XXX | |
219 rev = self.item.get_revision_by_branch(branch) | |
220 return ProtectedRevision(self.protector, rev, p_item=self) | 216 return ProtectedRevision(self.protector, rev, p_item=self) |
221 | 217 |
222 def store_revision(self, meta, data, branch, overwrite=False, **kw): | 218 def store_revision(self, meta, data, branch, overwrite=False, **kw): |
223 self.require(WRITE) | 219 self.require(WRITE) |
224 if not self: | 220 if not self: |
225 self.require(CREATE) | 221 self.require(CREATE) |
226 if overwrite: | 222 if overwrite: |
227 self.require(DESTROY) | 223 self.require(DESTROY) |
228 rev = self.item.store_revision(meta, data, branch, overwrite=overwrite,
**kw) | 224 rev = self.item.store_revision(meta, data, branch, overwrite=overwrite,
**kw) |
229 return ProtectedRevision(self.protector, rev, p_item=self) | 225 return ProtectedRevision(self.protector, rev, p_item=self) |
230 | 226 |
231 def store_all_revisions(self, meta, data): | 227 def store_all_revisions(self, meta, data): |
232 self.require(DESTROY) | 228 self.require(DESTROY) |
233 self.item.store_all_revisions(meta, data) | 229 self.item.store_all_revisions(meta, data) |
234 | 230 |
235 def destroy_revision(self, revid): | 231 def destroy_revision(self, revid): |
236 self.require(DESTROY) | 232 self.require(DESTROY) |
237 self.item.destroy_revision(revid) | 233 self.item.destroy_revision(revid) |
238 | 234 |
239 def destroy_all_revisions(self): | 235 def destroy_all_revisions(self): |
240 for rev in self.item.iter_revs(): | 236 for rev in self.item.iter_revs(): |
241 self.destroy_revision(rev.revid) | 237 self.destroy_revision(rev.revid) |
242 | 238 |
| 239 def get_head_revid_by_branch(self, branch): |
| 240 return self.item.get_head_revid_by_branch(branch) |
| 241 |
243 | 242 |
244 class ProtectedRevision(object): | 243 class ProtectedRevision(object): |
245 def __init__(self, protector, rev, p_item=None): | 244 def __init__(self, protector, rev, p_item=None): |
246 """ | 245 """ |
247 :param protector: Protector middleware | 246 :param protector: Protector middleware |
248 :param rev: Revision to protect | 247 :param rev: Revision to protect |
249 :param p_item: instance of ProtectedItem for rev.item (optional) | 248 :param p_item: instance of ProtectedItem for rev.item (optional) |
250 """ | 249 """ |
251 self.protector = protector | 250 self.protector = protector |
252 self.rev = rev | 251 self.rev = rev |
(...skipping 26 matching lines...) Expand all Loading... |
279 | 278 |
280 def __enter__(self): | 279 def __enter__(self): |
281 return self | 280 return self |
282 | 281 |
283 def __exit__(self, exc_type, exc_value, exc_tb): | 282 def __exit__(self, exc_type, exc_value, exc_tb): |
284 self.close() | 283 self.close() |
285 | 284 |
286 def __cmp__(self, other): | 285 def __cmp__(self, other): |
287 return cmp(self.meta, other.meta) | 286 return cmp(self.meta, other.meta) |
288 | 287 |
LEFT | RIGHT |