diff options
author | Kjetil Orbekk <Kjetil Ørbekk orbekk@pvv.ntnu.no> | 2010-09-03 15:17:39 -0400 |
---|---|---|
committer | Kjetil Orbekk <Kjetil Ørbekk orbekk@pvv.ntnu.no> | 2010-09-03 15:17:39 -0400 |
commit | fe33b001dd0352ee789add31ec3d3932ea9846bd (patch) | |
tree | 85fc359fe30e4c5192d2897af5601fed5c2358a5 | |
parent | ac9d7b3012496f411f7ba6c19d31c9496b44327f (diff) |
Implement user administration.
-rw-r--r-- | src/WEB-INF/web.xml | 10 | ||||
-rw-r--r-- | src/lq/AddAdmin.java | 59 | ||||
-rw-r--r-- | src/lq/Administrator.java | 28 | ||||
-rw-r--r-- | src/lq/DropData.java | 5 | ||||
-rw-r--r-- | src/lq/UserUtil.java | 39 | ||||
-rw-r--r-- | src/lq/Vote.java | 1 |
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; |