You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
984 B
C++
40 lines
984 B
C++
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
// Copyright The Music Player Daemon Project
|
|
|
|
#pragma once
|
|
|
|
#include "db/Features.hxx" // for ENABLE_DATABASE
|
|
|
|
class Path;
|
|
class Database;
|
|
class Storage;
|
|
struct Partition;
|
|
|
|
/**
|
|
* An abstract interface for #Client which can be used for unit tests
|
|
* instead of the full #Client class.
|
|
*/
|
|
class IClient {
|
|
public:
|
|
/**
|
|
* Is this client allowed to use the specified local file?
|
|
*
|
|
* Note that this function is vulnerable to timing/symlink attacks.
|
|
* We cannot fix this as long as there are plugins that open a file by
|
|
* its name, and not by file descriptor / callbacks.
|
|
*
|
|
* Throws #std::runtime_error on error.
|
|
*
|
|
* @param path_fs the absolute path name in filesystem encoding
|
|
*/
|
|
virtual void AllowFile(Path path_fs) const = 0;
|
|
|
|
#ifdef ENABLE_DATABASE
|
|
[[gnu::pure]]
|
|
virtual const Database *GetDatabase() const noexcept = 0;
|
|
|
|
[[gnu::pure]]
|
|
virtual Storage *GetStorage() const noexcept = 0;
|
|
#endif // ENABLE_DATABASE
|
|
};
|