Exemplo n.º 1
0
Cookie* CookiePath::GetCookieL(Cookie_Item_Handler *params, BOOL create)
{
	Cookie* ck = LocalGetCookie(params->name);
	if (!create)
		return ck;

	if (ck)
	{
#ifdef _ASK_COOKIE
		ServerName *servername = (ServerName *) params->url->GetAttribute(URL::KServerName, (const void*) 0);
		COOKIE_DELETE_ON_EXIT_MODE disc_mode =  (servername ? servername->GetDeleteCookieOnExit(TRUE) : COOKIE_EXIT_DELETE_DEFAULT);
		BOOL default_disc_mode = (BOOL) g_pcnet->GetIntegerPref(PrefsCollectionNetwork::AcceptCookiesSessionOnly);

		if(
			((default_disc_mode  && disc_mode != COOKIE_NO_DELETE_ON_EXIT) ||
			 (!default_disc_mode  && disc_mode == COOKIE_DELETE_ON_EXIT))&&
		   !params->flags.discard_at_exit && !ck->DiscardAtExit())
			params->flags.discard_at_exit= TRUE;
#endif
		if(!params->flags.accept_updates)
			params->flags.accept_updates = ck->AcceptUpdates();
		if(!params->flags.accepted_as_third_party)
			params->flags.accepted_as_third_party = ck->GetAcceptedAsThirdParty();
		if(!params->flags.have_password)
			params->flags.have_password = ck->GetHavePassword();
		if(!params->flags.have_authentication)
			params->flags.have_authentication = ck->GetHaveAuthentication();
		OP_DELETE(ck);
		// *** Don't save an expired cookie.
		if(params->expire && params->expire <
			(time_t) (g_op_time_info->GetTimeUTC()/1000.0)
			)
			return NULL;
	}
	
	ck = Cookie::CreateL(params);

	ck->Into(&cookie_list);
	
	return ck;
}
Exemplo n.º 2
0
void CookiePath::ReadCookiesL(DataFile &fp, unsigned long  ver_no)
{
	Cookie_Item_Handler loaded_cookie;
	ANCHOR(Cookie_Item_Handler, loaded_cookie);
	OpStackAutoPtr<DataFile_Record> rec(0);

	rec.reset(fp.GetNextRecordL());
	while (rec.get() && rec->GetTag() != TAG_COOKIE_PATH_END)
	{
		switch(rec->GetTag())
		{
		case TAG_COOKIE_PATH_ENTRY:
			{
				rec->IndexRecordsL();

				OpString8 pth_name;
				ANCHOR(OpString8, pth_name);

				rec->GetIndexedRecordStringL(TAG_COOKIE_PATH_NAME, pth_name);

				BOOL is_full=FALSE;

				CookiePath* cp = GetCookiePathL(pth_name.CStr(), TRUE, is_full);

				if(cp == NULL)
				{
					LEAVE(OpStatus::ERR_NO_MEMORY);
				}

				cp->ReadCookiesL(fp, ver_no);
			}
			break;
		case TAG_COOKIE_ENTRY:
			{
				loaded_cookie.Clear();
				
				rec->IndexRecordsL();
				
				rec->GetIndexedRecordStringL(TAG_COOKIE_NAME, loaded_cookie.name);
				rec->GetIndexedRecordStringL(TAG_COOKIE_VALUE, loaded_cookie.value);
				
				loaded_cookie.expire = (time_t) rec->GetIndexedRecordUInt64L(TAG_COOKIE_EXPIRES);
				loaded_cookie.last_used = (time_t) rec->GetIndexedRecordUInt64L(TAG_COOKIE_LAST_USED);
				loaded_cookie.last_sync = (time_t) rec->GetIndexedRecordUInt64L(TAG_COOKIE_LAST_SYNC);

				loaded_cookie.flags.secure = rec->GetIndexedRecordBOOL(TAG_COOKIE_SECURE);
				loaded_cookie.flags.httponly = rec->GetIndexedRecordBOOL(TAG_COOKIE_HTTP_ONLY);
				
				loaded_cookie.flags.full_path_only = rec->GetIndexedRecordBOOL(TAG_COOKIE_NOT_FOR_PREFIX);
				loaded_cookie.flags.only_server = rec->GetIndexedRecordBOOL(TAG_COOKIE_ONLY_SERVER);
				loaded_cookie.flags.assigned = rec->GetIndexedRecordBOOL(TAG_COOKIE_ASSIGNED);
				loaded_cookie.flags.protected_cookie = rec->GetIndexedRecordBOOL(TAG_COOKIE_PROTECTED);
				
				loaded_cookie.version = rec->GetIndexedRecordUIntL(TAG_COOKIE_VERSION);

				switch (loaded_cookie.version)
				{
				case 0:
					loaded_cookie.cookie_type = NETSCAPE_COOKIE;
					break;
				case 1:
					loaded_cookie.cookie_type = COOKIE2_COOKIE;
					break;
				default:
					loaded_cookie.cookie_type = UNKNOWN_COOKIE;
				}

				rec->GetIndexedRecordStringL(TAG_COOKIE_COMMENT, loaded_cookie.comment);
				rec->GetIndexedRecordStringL(TAG_COOKIE_COMMENT_URL, loaded_cookie.comment_URL);
				rec->GetIndexedRecordStringL(TAG_COOKIE_RECVD_DOMAIN, loaded_cookie.domain);
				if(fp.AppVersion() >COOKIES_FILE_VERSION_BUGGY_RECVD_PATH)
				{
					rec->GetIndexedRecordStringL(TAG_COOKIE_RECVD_PATH, loaded_cookie.recvd_path);
				}
				else
				{
					OpStringS8 temp_path;
					ANCHOR(OpStringS8, temp_path);

					rec->GetIndexedRecordStringL(TAG_COOKIE_RECVD_PATH, temp_path);

					if(temp_path.Compare("/") == 0)
						loaded_cookie.recvd_path.TakeOver(temp_path);
					else
						LEAVE_IF_ERROR(loaded_cookie.recvd_path.SetConcat("/",temp_path));
				}
				rec->GetIndexedRecordStringL(TAG_COOKIE_PORT, loaded_cookie.port);
				
				loaded_cookie.flags.have_password = rec->GetIndexedRecordBOOL(TAG_COOKIE_HAVE_PASSWORD);
				loaded_cookie.flags.have_authentication= rec->GetIndexedRecordBOOL(TAG_COOKIE_HAVE_AUTHENTICATION);
				loaded_cookie.flags.accepted_as_third_party = rec->GetIndexedRecordBOOL(TAG_COOKIE_ACCEPTED_AS_THIRDPARTY);
				
				Cookie* ck = Cookie::CreateL(&loaded_cookie);
				
				ck->Into(&cookie_list);
			}
		}

		rec.reset(fp.GetNextRecordL());
	}
	rec.reset();
}