From 17fe94fa46fa0e0fad88a3982334a2e317130151 Mon Sep 17 00:00:00 2001
From: CalDescent <caldescent@protonmail.com>
Date: Sun, 2 Jan 2022 18:23:27 +0000
Subject: [PATCH] Added POST /render/authorize/{resourceId} endpoint

This allows an entire registered name to be preauthorized, therefore allowing for instance a website to automatically request other resources from the same author, such as videos.
---
 .../java/org/qortal/api/resource/RenderResource.java  | 10 ++++++++++
 .../arbitrary/ArbitraryDataRenderManager.java         | 11 ++++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/qortal/api/resource/RenderResource.java b/src/main/java/org/qortal/api/resource/RenderResource.java
index 9f5913ce..3a543ee4 100644
--- a/src/main/java/org/qortal/api/resource/RenderResource.java
+++ b/src/main/java/org/qortal/api/resource/RenderResource.java
@@ -95,6 +95,16 @@ public class RenderResource {
         return "Unable to generate preview URL";
     }
 
+    @POST
+    @Path("/authorize/{resourceId}")
+    @SecurityRequirement(name = "apiKey")
+    public boolean authorizeResource(@PathParam("resourceId") String resourceId) {
+        Security.checkApiCallAllowed(request);
+        ArbitraryDataResource resource = new ArbitraryDataResource(resourceId, null, null, null);
+        ArbitraryDataRenderManager.getInstance().addToAuthorizedResources(resource);
+        return true;
+    }
+
     @POST
     @Path("authorize/{service}/{resourceId}")
     @SecurityRequirement(name = "apiKey")
diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java
index 693cbf82..ca98c484 100644
--- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java
+++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java
@@ -1,8 +1,6 @@
 package org.qortal.controller.arbitrary;
 
-import org.qortal.arbitrary.ArbitraryDataFile;
 import org.qortal.arbitrary.ArbitraryDataResource;
-import org.qortal.arbitrary.misc.Service;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -31,9 +29,16 @@ public class ArbitraryDataRenderManager {
     }
 
     public boolean isAuthorized(ArbitraryDataResource resource) {
+        ArbitraryDataResource broadResource = new ArbitraryDataResource(resource.getResourceId(), null, null, null);
+
         for (ArbitraryDataResource authorizedResource : this.authorizedResources) {
             if (authorizedResource != null && resource != null) {
-                if (Objects.equals(authorizedResource.toString(), resource.toString())) {
+                // Check for exact match
+                if (Objects.equals(authorizedResource.getUniqueKey(), resource.getUniqueKey())) {
+                    return true;
+                }
+                // Check for a broad authorization (which applies to all services and identifiers under an authorized name)
+                if (Objects.equals(authorizedResource.getUniqueKey(), broadResource.getUniqueKey())) {
                     return true;
                 }
             }