Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import {
parseJson,
parseTurtle,
parseFile,
saveDatasetMeta
saveDatasetMeta,
checkUsernameExists
} from '@semapps/middlewares';

import { ServiceSchema } from 'moleculer';
Expand Down Expand Up @@ -115,7 +116,7 @@ const ApiService = {
},
methods: {
getBoxesRoute(actorsPath) {
const middlewares = [
let middlewares = [
parseUrl,
parseHeader,
negotiateContentType,
Expand All @@ -127,6 +128,8 @@ const ApiService = {
saveDatasetMeta
];

if (this.settings.podProvider) middlewares.unshift(checkUsernameExists);

return {
name: this.settings.podProvider ? 'boxes' : `boxes${actorsPath}`,
path: actorsPath,
Expand Down
7 changes: 5 additions & 2 deletions src/middleware/packages/crypto/signature/proxy.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import path from 'path';
import urlJoin from 'url-join';
import { parseHeader, parseFile, saveDatasetMeta } from '@semapps/middlewares';
import { parseHeader, parseFile, saveDatasetMeta, checkUsernameExists } from '@semapps/middlewares';
import fetch from 'node-fetch';
// @ts-expect-error TS(2614): Module '"moleculer-web"' has no exported member 'E... Remove this comment to see the full error message
import { Errors as E } from 'moleculer-web';
Expand All @@ -24,12 +24,15 @@ const ProxyService = {
async started() {
const basePath = await this.broker.call('ldp.getBasePath');

let middlewares = [parseHeader, parseFile, saveDatasetMeta];
if (this.settings.podProvider) middlewares.unshift(checkUsernameExists);

const routeConfig = {
name: 'proxy-endpoint',
authorization: true,
authentication: false,
aliases: {
'POST /': [parseHeader, parseFile, saveDatasetMeta, 'signature.proxy.api_query'] // parseFile handles multipart/form-data
'POST /': [...middlewares, 'signature.proxy.api_query'] // parseFile handles multipart/form-data
}
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { parseHeader, negotiateAccept, parseJson } from '@semapps/middlewares';
import { parseHeader, negotiateAccept, parseJson, checkUsernameExists } from '@semapps/middlewares';
import path from 'node:path';
import { ServiceSchema } from 'moleculer';
import { VC_API_PATH } from '../constants';

const middlewares = [parseHeader, parseJson, negotiateAccept];

/**
*
* Verifiable Credentials API Service.
Expand All @@ -30,6 +28,9 @@ const VCApiService = {
const basePath = await this.broker.call('ldp.getBasePath');
const apiPath = path.join(basePath, this.settings.podProvider ? '/:username([^/.][^/]+)' : '', VC_API_PATH);

let middlewares = [parseHeader, parseJson, negotiateAccept];
if (this.settings.podProvider) middlewares.unshift(checkUsernameExists);

// Credential routes.
await this.broker.call('api.addRoute', {
route: {
Expand Down
7 changes: 5 additions & 2 deletions src/middleware/packages/ldp/routes/getCatchAllRoute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ import {
parseJson,
parseTurtle,
parseFile,
saveDatasetMeta
saveDatasetMeta,
checkUsernameExists
} from '@semapps/middlewares';

function getCatchAllRoute(basePath: any, podProvider: any) {
const middlewares = [
let middlewares = [
parseUrl,
parseHeader,
negotiateContentType,
Expand All @@ -25,6 +26,8 @@ function getCatchAllRoute(basePath: any, podProvider: any) {
saveDatasetMeta
];

if (podProvider) middlewares.unshift(checkUsernameExists);

return {
name: 'ldp',
path: path.join(basePath, podProvider ? '/:username([^/.][^/]+)/:slugParts*' : '/:slugParts([^/_][^/]+)*'),
Expand Down
6 changes: 4 additions & 2 deletions src/middleware/packages/ldp/routes/getPodsRoute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import {
parseJson,
parseTurtle,
parseFile,
saveDatasetMeta
saveDatasetMeta,
checkUsernameExists
} from '@semapps/middlewares';

const transformRouteParamsToSlugParts = (req: any, res: any, next: any) => {
Expand All @@ -26,7 +27,8 @@ const transformRouteParamsToSlugParts = (req: any, res: any, next: any) => {
};

function getPodsRoute(basePath: any) {
const middlewares = [
let middlewares = [
checkUsernameExists,
parseUrl,
parseHeader,
negotiateContentType,
Expand Down
20 changes: 19 additions & 1 deletion src/middleware/packages/middlewares/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const throw403 = (msg: string) => {
};

const throw404 = (msg: string) => {
throw new MoleculerError('Forbidden', 404, 'NOT_FOUND', { status: 'Not found', text: msg });
throw new MoleculerError('Not found', 404, 'NOT_FOUND', { status: 'Not found', text: msg });
};

const throw500 = (msg: string) => {
Expand Down Expand Up @@ -198,6 +198,23 @@ const saveDatasetMeta = (req: any, res: any, next: any) => {
next();
};

// To be used with a pod provider setting
const checkUsernameExists = async (req: any, res: any, next: any) => {
if (req.$params.username) {
const account = await req.$ctx.call('auth.account.findByUsername', { username: req.$params.username });
if (!account) {
res.statusCode = 404;
res.statusCode = `User ${req.$params.username} not found`;
res.end();
} else if (account.deletedAt) {
res.statusCode = 400;
res.statusCode = `User ${req.$params.username} has been deleted`;
res.end();
}
}
next();
};

export {
parseUrl,
parseHeader,
Expand All @@ -208,6 +225,7 @@ export {
parseTurtle,
parseFile,
saveDatasetMeta,
checkUsernameExists,
throw400,
throw403,
throw404,
Expand Down
8 changes: 5 additions & 3 deletions src/middleware/packages/sparql-endpoint/getRoute.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { parseHeader, negotiateAccept, parseSparql, saveDatasetMeta } from '@semapps/middlewares';
const middlewares = [parseHeader, parseSparql, negotiateAccept, saveDatasetMeta];
import { parseHeader, negotiateAccept, parseSparql, saveDatasetMeta, checkUsernameExists } from '@semapps/middlewares';

function getRoute(path: any, podProvider: boolean) {
const middlewares = [parseHeader, parseSparql, negotiateAccept, saveDatasetMeta];
if (podProvider) middlewares.unshift(checkUsernameExists);

function getRoute(path: any) {
return {
path,
name: 'sparql-endpoint',
Expand Down
7 changes: 5 additions & 2 deletions src/middleware/packages/sparql-endpoint/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@ const SparqlEndpointService = {
const basePath = await this.broker.call('ldp.getBasePath');
if (this.settings.podProvider) {
await this.broker.call('api.addRoute', {
route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql')),
route: getRoute(path.join(basePath, '/:username([^/.][^/]+)/sparql'), this.settings.podProvider),
toBottom: false
});
} else {
await this.broker.call('api.addRoute', { route: getRoute(path.join(basePath, '/sparql')), toBottom: false });
await this.broker.call('api.addRoute', {
route: getRoute(path.join(basePath, '/sparql'), this.settings.podProvider),
toBottom: false
});
}
},
actions: {
Expand Down