0
Files
src/remoting/protocol/session_authz_reauthorizer.h
Yuwei Huang 73563374d5 [remoting corp logging] Implement CorpHostStatusLogger
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}
2024-03-12 21:39:57 +00:00

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_