moleculer-decorators
Version:
decorators for moleculer
60 lines (55 loc) • 1.45 kB
text/typescript
import { IncomingMessage, ServerResponse } from "http";
import * as Moleculer from "moleculer";
import { Method, Service } from "../../src";
import * as ApiGateway from "moleculer-web";
export interface User {
id: string;
}
const { Errors } = ApiGateway;
({
mixins: [ApiGateway],
settings: {
port: process.env.PORT || 9000,
routes: [
{
aliases: {
"GET getTest/getModel/:withUser": "GetTest.getModel"
},
authentication: true,
whitelist: ["**"]
}
]
}
})
export default class Api extends Moleculer.Service {
public async authenticate(
ctx: Moleculer.Context,
route: string,
req: IncomingMessage,
res: ServerResponse
) {
const accessToken = req.headers.authorization;
if (accessToken) {
const user = await this._getUserFromRemoterService(ctx, accessToken);
if (user) {
return Promise.resolve({ ...user.user, id: user.user.externalId });
} else {
return Promise.reject(
new Errors.UnAuthorizedError(Errors.ERR_INVALID_TOKEN, {})
);
}
} else {
return Promise.reject(
new Errors.UnAuthorizedError(Errors.ERR_NO_TOKEN, {})
);
}
}
private _getUserFromRemoterService(
ctx: Moleculer.Context,
accessToken
): Promise<any> {
return Promise.resolve({ user: {} });
}
}