nodebb-plugin-session-sharing 7.2.3 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- const groups = require.main.require('./src/groups');
3
+ const groups = nodebb.require('./src/groups');
4
4
 
5
- const Controllers = {};
5
+ const Controllers = module.exports;
6
6
 
7
7
  Controllers.renderAdminPage = async (req, res) => {
8
8
  const groupData = await groups.getGroupsFromSet('groups:visible:createtime', 0, -1);
@@ -58,5 +58,3 @@ Controllers.process = async (req, res) => {
58
58
  });
59
59
  }
60
60
  };
61
-
62
- module.exports = Controllers;
package/library.js CHANGED
@@ -1,23 +1,23 @@
1
1
  'use strict';
2
2
 
3
- const winston = module.parent.require('winston');
4
- const nconf = module.parent.require('nconf');
3
+ const winston = nodebb.require('winston');
4
+ const nconf = nodebb.require('nconf');
5
5
 
6
6
  const util = require('util');
7
7
 
8
8
  const _ = require('lodash');
9
9
  const jwt = require('jsonwebtoken');
10
10
 
11
- const meta = require.main.require('./src/meta');
12
- const user = require.main.require('./src/user');
13
- const groups = require.main.require('./src/groups');
14
- const SocketPlugins = require.main.require('./src/socket.io/plugins');
15
- const db = require.main.require('./src/database');
16
- const plugins = require.main.require('./src/plugins');
17
- const routeHelpers = require.main.require('./src/routes/helpers');
11
+ const meta = nodebb.require('./src/meta');
12
+ const user = nodebb.require('./src/user');
13
+ const groups = nodebb.require('./src/groups');
14
+ const SocketPlugins = nodebb.require('./src/socket.io/plugins');
15
+ const db = nodebb.require('./src/database');
16
+ const plugins = nodebb.require('./src/plugins');
17
+ const routeHelpers = nodebb.require('./src/routes/helpers');
18
18
 
19
19
  const controllers = require('./lib/controllers');
20
- const nbbAuthController = require.main.require('./src/controllers/authentication');
20
+ const nbbAuthController = nodebb.require('./src/controllers/authentication');
21
21
  const logoutAsync = util.promisify((req, callback) => req.logout(callback));
22
22
 
23
23
  /* all the user profile fields that can be passed to user.updateProfile */
