Blame lang/qt/src/cryptoconfig.h

Packit Service 672cf4
/*
Packit Service 672cf4
    cryptoconfig.h
Packit Service 672cf4
Packit Service 672cf4
    This file is part of qgpgme, the Qt API binding for gpgme
Packit Service 672cf4
    Copyright (c) 2004 Klarälvdalens Datakonsult AB
Packit Service 672cf4
    Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
Packit Service 672cf4
    Software engineering by Intevation GmbH
Packit Service 672cf4
Packit Service 672cf4
    QGpgME is free software; you can redistribute it and/or
Packit Service 672cf4
    modify it under the terms of the GNU General Public License as
Packit Service 672cf4
    published by the Free Software Foundation; either version 2 of the
Packit Service 672cf4
    License, or (at your option) any later version.
Packit Service 672cf4
Packit Service 672cf4
    QGpgME is distributed in the hope that it will be useful,
Packit Service 672cf4
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 672cf4
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 672cf4
    General Public License for more details.
Packit Service 672cf4
Packit Service 672cf4
    You should have received a copy of the GNU General Public License
Packit Service 672cf4
    along with this program; if not, write to the Free Software
Packit Service 672cf4
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service 672cf4
Packit Service 672cf4
    In addition, as a special exception, the copyright holders give
Packit Service 672cf4
    permission to link the code of this program with any edition of
Packit Service 672cf4
    the Qt library by Trolltech AS, Norway (or with modified versions
Packit Service 672cf4
    of Qt that use the same license as Qt), and distribute linked
Packit Service 672cf4
    combinations including the two.  You must obey the GNU General
Packit Service 672cf4
    Public License in all respects for all of the code used other than
Packit Service 672cf4
    Qt.  If you modify this file, you may extend this exception to
Packit Service 672cf4
    your version of the file, but you are not obligated to do so.  If
Packit Service 672cf4
    you do not wish to do so, delete this exception statement from
Packit Service 672cf4
    your version.
Packit Service 672cf4
*/
Packit Service 672cf4
Packit Service 672cf4
#ifndef CRYPTOCONFIG_H
Packit Service 672cf4
#define CRYPTOCONFIG_H
Packit Service 672cf4
Packit Service 672cf4
#include "qgpgme_export.h"
Packit Service 672cf4
#ifdef __cplusplus
Packit Service 672cf4
/* we read this file from a C compiler, and are only interested in the
Packit Service 672cf4
 * enums... */
