aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLia Lenckowski <lialenck@protonmail.com>2023-07-24 21:50:32 +0200
committerLia Lenckowski <lialenck@protonmail.com>2023-07-24 21:50:32 +0200
commitcf1d61b67ccd8336dce87b076379a787ba231102 (patch)
tree787bde20a47b403aa4cdedb2d69fda8bcea04318
parent5a1201ec1f47b393ce40437bf9b3a478538bac51 (diff)
downloadfastbangs-cf1d61b67ccd8336dce87b076379a787ba231102.tar
fastbangs-cf1d61b67ccd8336dce87b076379a787ba231102.tar.bz2
fastbangs-cf1d61b67ccd8336dce87b076379a787ba231102.tar.zst
add search.xml
-rw-r--r--TODO1
-rw-r--r--bangs-ddgless.cabal1
-rw-r--r--src/Config.hs27
-rw-r--r--src/Main.hs16
4 files changed, 44 insertions, 1 deletions
diff --git a/TODO b/TODO
index cb70d6d..6715ad3 100644
--- a/TODO
+++ b/TODO
@@ -1 +1,2 @@
- testen, ob das brotli-ding im browser funktioniert (braucht vermutlich eine https proxy)
+- optional ETag oder andere Cache-Control
diff --git a/bangs-ddgless.cabal b/bangs-ddgless.cabal
index ff5e79c..8f6b091 100644
--- a/bangs-ddgless.cabal
+++ b/bangs-ddgless.cabal
@@ -19,6 +19,7 @@ executable bangs-ddgless
other-modules:
Bangs
BangState
+ Config
Paths_bangs_ddgless
hs-source-dirs:
src
diff --git a/src/Config.hs b/src/Config.hs
new file mode 100644
index 0000000..d19e608
--- /dev/null
+++ b/src/Config.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Config (
+ baseUrl,
+ makeOpenSearch
+) where
+
+import Data.String (IsString)
+
+baseUrl :: IsString s => s
+baseUrl = "http://localhost:20546"
+
+faviconUrl :: IsString s => s
+faviconUrl = "https://69owo.de/favicon.ico"
+
+makeOpenSearch :: (IsString s, Semigroup s) => s -> s
+makeOpenSearch searchUrl =
+ "<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\"\n"
+ <> " xmlns:moz=\"http://www.mozilla.org/2006/browser/search/\">\n"
+ <> " <ShortName>Banger</ShortName>\n"
+ <> " <Description>Bangs von ddg, ohne ddg</Description>\n"
+ <> " <InputEncoding>UTF-8</InputEncoding>\n"
+ <> " <Image width=\"16\" height=\"16\" type=\"image/x-icon\">" <> faviconUrl <> "</Image>\n"
+ <> " <Url type=\"text/html\" template=\"" <> searchUrl <> "\"/>\n"
+ <> " <!--<Url type=\"application/x-suggestions+json\" template=\"[suggestionURL]\"/>-->\n"
+ <> " <!--<moz:SearchForm>[https://example.com/search]</moz:SearchForm>-->\n"
+ <> "</OpenSearchDescription>\n"
diff --git a/src/Main.hs b/src/Main.hs
index feb199b..54e6e20 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -6,11 +6,13 @@ module Main (main) where
import Yesod
import Network.Wai.Handler.Warp
import Data.Function ((&))
+import Data.Functor ((<&>))
import qualified Data.ByteString as BS
import Bangs
import BangState
+import Config
data Search = Search {
bangState :: BangState
@@ -20,6 +22,7 @@ mkYesod "Search" [parseRoutes|
/ HomeR GET
/bangs.json BangsR GET
/submitBang SubmitR POST
+/search.xml OpenSearchR GET
|]
instance Yesod Search where
@@ -32,7 +35,7 @@ getBangsR :: Handler TypedContent
getBangsR = do
bangsAccessor <- lookupHeader "accept-encoding" >>= \case
Just ae | "br" `BS.isInfixOf` ae -> do
- addHeader "transfer-encoding" "br"
+ addHeader "content-encoding" "br"
return getBangsBrotli
_ -> do
return getBangsJSON
@@ -43,6 +46,17 @@ getBangsR = do
postSubmitR :: Handler String
postSubmitR = return "TODO"
+getOpenSearchR :: Handler TypedContent
+getOpenSearchR = do
+ url <- lookupGetParam "default" <&> \case
+ Nothing -> baseUrl <> "/#{searchTerms}"
+ Just b -> baseUrl <> "/#" <> b <> "#{searchTerms}"
+
+ return
+ $ TypedContent "application/opensearchdescription+xml"
+ $ toContent
+ $ makeOpenSearch url
+
main :: IO ()
main = do
s <- Search