aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/tvmauth/client/misc/tool/meta_info.h
blob: c4b9688e39b26e20c303ded9aa4d99c680b9d395 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma once

#include "settings.h"

#include <library/cpp/tvmauth/client/misc/utils.h>

#include <library/cpp/tvmauth/client/logger.h>

#include <library/cpp/http/simple/http_client.h>

namespace NTvmAuth::NTvmTool {
    class TMetaInfo {
    public:
        using TDstAliases = THashMap<TClientSettings::TAlias, TTvmId>;

        struct TConfig {
            TTvmId SelfTvmId = 0;
            EBlackboxEnv BbEnv = EBlackboxEnv::Prod;
            TDstAliases DstAliases;

            bool AreTicketsRequired() const {
                return !DstAliases.empty();
            }

            TString ToString() const;

            bool operator==(const TConfig& c) const {
                return SelfTvmId == c.SelfTvmId &&
                       BbEnv == c.BbEnv &&
                       DstAliases == c.DstAliases;
            }
        };
        using TConfigPtr = std::shared_ptr<TConfig>;

    public:
        TMetaInfo(TLoggerPtr logger);

        TConfigPtr Init(TKeepAliveHttpClient& client,
                        const TClientSettings& settings);

        static TString GetRequestForTickets(const TMetaInfo::TConfig& config);

        const TKeepAliveHttpClient::THeaders& GetAuthHeader() const {
            return AuthHeader_;
        }

        TConfigPtr GetConfig() const {
            return Config_.Get();
        }

        bool TryUpdateConfig(TKeepAliveHttpClient& client);

    protected:
        void TryPing(TKeepAliveHttpClient& client);
        TString Fetch(TKeepAliveHttpClient& client) const;
        static TConfigPtr ParseMetaString(const TString& meta, const TString& self);
        void ApplySettings(const TClientSettings& settings);
        static EBlackboxEnv BbEnvFromString(const TString& env, const TString& meta);

    protected:
        NUtils::TProtectedValue<TConfigPtr> Config_;
        TKeepAliveHttpClient::THeaders AuthHeader_;

        TLoggerPtr Logger_;
        TString SelfAlias_;
    };
}