forked from Qortal/qortal
Added gateway-specific Q-Apps handler. For now, just show a warning alert if an app requires authentication / interactive features.
This commit is contained in:
parent
2848ae695c
commit
2a7a2d3220
@ -7,6 +7,8 @@ import org.jsoup.nodes.Document;
|
|||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
import org.qortal.arbitrary.misc.Service;
|
import org.qortal.arbitrary.misc.Service;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class HTMLParser {
|
public class HTMLParser {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger(HTMLParser.class);
|
private static final Logger LOGGER = LogManager.getLogger(HTMLParser.class);
|
||||||
@ -43,6 +45,12 @@ public class HTMLParser {
|
|||||||
String qAppsScriptElement = String.format("<script src=\"/apps/q-apps.js?time=%d\">", System.currentTimeMillis());
|
String qAppsScriptElement = String.format("<script src=\"/apps/q-apps.js?time=%d\">", System.currentTimeMillis());
|
||||||
head.get(0).prepend(qAppsScriptElement);
|
head.get(0).prepend(qAppsScriptElement);
|
||||||
|
|
||||||
|
// Add q-apps gateway script tag if in gateway mode
|
||||||
|
if (Objects.equals(this.qdnContext, "gateway")) {
|
||||||
|
String qAppsGatewayScriptElement = String.format("<script src=\"/apps/q-apps-gateway.js?time=%d\">", System.currentTimeMillis());
|
||||||
|
head.get(0).prepend(qAppsGatewayScriptElement);
|
||||||
|
}
|
||||||
|
|
||||||
// Escape and add vars
|
// Escape and add vars
|
||||||
String service = this.service.toString().replace("\"","\\\"");
|
String service = this.service.toString().replace("\"","\\\"");
|
||||||
String name = this.resourceId != null ? this.resourceId.replace("\"","\\\"") : "";
|
String name = this.resourceId != null ? this.resourceId.replace("\"","\\\"") : "";
|
||||||
|
@ -54,4 +54,30 @@ public class AppsResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/q-apps-gateway.js")
|
||||||
|
@Hidden // For internal Q-App API use only
|
||||||
|
@Operation(
|
||||||
|
summary = "Gateway-specific interface for Q-Apps",
|
||||||
|
responses = {
|
||||||
|
@ApiResponse(
|
||||||
|
description = "javascript",
|
||||||
|
content = @Content(
|
||||||
|
mediaType = MediaType.TEXT_PLAIN,
|
||||||
|
schema = @Schema(
|
||||||
|
type = "string"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public String getQAppsGatewayJs() {
|
||||||
|
URL url = Resources.getResource("q-apps/q-apps-gateway.js");
|
||||||
|
try {
|
||||||
|
return Resources.toString(url, StandardCharsets.UTF_8);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.FILE_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
38
src/main/resources/q-apps/q-apps-gateway.js
Normal file
38
src/main/resources/q-apps/q-apps-gateway.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
console.log("Gateway mode");
|
||||||
|
|
||||||
|
window.addEventListener("message", (event) => {
|
||||||
|
if (event == null || event.data == null || event.data.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.data.action == null || event.data.requestedHandler == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.data.requestedHandler != "UI") {
|
||||||
|
// Gateway mode only cares about requests that were intended for the UI
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let response;
|
||||||
|
let data = event.data;
|
||||||
|
|
||||||
|
switch (data.action) {
|
||||||
|
case "GET_USER_ACCOUNT":
|
||||||
|
case "PUBLISH_QDN_RESOURCE":
|
||||||
|
case "SEND_CHAT_MESSAGE":
|
||||||
|
case "JOIN_GROUP":
|
||||||
|
case "DEPLOY_AT":
|
||||||
|
case "GET_WALLET_BALANCE":
|
||||||
|
case "SEND_COIN":
|
||||||
|
const errorString = "Authentication was requested, but this is not yet supported when viewing via a gateway. To use interactive features, please access using the Qortal UI desktop app. More info at: https://qortal.org";
|
||||||
|
alert(errorString);
|
||||||
|
response = "{\"error\": \"" + errorString + "\"}"
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
console.log('Unhandled gateway message: ' + JSON.stringify(data));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleResponse(event, response);
|
||||||
|
|
||||||
|
}, false);
|
Loading…
x
Reference in New Issue
Block a user