You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by gc...@apache.org on 2022/06/27 17:12:06 UTC

[allura] 01/01: [#8443] nofollow on links that point to code tool repositories

This is an automated email from the ASF dual-hosted git repository.

gcruz pushed a commit to branch gc/8443
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 32e0963db13e8fc06167d8d6a1fc64b25c65e409
Author: Guillermo Cruz <gu...@slashdotmedia.com>
AuthorDate: Mon Jun 27 11:11:47 2022 -0600

    [#8443] nofollow on links that point to code tool repositories
---
 Allura/allura/model/project.py                    | 9 +++++++++
 ForgeActivity/forgeactivity/main.py               | 4 +++-
 ForgeActivity/forgeactivity/templates/macros.html | 4 +++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index 0e35ae309..0fc0e7529 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -337,6 +337,15 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject):
     def get_tool_data(self, tool, key, default=None):
         return self.tool_data.get(tool, {}).get(key, default)
 
+    def noindex_tool_name(self, activity_url, tools=None):
+        noindex_tool_names = ['git', 'svn', 'hg']
+        tools = self.app_configs if tools is None else tools
+        for c in tools:
+            if hasattr(c, 'tool_name') and c.tool_name in noindex_tool_names:
+                if c.options.mount_point in activity_url:
+                    return True
+        return False
+
     def set_tool_data(self, tool, **kw):
         d = self.tool_data.setdefault(tool, {})
         d.update(kw)
diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py
index 9b6399301..986102fa3 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -148,6 +148,7 @@ class ForgeActivityController(BaseController):
                     t.actor.activity_extras.icon_url = re.sub(r'([&?])d=[^&]*',
                                                               r'\1d={}'.format(default_avatar),
                                                               t.actor.activity_extras.icon_url)
+            t.obj.noindex = followee.noindex_tool_name(activity_obj.activity_url)
             session(t).expunge(t)  # don't save back these changes
 
         if extra_limit == limit:
@@ -329,7 +330,8 @@ class ForgeActivityProfileSection(ProfileSectionBase):
             session(activity).expunge(activity)
             activity_obj = get_activity_object(activity.obj)
             activity.obj.project = getattr(activity_obj, 'project', None)
-
+            if hasattr(c, 'project'):
+                activity.obj.noindex = c.project.noindex_tool_name(activity.obj.activity_url)
         context.update({
             'follow_toggle': W.follow_toggle,
             'following': g.director.is_connected(c.user, self.user),
diff --git a/ForgeActivity/forgeactivity/templates/macros.html b/ForgeActivity/forgeactivity/templates/macros.html
index 4f877324a..8b08adbf0 100644
--- a/ForgeActivity/forgeactivity/templates/macros.html
+++ b/ForgeActivity/forgeactivity/templates/macros.html
@@ -19,7 +19,9 @@
 
 {% macro activity_obj(o) %}
   {% if o.activity_url %}
-    <a href="{{o.activity_url}}">{{o.activity_name}}</a>
+    <a href="{{o.activity_url}}"
+    {% if 'noindex' in o and o.noindex %} rel="nofollow" {% endif %}
+    >{{o.activity_name}}</a>
   {% else %}
     {{o.activity_name}}
   {% endif %}