X-Git-Url: http://www.average.org/gitweb/?p=pdns-pipe-nmc.git;a=blobdiff_plain;f=pdns-pipe-nmc.hs;h=737c9e771f4d0c81c32518eae45e97961a332231;hp=0e0d9e6c017f1123b748af3bb774527472f0bb9a;hb=a94698b56a0faf340c007fe11b6ac7bcb2c566e2;hpb=ea693af2c9b9eb7713f5d409b969cbf22df26326 diff --git a/pdns-pipe-nmc.hs b/pdns-pipe-nmc.hs index 0e0d9e6..737c9e7 100644 --- a/pdns-pipe-nmc.hs +++ b/pdns-pipe-nmc.hs @@ -2,9 +2,14 @@ module Main where -import System.IO +import Prelude hiding (readFile) +import System.Environment +import System.IO hiding (readFile) +import System.IO.Error +import Control.Exception +import Text.Show.Pretty hiding (String) import Control.Monad -import Data.ByteString.Lazy hiding (reverse, putStr, putStrLn) +import Data.ByteString.Lazy hiding (reverse, putStr, putStrLn, head) import qualified Data.ByteString.Char8 as C (pack) import qualified Data.ByteString.Lazy.Char8 as L (pack) import qualified Data.Text as T (pack) @@ -19,6 +24,7 @@ import Config import PowerDns import NmcRpc import NmcDom +import NmcTransform confFile = "/etc/namecoin.conf" @@ -52,27 +58,20 @@ qRsp rsp = -- NMC interface -queryNmc :: Manager -> Config -> String -> String - -> IO (Either String NmcDom) -queryNmc mgr cfg qid fqdn = +queryOpNmc cfg mgr qid key = + runResourceT (httpLbs (qReq cfg key qid) mgr) >>= return . qRsp + +queryOpFile key = catch (readFile key >>= return . Right) + (\e -> return (Left (show (e :: IOException)))) + +queryDom queryOp fqdn = case reverse (splitOn "." fqdn) of - "bit":dn:xs -> do - dom <- mergeImport queryOp $ - emptyNmcDom { domImport = Just ("d/" ++ dn)} - case dom of - Left err -> return $ Left err - Right dom' -> return $ Right $ descendNmcDom xs dom' - _ -> - return $ Left "Only \".bit\" domain is supported" - where - queryOp key = do - rsp <- runResourceT $ httpLbs (qReq cfg key qid) mgr - -- print $ qRsp rsp - return $ qRsp rsp - --- Main entry + "bit":dn:xs -> descendNmcDom queryOp xs $ seedNmcDom dn + _ -> return $ Left "Only \".bit\" domain is supported" -main = do +-- Main entries + +mainPdnsNmc = do cfg <- readConfig confFile @@ -102,14 +101,33 @@ main = do Right preq -> do case preq of PdnsRequestQ qname qtype id _ _ _ -> - queryNmc mgr cfg id qname >>= putStr . (pdnsOut ver id qname qtype) + queryDom (queryOpNmc cfg mgr id) qname >>= putStr . (pdnsOut ver id qname qtype) PdnsRequestAXFR xfrreq -> putStr $ pdnsReport ("No support for AXFR " ++ xfrreq) PdnsRequestPing -> putStrLn "END" --- for testing +-- query by key from Namecoin -ask str = do +mainOne key = do cfg <- readConfig confFile mgr <- newManager def - queryNmc mgr cfg "askid" str >>= putStr . (pdnsOut 1 "askid" str RRTypeANY) + dom <- queryDom (queryOpNmc cfg mgr "_") key + putStrLn $ ppShow dom + putStr $ pdnsOut 1 "_" key RRTypeANY dom + +-- using file backend for testing json domain data + +mainFile key = do + dom <- queryDom queryOpFile key + putStrLn $ ppShow dom + putStr $ pdnsOut 1 "+" key RRTypeANY dom + +-- Entry point + +main = do + args <- getArgs + case args of + [] -> mainPdnsNmc + [key] -> mainOne key + ["-f",key] -> mainFile key + _ -> error $ "usage: empty args, or \"[-f] \""