blob: 3629f62ff6d10c842751e93d29f7c8f9787d0c8a [file] [log] [blame]
// Copyright 2020 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_SMBFS_BOOTSTRAP_IMPL_H_
#define SMBFS_SMBFS_BOOTSTRAP_IMPL_H_
#include <memory>
#include <string>
#include <base/macros.h>
#include <base/callback.h>
#include <mojo/public/cpp/bindings/binding.h>
#include "smbfs/mojom/smbfs.mojom.h"
namespace smbfs {
class Filesystem;
class SmbFilesystem;
struct SmbCredential;
// Implements mojom::SmbFsBootstrap to mount an SMB share.
class SmbFsBootstrapImpl : public mojom::SmbFsBootstrap {
public:
class Delegate {
public:
// Sets up Kerberos authentication.
virtual void SetupKerberos(
mojom::KerberosConfigPtr kerberos_config,
base::OnceCallback<void(bool success)> callback) = 0;
// Creates a new SmbFilesystem. Must always succeed and return a new
// SmbFilesystem.
virtual std::unique_ptr<SmbFilesystem> CreateSmbFilesystem(
const std::string& share_path,
std::unique_ptr<SmbCredential> credential) = 0;
// Starts the fuse session using the filesystem |fs|. Returns true if the
// session is successfully started.
virtual bool StartFuseSession(std::unique_ptr<Filesystem> fs) = 0;
// Mojo connection error handler.
virtual void OnBootstrapConnectionError() = 0;
};
SmbFsBootstrapImpl(mojom::SmbFsBootstrapRequest request, Delegate* delegate);
~SmbFsBootstrapImpl() override;
private:
// mojom::SmbFsBootstrap overrides.
void MountShare(mojom::MountOptionsPtr options,
mojom::SmbFsDelegatePtr smbfs_delegate,
const MountShareCallback& callback) override;
// Callback to continue MountShare after setting up credentials
// (username/password, or kerberos).
void OnCredentialsSetup(mojom::MountOptionsPtr options,
mojom::SmbFsDelegatePtr smbfs_delegate,
const MountShareCallback& callback,
std::unique_ptr<SmbCredential> credential,
bool use_kerberos,
bool setup_success);
mojo::Binding<mojom::SmbFsBootstrap> binding_;
base::OnceClosure disconnect_callback_;
Delegate* const delegate_;
DISALLOW_COPY_AND_ASSIGN(SmbFsBootstrapImpl);
};
} // namespace smbfs
#endif // SMBFS_SMBFS_BOOTSTRAP_IMPL_H_