Remoto - VFS: VFS_google_oauth2.h Source File
Remoto - VFS
VFS_google_oauth2.h
Go to the documentation of this file.
1 #ifndef GOOGLE_OAUTH2_H
2 #define GOOGLE_OAUTH2_H
3 
4 #include <QUuid>
5 #include <QNetworkReply>
6 #include <QNetworkAccessManager>
7 
8 #include "VFS_auth/VFS_auth.h"
9 
10 class google_oauth2_auth;
11 
12 class google_oauth2 : public VFS_auth
13 {
14  Q_OBJECT
15 
16  friend class google_oauth2_auth;
17 
18  public:
19  Q_INVOKABLE explicit google_oauth2(QString discovery_uri, QString client_id, QString client_secret, QString redirect_uri, QString tokeninfo_uri, QString hosted_domain, bool debug=false);
20  virtual ~google_oauth2();
21 
22  virtual QString reportDetails();
23 
24  protected:
25  virtual void ls(VFS_request *r);
26  virtual void read(VFS_request *r);
27 
28  private:
29  bool _debug;
30  QString _client_id;
31  QString _client_secret;
32  QString _redirect_uri;
33  QString _tokeninfo_uri;
34  QString _hosted_domain;
35 
37  QNetworkReply *_discovery_reply;
38  QJsonObject _discovery_data;
39 
40  QNetworkAccessManager _manager;
41  QMap< google_oauth2_auth *, VFS_request *> _auths;
42  bool _valid;
43 
44  QMap<QString, QJsonObject> _userCache; //we cache users we know about
45 
46  signals:
47 
48  public slots:
49  void discoveryFinished();
50  virtual void discoverySslErrors(const QList<QSslError> &errors);
51 
52  protected slots:
53  void initialize();
54  void authResult(google_oauth2_auth *auth);
55 };
56 
57 class google_oauth2_auth : public QObject
58 {
59  Q_OBJECT
60 
61  friend class google_oauth2;
62 
63  public:
64  google_oauth2_auth(QString authcode, google_oauth2 *auth);
66 
67  private:
69 
70  QString _authcode;
71  QString _id_token;
72  QString _access_token;
73  //QUuid _csrf;
74 
76  QString _reason;
77 
78  QString _username;
79  QString _realname;
80  QString _id;
81  QJsonArray _groups;
82 
83  QNetworkReply *_reply;
84 
85  void authenticate();
86 
87  public slots:
88  void authResponse();
89  void tokenResponse();
90  virtual void sslErrors(const QList<QSslError> &errors);
91  void redirected(const QUrl &url);
92 
93  signals:
95 };
96 
97 #endif // PAM_H
The base class for authenticating users.
Definition: VFS_auth.h:7
The base class for all requests between nodes.
Definition: VFS_node.h:54
QNetworkReply * _reply
void redirected(const QUrl &url)
virtual void sslErrors(const QList< QSslError > &errors)
void authResult(google_oauth2_auth *auth)
google_oauth2_auth(QString authcode, google_oauth2 *auth)
google_oauth2 * _auth
QString _client_secret
QJsonObject _discovery_data
QMap< QString, QJsonObject > _userCache
QString _tokeninfo_uri
virtual void read(VFS_request *r)
Return the data contents of this node, or if it's a container call ls()
virtual void discoverySslErrors(const QList< QSslError > &errors)
QMap< google_oauth2_auth *, VFS_request * > _auths
QString _hosted_domain
Q_INVOKABLE google_oauth2(QString discovery_uri, QString client_id, QString client_secret, QString redirect_uri, QString tokeninfo_uri, QString hosted_domain, bool debug=false)
void authResult(google_oauth2_auth *auth)
virtual void ls(VFS_request *r)
List the contents of this node.
virtual QString reportDetails()
Additional details for a generated report.
QNetworkAccessManager _manager
QNetworkReply * _discovery_reply
virtual ~google_oauth2()