// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef REMOTING_PROTOCOL_SESSION_AUTHZ_REAUTHORIZER_H_ #define REMOTING_PROTOCOL_SESSION_AUTHZ_REAUTHORIZER_H_ #include <memory> #include <string> #include <string_view> #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "net/base/backoff_entry.h" #include "remoting/base/protobuf_http_status.h" #include "remoting/base/session_authz_service_client.h" namespace remoting { namespace internal { struct ReauthorizeHostResponseStruct; } // namespace internal namespace protocol { // SessionReauthorizer implementation that reauthorizes using the SessionAuthz // service. class SessionAuthzReauthorizer { public: // |service_client| must outlive |this|. SessionAuthzReauthorizer(SessionAuthzServiceClient* service_client, std::string_view session_id, std::string_view session_reauth_token, base::TimeDelta session_reauth_token_lifetime, base::OnceClosure on_reauthorization_failed); ~SessionAuthzReauthorizer(); SessionAuthzReauthorizer(const SessionAuthzReauthorizer&) = delete; SessionAuthzReauthorizer& operator=(const SessionAuthzReauthorizer&) = delete; void Start(); const net::BackoffEntry* GetBackoffEntryForTest() const; const std::string& session_reauth_token() const { return session_reauth_token_; } private: void ScheduleNextReauth(); void Reauthorize(); void OnReauthorizeResult( const ProtobufHttpStatus& status, std::unique_ptr<internal::ReauthorizeHostResponseStruct> response); void NotifyReauthorizationFailed(); raw_ptr<SessionAuthzServiceClient> service_client_; std::string session_id_; std::string session_reauth_token_; base::TimeTicks token_expire_time_; base::OneShotTimer reauthorize_timer_; base::OnceClosure on_reauthorization_failed_; // Non-null iff there is an ongoing retry attempt. std::unique_ptr<net::BackoffEntry> backoff_entry_; }; } // namespace protocol } // namespace remoting #endif // REMOTING_PROTOCOL_SESSION_AUTHZ_REAUTHORIZER_H_