gce.h
1 // Copyright 2019, Beeri 15. All rights reserved.
2 // Author: Roman Gershman (romange@gmail.com)
3 //
4 
5 #pragma once
6 
7 #include <boost/asio/ssl.hpp>
8 #include <boost/fiber/mutex.hpp>
9 #include <memory>
10 
11 #include "util/status.h"
12 
13 namespace util {
14 class IoContext;
15 
16 class GCE {
17  public:
18  using SslContext = ::boost::asio::ssl::context;
19  using error_code = ::boost::system::error_code;
20 
21  GCE() = default;
22 
23  Status Init();
24 
25  const std::string& project_id() const { return project_id_; }
26  const std::string& client_id() const { return client_id_; }
27  const std::string& client_secret() const { return client_secret_; }
28  const std::string& account_id() const { return account_id_; }
29 
30  // refresh_token is used for refreshing an access token.
31  const std::string& refresh_token() const { return refresh_token_; }
32 
33  static const char* GoogleCert();
34  static const char* kApiDomain;
35 
36  static ::boost::asio::ssl::context CheckedSslContext();
37 
40  std::string access_token() const;
41 
42  StatusObject<std::string> RefreshAccessToken(IoContext* context) const;
43  bool is_prod_env() const { return is_prod_env_; }
44 
45  void Test_InjectAcessToken(std::string access_token);
46 
47  private:
48  util::Status ParseDefaultConfig();
49  util::Status ReadDevCreds(const std::string& root_path);
50  util::StatusObject<std::string> ParseTokenResponse(std::string&& response) const;
51 
52  std::string project_id_, client_id_, client_secret_, account_id_, refresh_token_;
53 
54  mutable ::boost::fibers::mutex mu_;
55  mutable std::string access_token_;
56 
57  std::unique_ptr<SslContext> ssl_ctx_;
58  bool is_prod_env_ = false;
59 };
60 
61 } // namespace util
Definition: gce.h:16
std::string access_token() const
Definition: gce.cc:215