bool CPasswordManager::PromptToAuthenticateURL(CURL &url) { CSingleLock lock(m_critSection); CStdString passcode; CStdString username = url.GetUserName(); CStdString path = GetLookupPath(url); bool saveDetails = false; if (!CGUIDialogLockSettings::ShowAndGetUserAndPassword(username, passcode, url.GetWithoutUserDetails(), &saveDetails)) return false; url.SetPassword(passcode); url.SetUserName(username); // save the information for later CStdString authenticatedPath = url.Get(); if (!m_loaded) Load(); if (saveDetails) { // write to some random XML file... m_permanentCache[path] = authenticatedPath; Save(); } // save for both this path and more generally the server as a whole. m_temporaryCache[path] = authenticatedPath; m_temporaryCache[GetServerLookup(path)] = authenticatedPath; return true; }
std::string CGUIDialogNetworkSetup::ConstructPath() const { CURL url; if (m_protocol == NET_PROTOCOL_SMB) url.SetProtocol("smb"); else if (m_protocol == NET_PROTOCOL_FTP) url.SetProtocol("ftp"); else if (m_protocol == NET_PROTOCOL_HTTP) url.SetProtocol("http"); else if (m_protocol == NET_PROTOCOL_HTTPS) url.SetProtocol("https"); else if (m_protocol == NET_PROTOCOL_DAV) url.SetProtocol("dav"); else if (m_protocol == NET_PROTOCOL_DAVS) url.SetProtocol("davs"); else if (m_protocol == NET_PROTOCOL_UPNP) url.SetProtocol("upnp"); else if (m_protocol == NET_PROTOCOL_RSS) url.SetProtocol("rss"); else if (m_protocol == NET_PROTOCOL_NFS) url.SetProtocol("nfs"); else if (m_protocol == NET_PROTOCOL_SFTP) url.SetProtocol("sftp"); if (!m_username.empty()) { url.SetUserName(m_username); if (!m_password.empty()) url.SetPassword(m_password); } if(!m_server.empty()) url.SetHostName(m_server); if (((m_protocol == NET_PROTOCOL_FTP) || (m_protocol == NET_PROTOCOL_HTTP) || (m_protocol == NET_PROTOCOL_HTTPS) || (m_protocol == NET_PROTOCOL_DAV) || (m_protocol == NET_PROTOCOL_DAVS) || (m_protocol == NET_PROTOCOL_RSS) || (m_protocol == NET_PROTOCOL_SFTP) || (m_protocol == NET_PROTOCOL_NFS)) && !m_port.empty() && atoi(m_port.c_str()) > 0) { url.SetPort(atoi(m_port.c_str())); } if (!m_path.empty()) url.SetFileName(m_path); return url.Get(); }
CStdString CTextureCache::GetWrappedImageURL(const CStdString &image, const CStdString &type, const CStdString &options) { if (StringUtils::StartsWith(image, "image://")) return image; // already wrapped CURL url; url.SetProtocol("image"); url.SetUserName(type); url.SetHostName(image); if (!options.IsEmpty()) { url.SetFileName("transform"); url.SetOptions("?" + options); } return url.Get(); }
bool CPasswordManager::PromptToAuthenticateURL(CURL &url) { CSingleLock lock(m_critSection); CStdString passcode; CStdString username = url.GetUserName(); CStdString path = GetLookupPath(url); bool saveDetails = false; if (!CGUIDialogLockSettings::ShowAndGetUserAndPassword(username, passcode, url.GetWithoutUserDetails(), &saveDetails)) return false; url.SetPassword(passcode); url.SetUserName(username); // save the information for later SaveAuthenticatedURL(url, saveDetails); return true; }
bool CPasswordManager::AuthenticateURL(CURL &url) { CSingleLock lock(m_critSection); if (!m_loaded) Load(); CStdString lookup(GetLookupPath(url)); map<CStdString, CStdString>::const_iterator it = m_temporaryCache.find(lookup); if (it == m_temporaryCache.end()) { // second step, try something that doesn't quite match it = m_temporaryCache.find(GetServerLookup(lookup)); } if (it != m_temporaryCache.end()) { CURL auth(it->second); url.SetPassword(auth.GetPassWord()); url.SetUserName(auth.GetUserName()); return true; } return false; }
CURL URIUtils::CreateArchivePath(const std::string& type, const CURL& archiveUrl, const std::string& pathInArchive, const std::string& password) { CURL url; url.SetProtocol(type); if (!password.empty()) url.SetUserName(password); url.SetHostName(archiveUrl.Get()); /* NOTE: on posix systems, the replacement of \ with / is incorrect. Ideally this would not be done. We need to check that the ZipManager and RarManager code (and elsewhere) doesn't pass in non-posix paths. */ std::string strBuffer(pathInArchive); StringUtils::Replace(strBuffer, '\\', '/'); StringUtils::TrimLeft(strBuffer, "/"); url.SetFileName(strBuffer); return url; }
bool GetDirectoryFromTxtRecords(const CZeroconfBrowser::ZeroconfService& zeroconf_service, CURL& url, CFileItemList &items) { bool ret = false; //get the txt-records from this service CZeroconfBrowser::ZeroconfService::tTxtRecordMap txtRecords=zeroconf_service.GetTxtRecords(); //if we have some records if(!txtRecords.empty()) { std::string path; std::string username; std::string password; //search for a path key entry CZeroconfBrowser::ZeroconfService::tTxtRecordMap::iterator it = txtRecords.find(TXT_RECORD_PATH_KEY); //if we found the key - be sure there is a value there if( it != txtRecords.end() && !it->second.empty() ) { //from now on we treat the value as a path - everything else would mean //a missconfigured zeroconf server. path=it->second; } //search for a username key entry it = txtRecords.find(TXT_RECORD_USERNAME_KEY); //if we found the key - be sure there is a value there if( it != txtRecords.end() && !it->second.empty() ) { username=it->second; url.SetUserName(username); } //search for a password key entry it = txtRecords.find(TXT_RECORD_PASSWORD_KEY); //if we found the key - be sure there is a value there if( it != txtRecords.end() && !it->second.empty() ) { password=it->second; url.SetPassword(password); } //if we got a path - add a item - else at least we maybe have set username and password to theurl if( !path.empty()) { CFileItemPtr item(new CFileItem("", true)); std::string urlStr(url.Get()); //if path has a leading slash (sure it should have one) if( path.at(0) == '/' ) { URIUtils::RemoveSlashAtEnd(urlStr);//we don't need the slash at and of url then } else//path doesn't start with slash - {//this is some kind of missconfiguration - we fix it by adding a slash to the url URIUtils::AddSlashAtEnd(urlStr); } //add slash at end of path since it has to be a folder URIUtils::AddSlashAtEnd(path); //this is the full path includeing remote stuff (e.x. nfs://ip/path item->SetPath(urlStr + path); //remove the slash at the end of the path or GetFileName will not give the last dir URIUtils::RemoveSlashAtEnd(path); //set the label to the last directory in path if( !URIUtils::GetFileName(path).empty() ) item->SetLabel(URIUtils::GetFileName(path)); else item->SetLabel("/"); item->SetLabelPreformated(true); //just set the default folder icon item->FillInDefaultIcon(); item->m_bIsShareOrDrive=true; items.Add(item); ret = true; } } return ret; }
CStdString CGUIDialogNetworkSetup::ConstructPath() const { CURL url; if (m_protocol == NET_PROTOCOL_SMB) url.SetProtocol("smb"); else if (m_protocol == NET_PROTOCOL_FTP) url.SetProtocol("ftp"); else if (m_protocol == NET_PROTOCOL_HTTP) url.SetProtocol("http"); else if (m_protocol == NET_PROTOCOL_HTTPS) url.SetProtocol("https"); else if (m_protocol == NET_PROTOCOL_DAV) url.SetProtocol("dav"); else if (m_protocol == NET_PROTOCOL_DAVS) url.SetProtocol("davs"); else if (m_protocol == NET_PROTOCOL_DAAP) url.SetProtocol("daap"); else if (m_protocol == NET_PROTOCOL_UPNP) url.SetProtocol("upnp"); else if (m_protocol == NET_PROTOCOL_TUXBOX) url.SetProtocol("tuxbox"); else if (m_protocol == NET_PROTOCOL_RSS) url.SetProtocol("rss"); else if (m_protocol == NET_PROTOCOL_HTSP) url.SetProtocol("htsp"); else if (m_protocol == NET_PROTOCOL_VTP) url.SetProtocol("vtp"); else if (m_protocol == NET_PROTOCOL_MYTH) url.SetProtocol("myth"); else if (m_protocol == NET_PROTOCOL_NFS) url.SetProtocol("nfs"); else if (m_protocol == NET_PROTOCOL_SFTP) url.SetProtocol("sftp"); else if (m_protocol == NET_PROTOCOL_AFP) url.SetProtocol("afp"); if (!m_username.IsEmpty()) { url.SetUserName(m_username); if (!m_password.IsEmpty()) url.SetPassword(m_password); } if(!m_server.IsEmpty()) url.SetHostName(m_server); if (((m_protocol == NET_PROTOCOL_FTP) || (m_protocol == NET_PROTOCOL_HTTP) || (m_protocol == NET_PROTOCOL_HTTPS) || (m_protocol == NET_PROTOCOL_DAV) || (m_protocol == NET_PROTOCOL_DAVS) || (m_protocol == NET_PROTOCOL_RSS) || (m_protocol == NET_PROTOCOL_DAAP && !m_server.IsEmpty()) || (m_protocol == NET_PROTOCOL_HTSP) || (m_protocol == NET_PROTOCOL_VTP) || (m_protocol == NET_PROTOCOL_MYTH) || (m_protocol == NET_PROTOCOL_TUXBOX) || (m_protocol == NET_PROTOCOL_SFTP) || (m_protocol == NET_PROTOCOL_NFS)) && !m_port.IsEmpty() && atoi(m_port.c_str()) > 0) { url.SetPort(atoi(m_port)); } if (!m_path.IsEmpty()) url.SetFileName(m_path); return url.Get(); }