import JsonRpcClient
import Config
import PowerDns
-import NmcJson
+import NmcRpc
+import NmcDom
confFile = "/etc/namecoin.conf"
, checkStatus = \_ _ _ -> Nothing
}
-qRsp :: Response ByteString -> Either String NmcDom
+qRsp :: Response ByteString -> Either String ByteString
qRsp rsp =
case parseJsonRpc (responseBody rsp) :: Either JsonRpcError NmcRes of
Left jerr ->
case (jrpcErrCode jerr) of
- -4 -> Right emptyNmcDom
+ -4 -> Right "{}" -- this is how non-existent entry is returned
_ -> Left $ "JsonRpc error response: " ++ (show jerr)
- Right jrsp ->
- case resValue jrsp of
- "" -> Right emptyNmcDom
- vstr ->
- case decode vstr :: Maybe NmcDom of
- Nothing -> Left $ "Unparseable value: " ++ (show vstr)
- Just dom -> Right dom
+ Right jrsp -> Right $ resValue jrsp
-- NMC interface
+queryOp :: Manager -> Config -> String -> String
+ -> IO (Either String ByteString)
+queryOp mgr cfg qid key = do
+ rsp <- runResourceT $
+ httpLbs (qReq cfg (L.pack key) (L.pack qid)) mgr
+ return $ qRsp rsp
+
queryNmc :: Manager -> Config -> String -> String
-> IO (Either String NmcDom)
queryNmc mgr cfg fqdn qid = do
case reverse (splitOn "." fqdn) of
"bit":dn:xs -> do
- rsp <- runResourceT $
- httpLbs (qReq cfg (L.pack ("d/" ++ dn)) (L.pack qid)) mgr
- return $ case qRsp rsp of
- Left err -> Left err
- Right dom -> Right $ descendNmc xs dom
+ dom <- mergeImport (queryOp mgr cfg qid) $
+ emptyNmcDom { domImport = Just ("d/" ++ dn)}
+ return $ Right $ descendNmcDom xs dom
_ ->
return $ Left "Only \".bit\" domain is supported"