Shun Miyazawa hace 3 años
padre
commit
e7ec3fb91c

+ 3 - 3
packages/app/.env.development

@@ -29,8 +29,8 @@ OGP_URI="http://ogp:8088"
 # SLACKBOT_WITHOUT_PROXY_BOT_TOKEN=''
 # GROWI_CLOUD_URI='http://growi.cloud'
 # GROWI_APP_ID_FOR_GROWI_CLOUD=012345
-# AUDIT_LOG_ENABLED=false
+AUDIT_LOG_ENABLED=true
 # ACTIVITY_EXPIRATION_SECONDS=2592000
-# AUDIT_LOG_ACTION_GROUP_SIZE=SMALL
-# AUDIT_LOG_ADDITIONAL_ACTIONS=
+AUDIT_LOG_ACTION_GROUP_SIZE=LARGE
+AUDIT_LOG_ADDITIONAL_ACTIONS=PAGE_NOT_FOUND,PAGE_USER_HOME_VIEW,PAGE_FORBIDDEN,PAGE_VIEW,SHARE_LINK_PAGE_VIEW,SHARE_LINK_EXPIRED_PAGE_VIEW,SHARE_LINK_NOT_FOUND,PAGE_NOT_CREATABLE
 # AUDIT_LOG_EXCLUDE_ACTIONS=

+ 14 - 0
packages/app/src/interfaces/activity.ts

@@ -21,6 +21,10 @@ const ACTION_USER_API_TOKEN_UPDATE = 'USER_API_TOKEN_UPDATE';
 const ACTION_USER_EDITOR_SETTINGS_UPDATE = 'USER_EDITOR_SETTINGS_UPDATE';
 const ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE = 'USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE';
 const ACTION_PAGE_VIEW = 'PAGE_VIEW';
+const ACTION_PAGE_USER_HOME_VIEW = 'PAGE_USER_HOME_VIEW';
+const ACTION_PAGE_NOT_FOUND = 'PAGE_NOT_FOUND';
+const ACTION_PAGE_FORBIDDEN = 'PAGE_FORBIDDEN';
+const ACTION_PAGE_NOT_CREATABLE = 'PAGE_NOT_CREATABLE';
 const ACTION_PAGE_LIKE = 'PAGE_LIKE';
 const ACTION_PAGE_UNLIKE = 'PAGE_UNLIKE';
 const ACTION_PAGE_BOOKMARK = 'PAGE_BOOKMARK';
@@ -45,6 +49,9 @@ const ACTION_SHARE_LINK_CREATE = 'SHARE_LINK_CREATE';
 const ACTION_SHARE_LINK_DELETE = 'SHARE_LINK_DELETE';
 const ACTION_SHARE_LINK_DELETE_BY_PAGE = 'SHARE_LINK_DELETE_BY_PAGE';
 const ACTION_SHARE_LINK_ALL_DELETE = 'SHARE_LINK_ALL_DELETE';
+const ACTION_SHARE_LINK_PAGE_VIEW = 'SHARE_LINK_PAGE_VIEW';
+const ACTION_SHARE_LINK_EXPIRED_PAGE_VIEW = 'SHARE_LINK_EXPIRED_PAGE_VIEW';
+const ACTION_SHARE_LINK_NOT_FOUND = 'SHARE_LINK_NOT_FOUND';
 const ACTION_ATTACHMENT_ADD = 'ATTACHMENT_ADD';
 const ACTION_ATTACHMENT_REMOVE = 'ATTACHMENT_REMOVE';
 const ACTION_ATTACHMENT_DOWNLOAD = 'ACTION_ATTACHMENT_DOWNLOAD';
@@ -141,6 +148,10 @@ export const SupportedAction = {
   ACTION_USER_EDITOR_SETTINGS_UPDATE,
   ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE,
   ACTION_PAGE_VIEW,
+  ACTION_PAGE_USER_HOME_VIEW,
+  ACTION_PAGE_FORBIDDEN,
+  ACTION_PAGE_NOT_FOUND,
+  ACTION_PAGE_NOT_CREATABLE,
   ACTION_PAGE_LIKE,
   ACTION_PAGE_UNLIKE,
   ACTION_PAGE_BOOKMARK,
@@ -165,6 +176,9 @@ export const SupportedAction = {
   ACTION_SHARE_LINK_DELETE,
   ACTION_SHARE_LINK_DELETE_BY_PAGE,
   ACTION_SHARE_LINK_ALL_DELETE,
+  ACTION_SHARE_LINK_PAGE_VIEW,
+  ACTION_SHARE_LINK_EXPIRED_PAGE_VIEW,
+  ACTION_SHARE_LINK_NOT_FOUND,
   ACTION_ATTACHMENT_ADD,
   ACTION_ATTACHMENT_REMOVE,
   ACTION_ATTACHMENT_DOWNLOAD,

+ 1 - 1
packages/app/src/server/routes/apiv3/page.js

@@ -618,7 +618,7 @@ module.exports = (crowi) => {
         username: req.user?.username,
       },
     };
-    await crowi.activityService.createActivity(SupportedAction.ACTION_PAGE_EXPORT, parameters);
+    await crowi.activityService.createActivity(parameters);
 
     return stream.pipe(res);
   });

+ 1 - 1
packages/app/src/server/routes/attachment.js

@@ -227,7 +227,7 @@ module.exports = function(crowi, app) {
         username: req.user?.username,
       },
     };
-    await crowi.activityService.createActivity(SupportedAction.ACTION_ATTACHMENT_DOWNLOAD, parameters);
+    await crowi.activityService.createActivity(parameters);
 
     return fileStream.pipe(res);
   }

