commit - 3cafafa461a3cfa707bb5c57be92cf16bb6d522e
commit + 36fdb151704960fce8e78150d45dc3dc6a543c17
blob - ebdcdda05656016d927a3cec8cbae96fda53c7f4
blob + 699c1e8ca1c24a9f1533766ddf24ee97bf73ae90
--- src/Cover.purs
+++ src/Cover.purs
import Config (UserConfig, s3ConfigFromUser)
import S3 (existsInS3, getPresignedUrl, uploadToS3)
import Data.Array ((!!), find)
-import Data.Either (Either(..), fromRight')
+import Data.Either (Either(..), hush)
import Data.Foldable (foldM)
import Data.Map as Map
import Data.Maybe (Maybe(..), fromMaybe)
import Data.String.CaseInsensitive (CaseInsensitiveString(..))
-import Data.String.Regex (regex, replace, parseFlags)
-import Partial.Unsafe (unsafeCrashWith)
+import Data.String.Regex (Regex, regex, replace, parseFlags)
import Effect (Effect)
import Effect.Aff (Aff, forkAff, try)
import Effect.Class (liftEffect)
}
sanitizeKey :: String -> String
-sanitizeKey = replace re1 "_" >>> replace re2 "_"
- where
- re1 = fromRight' (\_ -> unsafeCrashWith "invalid regex re1") $ regex "[^a-z0-9.-]" (parseFlags "gi")
- re2 = fromRight' (\_ -> unsafeCrashWith "invalid regex re2") $ regex "_{2,}" (parseFlags "g")
+sanitizeKey = safeReplace sanitizeKeyRe1 "_" >>> safeReplace sanitizeKeyRe2 "_"
+safeReplace :: Maybe Regex -> String -> String -> String
+safeReplace mRe replacement s = case mRe of
+ Nothing -> s
+ Just re -> replace re replacement s
+
+sanitizeKeyRe1 :: Maybe Regex
+sanitizeKeyRe1 = hush $ regex "[^a-z0-9.-]" (parseFlags "gi")
+
+sanitizeKeyRe2 :: Maybe Regex
+sanitizeKeyRe2 = hush $ regex "_{2,}" (parseFlags "g")
+
getQueryParam :: String -> URL -> Maybe String
getQueryParam key url = URLSearchParams.get key (URL.searchParams url)
blob - e6e8364d993b9adc086e770fbb1a5d22b8e2d772
blob + a046c5b38ceac71fde10ad03e5e7067730439258
--- src/Main.purs
+++ src/Main.purs
import Data.Argonaut (decodeJson, encodeJson, parseJson, stringify)
import Data.Array (find, length)
import Data.Array as Data.Array
-import Data.Either (Either(..), fromRight')
+import Data.Either (Either(..), hush)
import Data.Foldable (for_, traverse_)
import Data.Int as Int
import Data.Maybe (Maybe(..), fromMaybe)
import Data.String (Pattern(..), stripPrefix)
-import Data.String.Regex (regex, replace, parseFlags)
-import Partial.Unsafe (unsafeCrashWith)
+import Data.String.Regex (Regex, regex, replace, parseFlags)
import Data.Traversable (traverse)
import Db (Connection, backupDb, connect, fromString, getOrCreateToken, getScrobbles, getStats, getTokenUser, initDb, initReleaseMetadata, ping, upsertScrobble, withTransaction)
import Effect (Effect)
end w
sanitizeDate :: String -> String
-sanitizeDate = replace (fromRight' (\_ -> unsafeCrashWith "invalid regex") $ regex "[^0-9\\-]" (parseFlags "g")) ""
+sanitizeDate s = case sanitizeDateRe of
+ Nothing -> s
+ Just re -> replace re "" s
+sanitizeDateRe :: Maybe Regex
+sanitizeDateRe = hush $ regex "[^0-9\\-]" (parseFlags "g")
+
serveStats :: Connection -> URL -> Response -> Effect Unit
serveStats db url res = do
setHeader "Content-Type" "application/json" (toOutgoingMessage res)