validateServiceTicket.js

/**
 *
 * @fileOverview This file exports the <i>validateServiceTicket</i> module that allows
 * authenticate module to validate ticket it got back after user signed in.
 */

const request = require('request');

/**
 * validate ticket from CAS login
 * @param servicePackage this package include full service url and full cas validate url and ticket
 * @return {Promise<any>}
 */
function validateServiceTicket(servicePackage) {
  const self = this;
  function promise(resolve, reject) {
    const reqOptions = {
      url: servicePackage.fullValidateUrl,
      qs: {
        ticket: servicePackage.ticket,
        service: servicePackage.fullServiceUrl,
      },
      strictSSL: self.strictSSL,
    };

    request(reqOptions, (error, response, body) => {
      if (error) {
        return reject(error);
      }

      if (response.statusCode !== 200) {
        return reject(new Error(
          `CAS server returned status: ${response.statusCode}`,
        ));
      }
      // parse xml result
      servicePackage.validate(body).then((msg) => {
        resolve(msg);
      }).catch((err) => {
        reject(err);
      });
    });
  }
  return new Promise(promise);
}

module.exports = validateServiceTicket;