Packit Service 672cf4
Packit Service 672cf4
#include <QUrl>
Packit Service 672cf4
Packit Service 672cf4
#include <vector>
Packit Service 672cf4
Packit Service 672cf4
/* Start reading this file from the bottom up :) */
Packit Service 672cf4
Packit Service 672cf4
namespace QGpgME
Packit Service 672cf4
{
Packit Service 672cf4
Packit Service 672cf4
/**
Packit Service 672cf4
 * Description of a single option
Packit Service 672cf4
 */
Packit Service 672cf4
class QGPGME_EXPORT CryptoConfigEntry
Packit Service 672cf4
{
Packit Service 672cf4
Packit Service 672cf4
public:
Packit Service 672cf4
#endif /* __cplusplus */
Packit Service 672cf4
    /**
Packit Service 672cf4
       @li basic        This option should always be offered to the user.
Packit Service 672cf4
       @li advanced        This option may be offered to advanced users.
Packit Service 672cf4
       @li expert        This option should only be offered to expert users.
Packit Service 672cf4
       */
Packit Service 672cf4
    enum Level { Level_Basic = 0,
Packit Service 672cf4
                 Level_Advanced = 1,
Packit Service 672cf4
                 Level_Expert = 2
Packit Service 672cf4
               };
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
       Type of the argument
Packit Service 672cf4
       @li ArgType_None        The option is set or not set, but no argument.
Packit Service 672cf4
       @li ArgType_String        An unformatted string.
Packit Service 672cf4
       @li ArgType_Int                A signed integer number.
Packit Service 672cf4
       @li ArgType_UInt        An unsigned integer number.
Packit Service 672cf4
       @li ArgType_Path        A string that describes the pathname of a file.
Packit Service 672cf4
       The file does not necessarily need to exist.
Packit Service 672cf4
       Separated from string so that e.g. a FileDialog can be used.
Packit Service 672cf4
       @li ArgType_DirPath        A string that describes the pathname of a directory.
Packit Service 672cf4
       The directory does not necessarily need to exist.
Packit Service 672cf4
       Separated from path so that e.g. a FileDialog can be used which only
Packit Service 672cf4
       allows directories to be selected.
Packit Service 672cf4
       @li ArgType_LDAPURL        A LDAP URL
Packit Service 672cf4
       Separated from URL so that a more specific widget can be shown, hiding the url syntax
Packit Service 672cf4
    */
Packit Service 672cf4
    enum ArgType { ArgType_None = 0,
Packit Service 672cf4
                   ArgType_String = 1,
Packit Service 672cf4
                   ArgType_Int = 2,
Packit Service 672cf4
                   ArgType_UInt = 3,
Packit Service 672cf4
                   ArgType_Path = 4,
Packit Service 672cf4
                   /* Nr. 5 was URL historically. */
Packit Service 672cf4
                   ArgType_LDAPURL = 6,
Packit Service 672cf4
                   ArgType_DirPath = 7,
Packit Service 672cf4
Packit Service 672cf4
                   NumArgType
Packit Service 672cf4
                 };
Packit Service 672cf4
Packit Service 672cf4
#ifdef __cplusplus
Packit Service 672cf4
    virtual ~CryptoConfigEntry() {}
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return the internal name of this entry
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString name() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return user-visible description of this entry
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString description() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return "component/group/name"
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString path() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return true if the argument is optional
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool isOptional() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return true if the entry is readonly
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool isReadOnly() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return true if the argument can be given multiple times
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool isList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return true if the argument can be changed at runtime
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool isRuntime() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * User level
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual Level level() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Argument type
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual ArgType argType() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return true if the option is set, i.e. different from default
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool isSet() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a bool (only allowed for ArgType_None)
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool boolValue() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a string (available for all argtypes)
Packit Service 672cf4
     * The returned string can be empty (explicitly set to empty) or null (not set).
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString stringValue() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a signed int
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual int intValue() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as an unsigned int
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual unsigned int uintValue() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a URL (only meaningful for Path and URL argtypes)
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QUrl urlValue() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return number of times the option is set (only valid for ArgType_None, if isList())
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual unsigned int numberOfTimesSet() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a list of signed ints
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual std::vector<int> intValueList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a list of unsigned ints
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual std::vector<unsigned int> uintValueList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return value as a list of URLs (only meaningful for Path and URL argtypes, if isList())
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QList<QUrl> urlValueList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Reset an option to its default value
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void resetToDefault() = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Define whether the option is set or not (only allowed for ArgType_None)
Packit Service 672cf4
     * #### TODO: and for options with optional args
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setBoolValue(bool) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set string value (allowed for all argtypes)
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setStringValue(const QString &) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set a new signed int value
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setIntValue(int) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set a new unsigned int value
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setUIntValue(unsigned int) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set value as a URL (only meaningful for Path (if local) and URL argtypes)
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setURLValue(const QUrl &) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set the number of times the option is set (only valid for ArgType_None, if isList())
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setNumberOfTimesSet(unsigned int) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set a new list of signed int values
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setIntValueList(const std::vector<int> &) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set a new list of unsigned int values
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setUIntValueList(const std::vector<unsigned int> &) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Set value as a URL list (only meaningful for Path (if all URLs are local) and URL argtypes, if isList())
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void setURLValueList(const QList<QUrl> &) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return true if the value was changed
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual bool isDirty() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    // Design change from here on we are closely bound to one implementation
Packit Service 672cf4
    // of cryptoconfig. To avoid ABI breaks with every new function we
Packit Service 672cf4
    // add real functions from now on.
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return a stringValueList.
Packit Service 672cf4
     */
Packit Service 672cf4
    QStringList stringValueList() const;
Packit Service 672cf4
};
Packit Service 672cf4
Packit Service 672cf4
/**
Packit Service 672cf4
 * Group containing a set of config options
Packit Service 672cf4
 */
Packit Service 672cf4
class QGPGME_EXPORT CryptoConfigGroup
Packit Service 672cf4
{
Packit Service 672cf4
Packit Service 672cf4
public:
Packit Service 672cf4
    virtual ~CryptoConfigGroup() {}
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return the internal name of this group
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString name() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return the name of the icon for this group
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString iconName() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return user-visible description of this group
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString description() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return "component/group"
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString path() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * User level
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual CryptoConfigEntry::Level level() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Returns the list of entries that are known by this group.
Packit Service 672cf4
     *
Packit Service 672cf4
     * @return list of group entry names.
Packit Service 672cf4
     **/
Packit Service 672cf4
    virtual QStringList entryList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return the configuration object for a given entry in this group
Packit Service 672cf4
     * The object is owned by CryptoConfigGroup, don't delete it.
Packit Service 672cf4
     * Groups cannot be nested, so all entries returned here are pure entries, no groups.
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual CryptoConfigEntry *entry(const QString &name) const = 0;
Packit Service 672cf4
};
Packit Service 672cf4
Packit Service 672cf4
/**
Packit Service 672cf4
 * Crypto config for one component (e.g. gpg-agent, dirmngr etc.)
Packit Service 672cf4
 */
Packit Service 672cf4
class QGPGME_EXPORT CryptoConfigComponent
Packit Service 672cf4
{
Packit Service 672cf4
Packit Service 672cf4
public:
Packit Service 672cf4
    virtual ~CryptoConfigComponent() {}
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return the internal name of this component
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString name() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return the name of the icon for this component
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString iconName() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Return user-visible description of this component
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QString description() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Returns the list of groups that are known about.
Packit Service 672cf4
     *
Packit Service 672cf4
     * @return list of group names. One of them can be "<nogroup>", which is the group where all
Packit Service 672cf4
     * "toplevel" options (belonging to no group) are.
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual QStringList groupList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return the configuration object for a given group
Packit Service 672cf4
     * The object is owned by CryptoConfigComponent, don't delete it.
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual CryptoConfigGroup *group(const QString &name) const = 0;
Packit Service 672cf4
Packit Service 672cf4
};
Packit Service 672cf4
Packit Service 672cf4
/**
Packit Service 672cf4
 * Main interface to crypto configuration.
Packit Service 672cf4
 */
Packit Service 672cf4
class QGPGME_EXPORT CryptoConfig
Packit Service 672cf4
{
Packit Service 672cf4
Packit Service 672cf4
public:
Packit Service 672cf4
    virtual ~CryptoConfig() {}
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Returns the list of known components (e.g. "gpg-agent", "dirmngr" etc.).
Packit Service 672cf4
     * Use @ref component() to retrieve more information about each one.
Packit Service 672cf4
     * @return list of component names.
Packit Service 672cf4
     **/
Packit Service 672cf4
    virtual QStringList componentList() const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * @return the configuration object for a given component
Packit Service 672cf4
     * The object is owned by CryptoConfig, don't delete it.
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual CryptoConfigComponent *component(const QString &name) const = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Convenience method to get hold of a single configuration entry when
Packit Service 672cf4
     * its component, group and name are known. This can be used to read
Packit Service 672cf4
     * the value and/or to set a value to it.
Packit Service 672cf4
     *
Packit Service 672cf4
     * @return the configuration object for a single configuration entry, 0 if not found.
Packit Service 672cf4
     * The object is owned by CryptoConfig, don't delete it.
Packit Service 672cf4
     */
Packit Service 672cf4
    CryptoConfigEntry *entry(const QString &componentName, const QString &groupName, const QString &entryName) const
Packit Service 672cf4
    {
Packit Service 672cf4
        const QGpgME::CryptoConfigComponent *comp = component(componentName);
Packit Service 6c01f9
        const QGpgME::CryptoConfigGroup *group = comp ? comp->group(groupName) : 0;
Packit Service 6c01f9
        return group ? group->entry(entryName) : 0;
Packit Service 672cf4
    }
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Write back changes
Packit Service 672cf4
     *
Packit Service 672cf4
     * @param runtime this parameter is ignored. Changes will always
Packit Service 672cf4
     * be made with --runtime set.
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void sync(bool runtime) = 0;
Packit Service 672cf4
Packit Service 672cf4
    /**
Packit Service 672cf4
     * Tells the CryptoConfig to discard any cached information, including
Packit Service 672cf4
     * all components, groups and entries.
Packit Service 672cf4
     * Call this to free some memory when you won't be using the object
Packit Service 672cf4
     * for some time.
Packit Service 672cf4
     * DON'T call this if you're holding pointers to components, groups or entries.
Packit Service 672cf4
     */
Packit Service 672cf4
    virtual void clear() = 0;
Packit Service 672cf4
};
Packit Service 672cf4
Packit Service 672cf4
}
Packit Service 672cf4
#endif /* __cplusplus */
Packit Service 672cf4
#endif /* CRYPTOCONFIG_H */