MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / getUserContentRules

Method getUserContentRules

src/Content/ContentManager.py:493–555  ·  view source on GitHub ↗
(self, parent_content, inner_path, content)

Source from the content-addressed store, hash-verified

491 # Get rules for a user file
492 # Return: The rules of the file or False if not allowed
493 def getUserContentRules(self, parent_content, inner_path, content):
494 user_contents = parent_content["user_contents"]
495
496 # Delivered for directory
497 if "inner_path" in parent_content:
498 parent_content_dir = helper.getDirname(parent_content["inner_path"])
499 user_address = re.match(r"([A-Za-z0-9]*?)/", inner_path[len(parent_content_dir):]).group(1)
500 else:
501 user_address = re.match(r".*/([A-Za-z0-9]*?)/.*?$", inner_path).group(1)
502
503 try:
504 if not content:
505 content = self.site.storage.loadJson(inner_path) # Read the file if no content specified
506 user_urn = "%s/%s" % (content["cert_auth_type"], content["cert_user_id"]) # web/nofish@zeroid.bit
507 cert_user_id = content["cert_user_id"]
508 except Exception: # Content.json not exist
509 user_urn = "n-a/n-a"
510 cert_user_id = "n-a"
511
512 if user_address in user_contents["permissions"]:
513 rules = copy.copy(user_contents["permissions"].get(user_address, {})) # Default rules based on address
514 else:
515 rules = copy.copy(user_contents["permissions"].get(cert_user_id, {})) # Default rules based on username
516
517 if rules is False:
518 banned = True
519 rules = {}
520 else:
521 banned = False
522 if "signers" in rules:
523 rules["signers"] = rules["signers"][:] # Make copy of the signers
524 for permission_pattern, permission_rules in list(user_contents["permission_rules"].items()): # Regexp rules
525 if not SafeRe.match(permission_pattern, user_urn):
526 continue # Rule is not valid for user
527 # Update rules if its better than current recorded ones
528 for key, val in permission_rules.items():
529 if key not in rules:
530 if type(val) is list:
531 rules[key] = val[:] # Make copy
532 else:
533 rules[key] = val
534 elif type(val) is int: # Int, update if larger
535 if val > rules[key]:
536 rules[key] = val
537 elif hasattr(val, "startswith"): # String, update if longer
538 if len(val) > len(rules[key]):
539 rules[key] = val
540 elif type(val) is list: # List, append
541 rules[key] += val
542
543 # Accepted cert signers
544 rules["cert_signers"] = user_contents.get("cert_signers", {})
545 rules["cert_signers_pattern"] = user_contents.get("cert_signers_pattern")
546
547 if "signers" not in rules:
548 rules["signers"] = []
549
550 if not banned:

Callers 1

getRulesMethod · 0.95

Calls 4

loadJsonMethod · 0.80
itemsMethod · 0.80
copyMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected