org.apache.commons
commons-collections4
diff --git a/push-service-client-lib/src/main/java/de/pushservice/client/controller/SubscriptionController.java b/push-service-client-lib/src/main/java/de/pushservice/client/controller/SubscriptionController.java
index 9ed5eb1..dc0c5b2 100644
--- a/push-service-client-lib/src/main/java/de/pushservice/client/controller/SubscriptionController.java
+++ b/push-service-client-lib/src/main/java/de/pushservice/client/controller/SubscriptionController.java
@@ -6,11 +6,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
-@Controller
+@RestController
public class SubscriptionController {
private static final Logger LOGGER = LoggerFactory.getLogger(SubscriptionController.class);
@@ -23,4 +24,9 @@ public class SubscriptionController {
return this.subscriptionService.subscribe(subscriptionDto).toResponseEntity();
}
+
+ @GetMapping("subscription/vapidPublicKey")
+ public String getVapidPublicKey() {
+ return this.subscriptionService.getVapidPublicKey();
+ }
}
diff --git a/push-service-client-lib/src/main/java/de/pushservice/client/dto/MessageDto.java b/push-service-client-lib/src/main/java/de/pushservice/client/dto/MessageDto.java
index 464ee50..a1ff883 100644
--- a/push-service-client-lib/src/main/java/de/pushservice/client/dto/MessageDto.java
+++ b/push-service-client-lib/src/main/java/de/pushservice/client/dto/MessageDto.java
@@ -1,6 +1,7 @@
package de.pushservice.client.dto;
import de.pushservice.client.model.Urgency;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
public class MessageDto {
private String payload;
@@ -36,4 +37,9 @@ public class MessageDto {
public void setUrgency(Urgency urgency) {
this.urgency = urgency;
}
+
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
}
diff --git a/push-service-client-lib/src/main/java/de/pushservice/client/dto/NotificationRequestDto.java b/push-service-client-lib/src/main/java/de/pushservice/client/dto/NotificationRequestDto.java
index daaa81f..2e3c6ad 100644
--- a/push-service-client-lib/src/main/java/de/pushservice/client/dto/NotificationRequestDto.java
+++ b/push-service-client-lib/src/main/java/de/pushservice/client/dto/NotificationRequestDto.java
@@ -1,5 +1,7 @@
package de.pushservice.client.dto;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+
public class NotificationRequestDto {
private String scope;
private MessageDto messageDto;
@@ -24,4 +26,9 @@ public class NotificationRequestDto {
public void setMessageDto(MessageDto messageDto) {
this.messageDto = messageDto;
}
+
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
}
diff --git a/push-service-client-lib/src/main/java/de/pushservice/client/dto/PayloadDto.java b/push-service-client-lib/src/main/java/de/pushservice/client/dto/PayloadDto.java
index 921343d..978d62b 100644
--- a/push-service-client-lib/src/main/java/de/pushservice/client/dto/PayloadDto.java
+++ b/push-service-client-lib/src/main/java/de/pushservice/client/dto/PayloadDto.java
@@ -1,5 +1,7 @@
package de.pushservice.client.dto;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+
/**
*
* Payload for a notification. Gets sent to the third party push service which forwards it to the user agent.
@@ -60,4 +62,9 @@ public class PayloadDto {
public void setTitle(String title) {
this.title = title;
}
+
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
}
diff --git a/push-service-client-lib/src/main/java/de/pushservice/client/dto/SubscriptionDto.java b/push-service-client-lib/src/main/java/de/pushservice/client/dto/SubscriptionDto.java
index 9093064..0539c4a 100644
--- a/push-service-client-lib/src/main/java/de/pushservice/client/dto/SubscriptionDto.java
+++ b/push-service-client-lib/src/main/java/de/pushservice/client/dto/SubscriptionDto.java
@@ -1,5 +1,7 @@
package de.pushservice.client.dto;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+
public class SubscriptionDto {
private String auth;
private String endpoint;
@@ -37,4 +39,9 @@ public class SubscriptionDto {
public void setScope(String scope) {
this.scope = scope;
}
+
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
}
diff --git a/push-service-client-lib/src/main/java/de/pushservice/client/service/SubscriptionService.java b/push-service-client-lib/src/main/java/de/pushservice/client/service/SubscriptionService.java
index 07d1b01..23e1203 100644
--- a/push-service-client-lib/src/main/java/de/pushservice/client/service/SubscriptionService.java
+++ b/push-service-client-lib/src/main/java/de/pushservice/client/service/SubscriptionService.java
@@ -68,4 +68,11 @@ public class SubscriptionService {
LOGGER.error(String.format("Could not send notification! %s", responseReason));
}
}
+
+ public String getVapidPublicKey() {
+ final ResponseEntity responseEntity = new RestTemplate()
+ .exchange(this.config.getServerUrl() + "vapidPublicKey", HttpMethod.GET, HttpEntity.EMPTY, String.class);
+
+ return responseEntity.getBody();
+ }
}
diff --git a/push-service-client-lib/src/main/resources/static/javascript/push-service-client-init.js b/push-service-client-lib/src/main/resources/static/javascript/push-service-client-init.js
index b68587e..280147a 100644
--- a/push-service-client-lib/src/main/resources/static/javascript/push-service-client-init.js
+++ b/push-service-client-lib/src/main/resources/static/javascript/push-service-client-init.js
@@ -45,9 +45,20 @@ function initializeState(registrationScope) {
});
}
-function subscribe(registrationScope) {
+async function subscribe(registrationScope) {
+ let response = await fetch('subscription/vapidPublicKey');
+ let key = await response.text();
+ options = {};
+
+ if (!key) {
+ options = {userVisibleOnly: true};
+ }
+ else {
+ options = {userVisibleOnly: true, applicationServerKey: base64UrlToUint8Array(key)};
+ }
+
navigator.serviceWorker.ready.then(function (serviceWorkerRegistration) {
- serviceWorkerRegistration.pushManager.subscribe({userVisibleOnly: true}).then(function (subscription) {
+ serviceWorkerRegistration.pushManager.subscribe(options).then(function (subscription) {
return sendSubscriptionToServer(subscription, registrationScope);
})
.catch(function (e) {
@@ -80,4 +91,20 @@ function sendSubscriptionToServer(subscription, registrationScope) {
scope: registrationScope
})
});
+}
+
+function base64UrlToUint8Array(base64UrlData) {
+ const padding = '='.repeat((4 - base64UrlData.length % 4) % 4);
+ const base64 = (base64UrlData + padding)
+ .replace(/\-/g, '+')
+ .replace(/_/g, '/');
+
+ const rawData = atob(base64);
+ const buffer = new Uint8Array(rawData.length);
+
+ for (let i = 0; i < rawData.length; ++i) {
+ buffer[i] = rawData.charCodeAt(i);
+ }
+
+ return buffer;
}
\ No newline at end of file
diff --git a/push-service-server/pom.xml b/push-service-server/pom.xml
index c931755..e2d64dd 100644
--- a/push-service-server/pom.xml
+++ b/push-service-server/pom.xml
@@ -45,6 +45,10 @@
org.bouncycastle
bcprov-jdk15on
+