--- | Check that the lengths of the local/domain parts are within spec.
-validate_length :: Address -> Bool
-validate_length address =
- (BSU.length localpart <= 64) && (BSU.length domain <= 255)
- where
- (localpart, domain) = parts address
-
--- | Validate an email address against a simple regex. This should
--- catch common addresses but disallows a lot of (legal) weird stuff.
-validate_regex :: Address -> Bool
-validate_regex address =
- case matches of
- Nothing -> False
- _ -> True
- where
- regex_str = "(\\w+)([\\w\\-\\.]*)@(([0-9a-zA-Z\\-]+\\.)+)[a-zA-Z]{2,4}"
- regex_bs = BSU.fromString regex_str
- regex = compile regex_bs [utf8]
- matches = match regex address []
-
--- | Validate the syntax of an email address by checking its length
--- and validating it against a simple regex.
-validate_syntax :: Address -> Bool
-validate_syntax address =
- (validate_length address) && (validate_regex address)
-
--- | Split a 'ByteString' @s@ at the first occurrence of @character@.
-bytestring_split :: BSU.ByteString -> Char -> (BSU.ByteString, BSU.ByteString)
-bytestring_split s character =
- (before, after)
- where
- break_func = (== character)
- (before, rest) = BSU.break break_func s
- after = BS.tail rest
+-- | Check whether the given domain has a valid A record.
+validate_a :: Resolver -> Domain -> IO Bool
+validate_a resolver domain
+ | domain `elem` common_domains = return True
+ | otherwise = do
+ result <- lookupA resolver domain
+ case result of
+ Right (_:_) -> return True
+ _ -> return False