This commit is contained in:
Ajay Ramachandran
2021-07-03 17:27:00 -04:00
6 changed files with 44 additions and 17 deletions

View File

@@ -104,6 +104,7 @@
| issueTime | INTEGER | not null |
| issuerUserID | TEXT | not null |
| enabled | INTEGER | not null |
| reason | TEXT | not null, default '' |
| index | field |
| -- | :--: |

View File

@@ -1,13 +1,14 @@
FROM node:14
WORKDIR /usr/src/app
COPY package.json .
COPY package-lock.json .
COPY tsconfig.json .
FROM node:14-alpine as builder
RUN apk add --no-cache --virtual .build-deps python make g++
COPY package.json package-lock.json tsconfig.json entrypoint.sh ./
COPY src src
RUN npm ci
RUN npm run tsc
RUN mkdir databases
COPY databases/*.sql databases/
RUN npm ci && npm run tsc
FROM node:14-alpine as app
WORKDIR /usr/src/app
COPY --from=builder node_modules .
COPY --from=builder dist ./dist
COPY entrypoint.sh .
COPY databases/*.sql databases/
EXPOSE 8080
CMD ./entrypoint.sh

View File

@@ -0,0 +1,19 @@
BEGIN TRANSACTION;
/* Add reason field */
CREATE TABLE "sqlb_temp_table_17" (
"userID" TEXT NOT NULL,
"issueTime" INTEGER NOT NULL,
"issuerUserID" TEXT NOT NULL,
enabled INTEGER NOT NULL,
"reason" TEXT NOT NULL default ''
);
INSERT INTO sqlb_temp_table_17 SELECT "userID","issueTime","issuerUserID","enabled", '' FROM "warnings";
DROP TABLE warnings;
ALTER TABLE sqlb_temp_table_17 RENAME TO "warnings";
UPDATE "config" SET value = 17 WHERE key = 'version';
COMMIT;

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/sh
set -e
echo 'Entrypoint script'
cd /usr/src/app

View File

@@ -7,10 +7,11 @@ import { HashedUserID, UserID } from '../types/user.model';
export async function postWarning(req: Request, res: Response) {
// Collect user input data
let issuerUserID: HashedUserID = getHash(<UserID> req.body.issuerUserID);
let userID: UserID = req.body.userID;
let issueTime = new Date().getTime();
let enabled: boolean = req.body.enabled ?? true;
const issuerUserID: HashedUserID = getHash(<UserID> req.body.issuerUserID);
const userID: UserID = req.body.userID;
const issueTime = new Date().getTime();
const enabled: boolean = req.body.enabled ?? true;
const reason: string = req.body.reason ?? '';
// Ensure user is a VIP
if (!await isUserVIP(issuerUserID)) {
@@ -25,7 +26,11 @@ export async function postWarning(req: Request, res: Response) {
let previousWarning = await db.prepare('get', 'SELECT * FROM "warnings" WHERE "userID" = ? AND "issuerUserID" = ?', [userID, issuerUserID]);
if (!previousWarning) {
await db.prepare('run', 'INSERT INTO "warnings" ("userID", "issueTime", "issuerUserID", "enabled") VALUES (?, ?, ?, 1)', [userID, issueTime, issuerUserID]);
await db.prepare(
'run',
'INSERT INTO "warnings" ("userID", "issueTime", "issuerUserID", "enabled", "reason") VALUES (?, ?, ?, 1, ?)',
[userID, issueTime, issuerUserID, reason]
);
resultStatus = "issued to";
} else {
res.status(409).send();

View File

@@ -12,6 +12,7 @@ describe('postWarning', () => {
let json = {
issuerUserID: 'warning-vip',
userID: 'warning-0',
reason: 'warning-reason-0'
};
fetch(getbaseURL()
+ "/api/warnUser", {
@@ -23,8 +24,8 @@ describe('postWarning', () => {
})
.then(async res => {
if (res.status === 200) {
let row = await db.prepare('get', `SELECT "userID", "issueTime", "issuerUserID", enabled FROM warnings WHERE "userID" = ?`, [json.userID]);
if (row?.enabled == 1 && row?.issuerUserID == getHash(json.issuerUserID)) {
let row = await db.prepare('get', `SELECT "userID", "issueTime", "issuerUserID", enabled, "reason" FROM warnings WHERE "userID" = ?`, [json.userID]);
if (row?.enabled == 1 && row?.issuerUserID == getHash(json.issuerUserID) && row?.reason === json.reason) {
done();
} else {
done("Warning missing from database");