// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SMBFS_KERBEROS_ARTIFACT_CLIENT_INTERFACE_H_
#define SMBFS_KERBEROS_ARTIFACT_CLIENT_INTERFACE_H_

#include <string>

#include <base/callback.h>
#include <base/macros.h>
#include <dbus/object_proxy.h>

namespace smbfs {

class KerberosArtifactClientInterface {
 public:
  using GetUserKerberosFilesCallback =
      base::OnceCallback<void(bool success,
                              const std::string& krb5_ccache_data,
                              const std::string& krb5_conf_data)>;

  virtual ~KerberosArtifactClientInterface() = default;

  // Gets Kerberos files for the user determined by |account_identifier|.
  // If authpolicyd or kerberosd has Kerberos files for the user specified by
  // |account_identifier| it sends them in response: credential cache and krb5
  // config files. For authpolicyd expected |account_identifier| is object guid,
  // while for kerberosd it is principal name.
  virtual void GetUserKerberosFiles(const std::string& account_identifier,
                                    GetUserKerberosFilesCallback callback) = 0;

  // Connects callbacks to OnKerberosFilesChanged D-Bus signal.
  virtual void ConnectToKerberosFilesChangedSignal(
      dbus::ObjectProxy::SignalCallback signal_callback,
      dbus::ObjectProxy::OnConnectedCallback on_connected_callback) = 0;

 protected:
  KerberosArtifactClientInterface() = default;
  KerberosArtifactClientInterface(const KerberosArtifactClientInterface&) =
      delete;
  KerberosArtifactClientInterface& operator=(
      const KerberosArtifactClientInterface&) = delete;
};

}  // namespace smbfs

#endif  // SMBFS_KERBEROS_ARTIFACT_CLIENT_INTERFACE_H_
