Commit Diff


commit - 3cafafa461a3cfa707bb5c57be92cf16bb6d522e
commit + 36fdb151704960fce8e78150d45dc3dc6a543c17
blob - ebdcdda05656016d927a3cec8cbae96fda53c7f4
blob + 699c1e8ca1c24a9f1533766ddf24ee97bf73ae90
--- src/Cover.purs
+++ src/Cover.purs
@@ -13,13 +13,12 @@ import Control.Alt ((<|>))
 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)
@@ -50,11 +49,19 @@ type CoverSource =
   }
 
 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
@@ -8,13 +8,12 @@ import Cosine (serveSimilar)
 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)
@@ -272,8 +271,13 @@ serveProxy corsOrigin db url res = do
       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)