diff options
author | Cao Cuong Ngo <cao.cuong.ngo@gmail.com> | 2013-07-14 23:59:51 +0200 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat.ooo@free.fr> | 2013-09-02 13:51:51 +0200 |
commit | 56d34815e2e0b3e3277a6a3ee850ab7e4b764b1f (patch) | |
tree | b51db099d3c16329a47c9c182e57db19f85d1118 /ucb/source | |
parent | bd97d9597cd9e3e7b077df9890d515328e3ee855 (diff) |
CMIS: connect LO to Google Drive
Change-Id: I2c1b1d3e2bfd50ceb8647e62d37512ee3a0b9dae
Diffstat (limited to 'ucb/source')
-rw-r--r-- | ucb/source/ucp/cmis/cmis_content.cxx | 12 | ||||
-rw-r--r-- | ucb/source/ucp/cmis/cmis_oauth2_providers.hxx | 32 | ||||
-rw-r--r-- | ucb/source/ucp/cmis/cmis_url.cxx | 26 |
3 files changed, 58 insertions, 12 deletions
diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx index 299e45929177..da0dc6a5eeea 100644 --- a/ucb/source/ucp/cmis/cmis_content.cxx +++ b/ucb/source/ucp/cmis/cmis_content.cxx @@ -46,6 +46,7 @@ #include "cmis_content.hxx" #include "cmis_provider.hxx" #include "cmis_resultset.hxx" +#include "cmis_oauth2_providers.hxx" #define OUSTR_TO_STDSTR(s) string( OUStringToOString( s, RTL_TEXTENCODING_UTF8 ).getStr() ) #define STD_TO_OUSTR( str ) OUString( str.c_str(), str.length( ), RTL_TEXTENCODING_UTF8 ) @@ -313,9 +314,16 @@ namespace cmis if ( authProvider.authenticationQuery( rUsername, rPassword ) ) { // Initiate a CMIS session and register it as we found nothing + libcmis::OAuth2DataPtr oauth2Data = NULL; + if ( m_aURL.getBindingUrl( ) == GDRIVE_BASE_URL ) + oauth2Data.reset( new libcmis::OAuth2Data( + GDRIVE_AUTH_URL, GDRIVE_TOKEN_URL, + GDRIVE_SCOPE, GDRIVE_REDIRECT_URI, + GDRIVE_CLIENT_ID, GDRIVE_CLIENT_SECRET ) ); + m_pSession = libcmis::SessionFactory::createSession( OUSTR_TO_STDSTR( m_aURL.getBindingUrl( ) ), - rUsername, rPassword, OUSTR_TO_STDSTR( m_aURL.getRepositoryId( ) ) ); + rUsername, rPassword, OUSTR_TO_STDSTR( m_aURL.getRepositoryId( ) ), oauth2Data ); if ( m_pSession == NULL ) ucbhelper::cancelCommandExecution( ucb::IOErrorCode_INVALID_DEVICE, @@ -1770,6 +1778,8 @@ namespace cmis if ( sPath[sPath.getLength( ) - 1] != '/' ) sPath += "/"; sPath += STD_TO_OUSTR( ( *it )->getName( ) ); + OUString sId = STD_TO_OUSTR( ( *it )->getId( ) ); + aUrl.setObjectId( sId ); aUrl.setObjectPath( sPath ); uno::Reference< ucb::XContentIdentifier > xId = new ucbhelper::ContentIdentifier( aUrl.asString( ) ); uno::Reference< ucb::XContent > xContent = new Content( m_xContext, m_pProvider, xId, *it ); diff --git a/ucb/source/ucp/cmis/cmis_oauth2_providers.hxx b/ucb/source/ucp/cmis/cmis_oauth2_providers.hxx new file mode 100644 index 000000000000..bd3df5b22ba9 --- /dev/null +++ b/ucb/source/ucp/cmis/cmis_oauth2_providers.hxx @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + */ + +#ifndef CMIS_OAUTH2_PROVIDER2_HXX +#define CMIS_OAUTH2_PROVIDERS_HXX + + +namespace cmis +{ + +#define GDRIVE_BASE_URL "https://www.googleapis.com/drive/v2" +#define GDRIVE_CLIENT_ID "457862564325.apps.googleusercontent.com" +#define GDRIVE_CLIENT_SECRET "GYWrDtzyZQZ0_g5YoBCC6F0I" +#define GDRIVE_AUTH_URL "https://accounts.google.com/o/oauth2/auth" +#define GDRIVE_TOKEN_URL "https://accounts.google.com/o/oauth2/token" +#define GDRIVE_REDIRECT_URI "urn:ietf:wg:oauth:2.0:oob" +#define GDRIVE_SCOPE "https://www.googleapis.com/auth/drive" + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/ucb/source/ucp/cmis/cmis_url.cxx b/ucb/source/ucp/cmis/cmis_url.cxx index 226024b06bbb..3076c26b80e1 100644 --- a/ucb/source/ucp/cmis/cmis_url.cxx +++ b/ucb/source/ucp/cmis/cmis_url.cxx @@ -12,6 +12,7 @@ #include <rtl/uri.hxx> #include "cmis_url.hxx" +#include "cmis_oauth2_providers.hxx" using namespace std; @@ -31,7 +32,11 @@ namespace cmis m_sPass = aUrl.GetPass( INetURLObject::DECODE_WITH_CHARSET ); // Store the path to the object - m_sPath = aUrl.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); + // Google Drive doesn't support getObjectByPath + if ( m_sBindingUrl == GDRIVE_BASE_URL ) + m_sPath = OUString( ); + else + m_sPath = aUrl.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); m_sId = aUrl.GetMark( INetURLObject::DECODE_WITH_CHARSET ); if ( !m_sId.isEmpty( ) ) @@ -61,12 +66,10 @@ namespace cmis void URL::setObjectPath( OUString sPath ) { m_sPath = sPath; - m_sId = OUString( ); } void URL::setObjectId( OUString sId ) { - m_sPath = OUString( ); m_sId = sId; } @@ -80,7 +83,15 @@ namespace cmis RTL_TEXTENCODING_UTF8 ); sUrl = "vnd.libreoffice.cmis://" + sEncodedBinding; - if ( !m_sPath.isEmpty( ) ) + // Prefer get object by ID + if ( !m_sId.isEmpty( ) ) + { + sUrl += "#" + rtl::Uri::encode( m_sId, + rtl_UriCharClassRelSegment, + rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_UTF8 ); + } + else if ( !m_sPath.isEmpty( ) ) { sal_Int32 nPos = -1; OUString sEncodedPath; @@ -104,13 +115,6 @@ namespace cmis while ( nPos != -1 ); sUrl += sEncodedPath; } - else if ( !m_sId.isEmpty( ) ) - { - sUrl += "#" + rtl::Uri::encode( m_sId, - rtl_UriCharClassRelSegment, - rtl_UriEncodeKeepEscapes, - RTL_TEXTENCODING_UTF8 ); - } return sUrl; } |