1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-19 05:09:43 +02:00

feat: Webhooks configuration, all events support, refactoring

This commit is contained in:
Maksim Eltyshev 2024-06-12 00:51:36 +02:00
parent 193daf6cfb
commit 87683fe523
96 changed files with 1280 additions and 509 deletions

View file

@ -27,6 +27,10 @@ module.exports = {
custom: valuesValidator,
required: true,
},
actorUser: {
type: 'ref',
required: true,
},
request: {
type: 'ref',
},
@ -84,21 +88,12 @@ module.exports = {
);
});
/* The user could be created manually by an user or via OIDC. We hijack the id field, so one can differentiate between the two on the webhook side. */
let initiator;
if (inputs.request && inputs.request.currentUser) {
initiator = inputs.request.currentUser;
} else {
initiator = {
id: 'oidc',
};
}
await sails.helpers.utils.sendWebhook.with({
event: 'USER_CREATE',
data: { ...user, password: undefined },
projectId: '',
user: initiator,
sails.helpers.utils.sendWebhooks.with({
event: 'userCreate',
data: {
item: user,
},
user: inputs.actorUser,
});
return user;

View file

@ -4,6 +4,10 @@ module.exports = {
type: 'ref',
required: true,
},
actorUser: {
type: 'ref',
required: true,
},
request: {
type: 'ref',
},
@ -60,11 +64,12 @@ module.exports = {
);
});
await sails.helpers.utils.sendWebhook.with({
event: 'USER_DELETE',
data: { ...user, password: undefined },
projectId: '',
user: inputs.request.currentUser,
sails.helpers.utils.sendWebhooks.with({
event: 'userDelete',
data: {
item: user,
},
user: inputs.actorUser,
});
}

View file

@ -88,8 +88,11 @@ module.exports = {
// Otherwise, create a new user.
if (!user) {
user = await sails.helpers.users
.createOne(values)
user = await sails.helpers.users.createOne
.with({
values,
actorUser: User.OIDC,
})
.intercept('usernameAlreadyInUse', 'usernameAlreadyInUse');
}
@ -115,8 +118,12 @@ module.exports = {
}
if (Object.keys(updateValues).length > 0) {
user = await sails.helpers.users
.updateOne(user, updateValues, {}) // FIXME: hack for last parameter
user = await sails.helpers.users.updateOne
.with({
record: user,
values: updateValues,
actorUser: User.OIDC,
})
.intercept('emailAlreadyInUse', 'emailAlreadyInUse')
.intercept('usernameAlreadyInUse', 'usernameAlreadyInUse');
}

View file

@ -38,7 +38,7 @@ module.exports = {
custom: valuesValidator,
required: true,
},
user: {
actorUser: {
type: 'ref',
required: true,
},
@ -62,14 +62,14 @@ module.exports = {
let isOnlyPasswordChange = false;
if (!_.isUndefined(values.password)) {
if (Object.keys(values).length === 1) {
isOnlyPasswordChange = true;
}
Object.assign(values, {
password: bcrypt.hashSync(values.password, 10),
passwordChangedAt: new Date().toISOString(),
});
if (Object.keys(values).length === 1) {
isOnlyPasswordChange = true;
}
}
if (values.username) {
@ -118,7 +118,7 @@ module.exports = {
inputs.request,
);
if (user.id === inputs.user.id && inputs.request && inputs.request.isSocket) {
if (user.id === inputs.actorUser.id && inputs.request && inputs.request.isSocket) {
const tempRoom = uuid();
sails.sockets.addRoomMembersToRooms(`@user:${user.id}`, tempRoom, () => {
@ -153,14 +153,15 @@ module.exports = {
inputs.request,
);
});
}
await sails.helpers.utils.sendWebhook.with({
event: 'USER_UPDATE',
data: { ...user, password: undefined },
projectId: '',
user: inputs.request.currentUser,
});
sails.helpers.utils.sendWebhooks.with({
event: 'userUpdate',
data: {
item: user,
},
user: inputs.actorUser,
});
}
}
return user;