improve error handling to report particular errs
This commit is contained in:
parent
010ecffa1b
commit
1acd48079c
@ -69,6 +69,7 @@ import Database.Persist.Sql (PersistField, PersistFieldSql (..))
|
|||||||
import Database.Persist (Entity (..), SqlType (SqlString))
|
import Database.Persist (Entity (..), SqlType (SqlString))
|
||||||
import Text.HTML.SanitizeXSS (sanitizeBalance)
|
import Text.HTML.SanitizeXSS (sanitizeBalance)
|
||||||
import Control.Monad (when, unless)
|
import Control.Monad (when, unless)
|
||||||
|
import Data.List (findIndices)
|
||||||
import Data.Maybe (listToMaybe, fromJust, fromMaybe, isNothing)
|
import Data.Maybe (listToMaybe, fromJust, fromMaybe, isNothing)
|
||||||
|
|
||||||
import qualified Blaze.ByteString.Builder.Html.Utf8 as B
|
import qualified Blaze.ByteString.Builder.Html.Utf8 as B
|
||||||
@ -307,12 +308,12 @@ multiEmailField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field
|
|||||||
multiEmailField = Field
|
multiEmailField = Field
|
||||||
{ fieldParse = parseHelper $
|
{ fieldParse = parseHelper $
|
||||||
\s ->
|
\s ->
|
||||||
let canons = map (Email.canonicalizeEmail . encodeUtf8) $
|
let addrs = splitOn "," s
|
||||||
splitOn "," s
|
canons = map (Email.canonicalizeEmail . encodeUtf8) addrs
|
||||||
in if any isNothing canons
|
in case findIndices isNothing canons of
|
||||||
then Left $ MsgInvalidEmail s
|
[] -> Right $
|
||||||
else Right $
|
map (decodeUtf8With lenientDecode . fromJust) canons
|
||||||
map (decodeUtf8With lenientDecode . fromJust) canons
|
errs -> Left $ MsgInvalidEmail $ cat $ map (addrs !!) errs
|
||||||
, fieldView = \theId name attrs val isReq -> toWidget [hamlet|
|
, fieldView = \theId name attrs val isReq -> toWidget [hamlet|
|
||||||
$newline never
|
$newline never
|
||||||
<input id="#{theId}" name="#{name}" *{attrs} type="email" multiple :isReq:required="" value="#{either id cat val}">
|
<input id="#{theId}" name="#{name}" *{attrs} type="email" multiple :isReq:required="" value="#{either id cat val}">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user