https for unsigned certificates in logging and uploading
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / WebdavClient.java
1 package eu.alefzero.owncloud;
2
3 import java.io.File;
4
5 import org.apache.http.HttpHost;
6 import org.apache.http.HttpVersion;
7 import org.apache.http.auth.AuthScope;
8 import org.apache.http.auth.UsernamePasswordCredentials;
9 import org.apache.http.client.methods.HttpPut;
10 import org.apache.http.conn.ClientConnectionManager;
11 import org.apache.http.conn.params.ConnManagerPNames;
12 import org.apache.http.conn.params.ConnPerRouteBean;
13 import org.apache.http.conn.scheme.PlainSocketFactory;
14 import org.apache.http.conn.scheme.Scheme;
15 import org.apache.http.conn.scheme.SchemeRegistry;
16 import org.apache.http.conn.ssl.SSLSocketFactory;
17 import org.apache.http.entity.FileEntity;
18 import org.apache.http.entity.mime.content.FileBody;
19 import org.apache.http.impl.auth.BasicScheme;
20 import org.apache.http.impl.client.DefaultHttpClient;
21 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
22 import org.apache.http.params.BasicHttpParams;
23 import org.apache.http.params.HttpParams;
24 import org.apache.http.params.HttpProtocolParams;
25 import org.apache.http.protocol.BasicHttpContext;
26
27 import eu.alefzero.owncloud.authenticator.EasySSLSocketFactory;
28 import eu.alefzero.webdav.HttpMkCol;
29
30 import android.net.Uri;
31 import android.util.Log;
32
33 public class WebdavClient {
34 private DefaultHttpClient mHttpClient;
35 private BasicHttpContext mHttpContext;
36 private HttpHost mTargetHost;
37 private SchemeRegistry mSchemeRegistry;
38 private Uri mUri;
39 final private static String TAG = "WebdavClient";
40
41 WebdavClient(Uri uri) {
42 mUri = uri;
43 mSchemeRegistry = new SchemeRegistry();
44 setupHttpClient();
45 }
46
47 void setCredentials(String username, String password) {
48 // determine default port for http or https
49 int targetPort = mTargetHost.getPort() == -1 ?
50 ( mUri.getScheme().equals("https") ? 443 : 80)
51 : mUri.getPort();
52
53 mHttpClient.getCredentialsProvider().setCredentials(
54 new AuthScope(mUri.getHost(), targetPort),
55 new UsernamePasswordCredentials(username, password));
56 BasicScheme basicAuth = new BasicScheme();
57 mHttpContext.setAttribute("preemptive-auth", basicAuth);
58 }
59
60 void allowUnsignedCertificates() {
61 // https
62 mSchemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
63 }
64
65 boolean downloadFile(String filepath) {
66 return true;
67 }
68
69 void getFileList(String dirPath) {
70
71 }
72
73 boolean putFile(String localFile,
74 String remoteTarget,
75 String contentType) {
76 boolean result = true;
77 HttpPut method = new HttpPut(mUri.toString() + remoteTarget.replace(" ", "%20"));
78 method.setHeader("Content-type", contentType);
79 method.setHeader("Host", mUri.getHost());
80 method.setHeader("User-Agent", "Android-ownCloud");
81
82 try {
83 FileBody fb = new FileBody(new File(localFile, contentType));
84 final FileEntity fileEntity = new FileEntity(new File(localFile), contentType);
85
86 method.setEntity(fileEntity);
87 Log.i(TAG, "executing:" + method.getRequestLine().toString());
88
89 mHttpClient.execute(mTargetHost, method, mHttpContext);
90 /*mHandler.post(new Runnable() {
91 public void run() {
92 Uploader.this.PartialupdateUpload(c.getString(c.getColumnIndex(Media.DATA)),
93 c.getString(c.getColumnIndex(Media.DISPLAY_NAME)),
94 mUploadPath + (mUploadPath.equals("/")?"":"/"),
95 fileEntity.getContentType().getValue(),
96 fileEntity.getContentLength()+"");
97 }
98 });
99 Log.i(TAG, "Uploading, done");
100 */
101 Log.i(TAG, "Uploading, done");
102 } catch (final Exception e) {
103 Log.i(TAG, e.getLocalizedMessage());
104 result = false;
105 }
106
107 return result;
108 }
109
110 public boolean createDirectory(String path) {
111 HttpMkCol method = new HttpMkCol(mUri.toString() + path + "/");
112 method.setHeader("User-Agent", "Android-ownCloud");
113
114 try {
115 mHttpClient.execute(mTargetHost, method, mHttpContext);
116 Log.i(TAG, "Creating dir completed");
117 } catch (final Exception e) {
118 e.printStackTrace();
119 return false;
120 }
121 return true;
122 }
123
124 private void setupHttpClient() {
125 // http scheme
126 mSchemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
127 mSchemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
128
129 HttpParams params = new BasicHttpParams();
130 params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
131 params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
132 params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
133 HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
134
135 mHttpContext = new BasicHttpContext();
136 ClientConnectionManager cm = new ThreadSafeClientConnManager(params, mSchemeRegistry);
137
138 int port = mUri.getPort() == -1 ?
139 mUri.getScheme().equals("https") ? 443 : 80
140 : mUri.getPort();
141
142 mTargetHost = new HttpHost(mUri.getHost(), port, mUri.getScheme());
143
144 mHttpClient = new DefaultHttpClient(cm, params);
145 }
146 }