File indexing completed on 2024-05-05 05:53:15
0001 /* 0002 * SPDX-License-Identifier: GPL-3.0-or-later 0003 * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com> 0004 */ 0005 #ifndef OTPAUTH_URI_H 0006 #define OTPAUTH_URI_H 0007 0008 #include <QByteArray> 0009 #include <QObject> 0010 #include <QString> 0011 0012 #include <optional> 0013 0014 namespace uri 0015 { 0016 /* 0017 * A forgiving percent encoding "decoder" which does not get confused by invalid/malformed input 0018 * (In contrast to QByteArray::fromPercentEncoding()). 0019 */ 0020 std::optional<QByteArray> fromPercentEncoding(const QByteArray &encoded); 0021 std::optional<QString> decodePercentEncoding(const QByteArray &utf8Data); 0022 0023 class QrParts 0024 { 0025 public: 0026 enum Type { 0027 Totp, Hotp 0028 }; 0029 static std::optional<QrParts> parse(const QByteArray &qrCode); 0030 static std::optional<QrParts> parse(const QString &qrCode); 0031 public: 0032 Type type(void) const; 0033 QString algorithm(void) const; 0034 QString timeStep(void) const; 0035 QString tokenLength(void) const; 0036 QString counter(void) const; 0037 QString secret(void) const; 0038 QString name(void) const; 0039 QString issuer(void) const; 0040 private: 0041 explicit QrParts(Type type, const QString &name, const QString &issuer, const QString &secret, 0042 const QString &tokenLength, const QString &counter, const QString &timeStep, 0043 const QString &algorithm); 0044 private: 0045 const Type m_type; 0046 const QString m_name; 0047 const QString m_issuer; 0048 const QString m_secret; 0049 const QString m_tokenLength; 0050 const QString m_counter; 0051 const QString m_timeStep; 0052 const QString m_algorithm; 0053 }; 0054 } 0055 0056 #endif