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() {
try {
const user = <AuthUser>this.req?.user;
const req = this.req as Express.AuthenticatedRequest;
const user = <AuthUser>req.user;
if (!user) {
const errorMessage = "Unexpected missing user data";

View File

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

View File

@ -1,14 +1,15 @@
import { AuthUser } from "@/contexts/auth/domain";
import { generateExpressError } from "@/contexts/common/infrastructure/express";
import Express from "express";
import * as express from "express";
import httpStatus from "http-status";
const profileMiddleware = (
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) {
generateExpressError(req, res, httpStatus.UNAUTHORIZED);

View File

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

View File

@ -55,12 +55,12 @@ class EmailStrategyController extends PassportStrategyController {
}
export const initEmailStrategy = (context: IAuthContext) =>
new EmailStrategy(strategyOpts, async (...params) => {
new EmailStrategy(strategyOpts, async (username, password, done) => {
registerAuthRepository(context);
return new EmailStrategyController(
{
useCase: new LoginUseCase(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 { IServerError } from "@/contexts/common/domain/errors";
import { PassportStrategyController } from "@/contexts/common/infrastructure/express";
import {
ExtractJwt,
Strategy as JWTStrategy,
VerifiedCallback,
} from "passport-jwt";
import { ExtractJwt, Strategy as JWTStrategy, VerifiedCallback } from "passport-jwt";
import { IAuthContext } from "../../Auth.context";
import { registerAuthRepository } from "../../Auth.repository";
@ -23,7 +19,7 @@ class JWTStrategyController extends PassportStrategyController {
props: {
useCase: FindUserByEmailUseCase;
},
context: any,
context: any
) {
super();
@ -49,12 +45,12 @@ class JWTStrategyController extends PassportStrategyController {
}
export const initJWTStrategy = (context: IAuthContext) =>
new JWTStrategy(strategyOpts, async (...params) => {
new JWTStrategy(strategyOpts, async (payload, done) => {
registerAuthRepository(context);
return new JWTStrategyController(
{
useCase: new FindUserByEmailUseCase(context),
},
context,
).verifyStrategy(...params);
context
).verifyStrategy(payload, done);
});

View File

@ -51,7 +51,8 @@ export class ListArticlesController extends ExpressController {
}
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({
$filters: `lang_code[eq]${language.toString()}`,

View File

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

View File

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

View File

@ -1,15 +1,16 @@
import { AuthUser } from "@/contexts/auth/domain";
import { GetDealerByUserUseCase } from "@/contexts/sales/application";
import Express from "express";
import * as express from "express";
import { registerDealerRepository } from "../../Dealer.repository";
import { ISalesContext } from "../../Sales.context";
export const getDealerMiddleware = async (
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 context: ISalesContext = res.locals.context;
registerDealerRepository(context);

View File

@ -1,9 +1,9 @@
import { checkUser, createLoginController } from "@/contexts/auth";
import Express from "express";
import * as express from "express";
import passport from "passport";
export const authRouter = (appRouter: Express.Router) => {
const authRoutes: Express.Router = Express.Router({ mergeParams: true });
export const authRouter = (appRouter: express.Router) => {
const authRoutes: express.Router = express.Router({ mergeParams: true });
//appRouter.use(registerMiddleware("isUser", isUser));
//appRouter.use(registerMiddleware("isAdmin", isAdmin));
@ -11,12 +11,13 @@ export const authRouter = (appRouter: Express.Router) => {
authRoutes.post(
"/login",
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)
);
authRoutes.post("/logout", checkUser, (req: Express.Request, res: Express.Response) => {
req?.logout(function (err) {
authRoutes.post("/logout", checkUser, (req: express.Request, res: express.Response) => {
const _req = req as Express.AuthenticatedRequest;
_req.logout(function (err) {
if (err) {
return res.status(500).json();
}