From fe33b001dd0352ee789add31ec3d3932ea9846bd Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Fri, 3 Sep 2010 15:17:39 -0400 Subject: Implement user administration. --- src/WEB-INF/web.xml | 10 ++++++++ src/lq/AddAdmin.java | 59 +++++++++++++++++++++++++++++++++++++++++++++++ src/lq/Administrator.java | 28 ++++++++++++++++++++++ src/lq/DropData.java | 5 ++++ src/lq/UserUtil.java | 39 +++++++++++++++++++++++++++++-- src/lq/Vote.java | 1 - 6 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 src/lq/AddAdmin.java create mode 100644 src/lq/Administrator.java 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 @@ /dropdb + + new_admin + lq.AddAdmin + + + + new_admin + /new_admin + + quotes.jsp 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("Logg ut
"); + } + else { + String loginUrl = UserUtil.getLoginUrl(req.getRequestURI()); + resp.getWriter().println("Logg inn
"); + } + } + + private boolean addUser(HttpServletResponse resp, String email) + throws IOException { + if (Strings.nullOrEmpty(email)) { + resp.getWriter().println("Feilkode µ (spesifiser email).
"); + 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
"); + 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 admins = + (List) 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; -- cgit v1.2.3