57 lines
1.7 KiB
C++
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
|