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 <[email protected]> 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
