Skip to content

Instantly share code, notes, and snippets.

@maurges
Last active April 6, 2020 09:39
Show Gist options
  • Select an option

  • Save maurges/d4649e41b75e325e8e6ba41e1b628b73 to your computer and use it in GitHub Desktop.

Select an option

Save maurges/d4649e41b75e325e8e6ba41e1b628b73 to your computer and use it in GitHub Desktop.
Mozilla extension user-agent rewriting extension example rewritten in purescript
let upstream =
https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200123/packages.dhall sha256:687bb9a2d38f2026a89772c47390d02939340b01e31aaa22de9247eadd64af05
let overrides = {=}
let additions =
{ web-extensions =
{ dependencies =
[ "aff"
, "aff-promise"
, "console"
, "effect"
, "foreign"
, "nullable"
, "options"
, "prelude"
, "promises"
]
, repo =
"https://gitlab.com/d86leader/purescript-web-extensions.git"
, version =
"9b89b90f5740f278949286df3a41334a69496ec1"
}
}
in upstream // overrides // additions
-- | A purescript rewrite of this example extension:
-- | https://github.com/mdn/webextensions-examples/tree/master/user-agent-rewriter
module RewriteUa (main) where
import Prelude
import Browser.Event (addListener)
import Data.Options ((:=))
import Data.String.Common (toLower)
import Effect (Effect)
import Browser.WebRequest
( onBeforeSendHeadersBlocking, OnBeforeSendHeadersDetails (..)
, requestFilter, requestHeaders
)
import Effect.Console as Console
main :: Effect Unit
main = Console.log "main running!" *>
let filter = requestFilter [targetPage] mempty
targetPage = "https://httpbin.org/*"
in addListener onBeforeSendHeadersBlocking filter $
\(OnBeforeSendHeadersDetails details) -> do
let headers = details.requestHeaders
let headers' = map changeUa headers
Console.log "overwritten headers"
pure $ requestHeaders := headers'
where
changeUa header =
if toLower header.name == "user-agent"
then header {value = "curl/7.60.0"}
else header
{ name = "rewrite-ua"
, dependencies =
[ "effect"
, "web-extensions"
]
, packages = ./packages.dhall
, sources = [ "RewriteUa.purs" ]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment