121 lines
5.1 KiB
JavaScript
121 lines
5.1 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
const tslib_1 = require("tslib");
|
||
const assert_1 = tslib_1.__importDefault(require("assert"));
|
||
const uuid_1 = require("oak-domain/lib/utils/uuid");
|
||
const triggers = [
|
||
{
|
||
name: "在撤销用户OAuth授权前,执行操作",
|
||
action: "revoke",
|
||
when: "after",
|
||
entity: "oauthUserAuthorization",
|
||
fn: async ({ operation }, context) => {
|
||
const { filter } = operation;
|
||
(0, assert_1.default)(filter, 'No filter found in revoke operation');
|
||
const datas = await context.select("oauthUserAuthorization", {
|
||
data: {
|
||
userId: 1,
|
||
applicationId: 1,
|
||
tokenId: 1,
|
||
codeId: 1,
|
||
usageState: 1,
|
||
},
|
||
filter: { ...filter },
|
||
}, {});
|
||
let res = 0;
|
||
for (const data of datas) {
|
||
// 如果是unused并且code的usedAt是空的,则把code的usedAt全部设置为当前时间
|
||
const opRes0 = await context.operate("oauthAuthorizationCode", {
|
||
id: await (0, uuid_1.generateNewIdAsync)(),
|
||
action: "update",
|
||
data: {
|
||
usedAt: new Date()
|
||
},
|
||
filter: {
|
||
usedAt: {
|
||
$exists: false
|
||
},
|
||
// 某一个用户对某一个应用的授权记录
|
||
oauthAppId: data.applicationId,
|
||
userId: data.userId,
|
||
}
|
||
}, {});
|
||
res += opRes0.oauthAuthorizationCode?.update || 0;
|
||
// // 如果没有token,可以直接删除oauthUserAuthorization (可能是复用的之前的token, 也可能是未被使用的授权记录)
|
||
if (data.usageState === 'unused' && !data.tokenId) {
|
||
const opRes = await context.operate("oauthUserAuthorization", {
|
||
id: await (0, uuid_1.generateNewIdAsync)(),
|
||
action: "remove",
|
||
data: {},
|
||
filter: {
|
||
id: data.id,
|
||
}
|
||
}, {});
|
||
res += opRes.oauthApplication?.remove || 0;
|
||
}
|
||
// 如果有token,则将token的revokedAt设置为当前时间
|
||
if (data.tokenId) {
|
||
const opRes2 = await context.operate("oauthToken", {
|
||
id: await (0, uuid_1.generateNewIdAsync)(),
|
||
action: "update",
|
||
data: {
|
||
revokedAt: new Date()
|
||
},
|
||
filter: {
|
||
id: data.tokenId
|
||
}
|
||
}, {});
|
||
res += opRes2.oauthToken?.update || 0;
|
||
}
|
||
}
|
||
// // 如果是unused并且code的usedAt是空的,则把code的usedAt全部设置为当前时间
|
||
// const opRes0 = await context.operate("oauthAuthorizationCode", {
|
||
// id: await generateNewIdAsync(),
|
||
// action: "update",
|
||
// data: {
|
||
// usedAt: new Date()
|
||
// },
|
||
// filter: {
|
||
// usedAt: {
|
||
// $exists: false
|
||
// },
|
||
// oauthUserAuthorization$code: {
|
||
// ...filter,
|
||
// // 未被使用肯定就没有tokenId
|
||
// usageState: 'unused',
|
||
// }
|
||
// }
|
||
// }, {});
|
||
// res += opRes0.oauthAuthorizationCode?.update || 0;
|
||
// // 如果没有token,可以直接删除oauthUserAuthorization (可能是复用的之前的token, 也可能是未被使用的授权记录)
|
||
// const opRes = await context.operate("oauthUserAuthorization", {
|
||
// id: await generateNewIdAsync(),
|
||
// action: "remove",
|
||
// data: {},
|
||
// filter: {
|
||
// ...filter,
|
||
// // 未被使用肯定就没有tokenId
|
||
// usageState: 'unused',
|
||
// }
|
||
// }, {});
|
||
// res += opRes.oauthApplication?.remove || 0;
|
||
// // 如果有token,则将token的revokedAt设置为当前时间
|
||
// const opRes2 = await context.operate("oauthToken", {
|
||
// id: await generateNewIdAsync(),
|
||
// action: "update",
|
||
// data: {
|
||
// revokedAt: new Date()
|
||
// },
|
||
// filter: {
|
||
// oauthUserAuthorization$token: {
|
||
// ...filter
|
||
// }
|
||
// }
|
||
// }, {});
|
||
// res += opRes2.oauthToken?.update || 0;
|
||
return res;
|
||
}
|
||
}
|
||
];
|
||
exports.default = triggers;
|