Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 3x 3x 3x 3x 3x 1x 3x 3x 3x 3x 3x 3x 1x 3x 3x 3x 2x 2x 2x 2x 1x 2x 2x | /*
https://docs.nestjs.com/modules
*/
import { CacheModule, Inject, OnApplicationBootstrap, OnModuleInit } from '@nestjs/common';
import { ConfigService, Logger, PluginCommonModule, Type, VendurePlugin } from '@vendure/core';
import { EmailPlugin, EmailPluginOptions } from '@vendure/email-plugin';
import { EMAIL_PLUGIN_OPTIONS } from '@vendure/email-plugin/lib/src/constants';
import path from 'path';
import { DEFAULT_OPTIONS, EMAIL_EVENT_NAME, SIMPLE_AUTH_PLUGIN_LOG_CONTEXT, SIMPLE_AUTH_PLUGIN_OPTIONS } from './constants';
import { copyDir } from './copy-dir';
import { oneTimeCodeRequestedEventHandler } from './email-handler';
import { ISimpleAuthPluginOptions } from './interfaces';
import { queryExtension } from './schema';
import { SimpleAuthStrategy } from './simple-auth-strategy';
import { SimpleAuthResolver } from './simple-auth.resolver';
import { SimpleAuthService } from './simple-auth.service';
@VendurePlugin({
imports: [
PluginCommonModule,
CacheModule.registerAsync({
useFactory: () => {
return SimpleAuthPlugin.options.cacheModuleOption;
}
}),
EmailPlugin
],
providers: [
SimpleAuthService,
{
provide: SIMPLE_AUTH_PLUGIN_OPTIONS,
useFactory: () => SimpleAuthPlugin.options
}
],
shopApiExtensions: {
schema: queryExtension,
resolvers: [SimpleAuthResolver]
},
configuration: (conf) => {
const simpleAuthStrategy = new SimpleAuthStrategy();
conf.authOptions.shopAuthenticationStrategy.push(simpleAuthStrategy);
return conf;
},
})
export class SimpleAuthPlugin implements OnApplicationBootstrap, OnModuleInit {
constructor(
@Inject(ConfigService) private conf: ConfigService,
@Inject(EMAIL_PLUGIN_OPTIONS) private emailConf: EmailPluginOptions) {
}
onModuleInit() {
this.registerEventHandler()
}
onApplicationBootstrap() {
this.cloneEmailTemplate();
}
registerEventHandler() {
const handlerExisted =
this.emailConf.handlers.some(handler => handler.listener.type === EMAIL_EVENT_NAME)
if (handlerExisted) { return }
this.emailConf.handlers.push(oneTimeCodeRequestedEventHandler)
}
cloneEmailTemplate() {
/* eslint-disable @typescript-eslint/no-explicit-any */
const plugins = this.conf.plugins as Type<any>[];
const emailPlugin = plugins.find(plg => plg == EmailPlugin);
if (emailPlugin) {
const options = (emailPlugin as any)['options'] as EmailPluginOptions;
const templatePath = options.templatePath;
copyDir(path.join(__dirname, './template/onetimecode-requested'),
templatePath);
Logger.info(`Template for onetimecode-requested created at ${templatePath}`, SIMPLE_AUTH_PLUGIN_LOG_CONTEXT);
} else {
Logger.warn(`Cannot find EmailPlugin in Vendure Config. This pluginn might not work correctly."`, SIMPLE_AUTH_PLUGIN_LOG_CONTEXT);
}
}
static options: NonNullable<ISimpleAuthPluginOptions> = DEFAULT_OPTIONS;
static init(options: Partial<ISimpleAuthPluginOptions>) {
SimpleAuthPlugin.options = {
...DEFAULT_OPTIONS,
...options
};
return SimpleAuthPlugin;
}
}
|