From a1298afd19659c54476ab3888a3ec5ec586ee36c Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:19:34 +0300 Subject: [PATCH 01/10] show infrastructure tools in admin sidebar --- frontend/admin/index.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/admin/index.jsx b/frontend/admin/index.jsx index 3d5a31a5..1a9dda7f 100644 --- a/frontend/admin/index.jsx +++ b/frontend/admin/index.jsx @@ -4,6 +4,7 @@ import App from './app'; import ChatAiConfig from './chatAiConfig'; import { registerServiceWorker } from '../client/pwa/registerSW'; import { installProfilePasswordPanel } from './profilePassword'; +import { installAdminSidebarTools } from './sidebarTools'; const removeLoginPasswordMinLength = () => { const passwordInput = document.querySelector('.auth-form input[type="password"]'); @@ -22,4 +23,5 @@ root.render( ); removeLoginPasswordMinLength(); installProfilePasswordPanel(); +installAdminSidebarTools(); registerServiceWorker(); From 37a7e76aababf672cf32ec49f2a8a0ed0a19bbde Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:19:52 +0300 Subject: [PATCH 02/10] remove floating admin infrastructure shortcuts --- frontend/admin/index.html | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/frontend/admin/index.html b/frontend/admin/index.html index 06b3a8ea..7d01aa70 100644 --- a/frontend/admin/index.html +++ b/frontend/admin/index.html @@ -12,17 +12,5 @@
- - From 43e5382fb43a9e1b0ba32f6902ed12ef0203ee50 Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:20:21 +0300 Subject: [PATCH 03/10] build social login admin page --- frontend/webpack.common.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/webpack.common.js b/frontend/webpack.common.js index 6da1f8a7..9c493835 100644 --- a/frontend/webpack.common.js +++ b/frontend/webpack.common.js @@ -10,6 +10,7 @@ module.exports = { storage: './admin/storage.jsx', calling: './admin/calling.jsx', callingPush: './admin/callingPush.jsx', + socialAuth: './admin/socialAuth.jsx', }, cache: { type: 'filesystem', @@ -54,5 +55,6 @@ module.exports = { new HtmlWebpackPlugin({ template: './admin/storage.html', chunks: ['storage'], filename: 'admin/storage.html' }), new HtmlWebpackPlugin({ template: './admin/calling.html', chunks: ['calling'], filename: 'admin/calling.html' }), new HtmlWebpackPlugin({ template: './admin/callingPush.html', chunks: ['callingPush'], filename: 'admin/calling-push.html' }), + new HtmlWebpackPlugin({ template: './admin/socialAuth.html', chunks: ['socialAuth'], filename: 'admin/social-auth.html' }), ], }; From eb168b2bbcad70d4672bac3bc3331a6a218b6b7b Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:20:45 +0300 Subject: [PATCH 04/10] route admin infrastructure pages explicitly --- frontend/vercel.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/frontend/vercel.json b/frontend/vercel.json index ab3b7ba5..15e149c2 100644 --- a/frontend/vercel.json +++ b/frontend/vercel.json @@ -16,6 +16,22 @@ { "source": "/assets/images/default-channel-avatar.png", "destination": "/assets/icons/channel-avatar.svg", "permanent": false } ], "rewrites": [ + { + "source": "/admin/storage", + "destination": "/admin/storage.html" + }, + { + "source": "/admin/calling", + "destination": "/admin/calling.html" + }, + { + "source": "/admin/calling-push", + "destination": "/admin/calling-push.html" + }, + { + "source": "/admin/social-auth", + "destination": "/admin/social-auth.html" + }, { "source": "/admin/:path*", "destination": "/admin/index.html" From 4507f685cf4376c235d55e045429cca7359f673e Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:23:06 +0300 Subject: [PATCH 05/10] avoid mixed content on social login admin --- frontend/admin/socialAuth.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/admin/socialAuth.html b/frontend/admin/socialAuth.html index 45cd444d..4224b047 100644 --- a/frontend/admin/socialAuth.html +++ b/frontend/admin/socialAuth.html @@ -5,7 +5,7 @@ - + SyncChat Admin — Social Login From adf969117cbd14af5e77fd60b1675922694372ba Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:23:33 +0300 Subject: [PATCH 06/10] retire env-backed social provider configuration --- backend/.env.example | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/.env.example b/backend/.env.example index deb5f51b..6289e5b9 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -21,6 +21,9 @@ CALL_CONFIG_SECRET = # Optional separate key for DB-backed chat translation/transcription provider secrets. # Falls back to CALL_CONFIG_SECRET, STORAGE_CONFIG_SECRET, then JWT_SECRET. Keep stable. CHAT_AI_CONFIG_SECRET = +# Optional separate key for encrypting DB-backed Google/Facebook/Telegram secrets. +# Falls back to CALL_CONFIG_SECRET, STORAGE_CONFIG_SECRET, then JWT_SECRET. Keep stable. +SOCIAL_AUTH_CONFIG_SECRET = APP_ORIGIN = http://localhost:3000,http://127.0.0.1:3000 PUBLIC_ORIGIN = http://localhost:3000 API_BASE_URL = http://127.0.0.1:5599/api @@ -51,10 +54,9 @@ CHAT_DUPLICATE_WINDOW_SEC = 30 # Email transport is stored in the database from Admin Settings > App Config. -GOOGLE_CLIENT_ID = -FACEBOOK_APP_ID = -TELEGRAM_BOT_USERNAME = -TELEGRAM_BOT_TOKEN = +# Google, Facebook and Telegram provider IDs/tokens are configured from +# Admin > Social Login and stored in MongoDB. Provider secrets are encrypted. +# No GOOGLE_CLIENT_ID / FACEBOOK_APP_ID / TELEGRAM_* environment values are used at runtime. # Web/PWA push remains environment-backed. VAPID_PUBLIC_KEY = From e068771a5c2449c5e241ff5460f4b03257ec8827 Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:24:01 +0300 Subject: [PATCH 07/10] validate DB-backed social auth modules --- backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index 98ca89bc..27772897 100644 --- a/backend/package.json +++ b/backend/package.json @@ -6,7 +6,7 @@ "scripts": { "predev": "node scripts/free-ports.js 8080", "dev": "nodemon --watch server --watch .env --ignore logs --ignore uploads server", - "build": "node --check server/index.js && node --check server/server.js && node --check server/bootstrap.js && node --check server/config.js && node --check server/db/sequelize.js && node --check server/db/connect.js && node --check server/db/models/inbox.js && node --check server/db/models/chat.js && node --check server/db/models/chatRoomCounter.js && node --check server/db/models/messageReceipt.js && node --check server/db/models/chatDraft.js && node --check server/db/models/messageRequest.js && node --check server/db/models/chatTopic.js && node --check server/db/models/e2eeDeviceKey.js && node --check server/db/models/resumableUpload.js && node --check server/db/models/chatAiConfig.js && node --check server/db/models/profile.js && node --check server/db/models/group.js && node --check server/db/models/channel.js && node --check server/db/models/adminStorageConfig.js && node --check server/db/models/adminCallConfig.js && node --check server/db/models/callHistory.js && node --check server/db/models/profilePhoto.js && node --check server/db/models/nativePushDevice.js && node --check server/helpers/storageConfig.js && node --check server/helpers/callConfig.js && node --check server/helpers/callHistory.js && node --check server/helpers/callState.js && node --check server/helpers/avatarDefaults.js && node --check server/helpers/ensureAvatarDefaults.js && node --check server/helpers/ensureProfile.js && node --check server/helpers/privacy.js && node --check server/helpers/profilePhotos.js && node --check server/helpers/livekit.js && node --check server/helpers/nativePushConfig.js && node --check server/helpers/nativePush.js && node --check server/helpers/storage.js && node --check server/helpers/videoPipeline.js && node --check server/helpers/accountArchive.js && node --check server/helpers/accountExport.js && node --check server/helpers/logger.js && node --check server/helpers/chatAbuse.js && node --check server/helpers/chatMentions.js && node --check server/helpers/messageRequests.js && node --check server/helpers/chatReliability.js && node --check server/helpers/chatAiConfig.js && node --check server/helpers/e2eeKeyDirectory.js && node --check server/helpers/chatMaintenance.js && node --check server/middleware/chatSendIdempotency.js && node --check server/controllers/avatar.js && node --check server/controllers/profile.js && node --check server/controllers/chatUpload.js && node --check server/controllers/chatSecurity.js && node --check server/controllers/chatDeletion.js && node --check server/controllers/chatV2.js && node --check server/controllers/chatAiAdmin.js && node --check server/controllers/chatSuggestions.js && node --check server/controllers/chatResumableUpload.js && node --check server/controllers/storageAdmin.js && node --check server/controllers/callingAdmin.js && node --check server/controllers/callingPushAdmin.js && node --check server/controllers/callingConfig.js && node --check server/controllers/nativePush.js && node --check server/controllers/accountStorage.js && node --check server/routes/profile.js && node --check server/routes/inbox.js && node --check server/routes/chat.js && node --check server/routes/chatV2.js && node --check server/routes/chatAiAdmin.js && node --check server/routes/storageAdmin.js && node --check server/routes/callingAdmin.js && node --check server/routes/callingPushAdmin.js && node --check server/routes/callingConfig.js && node --check server/routes/setting.js && node --check server/helpers/socketAdapter.js && node --check server/socket/auth.js && node --check server/socket/index.js && node --check server/socket/events/chatV2.js && node --check server/socket/events/calling.js && node --check server/socket/events/backgroundCalling.js && node --check server/socket/events/groupModeration.js && node --check server/socket/events/room.js && node --check server/routes/cron.js && node --check api/index.js", + "build": "node --check server/index.js && node --check server/server.js && node --check server/bootstrap.js && node --check server/config.js && node --check server/db/sequelize.js && node --check server/db/connect.js && node --check server/db/models/inbox.js && node --check server/db/models/chat.js && node --check server/db/models/chatRoomCounter.js && node --check server/db/models/messageReceipt.js && node --check server/db/models/chatDraft.js && node --check server/db/models/messageRequest.js && node --check server/db/models/chatTopic.js && node --check server/db/models/e2eeDeviceKey.js && node --check server/db/models/resumableUpload.js && node --check server/db/models/chatAiConfig.js && node --check server/db/models/adminSocialAuthConfig.js && node --check server/db/models/profile.js && node --check server/db/models/group.js && node --check server/db/models/channel.js && node --check server/db/models/adminStorageConfig.js && node --check server/db/models/adminCallConfig.js && node --check server/db/models/callHistory.js && node --check server/db/models/profilePhoto.js && node --check server/db/models/nativePushDevice.js && node --check server/helpers/storageConfig.js && node --check server/helpers/callConfig.js && node --check server/helpers/callHistory.js && node --check server/helpers/callState.js && node --check server/helpers/avatarDefaults.js && node --check server/helpers/ensureAvatarDefaults.js && node --check server/helpers/ensureProfile.js && node --check server/helpers/privacy.js && node --check server/helpers/profilePhotos.js && node --check server/helpers/livekit.js && node --check server/helpers/nativePushConfig.js && node --check server/helpers/nativePush.js && node --check server/helpers/storage.js && node --check server/helpers/videoPipeline.js && node --check server/helpers/accountArchive.js && node --check server/helpers/accountExport.js && node --check server/helpers/logger.js && node --check server/helpers/chatAbuse.js && node --check server/helpers/chatMentions.js && node --check server/helpers/messageRequests.js && node --check server/helpers/chatReliability.js && node --check server/helpers/chatAiConfig.js && node --check server/helpers/socialAuthConfig.js && node --check server/helpers/e2eeKeyDirectory.js && node --check server/helpers/chatMaintenance.js && node --check server/middleware/chatSendIdempotency.js && node --check server/controllers/avatar.js && node --check server/controllers/profile.js && node --check server/controllers/chatUpload.js && node --check server/controllers/chatSecurity.js && node --check server/controllers/chatDeletion.js && node --check server/controllers/chatV2.js && node --check server/controllers/chatAiAdmin.js && node --check server/controllers/chatSuggestions.js && node --check server/controllers/chatResumableUpload.js && node --check server/controllers/socialAuth.js && node --check server/controllers/socialAuthAdmin.js && node --check server/controllers/storageAdmin.js && node --check server/controllers/callingAdmin.js && node --check server/controllers/callingPushAdmin.js && node --check server/controllers/callingConfig.js && node --check server/controllers/nativePush.js && node --check server/controllers/accountStorage.js && node --check server/routes/profile.js && node --check server/routes/inbox.js && node --check server/routes/chat.js && node --check server/routes/chatV2.js && node --check server/routes/chatAiAdmin.js && node --check server/routes/socialAuthAdmin.js && node --check server/routes/storageAdmin.js && node --check server/routes/callingAdmin.js && node --check server/routes/callingPushAdmin.js && node --check server/routes/callingConfig.js && node --check server/routes/setting.js && node --check server/helpers/socketAdapter.js && node --check server/socket/auth.js && node --check server/socket/index.js && node --check server/socket/events/chatV2.js && node --check server/socket/events/calling.js && node --check server/socket/events/backgroundCalling.js && node --check server/socket/events/groupModeration.js && node --check server/socket/events/room.js && node --check server/routes/cron.js && node --check api/index.js", "start": "node server" }, "dependencies": { From 4b5c10ffe159b228e2ef5f56b86a872783ffb4dd Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:24:17 +0300 Subject: [PATCH 08/10] harden admin string normalization --- frontend/babel.admin-safe-strings.js | 52 ++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 frontend/babel.admin-safe-strings.js diff --git a/frontend/babel.admin-safe-strings.js b/frontend/babel.admin-safe-strings.js new file mode 100644 index 00000000..621a290f --- /dev/null +++ b/frontend/babel.admin-safe-strings.js @@ -0,0 +1,52 @@ +module.exports = function adminSafeStrings({ types: t }) { + const isNamedCall = (node, name) => + t.isCallExpression(node) && + t.isMemberExpression(node.callee) && + !node.callee.computed && + t.isIdentifier(node.callee.property, { name }); + + const safeString = (node) => + t.callExpression(t.identifier('String'), [ + t.logicalExpression('||', t.cloneNode(node, true), t.stringLiteral('')), + ]); + + return { + name: 'syncchat-admin-safe-strings', + visitor: { + CallExpression(path, state) { + const filename = String(state?.filename || '').replace(/\\/g, '/'); + if (!filename.endsWith('/admin/app.jsx')) return; + + const { node } = path; + if ( + !t.isMemberExpression(node.callee) || + node.callee.computed || + !t.isIdentifier(node.callee.property, { name: 'toLowerCase' }) + ) { + return; + } + + const receiver = node.callee.object; + let nextReceiver = null; + + if (isNamedCall(receiver, 'trim')) { + const trimBase = receiver.callee.object; + nextReceiver = t.callExpression( + t.memberExpression(safeString(trimBase), t.identifier('trim')), + [] + ); + } else { + nextReceiver = safeString(receiver); + } + + path.replaceWith( + t.callExpression( + t.memberExpression(nextReceiver, t.identifier('toLowerCase')), + node.arguments.map((arg) => t.cloneNode(arg, true)) + ) + ); + path.skip(); + }, + }, + }; +}; From ba7ba50c86791a3c0d1706dbdbce29868ddff9af Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:24:39 +0300 Subject: [PATCH 09/10] guard admin toLowerCase normalization at build time --- frontend/webpack.common.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/webpack.common.js b/frontend/webpack.common.js index 9c493835..2001958f 100644 --- a/frontend/webpack.common.js +++ b/frontend/webpack.common.js @@ -25,7 +25,11 @@ module.exports = { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader', - options: { cacheDirectory: true, cacheCompression: false }, + options: { + cacheDirectory: true, + cacheCompression: false, + plugins: [path.resolve(__dirname, 'babel.admin-safe-strings.js')], + }, }, { test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader'] }, { From 0e9579734d0efdd856a371e71b9122091b998e9a Mon Sep 17 00:00:00 2001 From: Shahanur Islam Shagor Date: Wed, 19 Aug 2026 10:24:59 +0300 Subject: [PATCH 10/10] run CI for admin social config branch --- .github/workflows/calling-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/calling-ci.yml b/.github/workflows/calling-ci.yml index be79f395..23f0fe2c 100644 --- a/.github/workflows/calling-ci.yml +++ b/.github/workflows/calling-ci.yml @@ -6,6 +6,7 @@ on: - agent/calling-improvement-db-admin - agent/native-push-db-config - agent/shared-chat-lock-delete-scope + - agent/admin-sidebar-social-db pull_request: branches: - main