@@ -93,19 +93,27 @@ plugin.appendConfig = async (config) => {
93
93
  SocketPlugins.sessionSharing = {};
94
94
 
95
95
  SocketPlugins.sessionSharing.showUserIds = async (socket, data) => {
96
- // Retrieve the hash and find matches
97
- const { uids } = data;
98
-
99
- if (!uids.length) {
100
- throw new Error('no-uids-supplied');
96
+ if (!socket.uid || !data || !Array.isArray(data.uids)) {
97
+ throw new Error('[[error:invalid-data]]');
98
+ }
99
+ const isAdmin = await user.isAdministrator(socket.uid);
100
+ if (!isAdmin) {
101
+ throw new Error('[[error:no-privileges]]');
101
102
  }
102
103
 
103
104
  return Promise.all(
104
- uids.map(async uid => db.getSortedSetRangeByScore(plugin.settings.name + ':uid', 0, -1, uid, uid))
105
+ data.uids.map(uid => db.getSortedSetRangeByScore(`${plugin.settings.name}:uid`, 0, -1, uid, uid))
105
106
  );
106
107
  };
107
108
 
108
109
  SocketPlugins.sessionSharing.findUserByRemoteId = async (socket, data) => {
110
+ if (!socket.uid || !data || !Array.isArray(data.uids)) {
111
+ throw new Error('[[error:invalid-data]]');
112
+ }
113
+ const isAdmin = await user.isAdministrator(socket.uid);
114
+ if (!isAdmin) {
115
+ throw new Error('[[error:no-privileges]]');
116
+ }
109
117
  if (!data.remoteId) {
110
118
  throw new Error('no-remote-id-supplied');
111
119
  }
@@ -262,7 +270,7 @@ plugin.findOrCreateUser = async (userData) => {
262
270
 
263
271
  plugin.updateUserProfile = async (uid, userData, isNewUser) => {
264
272
  winston.debug('consider updateProfile?', isNewUser || plugin.settings.updateProfile === 'on');
265
- let userObj = {};
273
+ let userObj;
266
274
 
267
275
  /* even update the profile on a new account, since some fields are not initialized by NodeBB */
268
276
  if (!isNewUser && plugin.settings.updateProfile !== 'on') {
@@ -439,6 +447,7 @@ plugin.addMiddleware = async function ({ req, res }) {
439
447
  const uid = await plugin.process(req.cookies[plugin.settings.cookieName]);
440
448
  if (uid === req.uid) {
441
449
  winston.verbose(`[session-sharing] Re-validated login for uid ${uid}, path ${req.originalUrl}`);
450
+ await nbbAuthController.onSuccessfulLogin(req, uid);
442
451
  return;
443
452
  }
444
453
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-session-sharing",
3
- "version": "7.2.3",
3
+ "version": "8.0.1",
4
4
  "description": "Allows login sessions from your app to persist in NodeBB",
5
5
  "main": "library.js",
6
6
  "repository": {
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "readmeFilename": "README.md",
26
26
  "nbbpm": {
27
- "compatibility": "^3.2.0 || ^4.x"
27
+ "compatibility": "^4.14.0"
28
28
  },
29
29
  "husky": {
30
30
  "hooks": {
@@ -48,8 +48,8 @@
48
48
  "devDependencies": {
49
49
  "@commitlint/cli": "^9.1.2",
50
50
  "@commitlint/config-angular": "^7.1.2",
51
- "eslint": "9.26.0",
52
- "eslint-config-nodebb": "^1.1.4",
51
+ "eslint": "10.7.0",
52
+ "eslint-config-nodebb": "^2.0.3",
53
53
  "husky": "^2.4.0",
54
54
  "lint-staged": "^10.0.9",
55
55
  "request": "^2.88.2",
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  define('admin/plugins/session-sharing', ['settings'], function (Settings) {
4
- var ACP = {};
4
+ const ACP = {};
5
5
 
6
6
  ACP.init = function () {
7
7
  Settings.load('session-sharing', $('.session-sharing-settings'));
@@ -20,7 +20,7 @@ define('admin/plugins/session-sharing', ['settings'], function (Settings) {
20
20
  delete ACP._searchDelay;
21
21
  }
22
22
 
23
- var element = $(this);
23
+ const element = $(this);
24
24
 
25
25
  ACP._searchDelay = setTimeout(function () {
26
26
  delete ACP._searchDelay;
@@ -30,7 +30,7 @@ define('admin/plugins/session-sharing', ['settings'], function (Settings) {
30
30
  return resultEl.text('');
31
31
  }
32
32
 
33
- var qs = decodeURIComponent($.param({
33
+ const qs = decodeURIComponent($.param({
34
34
  query: element.val(),
35
35
  }));
36
36
 
@@ -67,7 +67,7 @@ define('admin/plugins/session-sharing', ['settings'], function (Settings) {
67
67
  delete ACP._searchDelay;
68
68
  }
69
69
 
70
- var element = $(this);
70
+ const element = $(this);
71
71
 
72
72
  ACP._searchDelay = setTimeout(function () {
73
73
  delete ACP._searchDelay;
@@ -2,9 +2,9 @@
2
2
 
3
3
  $(document).ready(function () {
4
4
  if (config.sessionSharing && config.sessionSharing.hostWhitelist) {
5
- var hosts = config.sessionSharing.hostWhitelist.split(',') || [config.sessionSharing.hostWhitelist];
6
- var whitelisted = false;
7
- for (var host of hosts) {
5
+ const hosts = config.sessionSharing.hostWhitelist.split(',') || [config.sessionSharing.hostWhitelist];
6
+ let whitelisted = false;
7
+ for (const host of hosts) {
8
8
  if (window && window.location && window.location.host && window.location.host.includes(host)) {
9
9
  whitelisted = true;
10
10
  break;
@@ -57,11 +57,13 @@ $(document).ready(function () {
57
57
  }
58
58
 
59
59
  if (ajaxify.data.sessionSharingBan) {
60
- bootbox.alert({
61
- title: '[[error:user-banned]]',
62
- message: ajaxify.data.sessionSharingBan.ban.expiry > 0 ?
63
- '[[error:user-banned-reason-until, ' + ajaxify.data.sessionSharingBan.ban.expiry_readable + ', ' + ajaxify.data.sessionSharingBan.ban.reason + ']]' :
64
- '[[error:user-banned-reason, ' + ajaxify.data.sessionSharingBan.ban.reason + ']]',
60
+ require(['modals'], function (modals) {
61
+ modals.alert({
62
+ title: '[[error:user-banned]]',
63
+ message: ajaxify.data.sessionSharingBan.ban.expiry > 0 ?
64
+ '[[error:user-banned-reason-until, ' + ajaxify.data.sessionSharingBan.ban.expiry_readable + ', ' + ajaxify.data.sessionSharingBan.ban.reason + ']]' :
65
+ '[[error:user-banned-reason, ' + ajaxify.data.sessionSharingBan.ban.reason + ']]',
66
+ });
65
67
  });
66
68
  }
67
69
 
package/test/index.js CHANGED
@@ -10,10 +10,10 @@ const url = require('url');
10
10
  const util = require('util');
11
11
  const request = require('request-promise-native');
12
12
 
13
- const db = require.main.require('./test/mocks/databasemock');
13
+ const db = nodebb.require('./test/mocks/databasemock');
14
14
 
15
- const nconf = require.main.require('nconf');
16
- const meta = require.main.require('./src/meta');
15
+ const nconf = nodebb.require('nconf');
16
+ const meta = nodebb.require('./src/meta');
17
17
 
18
18
  describe('nodebb-plugin-session-sharing', () => {
19
19
  const userJar = request.jar();
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- const winston = require.main.require('winston');
3
+ const winston = nodebb.require('winston');
4
4
 
5
- const db = require.main.require('./src/database');
6
- const batch = require.main.require('./src/batch');
7
- const meta = require.main.require('./src/meta');
5
+ const db = nodebb.require('./src/database');
6
+ const batch = nodebb.require('./src/batch');
7
+ const meta = nodebb.require('./src/meta');
8
8
 
9
9
  module.exports = {
10
10
  name: 'Convert remote-to-local user ID from hash to sorted set',