Coverage Report

Created: 2026-03-30 09:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/port/cpl_azure.h
Line
Count
Source
1
/**********************************************************************
2
 * Project:  CPL - Common Portability Library
3
 * Purpose:  Microsoft Azure Storage Blob routines
4
 * Author:   Even Rouault <even.rouault at spatialys.com>
5
 *
6
 **********************************************************************
7
 * Copyright (c) 2017, Even Rouault <even.rouault at spatialys.com>
8
 *
9
 * SPDX-License-Identifier: MIT
10
 ****************************************************************************/
11
12
#ifndef CPL_AZURE_INCLUDED_H
13
#define CPL_AZURE_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 <map>
23
24
class VSIAzureBlobHandleHelper final : public IVSIS3LikeHandleHelper
25
{
26
    std::string m_osPathForOption;
27
    std::string m_osURL;
28
    std::string m_osEndpoint;
29
    std::string m_osBucket;
30
    std::string m_osObjectKey;
31
    std::string m_osStorageAccount;
32
    std::string m_osStorageKey;
33
    std::string m_osSAS;
34
    std::string m_osAccessToken;
35
    bool m_bFromManagedIdentities;
36
    bool m_bIncludeMSVersion = true;
37
38
    enum class Service
39
    {
40
        SERVICE_BLOB,
41
        SERVICE_ADLS,
42
    };
43
44
    static bool GetConfiguration(const std::string &osPathForOption,
45
                                 CSLConstList papszOptions, Service eService,
46
                                 bool &bUseHTTPS, std::string &osEndpoint,
47
                                 std::string &osStorageAccount,
48
                                 std::string &osStorageKey, std::string &osSAS,
49
                                 std::string &osAccessToken,
50
                                 bool &bFromManagedIdentities);
51
52
    static std::string BuildURL(const std::string &osEndpoint,
53
                                const std::string &osBucket,
54
                                const std::string &osObjectKey,
55
                                const std::string &osSAS);
56
57
    void RebuildURL() override;
58
59
  public:
60
    VSIAzureBlobHandleHelper(
61
        const std::string &osPathForOption, const std::string &osEndpoint,
62
        const std::string &osBucket, const std::string &osObjectKey,
63
        const std::string &osStorageAccount, const std::string &osStorageKey,
64
        const std::string &osSAS, const std::string &osAccessToken,
65
        bool bFromManagedIdentities);
66
    ~VSIAzureBlobHandleHelper() override;
67
68
    static VSIAzureBlobHandleHelper *
69
    BuildFromURI(const char *pszURI, const char *pszFSPrefix,
70
                 const char *pszURIForPathSpecificOption = nullptr,
71
                 CSLConstList papszOptions = nullptr);
72
73
    void SetIncludeMSVersion(bool bInclude)
74
0
    {
75
0
        m_bIncludeMSVersion = bInclude;
76
0
    }
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
    bool CanRestartOnError(const char *, const char *pszHeaders,
84
                           bool bSetError) override;
85
86
    const std::string &GetURL() const override
87
0
    {
88
0
        return m_osURL;
89
0
    }
90
91
    std::string GetSignedURL(CSLConstList papszOptions);
92
93
    static void ClearCache();
94
95
    std::string GetSASQueryString() const;
96
97
    const std::string &GetStorageAccount() const
98
0
    {
99
0
        return m_osStorageAccount;
100
0
    }
101
102
    const std::string &GetBucket() const
103
0
    {
104
0
        return m_osBucket;
105
0
    }
106
107
    static std::string GetSAS(const char *pszFilename);
108
109
    static bool IsNoSignRequest(const char *pszFilename);
110
};
111
112
namespace cpl
113
{
114
int GetAzureAppendBufferSize();
115
}
116
117
#endif /* HAVE_CURL */
118
119
#endif /* #ifndef DOXYGEN_SKIP */
120
121
#endif /* CPL_AZURE_INCLUDED_H */