summaryrefslogtreecommitdiff
path: root/ucb
diff options
context:
space:
mode:
authorChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2020-12-08 11:53:12 +0100
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2020-12-14 17:27:44 +0100
commitf0a35c0941e137e8cf099e11999e6201c1858f3a (patch)
tree37891337d5c841269a8cc132b7b5b49aa1b84955 /ucb
parent7d90b50285f294a3c9cce0b22399fefe3ab46ee5 (diff)
tdf#115643 make onedrive work again by switching to graph API
the live SDK method had been deprecated quite a while ago and has been turned off a while back. Notes: While you can access and save existing files using the remote files dialog, creating new files or using "save as" requires using the LibreOffice open/save dialogs. Authentication is clunky: username and password you're asked when creating a new connection is not used at all for connecting, so only fill out a username to label your onedrive entry. Actual authentication is done in browser - copy'n'paste the URL from the dialog into the browser, login and approve access for LibreOffice (approving access only necessary once), then you get redirected to localhost, ignore that there is nothing to display. The important part is the code from the URL-bar. Copy and paste that into the LibreOffice dialog and LO can request an authentication token for API access. Testing this feature requires compiling with corresponding api-keys specified in configure/having an app registered with microsoft. Change-Id: I2db11ac09f9fdc354a10d6c749b2bec84b5d34a9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107646 Tested-by: Jenkins Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> (cherry picked from commit 9cfcf83f53e0ae897b30705f790c6ebe0b86932e) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107631 Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'ucb')
-rw-r--r--ucb/source/ucp/cmis/auth_provider.cxx2
-rw-r--r--ucb/source/ucp/cmis/cmis_content.cxx13
2 files changed, 13 insertions, 2 deletions
diff --git a/ucb/source/ucp/cmis/auth_provider.cxx b/ucb/source/ucp/cmis/auth_provider.cxx
index f9eb99db2553..dd7b4f9f1e3c 100644
--- a/ucb/source/ucp/cmis/auth_provider.cxx
+++ b/ucb/source/ucp/cmis/auth_provider.cxx
@@ -96,7 +96,7 @@ namespace cmis
"Open the following link in your browser and "
"paste the code from the URL you have been redirected to in the "
"box below. For example:\n"
- "https://login.live.com/oauth20_desktop.srf?code=YOUR_CODE&lc=1033",
+ "http://localhost/LibreOffice?code=YOUR_CODE",
url_oustr );
xIH->handle( xRequest.get() );
diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx
index cf12bdd8409f..355575d185d1 100644
--- a/ucb/source/ucp/cmis/cmis_content.cxx
+++ b/ucb/source/ucp/cmis/cmis_content.cxx
@@ -346,11 +346,20 @@ namespace cmis
string rUsername = OUSTR_TO_STDSTR( m_aURL.getUsername( ) );
string rPassword = OUSTR_TO_STDSTR( m_aURL.getPassword( ) );
+ bool bSkipInitialPWAuth = false;
+ if ( m_aURL.getBindingUrl( ) == ONEDRIVE_BASE_URL ) {
+ // skip the initial username and pw-auth prompt, the only supported method is the
+ // auth-code-fallback one (login with your browser, copy code into the dialog)
+ // TODO: if LO were to listen on localhost for the request, it would be much nicer
+ // user experience
+ bSkipInitialPWAuth = true;
+ }
+
bool bIsDone = false;
while ( !bIsDone )
{
- if (aAuthProvider.authenticationQuery(rUsername, rPassword))
+ if (bSkipInitialPWAuth || aAuthProvider.authenticationQuery(rUsername, rPassword))
{
// Initiate a CMIS session and register it as we found nothing
libcmis::OAuth2DataPtr oauth2Data;
@@ -369,6 +378,8 @@ namespace cmis
ALFRESCO_CLOUD_CLIENT_ID, ALFRESCO_CLOUD_CLIENT_SECRET ) );
if ( m_aURL.getBindingUrl( ) == ONEDRIVE_BASE_URL )
{
+ // reset the skip, so user gets a chance to cancel
+ bSkipInitialPWAuth = false;
libcmis::SessionFactory::setOAuth2AuthCodeProvider(AuthProvider::onedriveAuthCodeFallback);
oauth2Data.reset( new libcmis::OAuth2Data(
ONEDRIVE_AUTH_URL, ONEDRIVE_TOKEN_URL,