|
|
@@ -663,6 +663,9 @@ try {
|
|
|
for (const action of ['Scence','Lockin','Lockin_Submit','ASCXLoad','API','AccountForm','AccountForm_API','AccountForm_Submit']) {
|
|
|
const blocked = await callFunctionError('xiaoshu/admin/gateway', login.sessionToken, { operation: 'legacyIndexBlocker', action }, 501); if (!String(blocked.message).includes('migration_blocked')) throw new Error(`旧后台入口动作 ${action} 未返回明确迁移阻塞`);
|
|
|
}
|
|
|
+ for (const action of ['Index','MD','Index_submit','Dels','Preview']) {
|
|
|
+ const blocked = await callFunctionError('xiaoshu/admin/gateway', login.sessionToken, { operation: 'legacyMarkdownBlocker', action }, 501); if (!String(blocked.message).includes('migration_blocked')) throw new Error(`旧 Markdown 动作 ${action} 未返回明确迁移阻塞`);
|
|
|
+ }
|
|
|
for (const action of ['InteractiveList','Interactive_API']) {
|
|
|
const blocked = await callFunctionError('xiaoshu/admin/gateway', login.sessionToken, { operation: 'legacyDesignInteractiveBlocker', action }, 501); if (!String(blocked.message).includes('migration_blocked')) throw new Error(`旧互动提交动作 ${action} 未返回明确迁移阻塞`);
|
|
|
}
|
|
|
@@ -859,6 +862,13 @@ try {
|
|
|
const productBlocked = await callLegacyFunction('', { action: 'product_list' }, 501);
|
|
|
if (!String(productBlocked.retmsg).includes('ZL_Commodities')) throw new Error('缺商品主表的读取接口未明确阻塞');
|
|
|
|
|
|
+ const changedPassword = randomBytes(24).toString('base64url');
|
|
|
+ const wrongPassword = await callFunctionError('xiaoshu/admin/gateway', login.sessionToken, { operation: 'changeOwnPassword', oldPassword: 'definitely-wrong-password', newPassword: changedPassword }, 400); if (!String(wrongPassword.message).includes('原密码')) throw new Error('管理员修改密码未校验原密码');
|
|
|
+ const passwordChange = await callFunction('xiaoshu/admin/gateway', login.sessionToken, { operation: 'changeOwnPassword', oldPassword: password, newPassword: changedPassword }); if (passwordChange.objectId !== userId || passwordChange.reauthenticationRequired !== true || Number(passwordChange.revokedSessions) < 1) throw new Error(`管理员修改密码与会话撤销异常:${JSON.stringify(passwordChange)}`);
|
|
|
+ const oldSessionResponse = await fetch(`${FUNCTION_URL}/xiaoshu/admin/gateway`, { method: 'POST', headers: { 'X-Parse-Application-Id': APP_ID, 'Content-Type': 'application/json' }, body: JSON.stringify({ token: login.sessionToken, params: { operation: 'meta' } }) }); if (oldSessionResponse.status !== 401) throw new Error(`管理员改密后旧会话仍可使用:${oldSessionResponse.status}`);
|
|
|
+ const oldPasswordResponse = await fetch(`${PARSE_URL}/login`, { method: 'POST', headers: { 'X-Parse-Application-Id': APP_ID, 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }); if (oldPasswordResponse.ok) throw new Error('管理员旧密码在修改后仍可登录');
|
|
|
+ const changedLogin = await jsonRequest(`${PARSE_URL}/login`, { method: 'POST', body: JSON.stringify({ username, password: changedPassword }) }); if (!changedLogin.sessionToken) throw new Error('管理员修改密码后无法用新密码登录'); login.sessionToken = changedLogin.sessionToken;
|
|
|
+
|
|
|
const logout = await callFunction('xiaoshu/admin/gateway', login.sessionToken, { operation: 'logout', sessionToken: login.sessionToken });
|
|
|
if (logout.revoked !== true) throw new Error('管理员退出未销毁当前 Parse 会话');
|
|
|
const revokedResponse = await fetch(`${FUNCTION_URL}/xiaoshu/admin/gateway`, { method: 'POST', headers: { 'X-Parse-Application-Id': APP_ID, 'Content-Type': 'application/json' }, body: JSON.stringify({ token: login.sessionToken, params: { operation: 'meta' } }) });
|