diff --git a/managed_vms/cloudsql/pom.xml b/managed_vms/cloudsql/pom.xml
index 4579dde28c2..988bbfb09ed 100644
--- a/managed_vms/cloudsql/pom.xml
+++ b/managed_vms/cloudsql/pom.xml
@@ -21,6 +21,11 @@
5.1.38
+
+ org.jasypt
+ jasypt
+ 1.9.2
+
diff --git a/managed_vms/cloudsql/src/main/java/com/example/managedvms/cloudsql/CloudSqlServlet.java b/managed_vms/cloudsql/src/main/java/com/example/managedvms/cloudsql/CloudSqlServlet.java
index c4bdd569f4d..ca50da04b45 100644
--- a/managed_vms/cloudsql/src/main/java/com/example/managedvms/cloudsql/CloudSqlServlet.java
+++ b/managed_vms/cloudsql/src/main/java/com/example/managedvms/cloudsql/CloudSqlServlet.java
@@ -16,6 +16,8 @@
package com.example.managedvms.cloudsql;
+import org.jasypt.util.text.BasicTextEncryptor;
+
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
@@ -40,12 +42,18 @@ public class CloudSqlServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,
ServletException {
+ // encrypt user ip using PBEWithMD5AndDES
+ BasicTextEncryptor encryptor = new BasicTextEncryptor();
+ encryptor.setPassword(Double.toString(10000*Math.random()));
+ String userIp = encryptor.encrypt(req.getRemoteAddr());
+
final String createTableSql = "CREATE TABLE IF NOT EXISTS visits ( visit_id INT NOT NULL "
+ "AUTO_INCREMENT, user_ip VARCHAR(46) NOT NULL, timestamp DATETIME NOT NULL, "
+ "PRIMARY KEY (visit_id) )";
final String createVisitSql = "INSERT INTO visits (user_ip, timestamp) VALUES (?, ?)";
final String selectSql = "SELECT user_ip, timestamp FROM visits ORDER BY timestamp DESC "
+ "LIMIT 10";
+
PrintWriter out = resp.getWriter();
resp.setContentType("text/plain");
String url = System.getenv("SQL_DATABASE_URL");
@@ -58,7 +66,7 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOExc
try (ResultSet rs = conn.prepareStatement(selectSql).executeQuery()) {
out.print("Last 10 visits:\n");
while (rs.next()) {
- String userIp = rs.getString("user_ip");
+ userIp = rs.getString("user_ip");
String timeStamp = rs.getString("timestamp");
out.print("Time: " + timeStamp + " Addr: " + userIp + "\n");
}
diff --git a/managed_vms/cloudstorage/src/main/java/com/example/managedvms/cloudstorage/UploadServlet.java b/managed_vms/cloudstorage/src/main/java/com/example/managedvms/cloudstorage/UploadServlet.java
index e1f522e9ec4..2f9a3715e5e 100644
--- a/managed_vms/cloudstorage/src/main/java/com/example/managedvms/cloudstorage/UploadServlet.java
+++ b/managed_vms/cloudstorage/src/main/java/com/example/managedvms/cloudstorage/UploadServlet.java
@@ -52,6 +52,8 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOEx
ServletException {
final Part filePart = req.getPart("file");
final String fileName = filePart.getSubmittedFileName();
+
+ // Modify access list to allow all users with link to read file
List acls = new ArrayList<>();
acls.add(Acl.of(Acl.User.ofAllUsers(), Acl.Role.READER));
// the inputstream is closed by default, so we don't need to close it here
@@ -60,6 +62,8 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOEx
BlobInfo.builder(BUCKET_NAME, fileName).acl(acls).build(),
filePart.getInputStream());
blobInfo = storage.get(BUCKET_NAME, fileName);
+
+ // return the public download link
resp.getWriter().print(blobInfo.mediaLink());
}
}
diff --git a/managed_vms/datastore/pom.xml b/managed_vms/datastore/pom.xml
index cf0702e3143..6d9ff7ebebc 100644
--- a/managed_vms/datastore/pom.xml
+++ b/managed_vms/datastore/pom.xml
@@ -14,13 +14,18 @@
jar
provided
-
+
com.google.gcloud
gcloud-java-datastore
0.1.3
+
+ org.jasypt
+ jasypt
+ 1.9.2
+
@@ -62,7 +67,11 @@
true
- check
+
+
+ check
+
+
diff --git a/managed_vms/datastore/src/main/java/com/example/managedvms/datastore/DatastoreServlet.java b/managed_vms/datastore/src/main/java/com/example/managedvms/datastore/DatastoreServlet.java
index bc1955395ce..ad29093e2cd 100644
--- a/managed_vms/datastore/src/main/java/com/example/managedvms/datastore/DatastoreServlet.java
+++ b/managed_vms/datastore/src/main/java/com/example/managedvms/datastore/DatastoreServlet.java
@@ -27,6 +27,8 @@
import com.google.gcloud.datastore.QueryResults;
import com.google.gcloud.datastore.StructuredQuery;
+import org.jasypt.util.text.BasicTextEncryptor;
+
import java.io.IOException;
import java.io.PrintWriter;
@@ -44,17 +46,25 @@ public class DatastoreServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,
ServletException {
+ // encrypt user ip using PBEWithMD5AndDES
+ BasicTextEncryptor encryptor = new BasicTextEncryptor();
+ encryptor.setPassword(Double.toString(10000*Math.random()));
+ String userIp = encryptor.encrypt(req.getRemoteAddr());
+
Datastore datastore = DatastoreOptions.defaultInstance().service();
KeyFactory keyFactory = datastore.newKeyFactory().kind("visit");
IncompleteKey key = keyFactory.kind("visit").newKey();
+
// Record a visit to the datastore, storing the IP and timestamp.
FullEntity curVisit = FullEntity.builder(key)
- .set("user_ip", req.getRemoteAddr()).set("timestamp", DateTime.now()).build();
+ .set("user_ip", userIp).set("timestamp", DateTime.now()).build();
datastore.add(curVisit);
+
// Retrieve the last 10 visits from the datastore, ordered by timestamp.
Query query = Query.entityQueryBuilder().kind("visit")
.orderBy(StructuredQuery.OrderBy.desc("timestamp")).limit(10).build();
QueryResults results = datastore.run(query);
+
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.print("Last 10 visits:\n");