Compare commits

..

5 Commits

Author SHA1 Message Date
Barış Soner Uşaklı
e6c9585ae6 fix: show local time for ban 2021-09-21 16:12:04 -04:00
Barış Soner Uşaklı
f57291ef5f fix: escape moderation note before adding to dom 2021-09-20 11:07:27 -04:00
Barış Soner Uşaklı
9556da11d4 feat: merge 2021-09-20 11:06:55 -04:00
Julian Lam
fdf8231800 feat: add github workflow file for docker push :shipit: 2021-09-17 13:45:29 -04:00
Barış Soner Uşaklı
a8748e137f fix: up timeout for psql tests 2021-09-17 12:29:30 -04:00
5 changed files with 80 additions and 12 deletions

52
.github/workflows/docker.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: Run Docker
# Controls when the workflow will run
on:
push:
branches:
- 'master'
- 'v*.x'
tags:
- 'v*'
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v3
with:
images: nodebb/docker
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=raw,value=latest
- name: Build and push Docker images
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}

View File

@@ -21,7 +21,7 @@ define('forum/account/info', ['forum/account/header', 'components', 'forum/accou
app.alertSuccess('[[user:info.moderation-note.success]]');
var timestamp = Date.now();
var data = [{
note: note,
note: utils.escapeHTML(note),
user: app.user,
timestamp: timestamp,
timestampISO: utils.toISOString(timestamp),

View File

@@ -208,15 +208,20 @@ socket = window.socket;
}
function onEventBanned(data) {
var message = data.until ? '[[error:user-banned-reason-until, ' + utils.toISOString(data.until) + ', ' + data.reason + ']]' : '[[error:user-banned-reason, ' + data.reason + ']]';
bootbox.alert({
title: '[[error:user-banned]]',
message: message,
closeButton: false,
callback: function () {
window.location.href = config.relative_path + '/';
},
require(['translator'], function (translator) {
var message = data.until ?
translator.compile('error:user-banned-reason-until', (new Date(data.until).toLocaleString()), data.reason) :
'[[error:user-banned-reason, ' + data.reason + ']]';
translator.translate(message, function (message) {
bootbox.alert({
title: '[[error:user-banned]]',
message: message,
closeButton: false,
callback: function () {
window.location.href = config.relative_path + '/';
},
});
});
});
}

View File

@@ -11,6 +11,7 @@ const privileges = require('../privileges');
const categories = require('../categories');
const plugins = require('../plugins');
const meta = require('../meta');
const middlewareHelpers = require('../middleware/helpers');
const helpers = module.exports;
@@ -124,7 +125,17 @@ helpers.notAllowed = async function (req, res, error) {
if (req.loggedIn || req.uid === -1) {
if (res.locals.isAPI) {
helpers.formatApiResponse(403, res, error);
if (req.originalUrl.startsWith(`${relative_path}/api/v3`)) {
helpers.formatApiResponse(403, res, error);
} else {
res.status(403).json({
path: req.path.replace(/^\/api/, ''),
loggedIn: req.loggedIn,
error: error,
title: '[[global:403.title]]',
bodyClass: middlewareHelpers.buildBodyClass(req, res),
});
}
} else {
const middleware = require('../middleware');
await middleware.buildHeaderAsync(req, res);

View File

@@ -87,7 +87,7 @@ describe('emailer', () => {
assert.equal(output, text);
done();
});
}, 500);
}, 2000);
});
});
});