/src/gdal/port/cpl_swift.h
Line | Count | Source |
1 | | /********************************************************************** |
2 | | * Project: CPL - Common Portability Library |
3 | | * Purpose: OpenStack Swift Object Storage routines |
4 | | * Author: Even Rouault <even.rouault at spatialys.com> |
5 | | * |
6 | | ********************************************************************** |
7 | | * Copyright (c) 2018, Even Rouault <even.rouault at spatialys.com> |
8 | | * |
9 | | * SPDX-License-Identifier: MIT |
10 | | ****************************************************************************/ |
11 | | |
12 | | #ifndef CPL_SWIFT_INCLUDED_H |
13 | | #define CPL_SWIFT_INCLUDED_H |
14 | | |
15 | | #ifndef DOXYGEN_SKIP |
16 | | |
17 | | #ifdef HAVE_CURL |
18 | | |
19 | | #include <curl/curl.h> |
20 | | #include "cpl_http.h" |
21 | | #include "cpl_aws.h" |
22 | | #include "cpl_json.h" |
23 | | #include <map> |
24 | | |
25 | | class VSISwiftHandleHelper final : public IVSIS3LikeHandleHelper |
26 | | { |
27 | | std::string m_osURL; |
28 | | std::string m_osStorageURL; |
29 | | std::string m_osAuthToken; |
30 | | std::string m_osBucket; |
31 | | std::string m_osObjectKey; |
32 | | |
33 | | static bool GetConfiguration(const std::string &osPathForOption, |
34 | | std::string &osStorageURL, |
35 | | std::string &osAuthToken); |
36 | | |
37 | | static bool GetCached(const std::string &osPathForOption, |
38 | | const char *pszURLKey, const char *pszUserKey, |
39 | | const char *pszPasswordKey, std::string &osStorageURL, |
40 | | std::string &osAuthToken); |
41 | | |
42 | | static std::string BuildURL(const std::string &osStorageURL, |
43 | | const std::string &osBucket, |
44 | | const std::string &osObjectKey); |
45 | | |
46 | | void RebuildURL() override; |
47 | | |
48 | | // V1 Authentication |
49 | | static bool CheckCredentialsV1(const std::string &osPathForOption); |
50 | | static bool AuthV1(const std::string &osPathForOption, |
51 | | std::string &osStorageURL, std::string &osAuthToken); |
52 | | |
53 | | // V3 Authentication |
54 | | static bool CheckCredentialsV3(const std::string &osPathForOption, |
55 | | const std::string &osAuthType); |
56 | | static bool AuthV3(const std::string &osPathForOption, |
57 | | const std::string &osAuthType, std::string &osStorageURL, |
58 | | std::string &osAuthToken); |
59 | | static CPLJSONObject |
60 | | CreateAuthV3RequestObject(const std::string &osPathForOption, |
61 | | const std::string &osAuthType); |
62 | | static bool GetAuthV3StorageURL(const std::string &osPathForOption, |
63 | | const CPLHTTPResult *psResult, |
64 | | std::string &storageURL); |
65 | | |
66 | | public: |
67 | | VSISwiftHandleHelper(const std::string &osStorageURL, |
68 | | const std::string &osAuthToken, |
69 | | const std::string &osBucket, |
70 | | const std::string &osObjectKey); |
71 | | ~VSISwiftHandleHelper() override; |
72 | | |
73 | | bool Authenticate(const std::string &osPathForOption); |
74 | | |
75 | | static VSISwiftHandleHelper *BuildFromURI(const char *pszURI, |
76 | | const char *pszFSPrefix); |
77 | | |
78 | | struct curl_slist *GetCurlHeaders(const std::string &osVerbosVerb, |
79 | | struct curl_slist *psHeaders, |
80 | | const void *pabyDataContent = nullptr, |
81 | | size_t nBytesContent = 0) const override; |
82 | | |
83 | | const std::string &GetURL() const override |
84 | 0 | { |
85 | 0 | return m_osURL; |
86 | 0 | } |
87 | | |
88 | | static void CleanMutex(); |
89 | | static void ClearCache(); |
90 | | }; |
91 | | |
92 | | #endif /* HAVE_CURL */ |
93 | | |
94 | | #endif /* #ifndef DOXYGEN_SKIP */ |
95 | | |
96 | | #endif /* CPL_SWIFT_INCLUDED_H */ |