diff --git a/RNS/Utilities/rngit/pages.py b/RNS/Utilities/rngit/pages.py index c0f14578..9a55c8d0 100644 --- a/RNS/Utilities/rngit/pages.py +++ b/RNS/Utilities/rngit/pages.py @@ -150,6 +150,7 @@ class NomadNetworkNode(): self.templates["stats"] = DEFAULT_STATS_TEMPLATE self.templates["work"] = DEFAULT_WORK_TEMPLATE self.templates["work_doc"] = DEFAULT_WORK_DOC_TEMPLATE + self.templates["no_ident"] = DEFAULT_NO_IDENT_TEMPLATE self.templatesdir = self.owner.configdir+"/templates" self.use_nerdfonts = self.USE_NERDFONTS self.highlight_syntax = True @@ -372,6 +373,10 @@ class NomadNetworkNode(): self.owner.view_succeeded(None, None, remote_identity) page_content = "".join(content_parts) nav_content = "".join(nav_parts) + + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", nav_content=nav_content, st=st) + return self.render_template(page_content, nav_content=nav_content, template="front", st=st) def serve_group_page(self, path, data, request_id, link_id, remote_identity, requested_at): @@ -392,6 +397,9 @@ class NomadNetworkNode(): nav_parts.append(breadcrumb + "\n") nav_content = "".join(nav_parts) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", nav_content=nav_content, st=st) + accessible_repos = self.get_accessible_repositories(remote_identity, group_name) if not group_name or group_name not in self.owner.groups or not accessible_repos: @@ -441,6 +449,9 @@ class NomadNetworkNode(): repo = self.get_accessible_repository(remote_identity, group_name, repo_name) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", nav_content="".join(nav_parts), st=st) + if not repo: content = self.m_heading("Not Found", 1) + "\nThe requested repository was not found.\n" return self.render_template(content, nav_content="".join(nav_parts), st=st) @@ -554,6 +565,9 @@ class NomadNetworkNode(): except (ValueError, TypeError): page_num = 0 + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Not Found", 1) + "\n\nThe requested repository does not exist or you do not have access to it.\n" @@ -691,6 +705,9 @@ class NomadNetworkNode(): render = True if render else False raw = True if raw else False + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Not Found", 1) + "\n\nThe requested repository does not exist or you do not have access to it.\n" @@ -823,6 +840,9 @@ class NomadNetworkNode(): except (ValueError, TypeError): page_num = 0 + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Not Found", 1) + "\n\nThe requested repository does not exist or you do not have access to it.\n" @@ -902,6 +922,9 @@ class NomadNetworkNode(): content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Error", 2) + "\nThe requested repository was not found.\n" @@ -1057,6 +1080,9 @@ class NomadNetworkNode(): nav_parts.append(">>\n" + breadcrumb + "\n") nav_content = "".join(nav_parts) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + if not group_name or not repo_name: content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) @@ -1155,6 +1181,9 @@ class NomadNetworkNode(): if not group_name or not repo_name: content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) + + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) content_parts = [] nav_parts = [] @@ -1256,6 +1285,9 @@ class NomadNetworkNode(): content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Error", 2) + "\nThe requested repository was not found.\n" @@ -1320,6 +1352,9 @@ class NomadNetworkNode(): content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Error", 2) + "\nThe requested repository was not found.\n" @@ -1422,6 +1457,9 @@ class NomadNetworkNode(): content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + repo = self.get_accessible_repository(remote_identity, group_name, repo_name) if not repo: content = self.m_heading("Error", 2) + "\nThe requested repository was not found.\n" @@ -1522,6 +1560,9 @@ class NomadNetworkNode(): content = self.m_heading("Error", 2) + "\nInvalid request\n" return self.render_template(content, st=st) + if not remote_identity and self.null_ident.hash in self.owner.blocked_identities: + return self.render_template("", template="no_ident", st=st) + try: doc_id = int(doc_id) except: content = self.m_heading("Error", 2) + "\nInvalid document ID\n" @@ -2795,5 +2836,8 @@ DEFAULT_WORK_TEMPLATE = """{PAGE_CONTENT}""" DEFAULT_WORK_DOC_TEMPLATE = """{PAGE_CONTENT}""" +# Error state templates +DEFAULT_NO_IDENT_TEMPLATE = """>>No Identity\n\nThis page requires identification, and none was received.\n""" + # Fallback template FALLBACK_TEMPLATE = """{PAGE_CONTENT}""" \ No newline at end of file diff --git a/docs/source/git.rst b/docs/source/git.rst index 6cedd1b0..61c379d3 100644 --- a/docs/source/git.rst +++ b/docs/source/git.rst @@ -683,6 +683,7 @@ The following template files are supported: - ``commit.mu`` - Individual commit detail page - ``refs.mu`` - Branches and tags listing - ``stats.mu`` - Statistics page +- ``no_ident.mu`` - Displayed to non-identified initiators if blocked Templates can include the following variables: