now with patches. u_U

On Tue, Dec 23, 2014 at 9:02 PM, Tomaz Canabrava <[email protected]> wrote:

> People,
>
> Facebook integration is still *extremely* experimental.
> that means that there's only one person that can login with subsurface
> yet: me.
>
> This is a pre-alpha code, nothing breaks, so it's safe to merge.
> It doesn't do anything yet besides logging in, saving user info and
> logging out, but since dirk really want some patches, there you go. :)
>
> next: publish dives.
>
> Tomaz
>
From f52169432556b6eee86ad254764051e85bf39e5c Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 23 Dec 2014 20:56:51 -0200
Subject: [PATCH 6/6] Get and save the UserID for use with Facebook.

Next: Publish something with the Graph API.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/preferences.cpp | 20 ++++++++++++++++++++
 qt-ui/preferences.h   |  2 +-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 11264b2..76b35c1 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -8,7 +8,10 @@
 #include <QShortcut>
 #include <QNetworkProxy>
 #include <QNetworkCookieJar>
+#include <QNetworkReply>
 #include <QWebView>
+#include <QJsonDocument>
+
 
 static QString facebookConnectUrl =
 		"https://www.facebook.com/dialog/oauth?";
@@ -76,11 +79,28 @@ void PreferencesDialog::facebookLoginResponse(const QUrl &url)
 		settings.beginGroup("WebApps");
 		settings.beginGroup("Facebook");
 		settings.setValue("ConnectToken", securityToken);
+
+		QNetworkAccessManager *getUserID = new QNetworkAccessManager();
+		connect(getUserID, &QNetworkAccessManager::finished, this, &PreferencesDialog::facebookGetUserId);
+		getUserID->get(QNetworkRequest(QUrl("https://graph.facebook.com/me?fields=id&access_token="; + securityToken)));
+
 		ui.facebookWebView->setHtml("We need a better 'you re connected' page. but, YEY. ");
 		ui.btnDisconnectFacebook->show();
 	}
 }
 
+void PreferencesDialog::facebookGetUserId(QNetworkReply *reply)
+{
+	QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
+	QJsonObject obj = jsonDoc.object();
+	if (obj.keys().contains("id")){
+		QSettings s;
+		s.beginGroup("WebApps");
+		s.beginGroup("Facebook");
+		s.setValue("UserId", obj.value("id").toVariant());
+	}
+}
+
 void PreferencesDialog::facebookDisconnect()
 {
 		QSettings settings;
diff --git a/qt-ui/preferences.h b/qt-ui/preferences.h
index 1db95a9..d455f53 100644
--- a/qt-ui/preferences.h
+++ b/qt-ui/preferences.h
@@ -32,7 +32,7 @@ slots:
 	void on_btnUseDefaultFile_toggled(bool toggle);
 	void facebookLoginResponse(const QUrl& url);
 	void facebookDisconnect();
-
+	void facebookGetUserId(QNetworkReply *reply);
 private:
 	explicit PreferencesDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
 	void setUiFromPrefs();
-- 
2.2.1

From 55cafaf6946641653dccf323f78fa099335a2557 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 23 Dec 2014 19:37:50 -0200
Subject: [PATCH 5/6] Ask for facebook permission to post to a user newsfeed.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/preferences.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 70fbe12..11264b2 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -14,7 +14,8 @@ static QString facebookConnectUrl =
 		"https://www.facebook.com/dialog/oauth?";
 		"client_id=427722490709000"
 		"&redirect_uri=http://www.facebook.com/connect/login_success.html";
-		"&response_type=token";
+		"&response_type=token"
+		"&scope=publish_actions";
 
 PreferencesDialog *PreferencesDialog::instance()
 {
-- 
2.2.1

From bae5a01a0c656f8bfef142cbc9abbedf4128944b Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 23 Dec 2014 19:29:00 -0200
Subject: [PATCH 4/6] Disconnect from facebook manually.

Added a button to disconnect from facebook.
This clears the webview cookies so it correctly
disconnects us from facebook, and clears the
access token.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/preferences.cpp | 37 ++++++++++++++++++++++++++++++++-----
 qt-ui/preferences.h   |  2 ++
 qt-ui/preferences.ui  | 11 +++++++++--
 3 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index b57040c..70fbe12 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -7,8 +7,15 @@
 #include <QSortFilterProxyModel>
 #include <QShortcut>
 #include <QNetworkProxy>
+#include <QNetworkCookieJar>
 #include <QWebView>
 
+static QString facebookConnectUrl =
+		"https://www.facebook.com/dialog/oauth?";
+		"client_id=427722490709000"
+		"&redirect_uri=http://www.facebook.com/connect/login_success.html";
+		"&response_type=token";
+
 PreferencesDialog *PreferencesDialog::instance()
 {
 	static PreferencesDialog *dialog = new PreferencesDialog(MainWindow::instance());
@@ -28,21 +35,20 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDial
 	ui.proxyType->setCurrentIndex(-1);
 
 	// Facebook stuff:
-	QUrl urlLogin("https://www.facebook.com/dialog/oauth?";
-		"client_id=427722490709000"
-		"&redirect_uri=http://www.facebook.com/connect/login_success.html";
-		"&response_type=token");
 
 	QSettings settings;
 	settings.beginGroup("WebApps");
 	settings.beginGroup("Facebook");
 	if(settings.allKeys().contains("ConnectToken")){
 		ui.facebookWebView->setHtml("You are connected on Facebook, yey.");
+		ui.btnDisconnectFacebook->show();
 	} else {
-		ui.facebookWebView->setUrl(urlLogin);
+		ui.facebookWebView->setUrl(QUrl(facebookConnectUrl));
+		ui.btnDisconnectFacebook->hide();
 	}
 
 	connect(ui.facebookWebView, &QWebView::urlChanged, this, &PreferencesDialog::facebookLoginResponse);
+	connect(ui.btnDisconnectFacebook, &QPushButton::clicked, this, &PreferencesDialog::facebookDisconnect);
 
 	connect(ui.proxyType, SIGNAL(currentIndexChanged(int)), this, SLOT(proxyType_changed(int)));
 	connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
@@ -70,9 +76,22 @@ void PreferencesDialog::facebookLoginResponse(const QUrl &url)
 		settings.beginGroup("Facebook");
 		settings.setValue("ConnectToken", securityToken);
 		ui.facebookWebView->setHtml("We need a better 'you re connected' page. but, YEY. ");
+		ui.btnDisconnectFacebook->show();
 	}
 }
 
+void PreferencesDialog::facebookDisconnect()
+{
+		QSettings settings;
+		settings.beginGroup("WebApps");
+		settings.beginGroup("Facebook");
+		settings.remove("ConnectToken");
+		ui.facebookWebView->page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar());
+		ui.facebookWebView->setUrl(QUrl(facebookConnectUrl));
+		ui.btnDisconnectFacebook->hide();
+}
+
+
 #define DANGER_GF (gf > 100) ? "* { color: red; }" : ""
 void PreferencesDialog::gflowChanged(int gf)
 {
@@ -168,6 +187,14 @@ void PreferencesDialog::setUiFromPrefs()
 	ui.proxyPassword->setText(prefs.proxy_pass);
 	ui.proxyType->setCurrentIndex(ui.proxyType->findData(prefs.proxy_type));
 	ui.btnUseDefaultFile->setChecked(prefs.use_default_file);
+
+	s.beginGroup("WebApps");
+	s.beginGroup("Facebook");
+	if(s.allKeys().contains("ConnectToken")){
+		ui.btnDisconnectFacebook->show();
+	} else {
+		ui.btnDisconnectFacebook->hide();
+	}
 }
 
 void PreferencesDialog::restorePrefs()
diff --git a/qt-ui/preferences.h b/qt-ui/preferences.h
index d7755ba..1db95a9 100644
--- a/qt-ui/preferences.h
+++ b/qt-ui/preferences.h
@@ -31,6 +31,8 @@ slots:
 	void proxyType_changed(int idx);
 	void on_btnUseDefaultFile_toggled(bool toggle);
 	void facebookLoginResponse(const QUrl& url);
+	void facebookDisconnect();
+
 private:
 	explicit PreferencesDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
 	void setUiFromPrefs();
diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui
index 9611b49..b9f8bdb 100644
--- a/qt-ui/preferences.ui
+++ b/qt-ui/preferences.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>562</width>
+    <width>924</width>
     <height>718</height>
    </rect>
   </property>
@@ -972,7 +972,7 @@
         </layout>
        </widget>
        <widget class="QWidget" name="page_6">
-        <layout class="QHBoxLayout" name="horizontalLayout_10">
+        <layout class="QVBoxLayout" name="verticalLayout_8">
          <item>
           <widget class="QWebView" name="facebookWebView">
            <property name="url">
@@ -982,6 +982,13 @@
            </property>
           </widget>
          </item>
+         <item>
+          <widget class="QPushButton" name="btnDisconnectFacebook">
+           <property name="text">
+            <string>Disconnect from facebook</string>
+           </property>
+          </widget>
+         </item>
         </layout>
        </widget>
       </widget>
-- 
2.2.1

From ba5ee75e99b472b6f3a5c88d7973784ca90af93e Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 23 Dec 2014 19:10:57 -0200
Subject: [PATCH 3/6] State that you are connected on Facebook.

TODO: Disconnect from facebook.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/preferences.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 2378a1f..b57040c 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -33,7 +33,14 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDial
 		"&redirect_uri=http://www.facebook.com/connect/login_success.html";
 		"&response_type=token");
 
-	ui.facebookWebView->setUrl(urlLogin);
+	QSettings settings;
+	settings.beginGroup("WebApps");
+	settings.beginGroup("Facebook");
+	if(settings.allKeys().contains("ConnectToken")){
+		ui.facebookWebView->setHtml("You are connected on Facebook, yey.");
+	} else {
+		ui.facebookWebView->setUrl(urlLogin);
+	}
 
 	connect(ui.facebookWebView, &QWebView::urlChanged, this, &PreferencesDialog::facebookLoginResponse);
 
-- 
2.2.1

From 9ddc07d13a2f4f80b17b1b2683585c9fbd140849 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 23 Dec 2014 18:39:47 -0200
Subject: [PATCH 2/6] Connect to facebook, save the tokens for future use.

We can now correctly connect to facebook endpoint. Nothing
really fancy at the moment. =/

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/preferences.cpp | 21 ++++++++++++++++++++-
 qt-ui/preferences.h   |  2 +-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 7f288ab..2378a1f 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -30,10 +30,13 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDial
 	// Facebook stuff:
 	QUrl urlLogin("https://www.facebook.com/dialog/oauth?";
 		"client_id=427722490709000"
-		"&redirect_uri=http://www.facebook.com/connect/login_success.html";);
+		"&redirect_uri=http://www.facebook.com/connect/login_success.html";
+		"&response_type=token");
 
 	ui.facebookWebView->setUrl(urlLogin);
 
+	connect(ui.facebookWebView, &QWebView::urlChanged, this, &PreferencesDialog::facebookLoginResponse);
+
 	connect(ui.proxyType, SIGNAL(currentIndexChanged(int)), this, SLOT(proxyType_changed(int)));
 	connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
 	connect(ui.gflow, SIGNAL(valueChanged(int)), this, SLOT(gflowChanged(int)));
@@ -47,6 +50,22 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDial
 	rememberPrefs();
 }
 
