0654675f32
(Jim note: Adds abstraction to the OAuth class to allow the ability to perform OAuth via external browser, and adds an AuthListener to act as the local auth server.)
64 lines
1.2 KiB
C++
64 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <QObject>
|
|
#include <functional>
|
|
#include <memory>
|
|
|
|
class Auth : public QObject {
|
|
Q_OBJECT
|
|
|
|
protected:
|
|
virtual void SaveInternal() = 0;
|
|
virtual bool LoadInternal() = 0;
|
|
|
|
bool firstLoad = true;
|
|
|
|
struct ErrorInfo {
|
|
std::string message;
|
|
std::string error;
|
|
|
|
ErrorInfo(std::string message_, std::string error_)
|
|
: message(message_), error(error_)
|
|
{
|
|
}
|
|
};
|
|
|
|
public:
|
|
enum class Type {
|
|
None,
|
|
OAuth_StreamKey,
|
|
OAuth_LinkedAccount,
|
|
};
|
|
|
|
struct Def {
|
|
std::string service;
|
|
Type type;
|
|
bool externalOAuth;
|
|
};
|
|
|
|
typedef std::function<std::shared_ptr<Auth>()> create_cb;
|
|
|
|
inline Auth(const Def &d) : def(d) {}
|
|
virtual ~Auth() {}
|
|
|
|
inline Type type() const { return def.type; }
|
|
inline const char *service() const { return def.service.c_str(); }
|
|
inline bool external() const { return def.externalOAuth; }
|
|
|
|
virtual void LoadUI() {}
|
|
|
|
virtual void OnStreamConfig() {}
|
|
|
|
static std::shared_ptr<Auth> Create(const std::string &service);
|
|
static Type AuthType(const std::string &service);
|
|
static bool External(const std::string &service);
|
|
static void Load();
|
|
static void Save();
|
|
|
|
protected:
|
|
static void RegisterAuth(const Def &d, create_cb create);
|
|
|
|
private:
|
|
Def def;
|
|
};
|