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