feat: allow searching for the youtube page
diff --git a/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/YoutubeVideosModel.java b/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/YoutubeVideosModel.java
index f4178ac..22ffc75 100644
--- a/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/YoutubeVideosModel.java
+++ b/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/YoutubeVideosModel.java
@@ -29,4 +29,8 @@
     public YoutubeSearchResponse getResponse() {
         return (YoutubeSearchResponse) request.getAttribute("ytResponse");
     }
+    
+    public String getSearch() {
+        return request.getParameter("search");
+    }
 }
diff --git a/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeHttpClient.java b/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeHttpClient.java
index 43e2789..fe153ce 100644
--- a/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeHttpClient.java
+++ b/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeHttpClient.java
@@ -18,10 +18,12 @@
 
 import java.io.IOException;
 import java.net.URI;
+import java.net.URLEncoder;
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
 import java.net.http.HttpResponse.BodyHandlers;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.sling.samples.oauth_demo.YoutubeSearchResponse;
 
@@ -34,6 +36,7 @@
     public YoutubeSearchResponse searchVideos(String query, String accessToken) throws IOException, InterruptedException {
         
         try ( HttpClient client = HttpClient.newHttpClient() ) {
+            query = URLEncoder.encode(query.trim(), StandardCharsets.UTF_8);
             HttpRequest searchRequest = HttpRequest.newBuilder()
                 .uri(URI.create(API_BASE + "/search?part=snippet&maxResults=20&q=" + query + "&type=video"))
                 .header("Authorization", "Bearer " + accessToken)
diff --git a/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeSearchServlet.java b/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeSearchServlet.java
index cec6692..beac6e4 100644
--- a/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeSearchServlet.java
+++ b/oauth/core/src/main/java/org/apache/sling/samples/oauth_demo/impl/YoutubeSearchServlet.java
@@ -78,25 +78,18 @@
             OidcToken token) throws IOException, ServletException {
 
         try {
-            YoutubeHttpClient client = new YoutubeHttpClient();
-            YoutubeSearchResponse youtubeResponse = client.searchVideos("adaptTo", token.getValue());
+            String search = request.getParameter("search");
+            if (search != null && !search.isBlank()) {
+                YoutubeHttpClient client = new YoutubeHttpClient();
+                YoutubeSearchResponse youtubeResponse = client.searchVideos(search, token.getValue());
+                request.setAttribute("ytResponse", youtubeResponse);
+            }
             
             RequestDispatcherOptions opts = new RequestDispatcherOptions();
             opts.setReplaceSelectors("show");
             
-            request.setAttribute("ytResponse", youtubeResponse);
             response.setContentType("text/html");
             request.getRequestDispatcher(request.getResource(), opts).include(request, response);
-            
-//            response.setStatus(HttpServletResponse.SC_OK);
-//            response.setContentType("text/html");
-//            response.getWriter().write(String.format("<p>Got %s results out of total %s</p>", youtubeResponse.items().size(), youtubeResponse.pageInfo().totalResults()));
-//            response.getWriter().write("<ul>");
-//            for (Item item : youtubeResponse.items()) {
-//                response.getWriter().write(String.format("<li><a href=\"https://www.youtube.com/watch?v=%s\">%s</a></li>",
-//                        item.id().videoId(), item.snippet().title()));
-//            }
-//            response.getWriter().write("</ul>");
         } catch (InterruptedException e) {
             Thread.currentThread().interrupt();
             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Please retry later");
diff --git a/oauth/ui.apps/src/main/content/jcr_root/apps/oauth-demo/components/youtube-videos/show.html b/oauth/ui.apps/src/main/content/jcr_root/apps/oauth-demo/components/youtube-videos/show.html
index 57c4cf1..451da12 100644
--- a/oauth/ui.apps/src/main/content/jcr_root/apps/oauth-demo/components/youtube-videos/show.html
+++ b/oauth/ui.apps/src/main/content/jcr_root/apps/oauth-demo/components/youtube-videos/show.html
@@ -7,7 +7,12 @@
 </head>
 <body data-sly-use.youtube="org.apache.sling.samples.oauth_demo.YoutubeVideosModel">
     <main>
-        <h1>Search results</h1>
+        <h1>Youtube Videos</h1>
+        <form>
+            <label for="search">Search:</label>
+            <input type="text" id="search" name="search" value="${youtube.search}">
+            <button type="submit">Search</button>
+        </form>
         <p>ERROR? ${youtube.response.error.message}</p>
         <p>Got ${youtube.response.items.size} results of out total ${youtube.response.pageInfo.totalResults}</p>
         <div data-sly-list.item="${youtube.response.items}"