45 lines
1.5 KiB
JavaScript
45 lines
1.5 KiB
JavaScript
import assert from 'assert';
|
||
import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid';
|
||
const triggers = [
|
||
{
|
||
name: "在撤销用户OAuth授权前,执行操作",
|
||
action: "revoke",
|
||
when: "after",
|
||
entity: "oauthUserAuthorization",
|
||
fn: async ({ operation }, context) => {
|
||
const { filter } = operation;
|
||
assert(filter, 'No filter found in revoke operation');
|
||
let res = 0;
|
||
// 如果没有token,可以直接删除oauthUserAuthorization
|
||
const opRes = await context.operate("oauthUserAuthorization", {
|
||
id: await generateNewIdAsync(),
|
||
action: "remove",
|
||
data: {},
|
||
filter: {
|
||
...filter,
|
||
tokenId: {
|
||
$exists: false
|
||
}
|
||
}
|
||
}, {});
|
||
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;
|
||
}
|
||
}
|
||
];
|
||
export default triggers;
|