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