Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "Test suit + Code quality automation" #89

Merged
merged 1 commit into from
Feb 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
module.exports = {
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
plugins: [
"@typescript-eslint"
],
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended"
],
env: {
node: true,
node: true
},
rules: {
"no-console": ["error", { allow: ["warn"] }],
},
};
"no-console": ["error", {"allow": ["warn"]}]
}
}
43 changes: 0 additions & 43 deletions .github/workflows/code-quality.yaml

This file was deleted.

3 changes: 1 addition & 2 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
node_modules
dist
**/.next
dist
8 changes: 0 additions & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ COPY tsconfig.json .
COPY apps/api ./apps/api
COPY packages/images ./packages/images
COPY packages/thumbnail ./packages/thumbnail
COPY packages/models ./packages/models
COPY packages/utils ./packages/utils

# TODO: figure out why it is not working
# FROM base AS prod-deps
Expand All @@ -25,8 +23,6 @@ FROM base AS build
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm --filter=@medialit/thumbnail build
RUN pnpm --filter=@medialit/images build
RUN pnpm --filter=@medialit/utils build
RUN pnpm --filter=@medialit/models build
RUN pnpm --filter=@medialit/api build

FROM node:20-slim
Expand All @@ -52,10 +48,6 @@ COPY --chown=node:node --from=build /app/packages/thumbnail/package.json /app/pa
COPY --chown=node:node --from=build /app/packages/thumbnail/dist /app/packages/thumbnail/dist
COPY --chown=node:node --from=build /app/packages/images/package.json /app/packages/images/package.json
COPY --chown=node:node --from=build /app/packages/images/dist /app/packages/images/dist
COPY --chown=node:node --from=build /app/packages/utils/package.json /app/packages/utils/package.json
COPY --chown=node:node --from=build /app/packages/utils/dist /app/packages/utils/dist
COPY --chown=node:node --from=build /app/packages/models/package.json /app/packages/models/package.json
COPY --chown=node:node --from=build /app/packages/models/dist /app/packages/models/dist
COPY --chown=node:node --from=build /app/apps/api/package.json /app/apps/api/package.json
COPY --chown=node:node --from=build /app/apps/api/dist /app/apps/api/dist

Expand Down
16 changes: 0 additions & 16 deletions apps/api/__tests__/apikey/handlers.test.ts

This file was deleted.

7 changes: 7 additions & 0 deletions apps/api/__tests__/core.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

const core = require("..");

describe("core", () => {
it("needs tests");
});
13 changes: 4 additions & 9 deletions apps/api/lib/apikey/handlers.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
import { Apikey } from "./model";
import logger from "../services/log";
import { NOT_FOUND, SUCCESS } from "../config/strings";
import { createApiKey, deleteApiKey, getApiKeyByUserId } from "./queries";
import { Apikey } from "@medialit/models";

