mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-27 06:19:36 +00:00
244de5d2c1
Addressing #10481. This patch adds the new 'needauth' option for converters launching external programs that are capable of running arbitrary code on behalf of the user. These converters won't be run unless the user gives explicit authorization, which is asked on-demand when the converter is about to be run (question is not asked if the file is cached and calling the converter is not needed). The user prompt has a 3rd button so that he/she's not prompted again for (any converter over) the same document (identified through buffer->absFileName()). Two preference options are added: lyxrc.use_converter_needauth_forbidden disables any converter with the 'needauth' option, which is meant to force user to an explicit action via the preferences pane, before being able to use advanced converters that can potentially bring security threats; lyxrc.use_converter_needauth enables prompting the user for 'needauth' converters, or bypasses the check if not enabled, falling back to the previous behavior. So, the first option is for maximum security, the second is for maximum usability.
93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file GraphicsCache.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author Baruch Even
|
|
* \author Angus Leeming
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*
|
|
* lyx::graphics::Cache is the manager of the image cache.
|
|
* It is responsible for creating the lyx::graphics::CacheItem's
|
|
* and maintaining them.
|
|
*
|
|
* lyx::graphics::Cache is a singleton class. It is possible to have only one
|
|
* instance of it at any moment.
|
|
*/
|
|
|
|
#ifndef GRAPHICSCACHE_H
|
|
#define GRAPHICSCACHE_H
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
|
|
namespace lyx {
|
|
|
|
namespace support { class FileName; }
|
|
|
|
namespace graphics {
|
|
|
|
class CacheItem;
|
|
|
|
class Cache {
|
|
public:
|
|
|
|
/// This is a singleton class. Get the instance.
|
|
static Cache & get();
|
|
|
|
/** Which graphics formats can be loaded directly by the image loader.
|
|
* Other formats can be loaded if a converter to a loadable format
|
|
* can be defined.
|
|
*/
|
|
std::vector<std::string> const & loadableFormats() const;
|
|
|
|
/// Add a graphics file to the cache.
|
|
void add(support::FileName const & file, support::FileName const & doc_file) const;
|
|
|
|
/// Remove a file from the cache.
|
|
void remove(support::FileName const & file) const;
|
|
|
|
/// Returns \c true if the file is in the cache.
|
|
bool inCache(support::FileName const & file) const;
|
|
|
|
/** Get the cache item associated with file.
|
|
* Returns an empty container if there is no such item.
|
|
*
|
|
* IMPORTANT: whatever uses an image must make a local copy of this
|
|
* ItemPtr. The shared_ptr<>::use_count() function is
|
|
* used to ascertain whether or not to remove the item from the cache
|
|
* when remove(file) is called.
|
|
*
|
|
* You have been warned!
|
|
*/
|
|
typedef std::shared_ptr<CacheItem> ItemPtr;
|
|
///
|
|
ItemPtr const item(support::FileName const & file) const;
|
|
|
|
private:
|
|
/// noncopyable
|
|
Cache(Cache const &);
|
|
void operator=(Cache const &);
|
|
|
|
/** Make the c-tor, d-tor private so we can control how many objects
|
|
* are instantiated.
|
|
*/
|
|
Cache();
|
|
///
|
|
~Cache();
|
|
|
|
/// Use the Pimpl idiom to hide the internals.
|
|
class Impl;
|
|
/// The pointer never changes although *pimpl_'s contents may.
|
|
Impl * const pimpl_;
|
|
};
|
|
|
|
} // namespace graphics
|
|
} // namespace lyx
|
|
|
|
#endif // GRAPHICSCACHE_H
|