add server testing
This commit is contained in:
@@ -1,19 +1,83 @@
|
|||||||
(ns server
|
(ns server
|
||||||
(:require [ring.middleware.resource :refer [wrap-resource]]
|
(:require [ring.middleware.resource :refer [wrap-resource]]
|
||||||
|
[clojure.core.async :refer [go]] [clojure.java.io :as io]
|
||||||
|
[ring.middleware.cors :refer [wrap-cors]] [clojure.string :as str]
|
||||||
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
|
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
|
||||||
[compojure.core :refer [routes defroutes GET POST]]
|
[compojure.core :refer [routes defroutes GET POST]] [clj-http.client :as client]
|
||||||
[org.httpkit.server :as server]))
|
[org.httpkit.server :as server])
|
||||||
|
(:import [java.io FileOutputStream]))
|
||||||
|
|
||||||
|
(defn download-file [url destination]
|
||||||
|
(println "Downloading from:" url)
|
||||||
|
(let [content (slurp url)
|
||||||
|
response (client/get url)]
|
||||||
|
;; Ensure parent directories exist
|
||||||
|
(io/make-parents destination)
|
||||||
|
;; Save the content to the destination file
|
||||||
|
(spit destination content)
|
||||||
|
{:status 200
|
||||||
|
:headers {"Content-Type" (get-in response [:headers "content-type"] "text/plain")}
|
||||||
|
:body (:body response)}))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(defn proxy-url [url]
|
||||||
|
(if url
|
||||||
|
(try
|
||||||
|
(let [response (client/get url)]
|
||||||
|
{:status 200
|
||||||
|
:headers {"Content-Type" (get-in response [:headers "content-type"] "text/plain")
|
||||||
|
"Access-Control-Allow-Origin" "*"
|
||||||
|
"User-Agent" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"
|
||||||
|
"Access-Control-Expose-Headers" "*"
|
||||||
|
"X-Final-Destination" url
|
||||||
|
"X-Set-Cookie" (get-in response [:headers "set-cookie"] "")
|
||||||
|
"Vary" "Origin"
|
||||||
|
"Redirect" "follow"}
|
||||||
|
:body (:body response)})
|
||||||
|
(catch Exception e
|
||||||
|
{:status 500
|
||||||
|
:headers {"Content-Type" "application/json"}
|
||||||
|
:body (str "{\"error\": \"" (.getMessage e) "\"}")}))
|
||||||
|
{:status 400
|
||||||
|
:headers {"Content-Type" "application/json"}
|
||||||
|
:body "{\"error\": \"Missing 'url' query parameter\"}"}))
|
||||||
|
|
||||||
|
|
||||||
(defroutes app-routes
|
(defroutes app-routes
|
||||||
(GET "/api/data" [] {:status 200 :headers {"Content-Type" "application/json"} :body "{\"message\": \"Something I guess\"}"})
|
(GET "/" [] (slurp (clojure.java.io/resource "index.html")))
|
||||||
|
(GET "/api" {query-params :query-params}
|
||||||
|
(if (not= nil query-params)
|
||||||
|
(do
|
||||||
|
(println "Has /api so we will use the query param \n\n")
|
||||||
|
(let [url (get query-params "url")]
|
||||||
|
(proxy-url url)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
#_(GET "/player" [] {:status 200
|
||||||
|
:headers {"Content-Type" (get-in response [:headers "content-type"] "text/plain")}
|
||||||
|
:body (:body response)})
|
||||||
(POST "/api/data" [data] {:status 200 :headers {"Content-Type" "application/json"} :body (str "{\"received\": \"" data "\"}")})
|
(POST "/api/data" [data] {:status 200 :headers {"Content-Type" "application/json"} :body (str "{\"received\": \"" data "\"}")})
|
||||||
(GET "*" [] {:status 404 :headers {"Content-Type" "text/plain"} :body "Not Found"}))
|
(GET "/*" {uri :uri}
|
||||||
|
(if (not (str/starts-with? uri "/api"))
|
||||||
|
(do
|
||||||
|
(println "Not /api so we are going to use the URI \n\n")
|
||||||
|
(println uri)
|
||||||
|
(download-file (str "https://player.vidbinge.com" uri) (str "resources" uri))))
|
||||||
|
)
|
||||||
|
#_(GET "*" [] {:status 404 :headers {"Content-Type" "text/plain"} :body "Not Found"}))
|
||||||
|
|
||||||
(def app
|
(def app
|
||||||
(-> (routes app-routes)
|
(-> (routes app-routes)
|
||||||
(wrap-resource "")
|
(wrap-resource "")
|
||||||
(wrap-defaults site-defaults)))
|
(wrap-defaults site-defaults)
|
||||||
|
(wrap-cors :access-control-allow-origin [#".*"]
|
||||||
|
:access-control-allow-methods [:get :post :put :delete :options]
|
||||||
|
:access-control-allow-headers ["Content-Type"])))
|
||||||
|
|
||||||
|
|
||||||
(defn -main []
|
(defn -main []
|
||||||
(println "Server running at http://localhost:8080")
|
(println "Server running at http://localhost:3030")
|
||||||
(server/run-server app {:port 8080}))
|
(server/run-server app {:port 3030}))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user