+void PreferencesDialog::facebookLoginResponse(const QUrl &url)
+{
+	QString result = url.toString();
+	if (result.contains("access_token")){ // Login Successfull.
+		int from = result.indexOf("access_token=") + strlen("access_token=");
+		int to = result.indexOf("&expires_in");
+		QString securityToken = result.mid(from, to-from);
+
+		QSettings settings;
+		settings.beginGroup("WebApps");
+		settings.beginGroup("Facebook");
+		settings.setValue("ConnectToken", securityToken);
+		ui.facebookWebView->setHtml("We need a better 'you re connected' page. but, YEY. ");
+	}
+}
+
 #define DANGER_GF (gf > 100) ? "* { color: red; }" : ""
 void PreferencesDialog::gflowChanged(int gf)
 {
diff --git a/qt-ui/preferences.h b/qt-ui/preferences.h
index 2a909db..d7755ba 100644
--- a/qt-ui/preferences.h
+++ b/qt-ui/preferences.h
@@ -30,7 +30,7 @@ slots:
 	void gfhighChanged(int gf);
 	void proxyType_changed(int idx);
 	void on_btnUseDefaultFile_toggled(bool toggle);
-
+	void facebookLoginResponse(const QUrl& url);
 private:
 	explicit PreferencesDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
 	void setUiFromPrefs();
-- 
2.2.1

From 830bb4fdf0e93c3d3a16f1043e9e0b64a71801c6 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 23 Dec 2014 17:51:45 -0200
Subject: [PATCH 1/6] Allow subsurface to login with facebook.

This piece of code allows subsurface to login with facebook
using the 'Subsurface' app created within facebook for secure
reasons. I'm the admin of it currently - but I'll pass it to
dirk and linus too.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/preferences.cpp |  9 +++++++++
 qt-ui/preferences.ui  | 31 +++++++++++++++++++++++++++++--
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 5f7825c..7f288ab 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -7,6 +7,7 @@
 #include <QSortFilterProxyModel>
 #include <QShortcut>
 #include <QNetworkProxy>
+#include <QWebView>
 
 PreferencesDialog *PreferencesDialog::instance()
 {
@@ -25,6 +26,14 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDial
 	ui.proxyType->addItem(tr("HTTP proxy"), QNetworkProxy::HttpProxy);
 	ui.proxyType->addItem(tr("SOCKS proxy"), QNetworkProxy::Socks5Proxy);
 	ui.proxyType->setCurrentIndex(-1);
+
+	// Facebook stuff:
+	QUrl urlLogin("https://www.facebook.com/dialog/oauth?";
+		"client_id=427722490709000"
+		"&redirect_uri=http://www.facebook.com/connect/login_success.html";);
+
+	ui.facebookWebView->setUrl(urlLogin);
+
 	connect(ui.proxyType, SIGNAL(currentIndexChanged(int)), this, SLOT(proxyType_changed(int)));
 	connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
 	connect(ui.gflow, SIGNAL(valueChanged(int)), this, SLOT(gflowChanged(int)));
diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui
index c021ae8..9611b49 100644
--- a/qt-ui/preferences.ui
+++ b/qt-ui/preferences.ui
@@ -6,6 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
+    <width>562</width>
+    <height>718</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -128,6 +130,11 @@
          </iconset>
         </property>
        </item>
+       <item>
+        <property name="text">
+         <string>Facebook</string>
+        </property>
+       </item>
       </widget>
      </item>
      <item>
@@ -139,7 +146,7 @@
         </sizepolicy>
        </property>
        <property name="currentIndex">
-        <number>0</number>
+        <number>5</number>
        </property>
        <widget class="QWidget" name="page_2">
         <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -964,6 +971,19 @@
          </item>
         </layout>
        </widget>
+       <widget class="QWidget" name="page_6">
+        <layout class="QHBoxLayout" name="horizontalLayout_10">
+         <item>
+          <widget class="QWebView" name="facebookWebView">
+           <property name="url">
+            <url>
+             <string>about:blank</string>
+            </url>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
       </widget>
      </item>
     </layout>
@@ -980,6 +1000,13 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKit/QWebView</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections>
   <connection>
@@ -1320,12 +1347,12 @@
   </connection>
  </connections>
  <buttongroups>
+  <buttongroup name="verticalSpeed"/>
   <buttongroup name="buttonGroup_2"/>
   <buttongroup name="buttonGroup_3"/>
   <buttongroup name="buttonGroup_4"/>
   <buttongroup name="buttonGroup_5"/>
   <buttongroup name="buttonGroup_6"/>
-  <buttongroup name="verticalSpeed"/>
   <buttongroup name="buttonGroup"/>
  </buttongroups>
 </ui>
-- 
2.2.1

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to