keysmith/src/uri/uri.h

57 lines
1.7 KiB
C++

/*
* SPDX-License-Identifier: GPL-3.0-or-later
* SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
*/
#ifndef OTPAUTH_URI_H
#define OTPAUTH_URI_H
#include <QByteArray>
#include <QObject>
#include <QString>
#include <optional>
namespace uri
{
/*
* A forgiving percent encoding "decoder" which does not get confused by invalid/malformed input
* (In contrast to QByteArray::fromPercentEncoding()).
*/
std::optional<QByteArray> fromPercentEncoding(const QByteArray &encoded);
std::optional<QString> decodePercentEncoding(const QByteArray &utf8Data);
class QrParts
{
public:
enum Type {
Totp, Hotp
};
static std::optional<QrParts> parse(const QByteArray &qrCode);
static std::optional<QrParts> parse(const QString &qrCode);
public:
Type type(void) const;
QString algorithm(void) const;
QString timeStep(void) const;
QString tokenLength(void) const;
QString counter(void) const;
QString secret(void) const;
QString name(void) const;
QString issuer(void) const;
private:
explicit QrParts(Type type, const QString &name, const QString &issuer, const QString &secret,
const QString &tokenLength, const QString &counter, const QString &timeStep,
const QString &algorithm);
private:
const Type m_type;
const QString m_name;
const QString m_issuer;
const QString m_secret;
const QString m_tokenLength;
const QString m_counter;
const QString m_timeStep;
const QString m_algorithm;
};
}
#endif