+ 44 - 5
packages/app/src/server/routes/page.js

@@ -309,16 +309,20 @@ module.exports = function(crowi, app) {
     const pathOrId = req.params.id || path;
 
     let view;
+    let action;
     const renderVars = { path };
 
     if (!isCreatablePage(path)) {
       view = 'layout-growi/not_creatable';
+      action = SupportedAction.ACTION_PAGE_NOT_CREATABLE;
     }
     else if (req.isForbidden) {
       view = 'layout-growi/forbidden';
+      action = SupportedAction.ACTION_PAGE_FORBIDDEN;
     }
     else {
       view = 'layout-growi/not_found';
+      action = SupportedAction.ACTION_PAGE_NOT_FOUND;
 
       // retrieve templates
       if (req.user != null) {
@@ -345,6 +349,18 @@ module.exports = function(crowi, app) {
     await addRenderVarsForPageTree(renderVars, pathOrId, req.user);
     await addRenderVarsWhenNotFound(renderVars, pathOrId);
     await addRenderVarsWhenEmptyPage(renderVars, req.isEmpty, req.pageId);
+
+    const parameters = {
+      ip:  req.ip,
+      endpoint: req.originalUrl,
+      action,
+      user: req.user?._id,
+      snapshot: {
+        username: req.user?.username,
+      },
+    };
+    crowi.activityService.createActivity(parameters);
+
     return res.render(view, renderVars);
   }
 
@@ -421,7 +437,7 @@ module.exports = function(crowi, app) {
         username: req.user?.username,
       },
     };
-    crowi.activityService.createActivity(SupportedAction.ACTION_PAGE_VIEW, parameters);
+    crowi.activityService.createActivity(parameters);
 
     return res.render(view, renderVars);
   }
@@ -484,13 +500,13 @@ module.exports = function(crowi, app) {
     const parameters = {
       ip:  req.ip,
       endpoint: req.originalUrl,
-      action: SupportedAction.ACTION_PAGE_VIEW,
+      action: isUsersHomePage(path) ? SupportedAction.ACTION_PAGE_USER_HOME_VIEW : SupportedAction.ACTION_PAGE_VIEW,
       user: req.user?._id,
       snapshot: {
         username: req.user?.username,
       },
     };
-    crowi.activityService.createActivity(SupportedAction.ACTION_PAGE_VIEW, parameters);
+    crowi.activityService.createActivity(parameters);
 
     return res.render(view, renderVars);
   }
@@ -525,13 +541,30 @@ module.exports = function(crowi, app) {
     const revisionId = req.query.revision;
     const renderVars = {};
 
+    const parameters = {
+      ip:  req.ip,
+      endpoint: req.originalUrl,
+      user: req.user?._id,
+      snapshot: {
+        username: req.user?.username,
+      },
+    };
+
     const shareLink = await ShareLink.findOne({ _id: linkId }).populate('relatedPage');
 
     if (shareLink == null || shareLink.relatedPage == null || shareLink.relatedPage.isEmpty) {
+
+      Object.assign(parameters, { action: SupportedAction.ACTION_SHARE_LINK_NOT_FOUND });
+      crowi.activityService.createActivity(parameters);
+
       // page or sharelink are not found (or page is empty: abnormaly)
       return res.render('layout-growi/not_found_shared_page');
     }
     if (crowi.configManager.getConfig('crowi', 'security:disableLinkSharing')) {
+
+      Object.assign(parameters, { action: SupportedAction.ACTION_SHARE_LINK_NOT_FOUND });
+      crowi.activityService.createActivity(parameters);
+
       return res.render('layout-growi/forbidden');
     }
 
@@ -539,6 +572,9 @@ module.exports = function(crowi, app) {
 
     // check if share link is expired
     if (shareLink.isExpired()) {
+      Object.assign(parameters, { action: SupportedAction.ACTION_SHARE_LINK_EXPIRED_PAGE_VIEW });
+      crowi.activityService.createActivity(parameters);
+
       // page is not found
       return res.render('layout-growi/expired_shared_page', renderVars);
     }
@@ -561,6 +597,9 @@ module.exports = function(crowi, app) {
     addRenderVarsForPage(renderVars, page);
     addRenderVarsForScope(renderVars, page);
 
+    Object.assign(parameters, { action: SupportedAction.ACTION_SHARE_LINK_PAGE_VIEW });
+    crowi.activityService.createActivity(parameters);
+
     return res.render('layout-growi/shared_page', renderVars);
   };
 
@@ -681,7 +720,7 @@ module.exports = function(crowi, app) {
         username: req.user?.username,
       },
     };
-    crowi.activityService.createActivity(SupportedAction.ACTION_PAGE_VIEW, parameters);
+    crowi.activityService.createActivity(parameters);
     return redirector(req, res, next, path);
   };
 
@@ -698,7 +737,7 @@ module.exports = function(crowi, app) {
         username: req.user?.username,
       },
     };
-    crowi.activityService.createActivity(SupportedAction.ACTION_PAGE_VIEW, parameters);
+    crowi.activityService.createActivity(parameters);
 
     return redirector(req, res, next, path);
   };

+ 2 - 2
packages/app/src/server/service/activity.ts

@@ -103,8 +103,8 @@ class ActivityService {
   }
 
   // for GET request
-  createActivity = async function(action: SupportedActionType, parameters): Promise<void> {
-    const shoudCreateActivity = this.crowi.activityService.shoudUpdateActivity(action);
+  createActivity = async function(parameters): Promise<void> {
+    const shoudCreateActivity = this.crowi.activityService.shoudUpdateActivity(parameters.action);
     if (shoudCreateActivity) {
       try {
         await Activity.createByParameters(parameters);