
This CL implements the CorpHostStatusLogger and hooks it up with the JingleSessionManager, so that it reports the disconnect event to the corp logging service with both the error code and the SessionAuthz reauth token attached. The tricky part of this CL is to pass the reauth token from the SessionAuthzReauthorizer to the CorpHostStatusLogger. There is `HostStatusObserver`, but it implements a mojo interface, meaning it will be rather difficult to pass pointers around (without being rejected by the mojo reviewer). Just passing the reauth token around in callbacks would also work, but that would be very messy. To get that working, this CL introduces a `SessionObserver`, which allows implementations to observer state changes on multiple sessions and know which session has changed. `authentication_type()` and `implementing_authenticator()` are added to `Authenticator` to allow `CorpHostStatusLogger` to extract the reauth token from the generalized `Authenticator` reference. Bug: b/328138087 Change-Id: Ic7b9ea297d28488ef65d4071860836b47e9c3b5d Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5359454 Auto-Submit: Yuwei Huang <yuweih@chromium.org> Reviewed-by: Joe Downing <joedow@chromium.org> Commit-Queue: Yuwei Huang <yuweih@chromium.org> Cr-Commit-Position: refs/heads/main@{#1271835}
73 lines
2.2 KiB
C++
73 lines
2.2 KiB
C++
// 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_
|