Compare commits

...
4 Commits
7 changed files with 74 additions and 31 deletions
@@ -0,0 +1,42 @@
name: Build and push Docker image
on:
release:
types: [created]
jobs:
build-and-push-docker-image:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set version
uses: actions/github-script@v6
id: set-version
with:
result-encoding: string
script: return context.payload.release.tag_name.replace('v', '')
- name: Build and push
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
tags: |
ghcr.io/plankanban/planka:latest
ghcr.io/plankanban/planka:${{ steps.set-version.outputs.result }}
+1 -1
View File
@@ -2,7 +2,7 @@ version: '3'
services: services:
planka: planka:
image: meltyshev/planka:latest image: ghcr.io/plankanban/planka:latest
command: > command: >
bash -c bash -c
"for i in `seq 1 30`; do "for i in `seq 1 30`; do
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "planka", "name": "planka",
"version": "1.0.0", "version": "1.1.2",
"private": true, "private": true,
"homepage": "https://plankanban.github.io/planka", "homepage": "https://plankanban.github.io/planka",
"repository": { "repository": {
@@ -61,7 +61,9 @@ module.exports = {
throw Errors.ATTACHMENT_NOT_FOUND; throw Errors.ATTACHMENT_NOT_FOUND;
} }
this.res.setHeader('Content-Disposition', `inline; ${inputs.filename}`); this.res.type(attachment.filename);
this.res.set('Cache-Control', 'private, max-age=900'); // TODO: move to config
return exits.success(fs.createReadStream(filePath)); return exits.success(fs.createReadStream(filePath));
}, },
}; };
+4 -10
View File
@@ -14,10 +14,6 @@ module.exports = {
regex: /^[0-9]+$/, regex: /^[0-9]+$/,
required: true, required: true,
}, },
filename: {
type: 'string',
required: true,
},
}, },
exits: { exits: {
@@ -56,14 +52,12 @@ module.exports = {
throw Errors.ATTACHMENT_NOT_FOUND; throw Errors.ATTACHMENT_NOT_FOUND;
} }
let contentDisposition; this.res.type(attachment.filename);
if (attachment.isImage || path.extname(attachment.filename) === '.pdf') { if (!attachment.isImage && path.extname(attachment.filename) !== '.pdf') {
contentDisposition = 'inline'; this.res.set('Content-Disposition', 'attachment');
} else {
contentDisposition = `attachment; ${inputs.filename}`;
} }
this.res.set('Cache-Control', 'private, max-age=900'); // TODO: move to config
this.res.setHeader('Content-Disposition', contentDisposition);
return exits.success(fs.createReadStream(filePath)); return exits.success(fs.createReadStream(filePath));
}, },
}; };
+19 -8
View File
@@ -3,25 +3,36 @@ module.exports = {
const { currentUser } = this.req; const { currentUser } = this.req;
const managerProjectIds = await sails.helpers.users.getManagerProjectIds(currentUser.id); const managerProjectIds = await sails.helpers.users.getManagerProjectIds(currentUser.id);
const managerProjects = await sails.helpers.projects.getMany(managerProjectIds);
const boardMemberships = await sails.helpers.users.getBoardMemberships(currentUser.id); let boardMemberships = await sails.helpers.users.getBoardMemberships(currentUser.id);
const membershipBoardIds = await sails.helpers.utils.mapRecords(boardMemberships, 'boardId');
const membershipBoards = await sails.helpers.boards.getMany({ let membershipBoardIds = sails.helpers.utils.mapRecords(boardMemberships, 'boardId');
let membershipBoards = await sails.helpers.boards.getMany({
id: membershipBoardIds, id: membershipBoardIds,
projectId: { projectId: {
'!=': managerProjectIds, '!=': managerProjectIds,
}, },
}); });
const membershipProjectIds = sails.helpers.utils.mapRecords( let membershipProjectIds = sails.helpers.utils.mapRecords(membershipBoards, 'projectId', true);
membershipBoards, const membershipProjects = await sails.helpers.projects.getMany(membershipProjectIds);
'projectId',
true, membershipProjectIds = sails.helpers.utils.mapRecords(membershipProjects);
membershipBoards = membershipBoards.filter((membershipBoard) =>
membershipProjectIds.includes(membershipBoard.projectId),
);
membershipBoardIds = sails.helpers.utils.mapRecords(membershipBoards);
boardMemberships = boardMemberships.filter((boardMembership) =>
membershipBoardIds.includes(boardMembership.boardId),
); );
const projectIds = [...managerProjectIds, ...membershipProjectIds]; const projectIds = [...managerProjectIds, ...membershipProjectIds];
const projects = await sails.helpers.projects.getMany(projectIds); const projects = [...managerProjects, ...membershipProjects];
const projectManagers = await sails.helpers.projects.getProjectManagers(projectIds); const projectManagers = await sails.helpers.projects.getProjectManagers(projectIds);
+4 -10
View File
@@ -10,12 +10,6 @@ module.exports = {
}, },
async fn(inputs) { async fn(inputs) {
const boardIds = await sails.helpers.projects.getBoardIds(inputs.record.id);
await BoardMembership.destroy({
boardId: boardIds,
}).fetch();
const projectManagers = await ProjectManager.destroy({ const projectManagers = await ProjectManager.destroy({
projectId: inputs.record.id, projectId: inputs.record.id,
}).fetch(); }).fetch();
@@ -25,14 +19,14 @@ module.exports = {
if (project) { if (project) {
const managerUserIds = sails.helpers.utils.mapRecords(projectManagers, 'userId'); const managerUserIds = sails.helpers.utils.mapRecords(projectManagers, 'userId');
const boardIds = await sails.helpers.projects.getBoardIds(project.id);
const boardRooms = boardIds.map((boardId) => `board:${boardId}`);
const memberUserIds = await sails.helpers.boards.getMemberUserIds(boardIds); const memberUserIds = await sails.helpers.boards.getMemberUserIds(boardIds);
const userIds = _.union(managerUserIds, memberUserIds); const userIds = _.union(managerUserIds, memberUserIds);
userIds.forEach((userId) => { userIds.forEach((userId) => {
sails.sockets.removeRoomMembersFromRooms( sails.sockets.removeRoomMembersFromRooms(`user:${userId}`, boardRooms);
`user:${userId}`,
boardIds.map((boardId) => `board:${boardId}`),
);
sails.sockets.broadcast( sails.sockets.broadcast(
`user:${userId}`, `user:${userId}`,