KyperTech/matter

View on GitHub
src/utils/cookies.js

Summary

Maintainability
A
55 mins
Test Coverage
import log from './logger'
import { includes } from 'lodash'

/**
 * @description Gets cookie value by cookie name.
 *
 * @param {String} cookieName - cookie name
 * @returns {String} cookieValue - value for given cookie name
 *
 */
export function getCookie (cookieName) {
  if (typeof window === 'undefined' || typeof document === 'undefined') {
    return ''
  }
  let name = cookieName + '='
  let ca = document.cookie.split(';')
  for (let i = 0; i < ca.length; i++) {
    let c = ca[i]
    while (c.charAt(0) === ' ') { c = c.substring(1) }
    try {
      if (includes(c, name)) { return c.substring(name.length, c.length) }
    } catch (error) {
      log.warn({
        description: 'Cookie cannot be loaded.', cookieName,
        error, func: 'getCookie', obj: 'cookiesUtil'
      })
      return ''
    }
  }
  return ''
}

/**
 * @description Sets cookie at domain's root path.
 *
 * @param {String} cookieName - cookie name
 * @param {String} cookieValue - cookie value
 * @param {Integer} expDays - expiration day(s)
 *
 */
export function setCookie (cookieName, cookieValue, expDays) {
  const d = new Date()
  d.setTime(d.getTime() + (expDays * 24 * 60 * 60 * 1000))
  const expires = 'expires=' + d.toUTCString()
  try {
    document.cookie = cookieName + '=' + cookieValue + '; Path=/; ' + expires
  } catch (e) {
    log.warn({
      description: 'Cookie cannot be set because browser is not capable.',
      cookieName, func: 'setCookie', obj: 'cookiesUtil'
    })
  }
}

/**
 * @description Deletes cookie at domain's root path.
 * @param {String} cookieName - cookie name
 *
 */
export function deleteCookie (cookieName) {
  if (getCookie(cookieName)) {
    document.cookie = cookieName + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'
    log.debug({
      description: 'Cookie deleted.', cookieName, func: 'deleteCookie'
    })
  } else {
    log.warn({
      description: 'Cookie cannot be deleted because it does not exist.',
      cookieName, func: 'deleteCookie', obj: 'cookiesUtil'
    })
  }
}