1
#pragma once
2
#include "envoy/common/time.h"
3

            
4
#include "source/extensions/common/aws/credentials_provider.h"
5

            
6
namespace Envoy {
7
namespace Extensions {
8
namespace Common {
9
namespace Aws {
10

            
11
class CachedCredentialsProviderBase : public CredentialsProvider,
12
                                      public Logger::Loggable<Logger::Id::aws> {
13
public:
14
23
  Credentials getCredentials() override {
15
23
    refreshIfNeeded();
16
23
    return cached_credentials_;
17
23
  }
18
3
  bool credentialsPending() override { return false; };
19

            
20
protected:
21
  SystemTime last_updated_;
22
  Credentials cached_credentials_;
23

            
24
23
  void refreshIfNeeded() {
25
23
    if (needsRefresh()) {
26
21
      refresh();
27
21
    }
28
23
  }
29

            
30
  virtual bool needsRefresh() PURE;
31
  virtual void refresh() PURE;
32
};
33

            
34
} // namespace Aws
35
} // namespace Common
36
} // namespace Extensions
37
} // namespace Envoy