From bdfdbbadbc78db48f447c1b4c797abcc6b44d973 Mon Sep 17 00:00:00 2001 From: Justin Richer Date: Tue, 21 Aug 2012 12:20:05 -0400 Subject: [PATCH] stats summary, addresses #62 --- .../openid/connect/view/JSONClientView.java | 3 +- .../openid/connect/view/StatsSummary.java | 70 +++++++++++++++++++ .../mitre/openid/connect/web/StatsAPI.java | 56 +++++++++++++++ 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 openid-connect-server/src/main/java/org/mitre/openid/connect/view/StatsSummary.java create mode 100644 openid-connect-server/src/main/java/org/mitre/openid/connect/web/StatsAPI.java diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONClientView.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONClientView.java index 4f7020e60..adb0f5daf 100644 --- a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONClientView.java +++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONClientView.java @@ -53,11 +53,10 @@ public class JSONClientView extends AbstractView { response.setContentType("application/json"); - Writer out; try { - out = response.getWriter(); + Writer out = response.getWriter(); Object obj = model.get("entity"); if (obj == null) { obj = model; diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/StatsSummary.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/StatsSummary.java new file mode 100644 index 000000000..135f69912 --- /dev/null +++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/StatsSummary.java @@ -0,0 +1,70 @@ +/** + * + */ +package org.mitre.openid.connect.view; + +import java.io.IOException; +import java.io.Writer; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Component; +import org.springframework.validation.BeanPropertyBindingResult; +import org.springframework.web.servlet.view.AbstractView; + +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +/** + * @author jricher + * + */ +@Component("statsSummaryJson") +public class StatsSummary extends AbstractView { + + @Override + protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) { + Gson gson = new GsonBuilder() + .setExclusionStrategies(new ExclusionStrategy() { + + public boolean shouldSkipField(FieldAttributes f) { + + return false; + } + + public boolean shouldSkipClass(Class clazz) { + // skip the JPA binding wrapper + if (clazz.equals(BeanPropertyBindingResult.class)) { + return true; + } + return false; + } + + }).create(); + + response.setContentType("application/json"); + + + try { + + Writer out = response.getWriter(); + Object obj = model.get("entity"); + if (obj == null) { + obj = model; + } + + gson.toJson(obj, out); + + } catch (IOException e) { + + logger.error("IOException in JSONClientView.java: " + e.getStackTrace()); + + } + + } + +} diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/web/StatsAPI.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/web/StatsAPI.java new file mode 100644 index 000000000..baab1cbe4 --- /dev/null +++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/web/StatsAPI.java @@ -0,0 +1,56 @@ +package org.mitre.openid.connect.web; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.mitre.openid.connect.model.ApprovedSite; +import org.mitre.openid.connect.service.ApprovedSiteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@PreAuthorize("hasRole('ROLE_USER')") +@RequestMapping("stats") +public class StatsAPI { + + @Autowired + private ApprovedSiteService approvedSiteService; + + public StatsAPI() { + + } + + @RequestMapping("summary") + public String statsSummary(ModelMap m) { + + // get all approved sites + Collection allSites = approvedSiteService.getAll(); + + // process to find number of unique users and sites + Set userIds = new HashSet(); + Set clientIds = new HashSet(); + for (ApprovedSite approvedSite : allSites) { + userIds.add(approvedSite.getUserId()); + clientIds.add(approvedSite.getClientId()); + } + + Map e = new HashMap(); + + e.put("approvalCount", allSites.size()); + e.put("userCount", userIds.size()); + e.put("clientCount", clientIds.size()); + + m.put("entity", e); + + return "statsSummaryJson"; + + } + +}