# JSDoc: Source: browser/cookie.js

# Source: browser/cookie.js

    //
    // Copyright (c) 2006-2026 Wade Alcorn - wade@bindshell.net
    // Browser Exploitation Framework (BeEF) - https://beefproject.com
    // See the file 'doc/COPYING' for copying permission
    //

    /**
     * Provides fuctions for working with cookies.
     * Several functions adopted from http://techpatterns.com/downloads/javascript_cookies.php
     * Original author unknown.
     * @namespace beef.browser.cookie
     */
    beef.browser.cookie = {

    		/** @memberof beef.browser.cookie */
    		setCookie: function (name, value, expires, path, domain, secure)
    		{

    			var today = new Date();
    			today.setTime( today.getTime() );

    			if ( expires )
    			{
    				expires = expires * 1000 * 60 * 60 * 24;
    			}
    			var expires_date = new Date( today.getTime() + (expires) );

    			document.cookie = name + "=" +escape( value ) +
    				( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
    				( ( path ) ? ";path=" + path : "" ) +
    				( ( domain ) ? ";domain=" + domain : "" ) +
    				( ( secure ) ? ";secure" : "" );
    		},
    		/** @memberof beef.browser.cookie */
    		getCookie: function(name)
    		{
    			var a_all_cookies = document.cookie.split( ';' );
    			var a_temp_cookie = '';
    			var cookie_name = '';
    			var cookie_value = '';
    			var b_cookie_found = false;

    			for ( i = 0; i < a_all_cookies.length; i++ )
    			{
    				a_temp_cookie = a_all_cookies[i].split( '=' );
    				cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
    				if ( cookie_name == name )
    				{
    					b_cookie_found = true;
    					if ( a_temp_cookie.length > 1 )
    					{
    						cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
    					}
    					return cookie_value;
    					break;
    				}
    				a_temp_cookie = null;
    				cookie_name = '';
    			}
    			if ( !b_cookie_found )
    			{
    				return null;
    			}
    		},
    		/** @memberof beef.browser.cookie */
    		deleteCookie: function (name, path, domain)
    		{
    			if ( this.getCookie(name) ) document.cookie = name + "=" +
    			( ( path ) ? ";path=" + path : "") +
    			( ( domain ) ? ";domain=" + domain : "" ) +
    			";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    		},

    	    /** @memberof beef.browser.cookie */
    		cookieValueRandomizer: function (){
    			var to_hell= '';
    			var min = 17;
    			var max = 25;
    			var lol_length = Math.floor(Math.random() * (max - min + 1)) + min;

    			var grunt = function(){
    				var moo = Math.floor(Math.random() * 62);
    				var char = '';
    				if(moo < 36){
    					char = String.fromCharCode(moo + 55);
    				}else{
    					char = String.fromCharCode(moo + 61);
    				}
    				if(char != ';' && char != '='){
    					return char;
    				}else{
    					return 'x';
    				}
    			};

    			while(to_hell.length < lol_length){
    				to_hell += grunt();
    			}
    			return to_hell;
    		},
    		/** @memberof beef.browser.cookie */
    		hasSessionCookies: function (name){
    			this.setCookie( name, beef.browser.cookie.cookieValueRandomizer(), '', '/', '', '' );

    			cookiesEnabled = (this.getCookie(name) == null)? false:true;
    			this.deleteCookie(name, '/', '');
    			return cookiesEnabled;

    		},
    		/** @memberof beef.browser.cookie */
    		hasPersistentCookies: function (name){
    			this.setCookie( name, beef.browser.cookie.cookieValueRandomizer(), 1, '/', '', '' );

    			cookiesEnabled = (this.getCookie(name) == null)? false:true;
    			this.deleteCookie(name, '/', '');
    			return cookiesEnabled;

    		}

    };

    beef.regCmp('beef.browser.cookie');