feat: auto logout
This commit is contained in:
parent
4a5e93c356
commit
3084fb4255
|
|
@ -4,6 +4,16 @@ import { AuthService } from '@gitroom/helpers/auth/auth.service';
|
|||
import { User } from '@prisma/client';
|
||||
import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service';
|
||||
import { UsersService } from '@gitroom/nestjs-libraries/database/prisma/users/users.service';
|
||||
import { removeSubdomain } from '@gitroom/helpers/subdomain/subdomain.management';
|
||||
|
||||
const removeAuth = (res: Response) =>
|
||||
res.cookie('auth', '', {
|
||||
domain: '.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname,
|
||||
secure: true,
|
||||
httpOnly: true,
|
||||
sameSite: 'none',
|
||||
expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
|
||||
});
|
||||
|
||||
@Injectable()
|
||||
export class AuthMiddleware implements NestMiddleware {
|
||||
|
|
@ -14,14 +24,16 @@ export class AuthMiddleware implements NestMiddleware {
|
|||
async use(req: Request, res: Response, next: NextFunction) {
|
||||
const auth = req.headers.auth || req.cookies.auth;
|
||||
if (!auth) {
|
||||
throw new Error('Unauthorized');
|
||||
removeAuth(res);
|
||||
res.status(401).send('Unauthorized');
|
||||
}
|
||||
try {
|
||||
let user = AuthService.verifyJWT(auth) as User | null;
|
||||
const orgHeader = req.cookies.showorg || req.headers.showorg;
|
||||
|
||||
if (!user) {
|
||||
throw new Error('Unauthorized');
|
||||
removeAuth(res);
|
||||
res.status(401).send('Unauthorized');
|
||||
}
|
||||
|
||||
if (user?.isSuperAdmin && req.cookies.impersonate) {
|
||||
|
|
@ -39,12 +51,15 @@ export class AuthMiddleware implements NestMiddleware {
|
|||
req.user = user;
|
||||
|
||||
// @ts-ignore
|
||||
loadImpersonate.organization.users = loadImpersonate.organization.users.filter(f => f.userId === user.id);
|
||||
loadImpersonate.organization.users =
|
||||
loadImpersonate.organization.users.filter(
|
||||
(f) => f.userId === user.id
|
||||
);
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-expect-error
|
||||
req.org = loadImpersonate.organization;
|
||||
next();
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +78,8 @@ export class AuthMiddleware implements NestMiddleware {
|
|||
// @ts-expect-error
|
||||
req.org = setOrg;
|
||||
} catch (err) {
|
||||
throw new Error('Unauthorized');
|
||||
removeAuth(res);
|
||||
res.status(401).send('Unauthorized');
|
||||
}
|
||||
next();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue