blob: 3c1844fe8d27086fb12faf5141073770235a7284 [file] [log] [blame]
// Copyright 2011 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "remoting/protocol/authenticator.h"
#include "base/functional/bind.h"
#include "base/logging.h"
#include "remoting/base/constants.h"
#include "third_party/libjingle_xmpp/xmllite/xmlelement.h"
namespace remoting::protocol {
namespace {
const jingle_xmpp::StaticQName kAuthenticationQName = {kChromotingXmlNamespace,
"authentication"};
} // namespace
Authenticator::RejectionDetails::RejectionDetails() = default;
Authenticator::RejectionDetails::RejectionDetails(RejectionDetails&&) = default;
Authenticator::RejectionDetails::RejectionDetails(const RejectionDetails&) =
default;
Authenticator::RejectionDetails::RejectionDetails(
std::string_view message,
const base::Location& location)
: message(std::string(message)), location(location) {}
Authenticator::RejectionDetails::~RejectionDetails() = default;
Authenticator::RejectionDetails& Authenticator::RejectionDetails::operator=(
RejectionDetails&&) = default;
Authenticator::RejectionDetails& Authenticator::RejectionDetails::operator=(
const RejectionDetails&) = default;
Authenticator::Authenticator() = default;
Authenticator::~Authenticator() = default;
// static
bool Authenticator::IsAuthenticatorMessage(
const jingle_xmpp::XmlElement* message) {
return message->Name() == kAuthenticationQName;
}
// static
std::unique_ptr<jingle_xmpp::XmlElement>
Authenticator::CreateEmptyAuthenticatorMessage() {
return std::make_unique<jingle_xmpp::XmlElement>(kAuthenticationQName);
}
// static
const jingle_xmpp::XmlElement* Authenticator::FindAuthenticatorMessage(
const jingle_xmpp::XmlElement* message) {
return message->FirstNamed(kAuthenticationQName);
}
void Authenticator::NotifyStateChangeAfterAccepted() {
if (on_state_change_after_accepted_) {
on_state_change_after_accepted_.Run();
} else {
LOG(WARNING)
<< "State change notification ignored because callback is not set.";
}
}
void Authenticator::ChainStateChangeAfterAcceptedWithUnderlying(
Authenticator& underlying) {
underlying.set_state_change_after_accepted_callback(base::BindRepeating(
&Authenticator::NotifyStateChangeAfterAccepted, base::Unretained(this)));
}
} // namespace remoting::protocol