This commit is contained in:
David Arranz 2024-09-08 14:10:17 +02:00
parent e41dde5c07
commit 130ca11aea
11 changed files with 46 additions and 41 deletions

View File

@ -25,7 +25,8 @@ export class IdentityController extends ExpressController {
async executeImpl() { async executeImpl() {
try { try {
const user = <AuthUser>this.req?.user; const req = this.req as Express.AuthenticatedRequest;
const user = <AuthUser>req.user;
if (!user) { if (!user) {
const errorMessage = "Unexpected missing user data"; const errorMessage = "Unexpected missing user data";

View File

@ -27,7 +27,8 @@ export class LoginController extends ExpressController {
async executeImpl() { async executeImpl() {
try { try {
const user = <AuthUser>this.req?.user; const req = this.req as Express.AuthenticatedRequest;
const user = <AuthUser>req.user;
if (!user) { if (!user) {
const errorMessage = "Unexpected missing user data"; const errorMessage = "Unexpected missing user data";

View File

@ -1,14 +1,15 @@
import { AuthUser } from "@/contexts/auth/domain"; import { AuthUser } from "@/contexts/auth/domain";
import { generateExpressError } from "@/contexts/common/infrastructure/express"; import { generateExpressError } from "@/contexts/common/infrastructure/express";
import Express from "express"; import * as express from "express";
import httpStatus from "http-status"; import httpStatus from "http-status";
const profileMiddleware = ( const profileMiddleware = (
req: Express.Request, req: express.Request,
res: Express.Response, res: express.Response,
next: Express.NextFunction next: express.NextFunction
) => { ) => {
const user = <AuthUser>req?.user; const _req = req as Express.AuthenticatedRequest;
const user = <AuthUser>_req.user;
if (!user || !user.isAdmin) { if (!user || !user.isAdmin) {
generateExpressError(req, res, httpStatus.UNAUTHORIZED); generateExpressError(req, res, httpStatus.UNAUTHORIZED);

View File

@ -1,7 +1,7 @@
import { AuthUser } from "@/contexts/auth/domain"; import { AuthUser } from "@/contexts/auth/domain";
import { composeMiddleware, generateExpressError } from "@/contexts/common/infrastructure/express"; import { composeMiddleware, generateExpressError } from "@/contexts/common/infrastructure/express";
import { ensureIdIsValid } from "@shared/contexts"; import { ensureIdIsValid } from "@shared/contexts";
import Express from "express"; import * as express from "express";
import httpStatus from "http-status"; import httpStatus from "http-status";
import passport from "passport"; import passport from "passport";
@ -9,20 +9,20 @@ export const checkUser = composeMiddleware([
passport.authenticate("local-jwt", { passport.authenticate("local-jwt", {
session: false, session: false,
}), }),
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => { (req: express.Request, res: express.Response, next: express.NextFunction) => {
//const user = <AuthUser>req?.user;
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
return next(); return next();
} }
return generateExpressError(req, res, httpStatus.UNAUTHORIZED); return generateExpressError(req, res, httpStatus.UNAUTHORIZED);
}, },
]); ]);
export const checkisAdmin = composeMiddleware([ export const checkisAdmin = composeMiddleware([
checkUser, checkUser,
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => { (req: express.Request, res: express.Response, next: express.NextFunction) => {
const user = <AuthUser>req?.user; const _req = req as Express.AuthenticatedRequest;
const user = <AuthUser>_req.user;
if (!user || !user.isAdmin) { if (!user || !user.isAdmin) {
generateExpressError(req, res, httpStatus.UNAUTHORIZED); generateExpressError(req, res, httpStatus.UNAUTHORIZED);
} }
@ -32,8 +32,9 @@ export const checkisAdmin = composeMiddleware([
export const checkAdminOrSelf = composeMiddleware([ export const checkAdminOrSelf = composeMiddleware([
checkUser, checkUser,
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => { (req: express.Request, res: express.Response, next: express.NextFunction) => {
const user = <AuthUser>req?.user; const _req = req as Express.AuthenticatedRequest;
const user = <AuthUser>_req.user;
const { userId } = req.params; const { userId } = req.params;
@ -41,7 +42,7 @@ export const checkAdminOrSelf = composeMiddleware([
return next(); return next();
} }
if (userId) { if (user && userId) {
const paramIdOrError = ensureIdIsValid(userId); const paramIdOrError = ensureIdIsValid(userId);
if (paramIdOrError.isSuccess && user.id.equals(paramIdOrError.object)) { if (paramIdOrError.isSuccess && user.id.equals(paramIdOrError.object)) {
return next(); return next();

View File

@ -55,12 +55,12 @@ class EmailStrategyController extends PassportStrategyController {
} }
export const initEmailStrategy = (context: IAuthContext) => export const initEmailStrategy = (context: IAuthContext) =>
new EmailStrategy(strategyOpts, async (...params) => { new EmailStrategy(strategyOpts, async (username, password, done) => {
registerAuthRepository(context); registerAuthRepository(context);
return new EmailStrategyController( return new EmailStrategyController(
{ {
useCase: new LoginUseCase(context), useCase: new LoginUseCase(context),
}, },
context context
).verifyStrategy(...params); ).verifyStrategy(username, password, done);
}); });

View File

@ -2,11 +2,7 @@ import { config } from "@/config";
import { FindUserByEmailUseCase } from "@/contexts/auth/application/FindUserByEmail.useCase"; import { FindUserByEmailUseCase } from "@/contexts/auth/application/FindUserByEmail.useCase";
import { IServerError } from "@/contexts/common/domain/errors"; import { IServerError } from "@/contexts/common/domain/errors";
import { PassportStrategyController } from "@/contexts/common/infrastructure/express"; import { PassportStrategyController } from "@/contexts/common/infrastructure/express";
import { import { ExtractJwt, Strategy as JWTStrategy, VerifiedCallback } from "passport-jwt";
ExtractJwt,
Strategy as JWTStrategy,
VerifiedCallback,
} from "passport-jwt";
import { IAuthContext } from "../../Auth.context"; import { IAuthContext } from "../../Auth.context";
import { registerAuthRepository } from "../../Auth.repository"; import { registerAuthRepository } from "../../Auth.repository";
@ -23,7 +19,7 @@ class JWTStrategyController extends PassportStrategyController {
props: { props: {
useCase: FindUserByEmailUseCase; useCase: FindUserByEmailUseCase;
}, },
context: any, context: any
) { ) {
super(); super();
@ -49,12 +45,12 @@ class JWTStrategyController extends PassportStrategyController {
} }
export const initJWTStrategy = (context: IAuthContext) => export const initJWTStrategy = (context: IAuthContext) =>
new JWTStrategy(strategyOpts, async (...params) => { new JWTStrategy(strategyOpts, async (payload, done) => {
registerAuthRepository(context); registerAuthRepository(context);
return new JWTStrategyController( return new JWTStrategyController(
{ {
useCase: new FindUserByEmailUseCase(context), useCase: new FindUserByEmailUseCase(context),
}, },
context, context
).verifyStrategy(...params); ).verifyStrategy(payload, done);
}); });

View File

@ -51,7 +51,8 @@ export class ListArticlesController extends ExpressController {
} }
async executeImpl() { async executeImpl() {
const { language = Language.createDefaultCode() } = <AuthUser>this.req.user; const req = this.req as Express.AuthenticatedRequest;
const { language = Language.createDefaultCode() } = <AuthUser>req.user;
const queryOrError = this.validateQuery({ const queryOrError = this.validateQuery({
$filters: `lang_code[eq]${language.toString()}`, $filters: `lang_code[eq]${language.toString()}`,

View File

@ -30,7 +30,8 @@ export class GetProfileController extends ExpressController {
} }
async executeImpl(): Promise<any> { async executeImpl(): Promise<any> {
const user = <AuthUser>this.req.user; const req = this.req as Express.AuthenticatedRequest;
const user = <AuthUser>req.user;
if (!user) { if (!user) {
const errorMessage = "Unexpected missing user data"; const errorMessage = "Unexpected missing user data";

View File

@ -33,7 +33,8 @@ export class UpdateProfileController extends ExpressController {
} }
async executeImpl() { async executeImpl() {
const user = <User | undefined>this.req.user; const req = this.req as Express.AuthenticatedRequest;
const user = <User>req.user;
if (!user) { if (!user) {
const errorMessage = "Unexpected missing Profile data"; const errorMessage = "Unexpected missing Profile data";

View File

@ -1,15 +1,16 @@
import { AuthUser } from "@/contexts/auth/domain"; import { AuthUser } from "@/contexts/auth/domain";
import { GetDealerByUserUseCase } from "@/contexts/sales/application"; import { GetDealerByUserUseCase } from "@/contexts/sales/application";
import Express from "express"; import * as express from "express";
import { registerDealerRepository } from "../../Dealer.repository"; import { registerDealerRepository } from "../../Dealer.repository";
import { ISalesContext } from "../../Sales.context"; import { ISalesContext } from "../../Sales.context";
export const getDealerMiddleware = async ( export const getDealerMiddleware = async (
req: Express.Request, req: express.Request,
res: Express.Response, res: express.Response,
next: Express.NextFunction next: express.NextFunction
) => { ) => {
const user = <AuthUser>req?.user; const _req = req as Express.AuthenticatedRequest;
const user = <AuthUser>_req.user;
const context: ISalesContext = res.locals.context; const context: ISalesContext = res.locals.context;
registerDealerRepository(context); registerDealerRepository(context);

View File

@ -1,9 +1,9 @@
import { checkUser, createLoginController } from "@/contexts/auth"; import { checkUser, createLoginController } from "@/contexts/auth";
import Express from "express"; import * as express from "express";
import passport from "passport"; import passport from "passport";
export const authRouter = (appRouter: Express.Router) => { export const authRouter = (appRouter: express.Router) => {
const authRoutes: Express.Router = Express.Router({ mergeParams: true }); const authRoutes: express.Router = express.Router({ mergeParams: true });
//appRouter.use(registerMiddleware("isUser", isUser)); //appRouter.use(registerMiddleware("isUser", isUser));
//appRouter.use(registerMiddleware("isAdmin", isAdmin)); //appRouter.use(registerMiddleware("isAdmin", isAdmin));
@ -11,12 +11,13 @@ export const authRouter = (appRouter: Express.Router) => {
authRoutes.post( authRoutes.post(
"/login", "/login",
passport.authenticate("local-email", { session: false }), passport.authenticate("local-email", { session: false }),
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => (req: express.Request, res: express.Response, next: express.NextFunction) =>
createLoginController(res.locals["context"]).execute(req, res, next) createLoginController(res.locals["context"]).execute(req, res, next)
); );
authRoutes.post("/logout", checkUser, (req: Express.Request, res: Express.Response) => { authRoutes.post("/logout", checkUser, (req: express.Request, res: express.Response) => {
req?.logout(function (err) { const _req = req as Express.AuthenticatedRequest;
_req.logout(function (err) {
if (err) { if (err) {
return res.status(500).json(); return res.status(500).json();
} }