all files / src/gdpr/ OptInManager.js

93.75% Statements 30/32
78.26% Branches 18/23
100% Functions 10/10
93.75% Lines 30/32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85                                          17×                                                                    
import Cookies from 'js-cookie';
import { getCookieDomain } from '../shared/utils';
import { CMP_VERSION } from "./ConsentManagementProvider";
 
const DEFAULT_ACCEPT_COOKIE_EXPIRATION = 18250; // 50 years in days
const DEFAULT_REJECT_COOKIE_EXPIRATION = 31;
export const DEFAULT_QUERY_PARAM_NAME = 'tracking-opt-in-status';
export const DEFAULT_COOKIE_NAME = 'tracking-opt-in-status';
export const VERSION_COOKIE_NAME = 'tracking-opt-in-version';
export const STATUS = {
    ACCEPTED: 'accepted',
    REJECTED: 'rejected',
};
 
class OptInManager {
    constructor(hostname, cookieName, acceptExpiration, rejectExpiration, queryParam) {
        this.cookieName = cookieName || DEFAULT_COOKIE_NAME;
        this.acceptExpiration = acceptExpiration || DEFAULT_ACCEPT_COOKIE_EXPIRATION;
        this.rejectExpiration = rejectExpiration || DEFAULT_REJECT_COOKIE_EXPIRATION;
        this.domain = getCookieDomain(hostname || window.location.hostname);
        this.queryParam = queryParam || DEFAULT_QUERY_PARAM_NAME;
    }
 
    checkCookieVersion() {
        const versionCookieValue = Cookies.get(VERSION_COOKIE_NAME);
 
        Eif (!versionCookieValue || parseInt(versionCookieValue, 10) < CMP_VERSION) {
            this.clear();
 
            return true;
        }
 
        return false;
    }
 
    getValue() {
        return Cookies.get(this.cookieName);
    }
 
    hasAcceptedTracking() {
        return this.getValue() === STATUS.ACCEPTED;
    }
 
    hasRejectedTracking() {
        return this.getValue() === STATUS.REJECTED;
    }
 
    setCookies(name, value, attributes = {}) {
        Iif (this.domain) {
            attributes.domain = this.domain;
        }
 
        Cookies.set(name, value, attributes);
        Cookies.set(VERSION_COOKIE_NAME, CMP_VERSION, attributes);
    }
 
    setTrackingAccepted() {
        this.setCookies(this.cookieName, STATUS.ACCEPTED, {
            expires: this.acceptExpiration,
        });
    }
 
    setForcedStatusFromQueryParams(queryString) {
        if (queryString.indexOf(`${this.queryParam}=true`) !== -1) {
            this.setTrackingAccepted();
        } else Eif (queryString.indexOf(`${this.queryParam}=false`) !== -1) {
            this.setTrackingRejected();
        }
    }
 
    setTrackingRejected() {
        this.setCookies(this.cookieName, STATUS.REJECTED, {
            expires: this.rejectExpiration,
        });
    }
 
    clear() {
        const attributes = this.domain ? { domain: this.domain } : {};
        Cookies.remove(this.cookieName, attributes);
        Cookies.remove(VERSION_COOKIE_NAME, attributes);
    }
}
 
export default OptInManager;