mod_provider__provider.js

/**
@module /provider

@description
Functions for handling 3rd party service provider requests
*/

import file from './file.js';

import cloudfront from './cloudfront.js';

import s3 from './s3.js';

/**
@function provider
@async

@description
The provider method looks up a provider module method matching the provider request parameter and passes the req/res objects as argument to the matched method.

The response from the method is returned with the HTTP response.

@param {Object} req HTTP request.
@param {Object} res HTTP response.
@param {Object} req.params Request parameter.
@param {string} params.signer Provider module to handle the request.

@returns {Promise} The promise resolves into the response from the provider modules method.
*/
export default async function provider(req, res) {
  const provider = {
    cloudfront,
    file,
    s3,
  };

  if (!Object.hasOwn(provider, req.params.provider)) {
    return res
      .status(404)
      .send(`Failed to validate 'provider=${req.params.provider}' param.`);
  }

  if (provider[req.params.provider] === null) {
    return res
      .status(405)
      .send(`Provider: ${req.params.provider} is not configured.`);
  }

  const response = await provider[req.params.provider](req, res);

  req.params.content_type &&
    res.setHeader('content-type', req.params.content_type);

  res.send(response);
}