icynet-auth-server/src/modules/utility/services/form-utility.service.ts

45 lines
1.3 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { Request } from 'express';
import { SessionData } from 'express-session';
@Injectable()
export class FormUtilityService {
public emailRegex =
/^[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
public passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\w\W]{8,}$/;
public usernameRegex = /^[a-zA-Z0-9_\-.]{3,26}$/;
public mergeObjectArray(flash: Record<string, any>[]): Record<string, any> {
return flash.reduce<Record<string, any>>(
(obj, item) => ({ ...obj, ...item }),
{},
);
}
/**
* Include CSRF token, messages and prefilled form values for a template with a form
* @param req Express request
* @param session Express session
* @param additional Additional data to pass
* @returns Template locals
*/
public populateTemplate(
req: Request,
session: SessionData,
additional: Record<string, any> = {},
): Record<string, any> {
const message = req.flash('message')[0] || {};
const form = this.mergeObjectArray(
(req.flash('form') as Record<string, any>[]) || [],
);
return {
path: req.originalUrl,
csrf: session.csrf,
message,
form,
...additional,
};
}
}