forattini-dev/s3db.js

View on GitHub
src/validator.ts

Summary

Maintainability
A
0 mins
Test Coverage
import CryptoJS from "crypto-js";
import Validator from "fastest-validator";

export class CustomValidator extends Validator {
  crypto: any;
  passphrase: string | any;

  constructor(options: any, passphrase?: string) {
    super(options);
    this.passphrase = passphrase;
  }
}

export function ValidatorFactory({ passphrase }: { passphrase?: string }) {
  let options = {
    useNewCustomCheckerFunction: true,

    defaults: {
      object: {
        strict: "remove",
      },
    },
  };

  const validator = new CustomValidator(options, passphrase);

  validator.alias("secret", {
    type: "string",
    custom: (v: any) => {
      if (!validator.passphrase) throw new Error("No passphrase defined.");

      const ciphertext = CryptoJS.AES.encrypt(String(v), validator.passphrase);

      return ciphertext.toString();
    },
  });

  return validator;
}