export async function createApikey(
req: any,
res: any,
next: (...args: any[]) => void
) {
const { name } = req.body;
if (!name) {
return res.status(400).json({ error: "Name is required" });
}

try {
const apikey: Apikey = await createApiKey(req.user.id, name);
const apikey: Apikey = await createApiKey(req.user.id);

return res.status(200).json({
res.status(200).json({
key: apikey.key,
});
} catch (err: any) {
logger.error({ err }, err.message);
return res.status(500).json({ error: err.message });
res.status(500).json({ error: err.message });
}
}

Expand Down
12 changes: 1 addition & 11 deletions apps/api/lib/apikey/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import {
SUBSCRIPTION_NOT_VALID,
UNAUTHORISED,
} from "../config/strings";
import { Apikey } from "./model";
import { validateSubscription } from "../subscription/validate-subscription";
import { getApiKeyUsingKeyId } from "./queries";
import { getUser } from "../user/queries";
import { Apikey } from "@medialit/models";

export default async function apikey(
req: any,
Expand All @@ -24,15 +24,6 @@ export default async function apikey(
return res.status(401).json({ error: UNAUTHORISED });
}

if (req.body.internalKey) {
const internalApikey: Apikey | null = await getApiKeyUsingKeyId(
req.body.internalKey
);
if (!internalApikey) {
return res.status(401).json({ error: UNAUTHORISED });
}
}

const isSubscriptionValid = await validateSubscription(
apiKey!.userId.toString()
);
Expand All @@ -41,7 +32,6 @@ export default async function apikey(
}

req.user = await getUser(apiKey!.userId.toString());
req.apikey = apiKey.key;

next();
}
39 changes: 38 additions & 1 deletion apps/api/lib/apikey/model.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,41 @@
import mongoose from "mongoose";
import { ApikeySchema } from "@medialit/models";
import {
APIKEY_RESTRICTION_REFERRER,
APIKEY_RESTRICTION_IP,
APIKEY_RESTRICTION_CUSTOM,
} from "../config/constants";

export interface Apikey {
key: string;
userId: mongoose.Types.ObjectId;
restriction?:
| typeof APIKEY_RESTRICTION_REFERRER
| typeof APIKEY_RESTRICTION_IP
| typeof APIKEY_RESTRICTION_CUSTOM;
httpReferrers: string[];
ipAddresses: string[];
custom: string;
}

const ApikeySchema = new mongoose.Schema<Apikey>(
{
key: { type: String, required: true },
userId: { type: mongoose.Schema.Types.ObjectId, required: true },
restriction: {
type: String,
enum: [
APIKEY_RESTRICTION_REFERRER,
APIKEY_RESTRICTION_IP,
APIKEY_RESTRICTION_CUSTOM,
],
},
httpReferrers: [String],
ipAddresses: [String],
custom: String,
},
{
timestamps: true,
}
);

export default mongoose.models.Apikey || mongoose.model("Apikey", ApikeySchema);
18 changes: 4 additions & 14 deletions apps/api/lib/apikey/queries.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
import { Apikey } from "@medialit/models";
import ApikeyModel from "./model";
import { getUniqueId } from "@medialit/utils";
import getUniqueId from "../utils/unique-id";
import ApikeyModel, { Apikey } from "./model";

export async function createApiKey(
userId: string,
name: string
): Promise<Apikey> {
export async function createApiKey(userId: string): Promise<Apikey> {
return await ApikeyModel.create({
name,
key: getUniqueId(),
userId,
});
Expand All @@ -24,7 +19,6 @@ export async function getApiKeyByUserId(
let result: Apikey | Apikey[] | null;
const projections = {
_id: 0,
name: 1,
key: 1,
httpReferrers: 1,
ipAddresses: 1,
Expand All @@ -36,15 +30,11 @@ export async function getApiKeyByUserId(
{
key: keyId,
userId,
internal: false,
},
projections
);
} else {
result = await ApikeyModel.find(
{ userId, internal: false },
projections
);
result = await ApikeyModel.find({ userId }, projections);
}

return result;
Expand Down
4 changes: 1 addition & 3 deletions apps/api/lib/media-settings/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ export async function updateMediaSettingsHandler(
try {
await updateMediaSettings({
userId: req.user.id,
apikey: req.apikey,
useWebP,
webpOutputQuality,
thumbnailWidth,
Expand All @@ -49,8 +48,7 @@ export async function updateMediaSettingsHandler(
export async function getMediaSettingsHandler(req: any, res: any) {
try {
const mediaSettings = await mediaSettingsService.getMediaSettings(
req.user.id,
req.apikey
req.user.id
);
return res.status(200).json(mediaSettings);
} catch (err: any) {
Expand Down
2 changes: 0 additions & 2 deletions apps/api/lib/media-settings/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import mongoose from "mongoose";

export interface MediaSettings {
userId: mongoose.Types.ObjectId | undefined;
apikey: string;
useWebP?: boolean;
webpOutputQuality?: number;
thumbnailWidth?: number;
Expand All @@ -11,7 +10,6 @@ export interface MediaSettings {

const MediaSettingsSchema = new mongoose.Schema<MediaSettings>({
userId: { type: mongoose.Schema.Types.ObjectId, required: true },
apikey: { type: String, required: true, unique: true },
useWebP: Boolean,
webpOutputQuality: Number,
thumbnailWidth: Number,
Expand Down
8 changes: 3 additions & 5 deletions apps/api/lib/media-settings/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,20 @@ import MediaSettingsModel, { MediaSettings } from "./model";
import { UpdateMediaSettingsProps } from "./service";

export async function getMediaSettings(
userId: string,
apikey: string
userId: string
): Promise<MediaSettings | null> {
return await MediaSettingsModel.findOne({ userId, apikey });
return await MediaSettingsModel.findOne({ userId });
}

export async function updateMediaSettings({
userId,
apikey,
useWebP,
webpOutputQuality,
thumbnailWidth,
thumbnailHeight,
}: UpdateMediaSettingsProps): Promise<void> {
await MediaSettingsModel.findOneAndUpdate(
{ userId, apikey },
{ userId },
{
$set: {
useWebP,
Expand Down
16 changes: 13 additions & 3 deletions apps/api/lib/media-settings/routes.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
import express from "express";
import subscription from "../subscription/middleware";
import {
getMediaSettingsHandler,
updateMediaSettingsHandler,
} from "../media-settings/handlers";
import apikey from "../apikey/middleware";

export default (passport: any) => {
const router = express.Router();

router.post("/create", apikey, updateMediaSettingsHandler);
router.post(
"/create",
passport.authenticate("jwt", { session: false }),
subscription,
updateMediaSettingsHandler
);

router.post("/get", apikey, getMediaSettingsHandler);
router.post(
"/get",
passport.authenticate("jwt", { session: false }),
subscription,
getMediaSettingsHandler
);

return router;
};
Loading