Home Manual Reference Source

src/utils/getLoginCookies.js

import rp from "request-promise-native";

/* eslint-disable max-len */

/**
 * Module for fetching cookies from login service
 * @module GetLoginCookies
 */
module.exports = {
  /**
   * getLoginCookies
   * Fetches cookies (A, and CLIENT) for specified user from login service.
   * @param {String} email - email of user
   * @param {String} password - password of user
   * @returns  {Object} Contains a, fullA, and fullClient
   * @example getLoginCookies('test@lifesize.com', 'password123')
   * @example
   * // Returns...
   * {
   *  fullA: 'A=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJrIjoiQVFFREFIaUt1cTdOZ1QweWk3czVudkgxQUVjL2FpQ3BQbysveXh1TWNHbjBvQVBOcWdBQUFINHdmQVlKS29aSWh2Y05BUWNHb0c4d2JRSUJBREJvQmdrcWhraUc5dzBCQndFd0hnWUpZSVpJQVdVREJBRXVNQkVFRERiT0s3MGpLRDkwdlJrL1F3SUJFSUE3NkNkQzdJNjEzUFhIK1NhbWRmaWVzV0x4MER0ZTRoMzFyNkhIbkhLOE5CdzhzN2YyVjQ4Snp4bi8vNVR5S0Vkcmd3RW1iYm5QNldXekhmMD0iLCJpdiI6IjVJN3pYTzlLMS9JUm9rLzE5UEZubkE9PSIsInRhZyI6ImRwbjl2NHJlREZuaUFLYUhZbUJ6dFE9PSIsImp0aSI6Ijc4M2QyNDgxLWUxOWYtNGY4YS05MTRiLTBmODRmNWIxMmU1OSIsImV4cCI6MTQ5NTM5ODYzNSwiaWF0IjoxNDkyODA2NjM1LCJjdCI6ImcxTGRFcUlRcHVuYmtReGZ1QjlFdUk0bnVBK0xqbHpwYitGR2dlVmhxMzBnUWdPdGFGS2V4V0JBdEU4bXBWUHBjNUdjazlZaG0vVmw5NWZmbGQ3elpZZDJCeTJpSEx0OUpUbFp1dmpvVk56S2lTa2Nidnh3MjVBL3VXQ2xXTG4wcnZiQXNtaVBSVVBCYTlhb3VjRm1ZSDhVVVl5NDZiM1VjYVFGcU5qcDltTEVuYmYwWjN4ZWQ4YnJ3UkZPeDBnVU1SMUN2NEV1dnAwMExNbm1Ca1B2Umt1R3kwdWMwYWdtREJ4czhJRXVYNGZkSUgyMCsrWERQSTBXZlBMVzU2L2ttS2RVc0VRSExOczh1akZXMDdwZVFKaVZKM1RpQW5KTlZHcFJ2Und1REt0TndBaUhNeDg5UEkyQ3pHc3oyaG1lWk9Vb2V4MzRJekJVMDdPSzYvenJtSXZEYzJPakhBPT0ifQ.jNE77XTU9ifSTsjk0PT_ckU493Ta9dKQ55VT2rvLIyW9NTnUDWX8vY8rHbTIJBRpCIjRf-SyVYyNMSNwC0qFqNTSSMpEFG650AyJ-CdXVB03ihtlc0q0qH9Pk0jvOQxJ; Domain=lifesizecloudbeta.com; expires=Sun, 21-May-2017 20:30:35 GMT;  Max-Age=2592000; Path=/; secure',
   *  a: 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJrIjoiQVFFREFIaUt1cTdOZ1QweWk3czVudkgxQUVjL2FpQ3BQbysveXh1TWNHbjBvQVBOcWdBQUFINHdmQVlKS29aSWh2Y05BUWNHb0c4d2JRSUJBREJvQmdrcWhraUc5dzBCQndFd0hnWUpZSVpJQVdVREJBRXVNQkVFRERiT0s3MGpLRDkwdlJrL1F3SUJFSUE3NkNkQzdJNjEzUFhIK1NhbWRmaWVzV0x4MER0ZTRoMzFyNkhIbkhLOE5CdzhzN2YyVjQ4Snp4bi8vNVR5S0Vkcmd3RW1iYm5QNldXekhmMD0iLCJpdiI6IjVJN3pYTzlLMS9JUm9rLzE5UEZubkE9PSIsInRhZyI6ImRwbjl2NHJlREZuaUFLYUhZbUJ6dFE9PSIsImp0aSI6Ijc4M2QyNDgxLWUxOWYtNGY4YS05MTRiLTBmODRmNWIxMmU1OSIsImV4cCI6MTQ5NTM5ODYzNSwiaWF0IjoxNDkyODA2NjM1LCJjdCI6ImcxTGRFcUlRcHVuYmtReGZ1QjlFdUk0bnVBK0xqbHpwYitGR2dlVmhxMzBnUWdPdGFGS2V4V0JBdEU4bXBWUHBjNUdjazlZaG0vVmw5NWZmbGQ3elpZZDJCeTJpSEx0OUpUbFp1dmpvVk56S2lTa2Nidnh3MjVBL3VXQ2xXTG4wcnZiQXNtaVBSVVBCYTlhb3VjRm1ZSDhVVVl5NDZiM1VjYVFGcU5qcDltTEVuYmYwWjN4ZWQ4YnJ3UkZPeDBnVU1SMUN2NEV1dnAwMExNbm1Ca1B2Umt1R3kwdWMwYWdtREJ4czhJRXVYNGZkSUgyMCsrWERQSTBXZlBMVzU2L2ttS2RVc0VRSExOczh1akZXMDdwZVFKaVZKM1RpQW5KTlZHcFJ2Und1REt0TndBaUhNeDg5UEkyQ3pHc3oyaG1lWk9Vb2V4MzRJekJVMDdPSzYvenJtSXZEYzJPakhBPT0ifQ.jNE77XTU9ifSTsjk0PT_ckU493Ta9dKQ55VT2rvLIyW9NTnUDWX8vY8rHbTIJBRpCIjRf-SyVYyNMSNwC0qFqNTSSMpEFG650AyJ-CdXVB03ihtlc0q0qH9Pk0jvOQxJ',
   *  fullClient: 'CLIENT="ImFnZT0xNDk1Mzk4NjM1JmVuY19kYXRhPTJhODc4NmNlZTdkOGM4YjZhNzA2ZmVkNGE5ZjdkMjk5YmYzNjQ3MWY2N2M1YjAyZWY3NDJlNTU3YWQ4YmFmMmY0ODhhZTM1OTk4ZDA1ODQxMDYxOGE1MmUzNzZkNWIxZSZkaWdlc3Q9N2M2ZWM0NzRkZTlhMTRkZDgwODQ4ZTMwN2E4M2M1ZDQwZmU5YmVlNSI="; Domain=lifesizecloudbeta.com; expires=Sun, 21-May-2017 20:30:35 GMT;  Max-Age=2592000; Path=/; secure'
   * }
   */
  getLoginCookies: (email, password) => {
    if (!email) {
      throw new Error(`Email is not valid! Email is ${email}`);
    }
    if (!password) {
      throw new Error(`Password is not valid! Password is ${password}`);
    }

    const options = {
      method: "POST",
      uri: "https://login.lifesizecloudbeta.com/ls/login/",
      port: "443",
      form: {
        email: email,
        password: password
      },
      headers: {
        Origin: "https://eblogin.lifesizecloudbeta.com",
        "Content-Type": "application/x-www-form-urlencoded",
        Accept:
          "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "User-Agent": "node " + process.version
      },
      simple: false,
      resolveWithFullResponse: true
    };

    return rp(options)
      .then(body => {
        const a = body.headers["set-cookie"][0].split(";")[0].replace("A=", "");
        const fullA = body.headers["set-cookie"][0].replace("httponly;", "");
        const fullClient = body.headers["set-cookie"][1].replace(
          "httponly;",
          ""
        );

        return { fullA: fullA, a: a, fullClient: fullClient };
      })
      .catch(err => {
        throw new Error(`Error making cookie request (${err})`);
      });
  }
};