You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by di...@apache.org on 2022/09/01 16:47:45 UTC

[allura] 01/04: [#8458] audit log - discussion - log forum admin actions to auditlog

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

dill0wn pushed a commit to branch dw/8458
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 9527db33ccb468b5e8bbd2c6cc59329684a1032b
Author: Dillon Walls <di...@slashdotmedia.com>
AuthorDate: Wed Aug 31 21:01:15 2022 +0000

    [#8458] audit log - discussion - log forum admin actions to auditlog
---
 ForgeDiscussion/forgediscussion/forum_main.py      | 27 ++++++++++++++--------
 .../tests/functional/test_forum_admin.py           | 10 ++++----
 2 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/ForgeDiscussion/forgediscussion/forum_main.py b/ForgeDiscussion/forgediscussion/forum_main.py
index 262b5a196..db84bf62a 100644
--- a/ForgeDiscussion/forgediscussion/forum_main.py
+++ b/ForgeDiscussion/forgediscussion/forum_main.py
@@ -315,6 +315,15 @@ class ForumAdminController(DefaultAdminController):
     def update_forums(self, forum=None, **kw):
         if forum is None:
             forum = []
+
+        mount_point = self.app.config.options['mount_point']
+
+        def set_value(forum, name, val):
+            if getattr(forum, name, None) != val:
+                M.AuditLog.log('{}: {} - set option "{}" {} => {}'.format(
+                    mount_point, forum.name, name, getattr(forum, name, None), val))
+            setattr(forum, name, val)
+
         for f in forum:
             forum = DM.Forum.query.get(_id=ObjectId(str(f['id'])))
             if f.get('delete'):
@@ -331,23 +340,23 @@ class ForumAdminController(DefaultAdminController):
                 if '.' in f['shortname'] or '/' in f['shortname'] or ' ' in f['shortname']:
                     flash('Shortname cannot contain space . or /', 'error')
                     redirect('.')
-                forum.name = f['name']
-                forum.shortname = f['shortname']
-                forum.description = f['description']
-                forum.monitoring_email = f['monitoring_email']
+                set_value(forum, 'name', f['name'])
+                set_value(forum, 'shortname', f['shortname'])
+                set_value(forum, 'description', f['description'])
+                set_value(forum, 'monitoring_email', f['monitoring_email'])
                 if 'members_only' in f:
                     if 'anon_posts' in f:
                         flash(
                             'You cannot have anonymous posts in a members only forum.', 'warning')
-                        forum.anon_posts = False
+                        set_value(forum, 'anon_posts', False)
                         del f['anon_posts']
-                    forum.members_only = True
+                    set_value(forum, 'members_only', True)
                 else:
-                    forum.members_only = False
+                    set_value(forum, 'members_only', False)
                 if 'anon_posts' in f:
-                    forum.anon_posts = True
+                    set_value(forum, 'anon_posts', True)
                 else:
-                    forum.anon_posts = False
+                    set_value(forum, 'anon_posts', False)
                 role_anon = M.ProjectRole.anonymous()._id
                 if forum.members_only:
                     role_developer = M.ProjectRole.by_name('Developer')._id
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
index ca14d1c37..19babaca5 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
@@ -15,11 +15,9 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import os
-import allura
 import logging
 
-import PIL
+import re
 from alluratest.controller import TestController
 from allura.lib import helpers as h
 from allura import model as M
@@ -43,6 +41,8 @@ class TestForumAdmin(TestController):
         form['add_forum.name'] = 'Test Forum'
         r = form.submit().follow()
         assert 'Test Forum' in r
+        audit_log = M.AuditLog.query.find({'project_id': project._id}).sort('_id', -1).first()
+        assert 'created forum "Test Forum"' in audit_log.message
         h.set_context('test', 'Forum', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
         r = self.app.post('/admin/discussion/update_forums',
@@ -52,8 +52,8 @@ class TestForumAdmin(TestController):
                                   'forum-0.shortname': 'NewTestForum',
                                   'forum-0.description': 'My desc',
                                   'forum-0.monitoring_email': ''})
-        audit_log = M.AuditLog.query.find({'project_id': project._id}).sort('_id', -1).first()
-        assert 'created forum "Test Forum"' in audit_log.message
+        audit_logs = M.AuditLog.query.find({'project_id': project._id, 'message': re.compile(' set option ')}).all()
+        assert len(audit_logs) == 4
         r = self.app.get('/admin/discussion/forums')
         assert 'New Test Forum' in r
         assert 'My desc' in r