@wepublish/api
Version:
API core for we.publish.
47 lines • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OneOfGuard = void 0;
const tslib_1 = require("tslib");
const common_1 = require("@nestjs/common");
const core_1 = require("@nestjs/core");
const rxjs_1 = require("rxjs");
const one_of_decorator_1 = require("./one-of.decorator");
let OneOfGuard = exports.OneOfGuard = class OneOfGuard {
constructor(reflector, moduleRef) {
this.reflector = reflector;
this.moduleRef = moduleRef;
}
canActivate(context) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const allowedGuards = this.reflector.getAllAndMerge(one_of_decorator_1.ONE_OF_METADATA_KEY, [
context.getHandler(),
context.getClass()
]);
const guards = allowedGuards.map(guardReference => this.moduleRef.get(guardReference, { strict: false }));
if (!guards.length) {
return true;
}
const checks = yield Promise.all(guards.map((guard) => tslib_1.__awaiter(this, void 0, void 0, function* () {
try {
const canActivate$ = guard.canActivate(context);
const canActivate = (0, rxjs_1.isObservable)(canActivate$)
? yield (0, rxjs_1.lastValueFrom)(canActivate$)
: yield canActivate$;
return canActivate;
}
catch (error) {
if (error instanceof common_1.UnauthorizedException) {
return false;
}
throw error;
}
})));
return checks.some(Boolean);
});
}
};
exports.OneOfGuard = OneOfGuard = tslib_1.__decorate([
(0, common_1.Injectable)(),
tslib_1.__metadata("design:paramtypes", [core_1.Reflector, core_1.ModuleRef])
], OneOfGuard);
//# sourceMappingURL=one-of.guard.js.map