Blame lang/cpp/tests/run-keylist.cpp

Packit Service 30b792
/*
Packit Service 30b792
    run-keylist.cpp
Packit Service 30b792
Packit Service 30b792
    This file is part of GpgMEpp's test suite.
Packit Service 30b792
    Copyright (c) 2018 Intevation GmbH
Packit Service 30b792
Packit Service 30b792
    QGpgME is free software; you can redistribute it and/or
Packit Service 30b792
    modify it under the terms of the GNU General Public License,
Packit Service 30b792
    version 2, as published by the Free Software Foundation.
Packit Service 30b792
Packit Service 30b792
    QGpgME is distributed in the hope that it will be useful,
Packit Service 30b792
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 30b792
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 30b792
    General Public License for more details.
Packit Service 30b792
Packit Service 30b792
    You should have received a copy of the GNU General Public License
Packit Service 30b792
    along with this program; if not, write to the Free Software
Packit Service 30b792
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service 30b792
Packit Service 30b792
    In addition, as a special exception, the copyright holders give
Packit Service 30b792
    permission to link the code of this program with any edition of
Packit Service 30b792
    the Qt library by Trolltech AS, Norway (or with modified versions
Packit Service 30b792
    of Qt that use the same license as Qt), and distribute linked
Packit Service 30b792
    combinations including the two.  You must obey the GNU General
Packit Service 30b792
    Public License in all respects for all of the code used other than
Packit Service 30b792
    Qt.  If you modify this file, you may extend this exception to
Packit Service 30b792
    your version of the file, but you are not obligated to do so.  If
Packit Service 30b792
    you do not wish to do so, delete this exception statement from
Packit Service 30b792
    your version.
Packit Service 30b792
*/
Packit Service 30b792
Packit Service 30b792
#ifdef HAVE_CONFIG_H
Packit Service 30b792
 #include "config.h"
Packit Service 30b792
#endif
Packit Service 30b792
Packit Service 30b792
#include "context.h"
Packit Service 30b792
#include "key.h"
Packit Service 30b792
#include "keylistresult.h"
Packit Service 30b792
Packit Service 30b792
#include <memory>
Packit Service 30b792
#include <sstream>
Packit Service 30b792
#include <iostream>
Packit Service 30b792
Packit Service 30b792
using namespace GpgME;
Packit Service 30b792
Packit Service 30b792
static int
Packit Service 30b792
show_usage (int ex)
Packit Service 30b792
{
Packit Service 30b792
  fputs ("usage: run-keylist [options] [pattern]\n\n"
Packit Service 30b792
         "Options:\n"
Packit Service 30b792
         "  --verbose        run in verbose mode\n"
Packit Service 30b792
         "  --openpgp        use the OpenPGP protocol (default)\n"
Packit Service 30b792
         "  --cms            use the CMS protocol\n"
Packit Service 30b792
         "  --secret         list only secret keys\n"
Packit Service 30b792
         "  --with-secret    list pubkeys with secret info filled\n"
Packit Service 30b792
         "  --local          use GPGME_KEYLIST_MODE_LOCAL\n"
Packit Service 30b792
         "  --extern         use GPGME_KEYLIST_MODE_EXTERN\n"
Packit Service 30b792
         "  --sigs           use GPGME_KEYLIST_MODE_SIGS\n"
Packit Service 30b792
         "  --tofu           use GPGME_KEYLIST_MODE_TOFU\n"
Packit Service 30b792
         "  --sig-notations  use GPGME_KEYLIST_MODE_SIG_NOTATIONS\n"
Packit Service 30b792
         "  --ephemeral      use GPGME_KEYLIST_MODE_EPHEMERAL\n"
Packit Service 30b792
         "  --validate       use GPGME_KEYLIST_MODE_VALIDATE\n"
Packit Service 30b792
         "  --locate         use GPGME_KEYLIST_MODE_LOCATE\n"
Packit Service 30b792
         , stderr);
Packit Service 30b792
  exit (ex);
Packit Service 30b792
}
Packit Service 30b792
Packit Service 30b792
int
Packit Service 30b792
main (int argc, char **argv)
Packit Service 30b792
{
Packit Service 30b792
    int last_argc = -1;
Packit Service 30b792
    Protocol protocol = OpenPGP;
Packit Service 30b792
    unsigned int mode = 0;
Packit Service 30b792
    bool only_secret = false;
Packit Service 30b792
Packit Service 30b792
    if (argc) {
Packit Service 30b792
        argc--; argv++;
Packit Service 30b792
    }
Packit Service 30b792
Packit Service 30b792
    while (argc && last_argc != argc ) {
Packit Service 30b792
        last_argc = argc;
Packit Service 30b792
        if (!strcmp (*argv, "--")) {
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
            break;
Packit Service 30b792
        } else if (!strcmp (*argv, "--help")) {
Packit Service 30b792
            show_usage (0);
Packit Service 30b792
        } else if (!strcmp (*argv, "--openpgp")) {
Packit Service 30b792
            protocol = OpenPGP;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--cms")) {
Packit Service 30b792
            protocol = CMS;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--secret")) {
Packit Service 30b792
            only_secret = true;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--local")) {
Packit Service 30b792
            mode |= KeyListMode::Local;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--extern")) {
Packit Service 30b792
            mode |= KeyListMode::Extern;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        }else if (!strcmp (*argv, "--tofu")) {
Packit Service 30b792
            mode |= KeyListMode::WithTofu;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--sigs")) {
Packit Service 30b792
            mode |= KeyListMode::Signatures;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--sig-notations")) {
Packit Service 30b792
            mode |= KeyListMode::SignatureNotations;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--ephemeral")) {
Packit Service 30b792
            mode |= KeyListMode::Ephemeral;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--validate")) {
Packit Service 30b792
            mode |= KeyListMode::Validate;
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
        } else if (!strcmp (*argv, "--locate")) {
Packit Service 30b792
            argc--; argv++;
Packit Service 30b792
            mode |= KeyListMode::Locate;
Packit Service 30b792
        } else if (!strncmp (*argv, "--", 2)) {
Packit Service 30b792
            show_usage (1);
Packit Service 30b792
        }
Packit Service 30b792
    }
Packit Service 30b792
Packit Service 30b792
    if (argc > 1) {
Packit Service 30b792
        show_usage (1);
Packit Service 30b792
    }
Packit Service 30b792
Packit Service 30b792
    GpgME::initializeLibrary();
Packit Service 30b792
    auto ctx = std::unique_ptr<Context> (Context::createForProtocol(protocol));
Packit Service 30b792
    if (!ctx) {
Packit Service 30b792
        std::cerr << "Failed to get Context";
Packit Service 30b792
        return -1;
Packit Service 30b792
    }
Packit Service 30b792
    ctx->setKeyListMode (mode);
Packit Service 30b792
    Error err = ctx->startKeyListing (*argv, only_secret);
Packit Service 30b792
    if (err) {
Packit Service 30b792
        std::cout << "Error: " << err.asString() << "\n";
Packit Service 30b792
        return -1;
Packit Service 30b792
    }
Packit Service 30b792
    GpgME::Key key;
Packit Service 30b792
    std::stringstream ss;
Packit Service 30b792
    do {
Packit Service 30b792
        key = ctx->nextKey(err);
Packit Service 30b792
        ss << key << "\n\n";
Packit Service 30b792
    } while (!err && !key.isNull());
Packit Service 30b792
Packit Service 30b792
    std::cout << ss.str();
Packit Service 30b792
Packit Service 30b792
    return 0;
Packit Service 30b792
}