Shun Miyazawa 3 лет назад
Родитель
Сommit
03201a48e7

+ 24 - 3
packages/app/src/interfaces/activity.ts

@@ -9,7 +9,14 @@ const MODEL_COMMENT = 'Comment';
 // Action
 const ACTION_UNSETTLED = 'UNSETTLED';
 const ACTION_USER_REGISTRATION_SUCCESS = 'USER_REGISTRATION_SUCCESS';
-const ACTION_USER_LOGIN_SUCCESS = 'USER_LOGIN_SUCCESS';
+const ACTION_USER_LOGIN_WITH_LOCAL = 'USER_LOGIN_WITH_LOCAL';
+const ACTION_USER_LOGIN_WITH_LDAP = 'USER_LOGIN_WITH_LDAP';
+const ACTION_USER_LOGIN_WITH_GOOGLE = 'USER_LOGIN_WITH_GOOGLE';
+const ACTION_USER_LOGIN_WITH_GITHUB = 'USER_LOGIN_WITH_GITHUB';
+const ACTION_USER_LOGIN_WITH_TWITTER = 'USER_LOGIN_WITH_TWITTER';
+const ACTION_USER_LOGIN_WITH_OIDC = 'USER_LOGIN_WITH_OIDC';
+const ACTION_USER_LOGIN_WITH_SAML = 'USER_LOGIN_WITH_SAML';
+const ACTION_USER_LOGIN_WITH_BASIC = 'USER_LOGIN_WITH_BASIC';
 const ACTION_USER_LOGIN_FAILURE = 'USER_LOGIN_FAILURE';
 const ACTION_USER_LOGOUT = 'USER_LOGOUT';
 const ACTION_USER_PERSONAL_SETTINGS_UPDATE = 'USER_PERSONAL_SETTINGS_UPDATE';
