add guest user functionality

This commit is contained in:
rubikscraft 2022-03-09 11:53:06 +01:00
parent 154bea5bc6
commit 749042cdd5
No known key found for this signature in database
GPG key ID: 1463EBE9200A5CD4
9 changed files with 71 additions and 4 deletions

View file

@ -36,6 +36,7 @@
"passport": "^0.5.2",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"passport-strategy": "^1.0.0",
"pg": "^8.7.3",
"picsur-shared": "*",
"reflect-metadata": "^0.1.13",
@ -52,6 +53,7 @@
"@types/node": "^17.0.21",
"@types/passport-jwt": "^3.0.6",
"@types/passport-local": "^1.0.34",
"@types/passport-strategy": "^0.2.35",
"@types/supertest": "^2.0.11",
"@typescript-eslint/eslint-plugin": "^5.13.0",
"@typescript-eslint/parser": "^5.13.0",

View file

@ -10,6 +10,7 @@ import { DemoManagerModule } from './managers/demo/demomanager.module';
import { AuthModule } from './routes/api/auth/auth.module';
import { PrefModule } from './routes/api/pref/pref.module';
import { ImageModule } from './routes/image/imageroute.module';
import { ExperimentModule } from './routes/api/experiment/experiment.module';
@Module({
imports: [
@ -27,6 +28,7 @@ import { ImageModule } from './routes/image/imageroute.module';
DemoManagerModule,
PrefModule,
PicsurLoggerModule,
ExperimentModule,
],
})
export class AppModule {}

View file

@ -1,9 +1,9 @@
import { CanActivate, UseGuards } from '@nestjs/common';
import { AdminGuard } from '../managers/auth/guards/admin.guard';
import { JwtAuthGuard } from '../managers/auth/guards/jwt.guard';
import { MainAuthGuard } from '../managers/auth/guards/main.guard';
export const Authenticated = (adminOnly: boolean = false) => {
const guards: (Function | CanActivate)[] = [JwtAuthGuard];
const guards: (Function | CanActivate)[] = [MainAuthGuard];
if (adminOnly) guards.push(AdminGuard);
return UseGuards(...guards);

View file

@ -10,6 +10,7 @@ import {
} from '../../config/jwt.lateconfig.service';
import { PicsurLateConfigModule } from '../../config/lateconfig.module';
import { AuthManagerService } from './auth.service';
import { GuestStrategy } from './guards/guest.strategy';
import { JwtStrategy } from './guards/jwt.strategy';
import { LocalAuthStrategy } from './guards/localauth.strategy';
@ -28,6 +29,7 @@ import { LocalAuthStrategy } from './guards/localauth.strategy';
AuthManagerService,
LocalAuthStrategy,
JwtStrategy,
GuestStrategy,
JwtSecretProvider,
],
exports: [AuthManagerService],

View file

@ -0,0 +1,39 @@
import { Injectable, Logger } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Request } from 'express';
import { ParamsDictionary } from 'express-serve-static-core';
import { Strategy } from 'passport-strategy';
import { ParsedQs } from 'qs';
type ReqType = Request<
ParamsDictionary,
any,
any,
ParsedQs,
Record<string, any>
>;
class GuestPassportStrategy extends Strategy {
async validate(req: ReqType): Promise<any> {
return undefined;
}
override authenticate(req: ReqType, options?: any): void {
const user = this.validate(req);
req['user'] = user;
this.pass();
}
}
@Injectable()
export class GuestStrategy extends PassportStrategy(
GuestPassportStrategy,
'guest',
) {
private readonly logger = new Logger('GuestStrategy');
override async validate(payload: any) {
// TODO: add guest user
return;
}
}

View file

@ -2,4 +2,4 @@ import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
export class MainAuthGuard extends AuthGuard(['jwt', 'guest']) {}

View file

@ -0,0 +1,15 @@
import { Controller, Get, Request, UseGuards } from '@nestjs/common';
import { MainAuthGuard } from '../../../managers/auth/guards/main.guard';
import AuthFasityRequest from '../../../models/dto/authrequest.dto';
@Controller('api/experiment')
export class ExperimentController {
@Get()
@UseGuards(MainAuthGuard)
async testRoute(@Request() req: AuthFasityRequest) {
console.log("calledroutes")
return {
message: req.user,
};
}
}

View file

@ -0,0 +1,7 @@
import { Module } from '@nestjs/common';
import { ExperimentController } from './experiment.controller';
@Module({
controllers: [ExperimentController]
})
export class ExperimentModule {}

View file

@ -1814,7 +1814,7 @@
"@types/passport" "*"
"@types/passport-strategy" "*"
"@types/passport-strategy@*":
"@types/passport-strategy@*", "@types/passport-strategy@^0.2.35":
version "0.2.35"
resolved "https://registry.yarnpkg.com/@types/passport-strategy/-/passport-strategy-0.2.35.tgz#e52f5212279ea73f02d9b06af67efe9cefce2d0c"
integrity sha512-o5D19Jy2XPFoX2rKApykY15et3Apgax00RRLf0RUotPDUsYrQa7x4howLYr9El2mlUApHmCMv5CZ1IXqKFQ2+g==