45 lines
1.3 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
}
|