summaryrefslogtreecommitdiffstats
path: root/xbmc/PasswordManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/PasswordManager.h')
-rw-r--r--xbmc/PasswordManager.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/xbmc/PasswordManager.h b/xbmc/PasswordManager.h
new file mode 100644
index 0000000..c93dbd0
--- /dev/null
+++ b/xbmc/PasswordManager.h
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "threads/CriticalSection.h"
+
+#include <map>
+#include <stdint.h>
+#include <string>
+
+class CURL;
+
+/*!
+ \ingroup filesystem
+ \brief Password Manager class for saving authentication details
+
+ Handles access to previously saved passwords for paths, translating normal URLs
+ into authenticated URLs if the user has details about the username and password
+ for a path previously saved. Should be accessed via CPasswordManager::GetInstance()
+ */
+class CPasswordManager
+{
+public:
+ /*!
+ \brief The only way through which the global instance of the CPasswordManager should be accessed.
+ \return the global instance.
+ */
+ static CPasswordManager &GetInstance();
+
+ /*!
+ \brief Authenticate a URL by looking the URL up in the temporary and permanent caches
+ First looks up based on host and share name. If that fails, it will try a match purely
+ on the host name (eg different shares on the same host with the same credentials)
+ \param url a CURL to authenticate
+ \return true if we have details in the cache, false otherwise.
+ \sa CURL
+ */
+ bool AuthenticateURL(CURL &url);
+
+ /*!
+ \brief Prompt for a username and password for the particular URL.
+
+ This routine pops up a dialog, requesting the user enter a username and password
+ to access the given URL. The user may optionally save these details. If saved
+ we write the details into the users profile. If not saved, the details are temporarily
+ stored so that further access no longer requires prompting for authentication.
+
+ \param url the URL to authenticate.
+ \return true if the user entered details, false if the user cancelled the dialog.
+ \sa CURL, SaveAuthenticatedURL
+ */
+ bool PromptToAuthenticateURL(CURL &url);
+
+ /*!
+ \brief Save an authenticated URL.
+
+ This routine stores an authenticated URL in the temporary cache, and optionally
+ saves these details into the users profile.
+
+ \param url the URL to authenticate.
+ \param saveToProfile whether to save in the users profile, defaults to true.
+ \sa CURL, PromptToAuthenticateURL
+ */
+ void SaveAuthenticatedURL(const CURL &url, bool saveToProfile = true);
+
+ /*!
+ \brief Is an URL is supported (by the manager)
+
+ This routine checks that an URL is supported by the manager
+
+ \param url the URL to check.
+ \return true if the URL is supported
+ \sa CURL, IsURLSupported
+ */
+ bool IsURLSupported(const CURL &url);
+
+ /*!
+ \brief Clear any previously cached passwords
+ */
+ void Clear();
+
+private:
+ // private construction, and no assignments; use the provided singleton methods
+ CPasswordManager();
+ CPasswordManager(const CPasswordManager&) = delete;
+ CPasswordManager& operator=(CPasswordManager const&) = delete;
+ ~CPasswordManager() = default;
+
+ void Load();
+ void Save() const;
+ std::string GetLookupPath(const CURL &url) const;
+ std::string GetServerLookup(const std::string &path) const;
+
+ std::map<std::string, std::string> m_temporaryCache;
+ std::map<std::string, std::string> m_permanentCache;
+ bool m_loaded;
+
+ CCriticalSection m_critSection;
+};