diff --git a/java/com.sap.sailing.server.gateway/resources/shiro.ini b/java/com.sap.sailing.server.gateway/resources/shiro.ini index 5effb1f225e..e83df5ac74d 100755 --- a/java/com.sap.sailing.server.gateway/resources/shiro.ini +++ b/java/com.sap.sailing.server.gateway/resources/shiro.ini @@ -82,7 +82,7 @@ bearerToken = com.sap.sailing.server.security.BearerTokenOrBasicOrFormAuthentica # Secure the access (in particular the POST/write access) to posting race log events /rc/racelog = bearerToken -# Secure access to additional apis used for SailRacer +# Secure access to additional apis used for SailRacer and SailInsight 2.0 /api/v1/leaderboards/*/enableRaceLogForCompetitorRegistration/** = bearerToken /api/v1/leaderboards/*/denoteForTracking/** = bearerToken /api/v1/leaderboards/*/removeTrackedRace/** = bearerToken @@ -91,3 +91,6 @@ bearerToken = com.sap.sailing.server.security.BearerTokenOrBasicOrFormAuthentica /api/v1/mark/addMarkFix/** = bearerToken /api/v1/mark/addCourseDefinitionToRaceLog/** = bearerToken /api/v1/wind/putWind/** = bearerToken + +#Secure access for preferences api, used for SailInsight 2.0 +/api/v1/preferences/** = bearerToken diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PreferencesResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PreferencesResource.java new file mode 100644 index 00000000000..1245a74695e --- /dev/null +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PreferencesResource.java @@ -0,0 +1,76 @@ +package com.sap.sailing.server.gateway.jaxrs.api; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.shiro.SecurityUtils; +import org.json.simple.parser.ParseException; + +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; +import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; +import com.sap.sse.security.UserStore; + +@Path("/v1/preferences") +public class PreferencesResource extends AbstractSailingServerResource { + @GET + @Produces("application/json;charset=UTF-8") + @Path("{settingsKey}") + public Response getPreference(@PathParam("settingsKey") String settingsKey) + throws ParseException, JsonDeserializationException { + Response response = null; + if (SecurityUtils.getSubject().isAuthenticated()) { + String username = SecurityUtils.getSubject().getPrincipal().toString(); + UserStore userStore = getService(UserStore.class); + String settings = userStore.getPreference(username, settingsKey); + if (settings == null) { + response = Response.noContent().build(); + } else { + response = Response.ok(settings).build(); + } + } else { + response = Response.status(401).build(); + } + return response; + } + + @PUT + @Consumes(MediaType.APPLICATION_JSON) + @Path("{settingsKey}") + public Response putPreference(@PathParam("settingsKey") String settingsKey, String json) + throws ParseException, JsonDeserializationException { + Response response = null; + if (SecurityUtils.getSubject().isAuthenticated()) { + String username = SecurityUtils.getSubject().getPrincipal().toString(); + UserStore userStore = getService(UserStore.class); + userStore.setPreference(username, settingsKey, json); + response = Response.ok().build(); + } else { + response = Response.status(401).build(); + } + return response; + } + + @DELETE + @Produces("application/json;charset=UTF-8") + @Path("{settingsKey}") + public Response deletePreference(@PathParam("settingsKey") String settingsKey) + throws ParseException, JsonDeserializationException { + Response response = null; + if (SecurityUtils.getSubject().isAuthenticated()) { + String username = SecurityUtils.getSubject().getPrincipal().toString(); + UserStore userStore = getService(UserStore.class); + userStore.unsetPreference(username, settingsKey); + response = Response.ok().build(); + } else { + response = Response.status(401).build(); + } + return response; + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RestApiApplication.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RestApiApplication.java index 5474e184a28..dc9c71bcac7 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RestApiApplication.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RestApiApplication.java @@ -8,7 +8,6 @@ import javax.ws.rs.core.Application; import com.sap.sailing.server.gateway.jaxrs.exceptions.ExceptionManager; import com.sap.sse.security.jaxrs.ShiroAuthorizationExceptionTo401ResponseMapper; - public class RestApiApplication extends Application { public Set> getClasses() { HashSet> classes = new HashSet<>(); @@ -30,7 +29,8 @@ public class RestApiApplication extends Application { classes.add(StatisticsResource.class); classes.add(WindResource.class); classes.add(MarkRessource.class); - + classes.add(PreferencesResource.class); + // Exception Mappers classes.add(ShiroAuthorizationExceptionTo401ResponseMapper.class); classes.add(ExceptionManager.class); diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html index 509d812844b..fca229b251f 100644 --- a/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html @@ -290,6 +290,21 @@ name to make sure you get to the event you're interested in. /api/v1/mark/addMarkToRegatta Adds a Mark to a specified Regatta + + + /api/v1/preferences/{SETTINGS_KEY} + Stores a document into the preferences of a user + + + + /api/v1/preferences/{SETTINGS_KEY} + Retrives a document that was stored into the preferences of a user + + + + /api/v1/preferences/{SETTINGS_KEY} + Removes a document from the preferences of a user +
diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesDelete.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesDelete.html new file mode 100644 index 00000000000..772301ddb3c --- /dev/null +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesDelete.html @@ -0,0 +1,42 @@ + + + + + + + + SAP Sailing Analytics Webservices API Version 1.0 + + +

SAP Sailing Analytics Webservices API Version 1.0

+

URL: /api/v1/preferences/{SETTINGS_KEY}/

+ +Description: +

Deletes whatever is stored under SETTINGS_KEY in currently logged in users preferences

+
+ + + + + + + + + + + + + + + + + +
Webservice Type:REST
Output format:none
Mandatory parameters:none
Examples: + Delete @ http://sapsailing.com/sailingserver/api/v1/preferences/testSetting/ +
+ Answer: Ok +
+
+Back to Web Service Overview + + diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesGet.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesGet.html new file mode 100644 index 00000000000..a6a023a935c --- /dev/null +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesGet.html @@ -0,0 +1,42 @@ + + + + + + + + SAP Sailing Analytics Webservices API Version 1.0 + + +

SAP Sailing Analytics Webservices API Version 1.0

+

URL: /api/v1/preferences/{SETTINGS_KEY}/

+ +Description: +

Gets the stored Json data for the currently logged in user with the key SETTINGS_KEY

+
+ + + + + + + + + + + + + + + + + +
Webservice Type:REST
Output format:Json
Mandatory parameters:none
Examples: + Get @ http://sapsailing.com/sailingserver/api/v1/preferences/testSetting/ +
+ Answer: No Content Status code, or Ok and the stored document +
+
+Back to Web Service Overview + + diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesPut.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesPut.html new file mode 100644 index 00000000000..5acf8a45e6d --- /dev/null +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/preferencesPut.html @@ -0,0 +1,42 @@ + + + + + + + + SAP Sailing Analytics Webservices API Version 1.0 + + +

SAP Sailing Analytics Webservices API Version 1.0

+

URL: /api/v1/preferences/{SETTINGS_KEY}/

+ +Description: +

Stores the body of the request in the currently logged in users preferences under the given SETTINGS_KEY, the body is expected to be UTF-8 Json

+
+ + + + + + + + + + + + + + + + + +
Webservice Type:REST
Output format:none
Mandatory parameters:none
Examples: + Put @ http://sapsailing.com/sailingserver/api/v1/preferences/testSetting/ +
+ Answer: Ok +
+
+Back to Web Service Overview + +