summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <Kjetil Ørbekk orbekk@pvv.ntnu.no>2010-09-03 15:17:39 -0400
committerKjetil Orbekk <Kjetil Ørbekk orbekk@pvv.ntnu.no>2010-09-03 15:17:39 -0400
commitfe33b001dd0352ee789add31ec3d3932ea9846bd (patch)
tree85fc359fe30e4c5192d2897af5601fed5c2358a5
parentac9d7b3012496f411f7ba6c19d31c9496b44327f (diff)
Implement user administration.
-rw-r--r--src/WEB-INF/web.xml10
-rw-r--r--src/lq/AddAdmin.java59
-rw-r--r--src/lq/Administrator.java28
-rw-r--r--src/lq/DropData.java5
-rw-r--r--src/lq/UserUtil.java39
-rw-r--r--src/lq/Vote.java1
6 files changed, 139 insertions, 3 deletions
diff --git a/src/WEB-INF/web.xml b/src/WEB-INF/web.xml
index 3ed23ed..1955309 100644
--- a/src/WEB-INF/web.xml
+++ b/src/WEB-INF/web.xml
@@ -36,6 +36,16 @@
<url-pattern>/dropdb</url-pattern>
</servlet-mapping>
+ <servlet>
+ <servlet-name>new_admin</servlet-name>
+ <servlet-class>lq.AddAdmin</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>new_admin</servlet-name>
+ <url-pattern>/new_admin</url-pattern>
+ </servlet-mapping>
+
<welcome-file-list>
<welcome-file>quotes.jsp</welcome-file>
</welcome-file-list>
diff --git a/src/lq/AddAdmin.java b/src/lq/AddAdmin.java
new file mode 100644
index 0000000..5bed450
--- /dev/null
+++ b/src/lq/AddAdmin.java
@@ -0,0 +1,59 @@
+package lq;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Query;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class AddAdmin extends HttpServlet {
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws IOException {
+ resp.setContentType("text/html");
+ String email = req.getParameter("email");
+ if (UserUtil.isAuthenticated()) {
+ if (addUser(resp, email)) {
+ resp.getWriter().println(Strings.escape(email) + " kan nå moderere quotes.");
+ }
+
+ String logoutUrl = UserUtil.getLogoutUrl(req.getRequestURI());
+ resp.getWriter().println("<a href=\"" + logoutUrl + "\">Logg ut</a><br>");
+ }
+ else {
+ String loginUrl = UserUtil.getLoginUrl(req.getRequestURI());
+ resp.getWriter().println("<a href=\"" + loginUrl + "\">Logg inn</a><br>");
+ }
+ }
+
+ private boolean addUser(HttpServletResponse resp, String email)
+ throws IOException {
+ if (Strings.nullOrEmpty(email)) {
+ resp.getWriter().println("Feilkode µ (spesifiser email).<br>");
+ return false;
+ }
+ else {
+ PersistenceManager pm = PMF.get().getPersistenceManager();
+ try {
+ if (!UserUtil.userExists(email)) {
+ Administrator newAdmin = new Administrator(email);
+ pm.makePersistent(newAdmin);
+ return true;
+ }
+ else {
+ resp.getWriter().println("Brukeren " + Strings.escape(email) +
+ " finnes allerede<br>");
+ return false;
+ }
+ }
+ finally {
+ pm.close();
+ }
+ }
+ }
+}
diff --git a/src/lq/Administrator.java b/src/lq/Administrator.java
new file mode 100644
index 0000000..8ba2957
--- /dev/null
+++ b/src/lq/Administrator.java
@@ -0,0 +1,28 @@
+package lq;
+
+import com.google.appengine.api.datastore.Key;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+import javax.jdo.annotations.Persistent;
+import javax.jdo.annotations.PrimaryKey;
+
+@PersistenceCapable
+public class Administrator {
+ @PrimaryKey
+ @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
+ private Key key;
+
+ @Persistent
+ private String email;
+
+ public Administrator(String email) {
+ this.email = email;
+ }
+
+ public Key getKey() { return key; }
+ public String getEmail() { return email; }
+
+ public void setKey(Key key) { this.key = key; }
+ public void setEmail(String email) { this.email = email; }
+}
diff --git a/src/lq/DropData.java b/src/lq/DropData.java
index 06f3583..d097229 100644
--- a/src/lq/DropData.java
+++ b/src/lq/DropData.java
@@ -22,6 +22,11 @@ public class DropData extends HttpServlet {
for (Vote v : votes) {
pm.deletePersistent(v);
}
+ List<Administrator> admins =
+ (List<Administrator>) pm.newQuery(Administrator.class).execute();
+ for (Administrator a : admins) {
+ pm.deletePersistent(a);
+ }
}
finally {
pm.close();
diff --git a/src/lq/UserUtil.java b/src/lq/UserUtil.java
index 4fd9452..48bf2b5 100644
--- a/src/lq/UserUtil.java
+++ b/src/lq/UserUtil.java
@@ -1,9 +1,12 @@
package lq;
-import javax.servlet.http.HttpServletRequest;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
+import java.util.List;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Query;
+import javax.servlet.http.HttpServletRequest;
public class UserUtil {
public static final String getAuthenticatedEmail() {
@@ -13,7 +16,12 @@ public class UserUtil {
return null;
}
else {
- return user.getEmail();
+ if (hasZeroUsers() || userExists(user.getEmail())) {
+ return user.getEmail();
+ }
+ else {
+ return null;
+ }
}
}
@@ -30,4 +38,31 @@ public class UserUtil {
UserService userService = UserServiceFactory.getUserService();
return userService.createLogoutURL(requestUrl);
}
+
+ private static final boolean hasZeroUsers() {
+ PersistenceManager pm = PMF.get().getPersistenceManager();
+ try {
+ Query query = pm.newQuery(Administrator.class);
+ List<?> results = (List<?>) query.execute();
+ return results.isEmpty();
+ }
+ finally {
+ pm.close();
+ }
+ }
+
+ public static final boolean userExists(String email) {
+ PersistenceManager pm = PMF.get().getPersistenceManager();
+ try {
+ Query query = pm.newQuery(Administrator.class);
+ query.setFilter("email == emailParam");
+ query.declareParameters("String emailParam");
+ List<?> results = (List<?>) query.execute(email);
+ return !results.isEmpty();
+ }
+ finally {
+ pm.close();
+ }
+
+ }
}
diff --git a/src/lq/Vote.java b/src/lq/Vote.java
index e566ac5..830b0cc 100644
--- a/src/lq/Vote.java
+++ b/src/lq/Vote.java
@@ -2,7 +2,6 @@ package lq;
import com.google.appengine.api.datastore.Key;
import java.util.Date;
-import javax.jdo.annotations.EmbeddedOnly;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;