@@ -139,7 +146,14 @@ export const SupportedActionCategory = {
 export const SupportedAction = {
   ACTION_UNSETTLED,
   ACTION_USER_REGISTRATION_SUCCESS,
-  ACTION_USER_LOGIN_SUCCESS,
+  ACTION_USER_LOGIN_WITH_LOCAL,
+  ACTION_USER_LOGIN_WITH_LDAP,
+  ACTION_USER_LOGIN_WITH_GOOGLE,
+  ACTION_USER_LOGIN_WITH_GITHUB,
+  ACTION_USER_LOGIN_WITH_TWITTER,
+  ACTION_USER_LOGIN_WITH_OIDC,
+  ACTION_USER_LOGIN_WITH_SAML,
+  ACTION_USER_LOGIN_WITH_BASIC,
   ACTION_USER_LOGIN_FAILURE,
   ACTION_USER_LOGOUT,
   ACTION_USER_PERSONAL_SETTINGS_UPDATE,
@@ -267,7 +281,14 @@ export const ActionGroupSize = {
 } as const;
 
 export const SmallActionGroup = {
-  ACTION_USER_LOGIN_SUCCESS,
+  ACTION_USER_LOGIN_WITH_LOCAL,
+  ACTION_USER_LOGIN_WITH_LDAP,
+  ACTION_USER_LOGIN_WITH_GOOGLE,
+  ACTION_USER_LOGIN_WITH_GITHUB,
+  ACTION_USER_LOGIN_WITH_TWITTER,
+  ACTION_USER_LOGIN_WITH_OIDC,
+  ACTION_USER_LOGIN_WITH_SAML,
+  ACTION_USER_LOGIN_WITH_BASIC,
   ACTION_USER_LOGIN_FAILURE,
   ACTION_USER_LOGOUT,
   ACTION_PAGE_CREATE,

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

@@ -106,7 +106,7 @@ module.exports = function(crowi, app) {
   app.get('/passport/github/callback'             , loginPassport.loginPassportGitHubCallback   , loginPassport.loginFailure);
   app.get('/passport/twitter/callback'            , loginPassport.loginPassportTwitterCallback  , loginPassport.loginFailure);
   app.get('/passport/oidc/callback'               , loginPassport.loginPassportOidcCallback     , loginPassport.loginFailure);
-  app.post('/passport/saml/callback'              , loginPassport.loginPassportSamlCallback     , loginPassport.loginFailure);
+  app.post('/passport/saml/callback'              , addActivity, loginPassport.loginPassportSamlCallback, loginPassport.loginFailure);
 
   app.post('/_api/login/testLdap'    , apiLimiter , loginRequiredStrictly , loginFormValidator.loginRules() , loginFormValidator.loginValidation , loginPassport.testLdapCredentials);
 

+ 67 - 7
packages/app/src/server/routes/login-passport.js

@@ -33,9 +33,6 @@ module.exports = function(crowi, app) {
     // remove session.redirectTo
     delete req.session.redirectTo;
 
-    const parameters = { action: SupportedAction.ACTION_USER_LOGIN_SUCCESS };
-    activityEvent.emit('update', res.locals.activity._id, parameters);
-
     return res.safeRedirect(redirectTo);
   };
 
@@ -143,6 +140,10 @@ module.exports = function(crowi, app) {
     // login
     await req.logIn(user, (err) => {
       if (err) { debug(err.message); return next() }
+
+      const parameters = { action: SupportedAction.ACTION_USER_LOGIN_WITH_LDAP };
+      activityEvent.emit('update', res.locals.activity._id, parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };
@@ -235,6 +236,9 @@ module.exports = function(crowi, app) {
       req.logIn(user, (err) => {
         if (err) { debug(err.message); return next() }
 
+        const parameters = { action: SupportedAction.ACTION_USER_LOGIN_WITH_LOCAL };
+        activityEvent.emit('update', res.locals.activity._id, parameters);
+
         return loginSuccessHandler(req, res, user);
       });
     })(req, res, next);
@@ -303,8 +307,20 @@ module.exports = function(crowi, app) {
     const user = await externalAccount.getPopulatedUser();
 
     // login
-    req.logIn(user, (err) => {
+    req.logIn(user, async(err) => {
       if (err) { debug(err.message); return next() }
+
+      const parameters = {
+        ip:  req.ip,
+        endpoint: req.originalUrl,
+        action: SupportedAction.ACTION_USER_LOGIN_WITH_GOOGLE,
+        user: req.user?._id,
+        snapshot: {
+          username: req.user?.username,
+        },
+      };
+      await crowi.activityService.createActivity(parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };
@@ -345,8 +361,20 @@ module.exports = function(crowi, app) {
     const user = await externalAccount.getPopulatedUser();
 
     // login
-    req.logIn(user, (err) => {
+    req.logIn(user, async(err) => {
       if (err) { debug(err.message); return next() }
+
+      const parameters = {
+        ip:  req.ip,
+        endpoint: req.originalUrl,
+        action: SupportedAction.ACTION_USER_LOGIN_WITH_GITHUB,
+        user: req.user?._id,
+        snapshot: {
+          username: req.user?.username,
+        },
+      };
+      await crowi.activityService.createActivity(parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };
@@ -387,8 +415,20 @@ module.exports = function(crowi, app) {
     const user = await externalAccount.getPopulatedUser();
 
     // login
-    req.logIn(user, (err) => {
+    req.logIn(user, async(err) => {
       if (err) { debug(err.message); return next() }
+
+      const parameters = {
+        ip:  req.ip,
+        endpoint: req.originalUrl,
+        action: SupportedAction.ACTION_USER_LOGIN_WITH_TWITTER,
+        user: req.user?._id,
+        snapshot: {
+          username: req.user?.username,
+        },
+      };
+      await crowi.activityService.createActivity(parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };
@@ -435,8 +475,20 @@ module.exports = function(crowi, app) {
 
     // login
     const user = await externalAccount.getPopulatedUser();
-    req.logIn(user, (err) => {
+    req.logIn(user, async(err) => {
       if (err) { debug(err.message); return next() }
+
+      const parameters = {
+        ip:  req.ip,
+        endpoint: req.originalUrl,
+        action: SupportedAction.ACTION_USER_LOGIN_WITH_OIDC,
+        user: req.user?._id,
+        snapshot: {
+          username: req.user?.username,
+        },
+      };
+      await crowi.activityService.createActivity(parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };
@@ -499,6 +551,10 @@ module.exports = function(crowi, app) {
         logger.error(err);
         return loginFailureHandler(req, res);
       }
+
+      const parameters = { action: SupportedAction.ACTION_USER_LOGIN_WITH_SAML };
+      activityEvent.emit('update', res.locals.activity._id, parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };
@@ -541,6 +597,10 @@ module.exports = function(crowi, app) {
     const user = await externalAccount.getPopulatedUser();
     await req.logIn(user, (err) => {
       if (err) { debug(err.message); return next() }
+
+      const parameters = { action: SupportedAction.ACTION_USER_LOGIN_WITH_BASIC };
+      activityEvent.emit('update', res.locals.activity._id, parameters);
+
       return loginSuccessHandler(req, res, user);
     });
   };