/*
 * SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
import { registerAs } from '@nestjs/config';
import * as Joi from 'joi';

import { buildErrorMessage } from './utils';

export interface CspConfig {
  enable: boolean;
  reportURI: string;
}

const cspSchema = Joi.object({
  enable: Joi.boolean().default(true).optional().label('HD_CSP_ENABLE'),
  reportURI: Joi.string().optional().label('HD_CSP_REPORT_URI'),
});

export default registerAs('cspConfig', () => {
  const cspConfig = cspSchema.validate(
    {
      enable: process.env.HD_CSP_ENABLE || true,
      reportURI: process.env.HD_CSP_REPORT_URI,
    },
    {
      abortEarly: false,
      presence: 'required',
    },
  );
  if (cspConfig.error) {
    const errorMessages = cspConfig.error.details.map(
      (detail) => detail.message,
    );
    throw new Error(buildErrorMessage(errorMessages));
  }
  return cspConfig.value as CspConfig;
});
