diff --git a/3rdParty/buildMacDependencies.sh b/3rdParty/buildMacDependencies.sh index 7c3335fab1..1035de2e73 100755 --- a/3rdParty/buildMacDependencies.sh +++ b/3rdParty/buildMacDependencies.sh @@ -156,7 +156,6 @@ download_and_build "${opensslDirName}" "${opensslFileName}" "${opensslURL}" "${R download_and_build "${caresDirName}" "${caresFileName}" "${caresURL}" "${ROOTDIR}/mac_build/buildc-ares.sh" "libcares.a" "x86_64" download_and_build "${curlDirName}" "${curlFileName}" "${curlURL}" "${ROOTDIR}/mac_build/buildcurl.sh" "libcurl.a" "x86_64" download_and_build "${wxWidgetsDirName}" "${wxWidgetsFileName}" "${wxWidgetsURL}" "${ROOTDIR}/mac_build/buildWxMac.sh ${wxoption}" "libwx_osx_cocoa_static.a" "x86_64" -download_and_build "${sqliteDirName}" "${sqliteFileName}" "${sqliteURL}" "${ROOTDIR}/mac_build/buildsqlite3.sh" "libsqlite3.a" "x86_64" download_and_build "${freetypeDirName}" "${freetypeFileName}" "${freetypeURL}" "${ROOTDIR}/mac_build/buildfreetype.sh" "libfreetype.a" "x86_64" download_and_build "${ftglDirName}" "${ftglFileName}" "${ftglURL}" "${ROOTDIR}/mac_build/buildFTGL.sh" "libftgl.a" "x86_64" diff --git a/clientgui/browser.cpp b/clientgui/browser.cpp deleted file mode 100644 index 1c3f1a5cc8..0000000000 --- a/clientgui/browser.cpp +++ /dev/null @@ -1,1035 +0,0 @@ -// This file is part of BOINC. -// http://boinc.berkeley.edu -// Copyright (C) 2008 University of California -// -// BOINC is free software; you can redistribute it and/or modify it -// under the terms of the GNU Lesser General Public License -// as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// BOINC is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -// See the GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with BOINC. If not, see . - -DEPRECATED - -#ifdef _WIN32 -#include "boinc_win.h" -#include "win_util.h" - -#ifndef InternetGetCookie - -#if defined(__cplusplus) -extern "C" { -#endif - -BOOL WINAPI InternetGetCookieA( LPCSTR lpszUrl, LPCSTR lpszCookieName, LPSTR lpszCookieData, LPDWORD lpdwSize ); - -#if defined(__cplusplus) -} -#endif - -#endif -#else -#include -#include -#include -#endif - -#include -#include "error_numbers.h" -#include "str_replace.h" -#include "mfile.h" -#include "miofile.h" -#include "str_util.h" -#include "filesys.h" -#include "browser.h" - - -// -// Utility Functions -// - -// retrieve the user's application data directory. -// Win : C:\Documents and Settings\\Application Data -// Unix: ~/ -// -// Google Chrome decided to put its application data in the 'local' application data -// store on Windows. 'local' only has meaning for Windows. -// -void get_home_dir_path( std::string& path, bool local = false ) { -#ifdef _WIN32 - CHAR szBuffer[MAX_PATH]; - int iCSIDLFlags = CSIDL_FLAG_CREATE; - - if (local) { - iCSIDLFlags |= CSIDL_LOCAL_APPDATA; - } else { - iCSIDLFlags |= CSIDL_APPDATA; - } - - if (SUCCEEDED(SHGetFolderPathA(NULL, iCSIDLFlags, NULL, SHGFP_TYPE_CURRENT, szBuffer))) { - path = std::string(szBuffer); - path += std::string("\\"); - } -#elif defined(__APPLE__) - path = std::string(getenv("HOME")) + std::string("/"); -#else - path = std::string("~/"); -#endif -} - -// retrieve the user's cookie directory. -// WinXP -// C:\Documents and Settings\\Cookies -// WinVista/Win7 -// C:\Documents and Settings\\Application Data\Roaming\Microsoft\Windows\Cookies -// C:\Documents and Settings\\Application Data\Roaming\Microsoft\Windows\Cookies\Low -// -void get_internet_explorer_cookie_path( bool low_rights, std::string& path ) { -#ifdef _WIN32 - CHAR szBuffer[MAX_PATH]; - if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_COOKIES|CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, szBuffer))) { - path = std::string(szBuffer); - path += std::string("\\"); - if (low_rights) { - path += std::string("Low\\"); - } - } -#endif -} - - -// retrieve the user's name. -// -void get_user_name( std::string& name ) { -#ifdef _WIN32 - CHAR szBuffer[256]; - DWORD dwSize = sizeof(szBuffer); - - if (GetUserNameA((LPSTR)&szBuffer, &dwSize)) { - name = szBuffer; - } -#endif -} - - -// is the authenticator valid? -// -bool is_authenticator_valid(const std::string authenticator) { - std::string tmp = authenticator; - - // Perform some basic validation of the suspect authenticator - // - - // If the string is null then it is invalid. - if (0 == tmp.length()) { - return false; - } - - // If the string contains non alpha numeric characters it is invalid. - std::string::iterator it = tmp.begin(); - while (it != tmp.end()) { - if (!isalpha(*it) && !isdigit(*it)) { - return false; - } - ++it; - } - - return true; -} - - -// parse name value pairs based on INI file rules. -// -bool parse_name_value_pair(char* buf, std::string& name, std::string& value) { - std::basic_string::size_type i; - std::string s; - - s = std::string(buf); - i = s.find("=", 0); - if ( i < s.npos ) { - name = s.substr(0, i); - value = s.substr(i + 1); - strip_whitespace(name); - strip_whitespace(value); - return true; - } - return false; -} - - -// parse host name from url for Mozilla compatible browsers. -// -bool parse_hostname_mozilla_compatible(std::string& project_url, std::string& hostname) { - std::basic_string::size_type start; - std::basic_string::size_type end; - - start = project_url.find("//", 0) + 2; - end = project_url.find("/", start); - - hostname = project_url.substr(start, end - start); - - if (starts_with(hostname.c_str(), "www")) - hostname.erase(0, 3); - - if (!hostname.empty()) - return true; - - return false; -} - - -// parse host name from url for Chrome compatible browsers. -// -bool parse_hostname_chrome_compatible(std::string& project_url, std::string& hostname) { - std::basic_string::size_type start; - std::basic_string::size_type end; - - start = project_url.find("//", 0) + 2; - end = project_url.find("/", start); - - hostname = project_url.substr(start, end - start); - - if (starts_with(hostname.c_str(), "www")) - hostname.erase(0, 3); - - if (!hostname.empty()) - return true; - - return false; -} - - -// parse host name from url for Internet Explorer compatible browsers. -// -bool parse_hostname_ie_compatible( - std::string& project_url, std::string& hostname, std::string& domainname -) { - std::basic_string::size_type start; - std::basic_string::size_type end; - - // Remove the protocol identifier - start = project_url.find("//", 0) + 2; - end = project_url.find("/", start); - - hostname = project_url.substr(start, end - start); - - // Remove the hostname to extract the domain name - start = 0; - end = hostname.find(".") + 1; - - domainname = hostname; - domainname.erase(start, end); - - if (!hostname.empty() && !domainname.empty()) - return true; - - return false; -} - - -// -// Generic Browser Support -// - -class COOKIE_SQL { -public: - std::string host; - std::string name; - std::string value; - - COOKIE_SQL(); - - void clear(); -}; - - -COOKIE_SQL::COOKIE_SQL() { - clear(); -} - - -void COOKIE_SQL::clear() { - host.clear(); - name.clear(); - value.clear(); -} - - -// -// Mozilla-Based Browser Support -// - -class MOZILLA_PROFILE { -public: - std::string name; - std::string path; - bool is_relative; - bool is_default; - - MOZILLA_PROFILE(); - - void clear(); - int parse(MIOFILE& in); -}; - - -class MOZILLA_PROFILES { -public: - std::vector profiles; - - MOZILLA_PROFILES(); - - void clear(); - int parse(MIOFILE& in); -}; - - -MOZILLA_PROFILE::MOZILLA_PROFILE() { - clear(); -} - - -void MOZILLA_PROFILE::clear() { - name.clear(); - path.clear(); - is_relative = false; - is_default = false; -} - - -int MOZILLA_PROFILE::parse(MIOFILE& in) { - char buf[512]; - std::string sn; - std::string sv; - - while (in.fgets(buf, 512)) { - if (starts_with(buf, "\n")) return 0; - if (starts_with(buf, "\r\n")) return 0; - if (!parse_name_value_pair(buf, sn, sv)) continue; - - if ("Name" == sn) name = sv; - if ("Path" == sn) path = sv; - if (("IsRelative" == sn) && ("1" == sv)) is_relative = true; - if (("Default" == sn) && ("1" == sv)) is_default = true; - } - return ERR_FREAD; -} - - -MOZILLA_PROFILES::MOZILLA_PROFILES() { - clear(); -} - - -void MOZILLA_PROFILES::clear() { - unsigned int i; - for (i=0; iparse( in )) { - profiles.push_back( p ); - } else { - delete p; - } - } - } - - return 0; -} - - -// search for the project specific cookie for mozilla based browsers. -// SELECT host, name, value, expiry from moz_cookies WHERE name = '%s' AND host LIKE '%s' -// -static int find_site_cookie_mozilla_v3( - void* cookie, int /* argc */, char **argv, char ** /* szColumnName */ -) { - COOKIE_SQL* _cookie = (COOKIE_SQL*)cookie; - char host[256], cookie_name[256], cookie_value[4096]; - long long expires; - - - safe_strcpy(host, ""); - safe_strcpy(cookie_name, ""); - safe_strcpy(cookie_value, ""); - expires = 0; - - sscanf( argv[0], "%255s", host ); - sscanf( argv[1], "%255s", cookie_name ); - sscanf( argv[2], "%4095s", cookie_value ); - sscanf( argv[3], -#ifdef _WIN32 - "%I64d", -#elif defined(__APPLE__) - "%lld", -#else - "%Ld", -#endif - &expires - ); - - // is this a real cookie? - // temporary cookie? these cookies do not trickle back up - // to the jscript interface, so ignore them. - if (starts_with(host, "#HttpOnly")) return 0; - - // is this the right host? - if (!strstr(host, _cookie->host.c_str())) return 0; - - // has the cookie expired? - if (time(0) > expires) return 0; - - // is this the right cookie? - if (starts_with(cookie_name, _cookie->name)) { - _cookie->value = cookie_value; - } - - return 0; -} - - -// traverse the profiles and determine which profile to use. -// this should be compatible with firefox2, firefox3, firefox4, seamonkey, and netscape. -// -bool get_firefox_profile_root( std::string& profile_root ) { - bool retval = false; - FILE* pf = NULL; - MIOFILE pmf; - MOZILLA_PROFILES mps; - MOZILLA_PROFILE* mp = NULL; - std::string cookies_root; - std::string tmp; - unsigned int i = 0; - unsigned int default_index = 0; - - get_home_dir_path( profile_root ); -#ifdef _WIN32 - profile_root += std::string("Mozilla\\Firefox\\"); -#elif defined(__APPLE__) - profile_root += std::string("Library/Application Support/Firefox/"); -#else - profile_root += std::string(".mozilla/firefox/"); -#endif - - // lets see if we can open the profiles configuration file - tmp = profile_root + "profiles.ini"; - pf = fopen(tmp.c_str(), "r"); - - // if profiles configuration file exists, parse it. - if (pf) { - pmf.init_file(pf); - mps.parse(pmf); - } - - // we need to know which cookie file to look at, so if only - // one profile exists, use it. - // - // if more than one profile exists, look through all the - // profiles until we find the default profile. even when the - // user selects a different profile at startup the default - // profile flag is changed at startup to the new profile. - if (mps.profiles.size() == 0) { - if (pf) fclose(pf); - return retval; // something is very wrong, don't - // risk a crash - } - - if (mps.profiles.size() == 1) { - default_index = 0; - } else { - for (i=0; i < mps.profiles.size(); i++) { - if (mps.profiles[i]->is_default) { - default_index = i; - break; - } - } - } - - // should the path be treated as an absolute path or a relative - // path? - mp = mps.profiles[default_index]; - if (mp->is_relative) { - cookies_root = profile_root + mp->path + "/"; - } else { - cookies_root = mp->path + "/"; - } - - profile_root = cookies_root; - retval = true; - - // cleanup - if (pf) fclose(pf); - - return retval; -} - - -bool detect_cookie_mozilla_v3( - std::string profile_root, std::string& project_url, std::string& name, std::string& value -) { - bool retval = false; - std::string tmp; - std::string hostname; - char query[1024]; - sqlite3* db; - char* lpszSQLErrorMessage = NULL; - int rc; - COOKIE_SQL cookie; - - - // determine the project hostname using the project url - parse_hostname_mozilla_compatible(project_url, hostname); - - - // now we should open up the cookie database. - tmp = profile_root + "cookies.sqlite"; - rc = sqlite3_open(tmp.c_str(), &db); - if ( rc ) { - sqlite3_close(db); - return false; - } - - // construct SQL query to extract the desired cookie - // SELECT host, name, value, expiry from moz_cookies WHERE name = '%s' AND host LIKE '%%%s' - sqlite3_snprintf(sizeof(query), query, - "SELECT host, name, value, expiry from moz_cookies WHERE name = '%q' AND host LIKE '%%%q'", - name.c_str(), - hostname.c_str() - ); - - // execute query - rc = sqlite3_exec(db, query, find_site_cookie_mozilla_v3, &cookie, &lpszSQLErrorMessage); - if ( rc != SQLITE_OK ){ - sqlite3_free(lpszSQLErrorMessage); - } - - // cleanup - sqlite3_close(db); - - if ( !cookie.value.empty() ) { - value = cookie.value; - retval = true; - } - - return retval; -} - - -// -// Firefox Browser Support -// - -bool detect_cookie_firefox_3( - std::string& project_url, std::string& name, std::string& value -) { - std::string profile_root; - get_firefox_profile_root(profile_root); - - return detect_cookie_mozilla_v3( - profile_root, - project_url, - name, - value - ); -} - - -// -// Chrome-Based Browser Support -// - -// search for the project specific cookie for chrome based browsers. -// SELECT host_key, name, value, expires_utc, httponly from cookies WHERE name = '%s' AND host_key LIKE '%s' -// -static int find_site_cookie_chrome( - void* cookie, int /* argc */, char **argv, char ** /* szColumnName */ -) { - COOKIE_SQL* _cookie = (COOKIE_SQL*)cookie; - char host[256], cookie_name[256], cookie_value[4096]; - long long expires; - long httponly; - - safe_strcpy(host, ""); - safe_strcpy(cookie_name, ""); - safe_strcpy(cookie_value, ""); - expires = 0; - - sscanf( argv[0], "%255s", host ); - sscanf( argv[1], "%255s", cookie_name ); - sscanf( argv[2], "%4095s", cookie_value ); - sscanf( argv[3], -#ifdef _WIN32 - "%I64d", -#elif defined(__APPLE__) - "%lld", -#else - "%Ld", -#endif - &expires - ); - sscanf( argv[4], - "%ld", - &httponly - ); - - // Convert Google Chrome time (microseconds since January 1, 1601) - // to UNIX time (seconds since January 1, 1970) - expires = (expires / 1000000) - 11644473600LL; - - // is this a real cookie? - // temporary cookie? these cookies do not trickle back up - // to the jscript interface, so ignore them. - if (httponly) return 0; - - // is this the right host? - if (!strstr(host, _cookie->host.c_str())) return 0; - - // has the cookie expired? - if (time(0) > expires) return 0; - - // is this the right cookie? - if (starts_with(cookie_name, _cookie->name)) { - _cookie->value = cookie_value; - } - - return 0; -} - - -// traverse the profiles and determine which profile to use. -// this should be compatible with chrome. -// -bool get_chrome_profile_root( std::string& profile_root ) { - get_home_dir_path( profile_root, true ); - -#ifdef _WIN32 - profile_root += std::string("Google\\Chrome\\User Data\\Default\\"); -#elif defined(__APPLE__) - profile_root += std::string("Library/Application Support/Google/Chrome/Default/"); -#else - profile_root += std::string(".google/chrome/"); -#endif - - return true; -} - - -bool detect_cookie_chrome( - std::string profile_root, std::string& project_url, std::string& name, std::string& value -) { - bool retval = false; - std::string tmp; - std::string hostname; - char query[1024]; - sqlite3* db; - char* lpszSQLErrorMessage = NULL; - int rc; - COOKIE_SQL cookie; - - - // determine the project hostname using the project url - parse_hostname_chrome_compatible(project_url, hostname); - - - // now we should open up the cookie database. - tmp = profile_root + "Cookies"; - rc = sqlite3_open(tmp.c_str(), &db); - if ( rc ) { - sqlite3_close(db); - tmp = profile_root + "Safe Browsing Cookies"; - rc = sqlite3_open(tmp.c_str(), &db); - if ( rc ) { - sqlite3_close(db); - return false; - } - } - - // construct SQL query to extract the desired cookie - // SELECT host_key, name, value, expires_utc, httponly from cookies WHERE name = '%s' AND host_key LIKE '%%%s' - sqlite3_snprintf(sizeof(query), query, - "SELECT host_key, name, value, expires_utc, httponly from cookies WHERE name = '%q' AND host_key LIKE '%%%q'", - name.c_str(), - hostname.c_str() - ); - - // execute query - rc = sqlite3_exec(db, query, find_site_cookie_chrome, &cookie, &lpszSQLErrorMessage); - if ( rc != SQLITE_OK ){ - sqlite3_free(lpszSQLErrorMessage); - } - - // cleanup - sqlite3_close(db); - - if ( !cookie.value.empty() ) { - value = cookie.value; - retval = true; - } - - return retval; -} - - -bool detect_cookie_chrome( - std::string& project_url, std::string& name, std::string& value -) { - std::string profile_root; - get_chrome_profile_root(profile_root); - - return detect_cookie_chrome( - profile_root, - project_url, - name, - value - ); -} - - -#ifdef _WIN32 -// -// Internet Explorer Browser Support -// - -// -// Detect a cookie in Internet Explorer by using the InternetGetCookie API. -// Supports: 3.x, 4.x, 5.x, 6.x, 7.x (UAC Turned Off), 8.x (UAC Turned Off), 9.x (UAC Turned Off), and -// 10.x (UAC Turned Off). -// -bool detect_cookie_ie_supported(std::string& project_url, std::string& name, std::string& value) -{ - bool bReturnValue = false; - bool bCheckDomainName = false; - char szCookieBuffer[4096]; - char* pszCookieFragment = NULL; - DWORD dwSize = sizeof(szCookieBuffer)/sizeof(char); - std::string strCookieFragment; - std::string strCookieName; - std::string strCookieValue; - std::string hostname; - std::string domainname; - size_t uiDelimeterLocation; - - - // if we don't find the cookie at the exact project dns name, check one higher - // (i.e. www.worldcommunitygrid.org becomes worldcommunitygrid.org - parse_hostname_ie_compatible(project_url, hostname, domainname); - - // InternetGetCookie expects them in URL format - hostname = std::string("http://") + hostname + std::string("/"); - domainname = std::string("http://") + domainname + std::string("/"); - - // First check to see if the desired cookie is assigned to the hostname. - bReturnValue = InternetGetCookieA(hostname.c_str(), NULL, szCookieBuffer, &dwSize) == TRUE; - if (!bReturnValue || (!strstr(szCookieBuffer, name.c_str()))) { - bCheckDomainName = true; - } - - // Next check if it was assigned to the domainname. - if (bCheckDomainName) { - bReturnValue = InternetGetCookieA(domainname.c_str(), NULL, szCookieBuffer, &dwSize) == TRUE; - if (!bReturnValue || (!strstr(szCookieBuffer, name.c_str()))) { - return false; - } - } - - // Format of cookie buffer: - // 'cookie1=value1; cookie2=value2; cookie3=value3; - // - pszCookieFragment = strtok(szCookieBuffer, "; "); - while(pszCookieFragment) { - // Convert to a std::string so we can go to town - strCookieFragment = pszCookieFragment; - - // Extract the name & value - uiDelimeterLocation = strCookieFragment.find("=", 0); - strCookieName = strCookieFragment.substr(0, uiDelimeterLocation); - strCookieValue = strCookieFragment.substr(uiDelimeterLocation + 1); - - if (0 == strcmp(name.c_str(), strCookieName.c_str())) { - // Now we found it! Yea - auto attach! - value = strCookieValue; - bReturnValue = true; - } - - pszCookieFragment = strtok(NULL, "; "); - } - - return bReturnValue; -} - -// -// Detect a cookie in Internet Explorer by using the InternetGetCookie API. -// Supports: 8.x (UAC Turned On), 9.x (UAC Turned On), 10.x (UAC Turned On). -// -typedef HRESULT (__stdcall *tIEGPMC)( IN LPCWSTR, IN LPCWSTR, OUT LPWSTR, OUT DWORD*, IN DWORD ); - -bool detect_cookie_ie_supported_uac(std::string& project_url, std::string& name, std::string& value) -{ - static HMODULE ieframelib = NULL; - static tIEGPMC pIEGPMC = NULL; - bool bReturnValue = false; - bool bCheckDomainName = false; - HRESULT rc; - WCHAR szCookieBuffer[4096]; - WCHAR* pszCookieFragment = NULL; - DWORD dwSize = sizeof(szCookieBuffer)/sizeof(WCHAR); - std::wstring strCookieFragment; - std::wstring strCookieName; - std::wstring strCookieValue; - std::string hostname; - std::wstring hostname_w; - std::string domainname; - std::wstring domainname_w; - std::wstring name_w; - size_t uiDelimeterLocation; - - if (!ieframelib) { - ieframelib = LoadLibraryA("ieframe.dll"); - if (ieframelib) { - pIEGPMC = (tIEGPMC)GetProcAddress(ieframelib, "IEGetProtectedModeCookie"); - } - } - - if (!pIEGPMC) { - return false; - } - - // Convert name into wide character string - name_w = boinc_ascii_to_wide(name); - - // if we don't find the cookie at the exact project dns name, check one higher - // (i.e. www.worldcommunitygrid.org becomes worldcommunitygrid.org - parse_hostname_ie_compatible(project_url, hostname, domainname); - - // InternetGetCookie expects them in URL format - hostname_w = std::wstring(_T("http://")) + boinc_ascii_to_wide(hostname) + std::wstring(_T("/")); - domainname_w = std::wstring(_T("http://")) + boinc_ascii_to_wide(domainname) + std::wstring(_T("/")); - - // First check to see if the desired cookie is assigned to the hostname. - rc = pIEGPMC(hostname_w.c_str(), NULL, szCookieBuffer, &dwSize, NULL) == TRUE; - if (!SUCCEEDED(rc) || (!wcsstr(szCookieBuffer, name_w.c_str()))) { - bCheckDomainName = true; - } - - // Next check if it was assigned to the domainname. - if (bCheckDomainName) { - rc = pIEGPMC(domainname_w.c_str(), NULL, szCookieBuffer, &dwSize, NULL) == TRUE; - if (!SUCCEEDED(rc) || (!wcsstr(szCookieBuffer, name_w.c_str()))) { - return false; - } - } - - // Format of cookie buffer: - // 'cookie1=value1; cookie2=value2; cookie3=value3; - // - pszCookieFragment = wcstok(szCookieBuffer, _T("; ")); - while(pszCookieFragment) { - // Convert to a std::string so we can go to town - strCookieFragment = pszCookieFragment; - - // Extract the name & value - uiDelimeterLocation = strCookieFragment.find(_T("="), 0); - strCookieName = strCookieFragment.substr(0, uiDelimeterLocation); - strCookieValue = strCookieFragment.substr(uiDelimeterLocation + 1); - - if (0 == wcscmp(name_w.c_str(), strCookieName.c_str())) { - // Now we found it! Yea - auto attach! - value = boinc_wide_to_ascii(strCookieValue); - bReturnValue = true; - } - - pszCookieFragment = wcstok(NULL, _T("; ")); - } - - return bReturnValue; -} - - -// -// Detect a cookie in Internet Explorer. -// -bool detect_cookie_ie(std::string& project_url, std::string& name, std::string& value) -{ - // Check using the supported methods first - if (detect_cookie_ie_supported( project_url, name, value )) return true; - if (detect_cookie_ie_supported_uac( project_url, name, value )) return true; - return false; -} - -#endif - - -// -// walk through the various browsers looking up the -// project cookies until the projects 'Setup' cookie is found. -// -// give preference to the default platform specific browers first before going -// to the platform independant browsers since most people don't switch from -// the default. -// -bool detect_setup_authenticator( - std::string& project_url, std::string& authenticator -) { - bool retval = false; - std::string strCookieSetup("Setup"); - -#ifdef _WIN32 - if (detect_cookie_ie(project_url, strCookieSetup, authenticator)) goto END; -#endif -#ifdef __APPLE__ - if (detect_cookie_safari(project_url, strCookieSetup, authenticator)) goto END; -#endif - if (detect_cookie_chrome(project_url, strCookieSetup, authenticator)) goto END; - if (detect_cookie_firefox_3(project_url, strCookieSetup, authenticator)) goto END; - -END: - if (is_authenticator_valid(authenticator)) { - retval = true; - } - - return retval; -} - - -// -// walk through the various browsers looking up the -// various cookies that make up the simple account creation scheme. -// -// give preference to the default platform specific browers first before going -// to the platform independant browsers since most people don't switch from -// the default. -// -bool detect_simple_account_credentials( - std::string& project_name, std::string& project_url, std::string& authenticator, - std::string& project_institution, std::string& project_description, std::string& known -) { - bool retval = false; - std::string strCookieServer("http://boinc.berkeley.edu"); - std::string strCookieProjectName("attach_project_name"); - std::string strCookieProjectURL("attach_master_url"); - std::string strCookieAuthenticator("attach_auth"); - std::string strCookieProjectInstitution("attach_project_inst"); - std::string strCookieProjectDescription("attach_project_desc"); - std::string strCookieKnown("attach_known"); - -#ifdef _WIN32 - if ( detect_cookie_ie(strCookieServer, strCookieProjectName, project_name) && - detect_cookie_ie(strCookieServer, strCookieProjectURL, project_url) - ){ - detect_cookie_ie(strCookieServer, strCookieAuthenticator, authenticator); - detect_cookie_ie(strCookieServer, strCookieProjectInstitution, project_institution); - detect_cookie_ie(strCookieServer, strCookieProjectDescription, project_description); - detect_cookie_ie(strCookieServer, strCookieKnown, known); - goto END; - } -#endif -#ifdef __APPLE__ - if ( detect_cookie_safari(strCookieServer, strCookieProjectName, project_name) && - detect_cookie_safari(strCookieServer, strCookieProjectURL, project_url) - ){ - detect_cookie_safari(strCookieServer, strCookieAuthenticator, authenticator); - detect_cookie_safari(strCookieServer, strCookieProjectInstitution, project_institution); - detect_cookie_safari(strCookieServer, strCookieProjectDescription, project_description); - detect_cookie_safari(strCookieServer, strCookieKnown, known); - goto END; - } -#endif - if ( detect_cookie_chrome(strCookieServer, strCookieProjectName, project_name) && - detect_cookie_chrome(strCookieServer, strCookieProjectURL, project_url) - ){ - detect_cookie_chrome(strCookieServer, strCookieAuthenticator, authenticator); - detect_cookie_chrome(strCookieServer, strCookieProjectInstitution, project_institution); - detect_cookie_chrome(strCookieServer, strCookieProjectDescription, project_description); - detect_cookie_chrome(strCookieServer, strCookieKnown, known); - goto END; - } - if ( detect_cookie_firefox_3(strCookieServer, strCookieProjectName, project_name) && - detect_cookie_firefox_3(strCookieServer, strCookieProjectURL, project_url) - ){ - detect_cookie_firefox_3(strCookieServer, strCookieAuthenticator, authenticator); - detect_cookie_firefox_3(strCookieServer, strCookieProjectInstitution, project_institution); - detect_cookie_firefox_3(strCookieServer, strCookieProjectDescription, project_description); - detect_cookie_firefox_3(strCookieServer, strCookieKnown, known); - goto END; - } -END: - if (!project_name.empty() && !project_url.empty()) { - retval = true; - } - - return retval; -} - - -// -// walk through the various browsers looking up the -// account manager cookies until the account manager's 'Login' and 'Password_Hash' -// cookies are found. -// -// give preference to the default platform specific browers first before going -// to the platform independant browsers since most people don't switch from -// the default. -// -bool detect_account_manager_credentials( - std::string& project_url, std::string& login, std::string& password_hash, std::string& return_url -) { - bool retval = false; - std::string strCookieLogon("Logon"); - std::string strCookiePasswordHash("PasswordHash"); - std::string strCookieReturnURL("ReturnURL"); - -#ifdef _WIN32 - if ( detect_cookie_ie(project_url, strCookieLogon, login) && - detect_cookie_ie(project_url, strCookiePasswordHash, password_hash) - ){ - detect_cookie_ie(project_url, strCookieReturnURL, return_url); - goto END; - } -#endif -#ifdef __APPLE__ - if ( detect_cookie_safari(project_url, strCookieLogon, login) && - detect_cookie_safari(project_url, strCookiePasswordHash, password_hash) - ){ - detect_cookie_safari(project_url, strCookieReturnURL, return_url); - goto END; - } -#endif - if ( detect_cookie_chrome(project_url, strCookieLogon, login) && - detect_cookie_chrome(project_url, strCookiePasswordHash, password_hash) - ){ - detect_cookie_chrome(project_url, strCookieReturnURL, return_url); - goto END; - } - - if ( detect_cookie_firefox_3(project_url, strCookieLogon, login) && - detect_cookie_firefox_3(project_url, strCookiePasswordHash, password_hash) - ){ - detect_cookie_firefox_3(project_url, strCookieReturnURL, return_url); - goto END; - } - -END: - if (!login.empty() && !password_hash.empty()) { - retval = true; - } - - return retval; -} - diff --git a/clientgui/browser.h b/clientgui/browser.h deleted file mode 100644 index 5ee7c4d86f..0000000000 --- a/clientgui/browser.h +++ /dev/null @@ -1,57 +0,0 @@ -// This file is part of BOINC. -// http://boinc.berkeley.edu -// Copyright (C) 2008 University of California -// -// BOINC is free software; you can redistribute it and/or modify it -// under the terms of the GNU Lesser General Public License -// as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// BOINC is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -// See the GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with BOINC. If not, see . - -DEPRECATED - -#ifndef BOINC_BROWSER_H -#define BOINC_BROWSER_H - -// -// The BOINC client now supports the ability to lookup a users -// authenticator during automatic attachments via a browser -// cookie. -// - -bool detect_setup_authenticator(std::string& project_url, std::string& authenticator); - -bool detect_simple_account_credentials( - std::string& project_name, std::string& project_url, std::string& authenticator, - std::string& project_institution, std::string& project_description, std::string& known -); - -bool detect_account_manager_credentials( - std::string& project_url, std::string& login, std::string& password_hash, - std::string& return_url -); - -bool is_authenticator_valid(const std::string authenticator); - -// platform specific browsers -// -#ifdef _WIN32 -bool detect_cookie_ie(std::string& project_url, std::string& name, std::string& value); -#endif -#ifdef __APPLE__ -bool detect_cookie_safari(std::string& project_url, std::string& name, std::string& value); -#endif - -// Cross-platform browsers -// -bool detect_cookie_firefox_3(std::string& project_url, std::string& name, std::string& value); -bool detect_cookie_chrome(std::string& project_url, std::string& name, std::string& value); - -#endif diff --git a/clientgui/mac/browser_safari.mm b/clientgui/mac/browser_safari.mm deleted file mode 100644 index 8f2d0f9e16..0000000000 --- a/clientgui/mac/browser_safari.mm +++ /dev/null @@ -1,75 +0,0 @@ -// This file is part of BOINC. -// http://boinc.berkeley.edu -// Copyright (C) 2016 University of California -// -// BOINC is free software; you can redistribute it and/or modify it -// under the terms of the GNU Lesser General Public License -// as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// BOINC is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -// See the GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with BOINC. If not, see . - -#include - -#include "str_util.h" -#include "browser.h" - -bool detect_cookie_safari(std::string& project_url, std::string& name, std::string& value) -{ - NSHTTPCookieStorage *cookieStorage; - NSArray *theCookies; - NSHTTPCookie *aCookie; - NSURL *theURL; - NSString *theURLString, *theValueString, *theNameString; - NSDate *expirationDate; - unsigned int i, n; - bool retval = false; - - NSAutoreleasePool* pool; - - pool = [[NSAutoreleasePool alloc] init]; - - - theURLString = [ NSString stringWithCString:project_url.c_str() encoding:NSMacOSRomanStringEncoding ]; - - theURL = [ NSURL URLWithString:theURLString ]; - - cookieStorage = [ NSHTTPCookieStorage sharedHTTPCookieStorage ]; - - if (cookieStorage == NULL) - goto bail; - - theCookies = [ cookieStorage cookiesForURL:theURL ]; - - if (theCookies == NULL) - goto bail; - - n = [ theCookies count ]; - for (i=0; i