1 /* ownCloud Android client application 
   2  *   Copyright (C) 2011  Bartek Przybylski 
   4  *   This program is free software: you can redistribute it and/or modify 
   5  *   it under the terms of the GNU General Public License as published by 
   6  *   the Free Software Foundation, either version 3 of the License, or 
   7  *   (at your option) any later version. 
   9  *   This program is distributed in the hope that it will be useful, 
  10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of 
  11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  12  *   GNU General Public License for more details. 
  14  *   You should have received a copy of the GNU General Public License 
  15  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. 
  18 package eu
.alefzero
.webdav
; 
  20 import java
.io
.BufferedInputStream
; 
  22 import java
.io
.FileOutputStream
; 
  23 import java
.io
.IOException
; 
  24 import java
.net
.URLDecoder
; 
  25 import java
.net
.URLEncoder
; 
  27 import org
.apache
.commons
.httpclient
.Credentials
; 
  28 import org
.apache
.commons
.httpclient
.HttpClient
; 
  29 import org
.apache
.commons
.httpclient
.UsernamePasswordCredentials
; 
  30 import org
.apache
.commons
.httpclient
.auth
.AuthScope
; 
  31 import org
.apache
.commons
.httpclient
.methods
.GetMethod
; 
  32 import org
.apache
.commons
.httpclient
.methods
.HeadMethod
; 
  33 import org
.apache
.commons
.httpclient
.methods
.PutMethod
; 
  34 import org
.apache
.commons
.httpclient
.methods
.RequestEntity
; 
  35 import org
.apache
.commons
.httpclient
.params
.HttpMethodParams
; 
  36 import org
.apache
.commons
.httpclient
.protocol
.Protocol
; 
  37 import org
.apache
.http
.HttpStatus
; 
  38 import org
.apache
.jackrabbit
.webdav
.client
.methods
.MkColMethod
; 
  40 import eu
.alefzero
.owncloud
.authenticator
.EasySSLSocketFactory
; 
  42 import android
.net
.Uri
; 
  43 import android
.util
.Log
; 
  45 public class WebdavClient 
extends HttpClient 
{ 
  47     private Credentials mCredentials
; 
  48     final private static String TAG 
= "WebdavClient"; 
  49     private static final String USER_AGENT 
= "Android-ownCloud"; 
  51     public WebdavClient(Uri uri
) { 
  53         getParams().setParameter(HttpMethodParams
.USER_AGENT
, USER_AGENT
); 
  56     public void setCredentials(String username
, String password
) { 
  57         getParams().setAuthenticationPreemptive(true
); 
  58         getState().setCredentials(AuthScope
.ANY
, 
  59                 getCredentials(username
, password
)); 
  62     private Credentials 
getCredentials(String username
, String password
) { 
  63         if (mCredentials 
== null
) 
  64             mCredentials 
= new UsernamePasswordCredentials(username
, password
); 
  68     public void allowUnsignedCertificates() { 
  70         Protocol
.registerProtocol("https", new Protocol("https", 
  71                 new EasySSLSocketFactory(), 443)); 
  74     public boolean downloadFile(String filepath
, File targetPath
) { 
  75         // HttpGet get = new HttpGet(mUri.toString() + filepath.replace(" ", 
  78         Log
.e("ASD", mUri
.toString() + URLDecoder
.decode(filepath
) + ""); 
  79         GetMethod get 
= new GetMethod(mUri
.toString() 
  80                 + URLEncoder
.encode(filepath
)); 
  82         // get.setHeader("Host", mUri.getHost()); 
  83         // get.setHeader("User-Agent", "Android-ownCloud"); 
  86             Log
.e("ASD", get
.toString()); 
  87             int status 
= executeMethod(get
); 
  88             if (status 
!= HttpStatus
.SC_OK
) { 
  91             BufferedInputStream bis 
= new BufferedInputStream( 
  92                     get
.getResponseBodyAsStream()); 
  93             FileOutputStream fos 
= new FileOutputStream(targetPath
); 
  95             byte[] bytes 
= new byte[512]; 
  97             while ((readResult 
= bis
.read(bytes
)) != -1) 
  98                 fos
.write(bytes
, 0, readResult
); 
 100         } catch (IOException e
) { 
 107     public boolean putFile(String localFile
, String remoteTarget
, 
 108             String contentType
) { 
 109         boolean result 
= true
; 
 112             Log
.e("ASD", contentType 
+ ""); 
 113             File f 
= new File(localFile
); 
 114             RequestEntity entity 
= new FileRequestEntity(f
, contentType
); 
 115             Log
.e("ASD", f
.exists() + " " + entity
.getContentLength()); 
 116             PutMethod put 
= new PutMethod(mUri
.toString() + remoteTarget
); 
 117             put
.setRequestEntity(entity
); 
 118             Log
.d(TAG
, "" + put
.getURI().toString()); 
 119             int status 
= executeMethod(put
); 
 120             Log
.d(TAG
, "PUT method return with status " + status
); 
 122             Log
.i(TAG
, "Uploading, done"); 
 123         } catch (final Exception e
) { 
 124             Log
.i(TAG
, "" + e
.getMessage()); 
 131     public int tryToLogin() { 
 133         HeadMethod head 
= new HeadMethod(mUri
.toString()); 
 135             r 
= executeMethod(head
); 
 136         } catch (Exception e
) { 
 137             Log
.e(TAG
, "Error: " + e
.getMessage()); 
 142     public boolean createDirectory(String path
) { 
 144             MkColMethod mkcol 
= new MkColMethod(mUri
.toString() + "/" + path
 
 146             int status 
= executeMethod(mkcol
); 
 147             Log
.d(TAG
, "Status returned " + status
); 
 148             Log
.d(TAG
, "uri: " + mkcol
.getURI().toString()); 
 149             Log
.i(TAG
, "Creating dir completed"); 
 150         } catch (final Exception e
) {