whois-parser-next 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +80 -0
- data/CODE_OF_CONDUCT.md +30 -0
- data/CONTRIBUTING.md +80 -0
- data/GOVERNANCE.md +59 -0
- data/LICENSE.txt +22 -0
- data/MAINTAINERS.md +44 -0
- data/README.md +123 -0
- data/RELEASING.md +43 -0
- data/ROADMAP.md +59 -0
- data/SECURITY.md +41 -0
- data/lib/whois/parser/contact.rb +56 -0
- data/lib/whois/parser/errors.rb +46 -0
- data/lib/whois/parser/nameserver.rb +39 -0
- data/lib/whois/parser/registrar.rb +25 -0
- data/lib/whois/parser/super_struct.rb +50 -0
- data/lib/whois/parser/version.rb +6 -0
- data/lib/whois/parser.rb +447 -0
- data/lib/whois/parser_extensions/whois.rb +83 -0
- data/lib/whois/parser_extensions/whois_parser.rb +24 -0
- data/lib/whois/parser_extensions/whois_record.rb +236 -0
- data/lib/whois/parser_extensions.rb +3 -0
- data/lib/whois/parsers/base.rb +413 -0
- data/lib/whois/parsers/base_afilias.rb +144 -0
- data/lib/whois/parsers/base_afilias2.rb +145 -0
- data/lib/whois/parsers/base_cocca.rb +97 -0
- data/lib/whois/parsers/base_cocca2.rb +93 -0
- data/lib/whois/parsers/base_icann_compliant.rb +158 -0
- data/lib/whois/parsers/base_icb.rb +51 -0
- data/lib/whois/parsers/base_iisse.rb +113 -0
- data/lib/whois/parsers/base_nic_fr.rb +175 -0
- data/lib/whois/parsers/base_shared1.rb +112 -0
- data/lib/whois/parsers/base_shared2.rb +130 -0
- data/lib/whois/parsers/base_shared3.rb +131 -0
- data/lib/whois/parsers/base_unsupported_registry.rb +30 -0
- data/lib/whois/parsers/base_verisign.rb +106 -0
- data/lib/whois/parsers/base_whoisd.rb +150 -0
- data/lib/whois/parsers/blank.rb +35 -0
- data/lib/whois/parsers/capetown-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/ccwhois.ksregistry.net.rb +25 -0
- data/lib/whois/parsers/ccwhois.verisign-grs.com.rb +25 -0
- data/lib/whois/parsers/coza-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/durban-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/example.rb +163 -0
- data/lib/whois/parsers/joburg-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/kero.yachay.pe.rb +97 -0
- data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
- data/lib/whois/parsers/registry_response_safety.rb +29 -0
- data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
- data/lib/whois/parsers/vunic.vu.rb +11 -0
- data/lib/whois/parsers/whois.1und1.info.rb +28 -0
- data/lib/whois/parsers/whois.35.com.rb +23 -0
- data/lib/whois/parsers/whois.aeda.net.ae.rb +65 -0
- data/lib/whois/parsers/whois.aero.rb +58 -0
- data/lib/whois/parsers/whois.afilias-grs.info.rb +33 -0
- data/lib/whois/parsers/whois.afilias-srs.net.rb +16 -0
- data/lib/whois/parsers/whois.afilias.net.rb +41 -0
- data/lib/whois/parsers/whois.amnic.net.rb +81 -0
- data/lib/whois/parsers/whois.ascio.com.rb +29 -0
- data/lib/whois/parsers/whois.ati.tn.rb +120 -0
- data/lib/whois/parsers/whois.auda.org.au.rb +12 -0
- data/lib/whois/parsers/whois.audns.net.au.rb +118 -0
- data/lib/whois/parsers/whois.ax.rb +64 -0
- data/lib/whois/parsers/whois.biz.rb +34 -0
- data/lib/whois/parsers/whois.bnnic.bn.rb +77 -0
- data/lib/whois/parsers/whois.cat.rb +75 -0
- data/lib/whois/parsers/whois.cctld.by.rb +98 -0
- data/lib/whois/parsers/whois.cctld.uz.rb +83 -0
- data/lib/whois/parsers/whois.cdmon.com.rb +23 -0
- data/lib/whois/parsers/whois.centralnic.com.rb +144 -0
- data/lib/whois/parsers/whois.cira.ca.rb +227 -0
- data/lib/whois/parsers/whois.cmc.iq.rb +25 -0
- data/lib/whois/parsers/whois.cnnic.cn.rb +108 -0
- data/lib/whois/parsers/whois.co.ca.rb +74 -0
- data/lib/whois/parsers/whois.co.pl.rb +82 -0
- data/lib/whois/parsers/whois.co.ug.rb +93 -0
- data/lib/whois/parsers/whois.comlaude.com.rb +113 -0
- data/lib/whois/parsers/whois.corporatedomains.com.rb +28 -0
- data/lib/whois/parsers/whois.denic.de.rb +164 -0
- data/lib/whois/parsers/whois.dk-hostmaster.dk.rb +88 -0
- data/lib/whois/parsers/whois.dns.be.rb +120 -0
- data/lib/whois/parsers/whois.dns.hr.rb +119 -0
- data/lib/whois/parsers/whois.dns.lu.rb +125 -0
- data/lib/whois/parsers/whois.dns.pl.rb +151 -0
- data/lib/whois/parsers/whois.dns.pt.rb +92 -0
- data/lib/whois/parsers/whois.domain-registry.nl.rb +133 -0
- data/lib/whois/parsers/whois.domainregistry.ie.rb +128 -0
- data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
- data/lib/whois/parsers/whois.donuts.co.rb +59 -0
- data/lib/whois/parsers/whois.dot.cf.rb +71 -0
- data/lib/whois/parsers/whois.dot.tk.rb +70 -0
- data/lib/whois/parsers/whois.dotgov.gov.rb +58 -0
- data/lib/whois/parsers/whois.dotmobiregistry.net.rb +21 -0
- data/lib/whois/parsers/whois.dotpostregistry.net.rb +25 -0
- data/lib/whois/parsers/whois.dreamhost.com.rb +23 -0
- data/lib/whois/parsers/whois.educause.edu.rb +198 -0
- data/lib/whois/parsers/whois.eenet.ee.rb +72 -0
- data/lib/whois/parsers/whois.enom.com.rb +34 -0
- data/lib/whois/parsers/whois.eu.org.rb +58 -0
- data/lib/whois/parsers/whois.eu.rb +130 -0
- data/lib/whois/parsers/whois.fi.rb +119 -0
- data/lib/whois/parsers/whois.gandi.net.rb +36 -0
- data/lib/whois/parsers/whois.gg.rb +93 -0
- data/lib/whois/parsers/whois.godaddy.com.rb +42 -0
- data/lib/whois/parsers/whois.gov.za.rb +60 -0
- data/lib/whois/parsers/whois.hkirc.hk.rb +71 -0
- data/lib/whois/parsers/whois.iana.org.rb +102 -0
- data/lib/whois/parsers/whois.id.rb +26 -0
- data/lib/whois/parsers/whois.iedr.ie.rb +18 -0
- data/lib/whois/parsers/whois.iis.nu.rb +46 -0
- data/lib/whois/parsers/whois.iis.se.rb +26 -0
- data/lib/whois/parsers/whois.in.ua.rb +75 -0
- data/lib/whois/parsers/whois.inregistry.net.rb +27 -0
- data/lib/whois/parsers/whois.isnic.is.rb +70 -0
- data/lib/whois/parsers/whois.isoc.org.il.rb +75 -0
- data/lib/whois/parsers/whois.ja.net.rb +75 -0
- data/lib/whois/parsers/whois.je.rb +75 -0
- data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
- data/lib/whois/parsers/whois.kenic.or.ke.rb +93 -0
- data/lib/whois/parsers/whois.kg.rb +77 -0
- data/lib/whois/parsers/whois.kr.rb +79 -0
- data/lib/whois/parsers/whois.markmonitor.com.rb +36 -0
- data/lib/whois/parsers/whois.marnet.mk.rb +20 -0
- data/lib/whois/parsers/whois.monic.mo.rb +83 -0
- data/lib/whois/parsers/whois.museum.rb +79 -0
- data/lib/whois/parsers/whois.mx.rb +16 -0
- data/lib/whois/parsers/whois.mynic.my.rb +86 -0
- data/lib/whois/parsers/whois.na-nic.com.na.rb +21 -0
- data/lib/whois/parsers/whois.nc.rb +122 -0
- data/lib/whois/parsers/whois.netcom.cm.rb +54 -0
- data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
- data/lib/whois/parsers/whois.nic.ac.rb +33 -0
- data/lib/whois/parsers/whois.nic.af.rb +32 -0
- data/lib/whois/parsers/whois.nic.ag.rb +33 -0
- data/lib/whois/parsers/whois.nic.ai.rb +62 -0
- data/lib/whois/parsers/whois.nic.ar.rb +54 -0
- data/lib/whois/parsers/whois.nic.art.rb +9 -0
- data/lib/whois/parsers/whois.nic.as.rb +73 -0
- data/lib/whois/parsers/whois.nic.asia.rb +112 -0
- data/lib/whois/parsers/whois.nic.at.rb +68 -0
- data/lib/whois/parsers/whois.nic.best.rb +9 -0
- data/lib/whois/parsers/whois.nic.bj.rb +127 -0
- data/lib/whois/parsers/whois.nic.bo.rb +82 -0
- data/lib/whois/parsers/whois.nic.business.rb +8 -0
- data/lib/whois/parsers/whois.nic.cat.rb +23 -0
- data/lib/whois/parsers/whois.nic.cd.rb +38 -0
- data/lib/whois/parsers/whois.nic.cfd.rb +9 -0
- data/lib/whois/parsers/whois.nic.ch.rb +109 -0
- data/lib/whois/parsers/whois.nic.chat.rb +10 -0
- data/lib/whois/parsers/whois.nic.ci.rb +74 -0
- data/lib/whois/parsers/whois.nic.cl.rb +76 -0
- data/lib/whois/parsers/whois.nic.cloud.rb +15 -0
- data/lib/whois/parsers/whois.nic.club.rb +15 -0
- data/lib/whois/parsers/whois.nic.co.rb +25 -0
- data/lib/whois/parsers/whois.nic.college.rb +25 -0
- data/lib/whois/parsers/whois.nic.coop.rb +70 -0
- data/lib/whois/parsers/whois.nic.cr.rb +64 -0
- data/lib/whois/parsers/whois.nic.cx.rb +25 -0
- data/lib/whois/parsers/whois.nic.cz.rb +42 -0
- data/lib/whois/parsers/whois.nic.delivery.rb +9 -0
- data/lib/whois/parsers/whois.nic.design.rb +30 -0
- data/lib/whois/parsers/whois.nic.direct.rb +9 -0
- data/lib/whois/parsers/whois.nic.dm.rb +39 -0
- data/lib/whois/parsers/whois.nic.domains.rb +8 -0
- data/lib/whois/parsers/whois.nic.dz.rb +67 -0
- data/lib/whois/parsers/whois.nic.ec.rb +44 -0
- data/lib/whois/parsers/whois.nic.es.rb +114 -0
- data/lib/whois/parsers/whois.nic.fm.rb +18 -0
- data/lib/whois/parsers/whois.nic.fo.rb +69 -0
- data/lib/whois/parsers/whois.nic.fr.rb +25 -0
- data/lib/whois/parsers/whois.nic.fun.rb +13 -0
- data/lib/whois/parsers/whois.nic.games.rb +9 -0
- data/lib/whois/parsers/whois.nic.gd.rb +31 -0
- data/lib/whois/parsers/whois.nic.gl.rb +49 -0
- data/lib/whois/parsers/whois.nic.group.rb +8 -0
- data/lib/whois/parsers/whois.nic.gs.rb +31 -0
- data/lib/whois/parsers/whois.nic.hn.rb +49 -0
- data/lib/whois/parsers/whois.nic.host.rb +37 -0
- data/lib/whois/parsers/whois.nic.ht.rb +25 -0
- data/lib/whois/parsers/whois.nic.hu.rb +78 -0
- data/lib/whois/parsers/whois.nic.icu.rb +12 -0
- data/lib/whois/parsers/whois.nic.im.rb +66 -0
- data/lib/whois/parsers/whois.nic.ink.rb +12 -0
- data/lib/whois/parsers/whois.nic.io.rb +52 -0
- data/lib/whois/parsers/whois.nic.ir.rb +70 -0
- data/lib/whois/parsers/whois.nic.it.rb +159 -0
- data/lib/whois/parsers/whois.nic.jobs.rb +25 -0
- data/lib/whois/parsers/whois.nic.ki.rb +25 -0
- data/lib/whois/parsers/whois.nic.kz.rb +69 -0
- data/lib/whois/parsers/whois.nic.la.rb +32 -0
- data/lib/whois/parsers/whois.nic.li.rb +68 -0
- data/lib/whois/parsers/whois.nic.life.rb +10 -0
- data/lib/whois/parsers/whois.nic.link.rb +13 -0
- data/lib/whois/parsers/whois.nic.lk.rb +109 -0
- data/lib/whois/parsers/whois.nic.ltd.rb +8 -0
- data/lib/whois/parsers/whois.nic.lv.rb +69 -0
- data/lib/whois/parsers/whois.nic.ly.rb +78 -0
- data/lib/whois/parsers/whois.nic.market.rb +8 -0
- data/lib/whois/parsers/whois.nic.md.rb +101 -0
- data/lib/whois/parsers/whois.nic.me.rb +85 -0
- data/lib/whois/parsers/whois.nic.mg.rb +35 -0
- data/lib/whois/parsers/whois.nic.ms.rb +37 -0
- data/lib/whois/parsers/whois.nic.mu.rb +25 -0
- data/lib/whois/parsers/whois.nic.mw.rb +33 -0
- data/lib/whois/parsers/whois.nic.mx.rb +79 -0
- data/lib/whois/parsers/whois.nic.name.rb +68 -0
- data/lib/whois/parsers/whois.nic.net.bw.rb +11 -0
- data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
- data/lib/whois/parsers/whois.nic.net.sa.rb +74 -0
- data/lib/whois/parsers/whois.nic.net.sb.rb +35 -0
- data/lib/whois/parsers/whois.nic.news.rb +8 -0
- data/lib/whois/parsers/whois.nic.nf.rb +50 -0
- data/lib/whois/parsers/whois.nic.ninja.rb +8 -0
- data/lib/whois/parsers/whois.nic.one.rb +41 -0
- data/lib/whois/parsers/whois.nic.online.rb +39 -0
- data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
- data/lib/whois/parsers/whois.nic.plus.rb +8 -0
- data/lib/whois/parsers/whois.nic.pm.rb +25 -0
- data/lib/whois/parsers/whois.nic.pr.rb +84 -0
- data/lib/whois/parsers/whois.nic.priv.at.rb +62 -0
- data/lib/whois/parsers/whois.nic.pub.rb +8 -0
- data/lib/whois/parsers/whois.nic.pw.rb +25 -0
- data/lib/whois/parsers/whois.nic.re.rb +29 -0
- data/lib/whois/parsers/whois.nic.rocks.rb +8 -0
- data/lib/whois/parsers/whois.nic.run.rb +8 -0
- data/lib/whois/parsers/whois.nic.sh.rb +25 -0
- data/lib/whois/parsers/whois.nic.site.rb +62 -0
- data/lib/whois/parsers/whois.nic.sl.rb +80 -0
- data/lib/whois/parsers/whois.nic.sm.rb +84 -0
- data/lib/whois/parsers/whois.nic.sn.rb +119 -0
- data/lib/whois/parsers/whois.nic.so.rb +71 -0
- data/lib/whois/parsers/whois.nic.software.rb +9 -0
- data/lib/whois/parsers/whois.nic.solutions.rb +9 -0
- data/lib/whois/parsers/whois.nic.space.rb +25 -0
- data/lib/whois/parsers/whois.nic.st.rb +76 -0
- data/lib/whois/parsers/whois.nic.store.rb +15 -0
- data/lib/whois/parsers/whois.nic.studio.rb +8 -0
- data/lib/whois/parsers/whois.nic.systems.rb +8 -0
- data/lib/whois/parsers/whois.nic.tc.rb +25 -0
- data/lib/whois/parsers/whois.nic.tech.rb +33 -0
- data/lib/whois/parsers/whois.nic.technology.rb +8 -0
- data/lib/whois/parsers/whois.nic.tel.rb +25 -0
- data/lib/whois/parsers/whois.nic.tg.rb +49 -0
- data/lib/whois/parsers/whois.nic.tl.rb +32 -0
- data/lib/whois/parsers/whois.nic.tm.rb +101 -0
- data/lib/whois/parsers/whois.nic.today.rb +8 -0
- data/lib/whois/parsers/whois.nic.tools.rb +9 -0
- data/lib/whois/parsers/whois.nic.tr.rb +159 -0
- data/lib/whois/parsers/whois.nic.travel.rb +25 -0
- data/lib/whois/parsers/whois.nic.tv.rb +15 -0
- data/lib/whois/parsers/whois.nic.uk.rb +177 -0
- data/lib/whois/parsers/whois.nic.us.rb +25 -0
- data/lib/whois/parsers/whois.nic.ve.rb +94 -0
- data/lib/whois/parsers/whois.nic.vg.rb +16 -0
- data/lib/whois/parsers/whois.nic.video.rb +10 -0
- data/lib/whois/parsers/whois.nic.vip.rb +13 -0
- data/lib/whois/parsers/whois.nic.website.rb +9 -0
- data/lib/whois/parsers/whois.nic.wf.rb +29 -0
- data/lib/whois/parsers/whois.nic.win.rb +10 -0
- data/lib/whois/parsers/whois.nic.work.rb +10 -0
- data/lib/whois/parsers/whois.nic.works.rb +8 -0
- data/lib/whois/parsers/whois.nic.world.rb +10 -0
- data/lib/whois/parsers/whois.nic.xxx.rb +42 -0
- data/lib/whois/parsers/whois.nic.xyz.rb +25 -0
- data/lib/whois/parsers/whois.nixiregistry.in.rb +15 -0
- data/lib/whois/parsers/whois.norid.no.rb +61 -0
- data/lib/whois/parsers/whois.ovh.com.rb +12 -0
- data/lib/whois/parsers/whois.pairnic.com.rb +28 -0
- data/lib/whois/parsers/whois.pandi.or.id.rb +25 -0
- data/lib/whois/parsers/whois.pir.org.rb +90 -0
- data/lib/whois/parsers/whois.pnina.ps.rb +31 -0
- data/lib/whois/parsers/whois.register.bg.rb +86 -0
- data/lib/whois/parsers/whois.register.com.rb +30 -0
- data/lib/whois/parsers/whois.register.si.rb +73 -0
- data/lib/whois/parsers/whois.registre.ma.rb +65 -0
- data/lib/whois/parsers/whois.registro.br.rb +126 -0
- data/lib/whois/parsers/whois.registry.co.rb +19 -0
- data/lib/whois/parsers/whois.registry.gy.rb +32 -0
- data/lib/whois/parsers/whois.registry.hm.rb +72 -0
- data/lib/whois/parsers/whois.registry.om.rb +40 -0
- data/lib/whois/parsers/whois.registry.qa.rb +25 -0
- data/lib/whois/parsers/whois.ricta.org.rw.rb +16 -0
- data/lib/whois/parsers/whois.ripe.net.rb +68 -0
- data/lib/whois/parsers/whois.rnids.rs.rb +135 -0
- data/lib/whois/parsers/whois.rotld.ro.rb +65 -0
- data/lib/whois/parsers/whois.rrpproxy.net.rb +32 -0
- data/lib/whois/parsers/whois.safenames.net.rb +48 -0
- data/lib/whois/parsers/whois.schlund.info.rb +34 -0
- data/lib/whois/parsers/whois.sgnic.sg.rb +92 -0
- data/lib/whois/parsers/whois.sk-nic.sk.rb +111 -0
- data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
- data/lib/whois/parsers/whois.srs.net.nz.rb +177 -0
- data/lib/whois/parsers/whois.sx.rb +127 -0
- data/lib/whois/parsers/whois.tcinet.ru.rb +114 -0
- data/lib/whois/parsers/whois.thnic.co.th.rb +80 -0
- data/lib/whois/parsers/whois.tld.ee.rb +134 -0
- data/lib/whois/parsers/whois.tld.sy.rb +34 -0
- data/lib/whois/parsers/whois.tonic.to.rb +100 -0
- data/lib/whois/parsers/whois.tonicregistry.to.rb +12 -0
- data/lib/whois/parsers/whois.trabis.gov.tr.rb +58 -0
- data/lib/whois/parsers/whois.tucows.com.rb +28 -0
- data/lib/whois/parsers/whois.twnic.net.tw.rb +72 -0
- data/lib/whois/parsers/whois.tznic.or.tz.rb +36 -0
- data/lib/whois/parsers/whois.ua.rb +242 -0
- data/lib/whois/parsers/whois.udag.net.rb +28 -0
- data/lib/whois/parsers/whois.uniregistry.net.rb +71 -0
- data/lib/whois/parsers/whois.usp.ac.fj.rb +72 -0
- data/lib/whois/parsers/whois.verisign-grs.com.rb +49 -0
- data/lib/whois/parsers/whois.vunic.vu.rb +14 -0
- data/lib/whois/parsers/whois.website.ws.rb +79 -0
- data/lib/whois/parsers/whois.wildwestdomains.com.rb +37 -0
- data/lib/whois/parsers/whois.yoursrs.com.rb +125 -0
- data/lib/whois/parsers/whois.za.net.rb +72 -0
- data/lib/whois/parsers/whois.za.org.rb +72 -0
- data/lib/whois/parsers/whois.zicta.zm.rb +13 -0
- data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
- data/lib/whois/parsers/za_central_registry.rb +80 -0
- data/lib/whois/parsers.rb +1 -0
- data/lib/whois/safe_record.rb +170 -0
- data/lib/whois/scanners/base.rb +114 -0
- data/lib/whois/scanners/base_afilias.rb +51 -0
- data/lib/whois/scanners/base_cocca2.rb +58 -0
- data/lib/whois/scanners/base_icann_compliant.rb +45 -0
- data/lib/whois/scanners/base_iisse.rb +36 -0
- data/lib/whois/scanners/base_shared1.rb +31 -0
- data/lib/whois/scanners/base_shared2.rb +35 -0
- data/lib/whois/scanners/base_shared3.rb +37 -0
- data/lib/whois/scanners/base_whoisd.rb +44 -0
- data/lib/whois/scanners/iana.rb +89 -0
- data/lib/whois/scanners/scannable.rb +65 -0
- data/lib/whois/scanners/verisign.rb +100 -0
- data/lib/whois/scanners/whois.ati.tn.rb +32 -0
- data/lib/whois/scanners/whois.audns.net.au.rb +32 -0
- data/lib/whois/scanners/whois.cctld.by.rb +35 -0
- data/lib/whois/scanners/whois.centralnic.com.rb +32 -0
- data/lib/whois/scanners/whois.cira.ca.rb +72 -0
- data/lib/whois/scanners/whois.cnnic.cn.rb +42 -0
- data/lib/whois/scanners/whois.denic.de.rb +103 -0
- data/lib/whois/scanners/whois.dns.hr.rb +30 -0
- data/lib/whois/scanners/whois.domainregistry.ie.rb +51 -0
- data/lib/whois/scanners/whois.fi.rb +66 -0
- data/lib/whois/scanners/whois.nc.rb +32 -0
- data/lib/whois/scanners/whois.nic.cz.rb +22 -0
- data/lib/whois/scanners/whois.nic.it.rb +92 -0
- data/lib/whois/scanners/whois.pir.org.rb +17 -0
- data/lib/whois/scanners/whois.rnids.rs.rb +52 -0
- data/lib/whois/scanners/whois.smallregistry.net.rb +50 -0
- data/lib/whois/scanners/whois.srs.net.nz.rb +23 -0
- data/lib/whois/scanners/whois.sx.rb +37 -0
- data/lib/whois/scanners/whois.tld.ee.rb +47 -0
- data/lib/whois/scanners/whois.tucows.com.rb +23 -0
- data/lib/whois/scanners/whois.yoursrs.com.rb +24 -0
- data/lib/whois-parser.rb +10 -0
- metadata +507 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
# Parser for the whois.rotld.ro server.
|
|
17
|
+
#
|
|
18
|
+
# @note This parser is just a stub and provides only a few basic methods
|
|
19
|
+
# to check for domain availability and get domain status.
|
|
20
|
+
# Please consider to contribute implementing missing methods.
|
|
21
|
+
#
|
|
22
|
+
# @see Whois::Parsers::Example
|
|
23
|
+
# The Example parser for the list of all available methods.
|
|
24
|
+
#
|
|
25
|
+
class WhoisRotldRo < Base
|
|
26
|
+
|
|
27
|
+
property_supported :status do
|
|
28
|
+
if content_for_scanner =~ /Domain Status:\s(.+?)\n/
|
|
29
|
+
case ::Regexp.last_match(1).downcase
|
|
30
|
+
when "ok", "updateprohibited"
|
|
31
|
+
:registered
|
|
32
|
+
else
|
|
33
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
:available
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
property_supported :available? do
|
|
41
|
+
!!(content_for_scanner =~ /^% No entries found/)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
property_supported :registered? do
|
|
45
|
+
!available?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
property_not_supported :created_on
|
|
50
|
+
|
|
51
|
+
property_not_supported :updated_on
|
|
52
|
+
|
|
53
|
+
property_not_supported :expires_on
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
property_supported :nameservers do
|
|
57
|
+
content_for_scanner.scan(/Nameserver:\s+(.+)\n/).flatten.map do |name|
|
|
58
|
+
Parser::Nameserver.new(name: name)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base_icann_compliant'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
# Parser for the whois.rrpproxy.net server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisRrpproxyNet < BaseIcannCompliant
|
|
22
|
+
self.scanner = Scanners::BaseIcannCompliant, {
|
|
23
|
+
pattern_available: /^No match for "[\w.]+"\.\n/,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
property_not_supported :expires_on
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base_icann_compliant'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
# Parser for the whois.safenames.net server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisSafenamesNet < BaseIcannCompliant
|
|
22
|
+
self.scanner = Scanners::BaseIcannCompliant, {
|
|
23
|
+
pattern_available: /^No match for "[\w.]+"\.\n/,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
property_supported :created_on do
|
|
27
|
+
node('Created Date') do |value|
|
|
28
|
+
parse_time(value)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def contact_organization_attribute(element)
|
|
36
|
+
value_for_property(element, 'Organisation')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def contact_address_attribute(element)
|
|
40
|
+
address = (1..2)
|
|
41
|
+
.map { |i| node("#{element} Address Line #{i}") }
|
|
42
|
+
.compact.join("\n").chomp
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base_icann_compliant'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
# Parser for the whois.schlund.info server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisSchlundInfo < BaseIcannCompliant
|
|
22
|
+
self.scanner = Scanners::BaseIcannCompliant, {
|
|
23
|
+
pattern_available: /^Domain [\w.]+ is not registered here\.\n/,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
property_supported :updated_on do
|
|
27
|
+
node('Updated Date') do |value|
|
|
28
|
+
parse_time(value)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
require_relative 'registry_response_safety'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# = whois.sgnic.sg parser
|
|
19
|
+
#
|
|
20
|
+
# Parser for the whois.sgnic.sg server.
|
|
21
|
+
#
|
|
22
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
|
23
|
+
# to check for domain availability and get domain status.
|
|
24
|
+
# Please consider to contribute implementing missing methods.
|
|
25
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
|
26
|
+
# and examples.
|
|
27
|
+
#
|
|
28
|
+
class WhoisSgnicSg < Base
|
|
29
|
+
include RegistryResponseSafety
|
|
30
|
+
|
|
31
|
+
property_supported :status do
|
|
32
|
+
content_for_scanner.scan(/^\s*Domain Status:\s+(.+?)\s*$/).flatten
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
property_supported :available? do
|
|
36
|
+
!!(content_for_scanner.strip =~ /\ADomain Not Found\z|\ANot found: \S+\z/i)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
property_supported :registered? do
|
|
40
|
+
!available? && !status.empty?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
property_supported :created_on do
|
|
45
|
+
if content_for_scanner =~ /^\s*Creation Date:\s+(.*)$/
|
|
46
|
+
parse_time(::Regexp.last_match(1))
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
property_not_supported :updated_on
|
|
51
|
+
|
|
52
|
+
property_supported :expires_on do
|
|
53
|
+
if content_for_scanner =~ /^\s*Expiration Date:\s+(.*)$/
|
|
54
|
+
parse_time(::Regexp.last_match(1))
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
property_supported :nameservers do
|
|
60
|
+
current = content_for_scanner.scan(/^\s*Name Server:\s+(.+?)\s*$/).flatten
|
|
61
|
+
if current.empty? && content_for_scanner =~ /Name Servers:\n((.+\n)+)\n/
|
|
62
|
+
values = case value = ::Regexp.last_match(1).downcase
|
|
63
|
+
# schema-1
|
|
64
|
+
when /^(?:\s+([\w.-]+)\n){2,}/
|
|
65
|
+
value.scan(/\s+([\w.-]+)\n/).map do |match|
|
|
66
|
+
{ :name => match[0] }
|
|
67
|
+
end
|
|
68
|
+
when /^(?:\s+([\w.-]+)\s+\((.+)\)\n){2,}/
|
|
69
|
+
value.scan(/\s+([\w.-]+)\s+\((.+)\)\n/).map do |match|
|
|
70
|
+
{ :name => match[0], :ipv4 => match[1] }
|
|
71
|
+
end
|
|
72
|
+
# schema-2
|
|
73
|
+
when /^(?:\s+([\w.-]+)){2,}/
|
|
74
|
+
value.strip.split(/\s+/).map do |name|
|
|
75
|
+
{ :name => name }
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
Whois::Parser.bug!(ParserError, "Unknown nameservers format `#{value}'")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
values.map do |params|
|
|
82
|
+
Parser::Nameserver.new(params)
|
|
83
|
+
end
|
|
84
|
+
else
|
|
85
|
+
current.map { |name| Parser::Nameserver.new(name: name) }
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Parsers
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# = whois.sk-nic.sk parser
|
|
18
|
+
#
|
|
19
|
+
# Parser for the whois.sk-nic.sk server.
|
|
20
|
+
#
|
|
21
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
|
22
|
+
# to check for domain availability and get domain status.
|
|
23
|
+
# Please consider to contribute implementing missing methods.
|
|
24
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
|
25
|
+
# and examples.
|
|
26
|
+
#
|
|
27
|
+
class WhoisSkNicSk < Base
|
|
28
|
+
|
|
29
|
+
# == Values for Status
|
|
30
|
+
#
|
|
31
|
+
# @see https://www.sk-nic.sk/documents/stavy_domen.html
|
|
32
|
+
# @see http://www.inwx.de/en/sk-domain.html
|
|
33
|
+
#
|
|
34
|
+
property_supported :status do
|
|
35
|
+
if content_for_scanner =~ /^Domain(?:-|\s+)status:?\s+(.+)\n/i
|
|
36
|
+
case ::Regexp.last_match(1).downcase
|
|
37
|
+
# The domain is registered and paid.
|
|
38
|
+
when "dom_ok"
|
|
39
|
+
:registered
|
|
40
|
+
# The domain is registered and registration fee has to be payed (14 days).
|
|
41
|
+
# Replacement 14-day period for domain payment.
|
|
42
|
+
when "dom_ta"
|
|
43
|
+
:registered
|
|
44
|
+
# 28 days before the expiration of one year's notice is sent to the first call for an extension of domains.
|
|
45
|
+
# The domain is still fully functional (14 days).
|
|
46
|
+
when "dom_dakt"
|
|
47
|
+
:registered
|
|
48
|
+
# 14 days before the expiration of one year's notice is sent to the second call to the extension of domains.
|
|
49
|
+
# The domain is still fully functional (14 days).
|
|
50
|
+
when "dom_warn"
|
|
51
|
+
:registered
|
|
52
|
+
# The domain is expired and has not been renewed (14 days).
|
|
53
|
+
when "dom_lnot"
|
|
54
|
+
:registered
|
|
55
|
+
when "dom_exp"
|
|
56
|
+
:registered
|
|
57
|
+
# The domain losts its registrar (28 days).
|
|
58
|
+
when "dom_held"
|
|
59
|
+
:redemption
|
|
60
|
+
else
|
|
61
|
+
# Current responses expose EPP status values instead of the
|
|
62
|
+
# historical DOM_* values. Unknown values are not registration
|
|
63
|
+
# evidence and must not fall through to :registered.
|
|
64
|
+
epp_status = ::Regexp.last_match(1).split(',').map { |value| value.strip.downcase }
|
|
65
|
+
if epp_status.all? do |value|
|
|
66
|
+
value.match?(/\A(?:ok|active|inactive|pending(?:create|delete|renew|transfer|update)|(?:client|server)(?:create|delete|hold|renew|transfer|update)(?:prohibited)?)\z/)
|
|
67
|
+
end
|
|
68
|
+
:registered
|
|
69
|
+
else
|
|
70
|
+
:unknown
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
else
|
|
74
|
+
:available
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
property_supported :available? do
|
|
79
|
+
!!(content_for_scanner =~ /^(?:Not found|Domain not found)\.?\s*$/i)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
property_supported :registered? do
|
|
83
|
+
[:registered, :redemption].include?(status)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
property_not_supported :created_on
|
|
88
|
+
|
|
89
|
+
property_supported :updated_on do
|
|
90
|
+
if content_for_scanner =~ /^Last-update\s+(.+)\n/
|
|
91
|
+
parse_time(::Regexp.last_match(1))
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
property_supported :expires_on do
|
|
96
|
+
if content_for_scanner =~ /^Valid-date\s+(.+)\n/
|
|
97
|
+
parse_time(::Regexp.last_match(1))
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
property_supported :nameservers do
|
|
103
|
+
content_for_scanner.scan(/(?:dns_name|Nameserver:)\s+(.+)\n/i).flatten.map do |name|
|
|
104
|
+
Parser::Nameserver.new(:name => name)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
require 'whois/scanners/whois.smallregistry.net.rb'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
# Parser for the whois.smallregistry.net server.
|
|
18
|
+
#
|
|
19
|
+
# @author Mathieu Arnold <m@absolight.fr>
|
|
20
|
+
#
|
|
21
|
+
class WhoisSmallregistryNet < Base
|
|
22
|
+
include Scanners::Scannable
|
|
23
|
+
|
|
24
|
+
self.scanner = Scanners::WhoisSmallregistryNet
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
property_supported :disclaimer do
|
|
28
|
+
node("field:disclaimer") do |alpha|
|
|
29
|
+
alpha.scan(/# (.+)\n/).flatten.map do |beta|
|
|
30
|
+
token = beta.strip
|
|
31
|
+
token.gsub!(/\s+/, " ")
|
|
32
|
+
end.join(" ").gsub!(/(\s{2})/, "\n")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
property_supported :domain do
|
|
38
|
+
node("name")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
property_not_supported :domain_id
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
property_supported :status do
|
|
45
|
+
if node?("status:available")
|
|
46
|
+
:available
|
|
47
|
+
else
|
|
48
|
+
case node("status")
|
|
49
|
+
when "ACTIVE"
|
|
50
|
+
:registered
|
|
51
|
+
else
|
|
52
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{node('field:status')}'.")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
property_supported :available? do
|
|
58
|
+
status == :available
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
property_supported :registered? do
|
|
62
|
+
!available?
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
property_supported :created_on do
|
|
67
|
+
node("created") { |str| parse_time(str) }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
property_supported :updated_on do
|
|
71
|
+
node("updated") { |str| parse_time(str) }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
property_supported :expires_on do
|
|
75
|
+
node("expired") { |str| parse_time(str) }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
property_supported :registrar do
|
|
80
|
+
node("registrar") do |hash|
|
|
81
|
+
v1, v2, v3, v4 = hash.values_at('nil', 'name', 'name', 'web')
|
|
82
|
+
Parser::Registrar.new(
|
|
83
|
+
:id => v1,
|
|
84
|
+
:name => v2,
|
|
85
|
+
:organization => v3,
|
|
86
|
+
:url => v4
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
property_supported :registrant_contacts do
|
|
92
|
+
build_contact("registrant", Parser::Contact::TYPE_REGISTRANT)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
property_supported :admin_contacts do
|
|
96
|
+
build_contact("administrative_contact", Parser::Contact::TYPE_ADMINISTRATIVE)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
property_supported :technical_contacts do
|
|
100
|
+
build_contact("technical_contact", Parser::Contact::TYPE_TECHNICAL)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
property_supported :nameservers do
|
|
105
|
+
Array.wrap(node("name_servers")).map do |hash|
|
|
106
|
+
Parser::Nameserver.new(:name => hash)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
def build_contact(element, type)
|
|
114
|
+
node(element) do |hash|
|
|
115
|
+
Parser::Contact.new(
|
|
116
|
+
:type => type,
|
|
117
|
+
:id => hash['nic-handle'],
|
|
118
|
+
:name => hash['name'],
|
|
119
|
+
:organization => hash['company'],
|
|
120
|
+
:address => hash['address'],
|
|
121
|
+
:phone => hash['phone'],
|
|
122
|
+
:fax => hash['fax'],
|
|
123
|
+
:email => hash['mobile'],
|
|
124
|
+
:updated_on => parse_time(hash['updated'])
|
|
125
|
+
)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require_relative 'base'
|
|
11
|
+
require 'whois/scanners/whois.srs.net.nz.rb'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
# Parser for the whois.srs.net.nz server.
|
|
18
|
+
#
|
|
19
|
+
# @see Whois::Parsers::Example
|
|
20
|
+
# The Example parser for the list of all available methods.
|
|
21
|
+
#
|
|
22
|
+
class WhoisSrsNetNz < Base
|
|
23
|
+
include Scanners::Scannable
|
|
24
|
+
|
|
25
|
+
self.scanner = Scanners::WhoisSrsNetNz
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
property_supported :domain do
|
|
29
|
+
node("domain_name") || content_for_scanner[/^Domain Name:\s*(.+)$/i, 1]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
property_not_supported :domain_id
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# @see http://dnc.org.nz/content/srs-whois-spec-1.0.html
|
|
36
|
+
property_supported :status do
|
|
37
|
+
value = node("query_status")
|
|
38
|
+
value ||= if content_for_scanner.match?(/^Not found:\s/i)
|
|
39
|
+
"220 Available"
|
|
40
|
+
elsif content_for_scanner.match?(/^Domain Name:\s/i) &&
|
|
41
|
+
content_for_scanner.match?(/^Domain Status:\s+\S+/i)
|
|
42
|
+
"200 Active"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if value
|
|
46
|
+
case value.downcase
|
|
47
|
+
when "200 active"
|
|
48
|
+
:registered
|
|
49
|
+
# The domain is no longer active but is in the period prior
|
|
50
|
+
# to being released for general registrations
|
|
51
|
+
when "210 pendingrelease"
|
|
52
|
+
:redemption
|
|
53
|
+
when "220 available"
|
|
54
|
+
:available
|
|
55
|
+
when "404 request denied"
|
|
56
|
+
:error
|
|
57
|
+
when /invalid characters/
|
|
58
|
+
:invalid
|
|
59
|
+
else
|
|
60
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{value}'.")
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
:unknown
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
property_supported :available? do
|
|
68
|
+
status == :available
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
property_supported :registered? do
|
|
72
|
+
[:registered, :redemption].include?(status)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
property_supported :created_on do
|
|
77
|
+
node("domain_dateregistered") { |value| parse_time(value) }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
property_supported :updated_on do
|
|
81
|
+
node("domain_datelastmodified") { |value| parse_time(value) }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
property_supported :expires_on do
|
|
85
|
+
node("domain_datebilleduntil") { |value| parse_time(value) }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
property_supported :registrar do
|
|
90
|
+
node("registrar_name") do |value|
|
|
91
|
+
Parser::Registrar.new(
|
|
92
|
+
name: value
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
property_supported :registrant_contacts do
|
|
98
|
+
build_contact("registrant", Parser::Contact::TYPE_REGISTRANT)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
property_supported :admin_contacts do
|
|
102
|
+
build_contact("admin", Parser::Contact::TYPE_ADMINISTRATIVE)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
property_supported :technical_contacts do
|
|
106
|
+
build_contact("technical", Parser::Contact::TYPE_TECHNICAL)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
property_supported :nameservers do
|
|
111
|
+
nameservers = (1..4).map do |i|
|
|
112
|
+
node("ns_name_0#{i}") { |value| Parser::Nameserver.new(name: value) }
|
|
113
|
+
end.compact
|
|
114
|
+
|
|
115
|
+
if nameservers.empty?
|
|
116
|
+
content_for_scanner.scan(/^Name Server:\s*(.+)$/i).map do |name|
|
|
117
|
+
Parser::Nameserver.new(name: name.first)
|
|
118
|
+
end
|
|
119
|
+
else
|
|
120
|
+
nameservers
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# Checks whether the response has been throttled.
|
|
126
|
+
#
|
|
127
|
+
# @return [Boolean]
|
|
128
|
+
#
|
|
129
|
+
# @example
|
|
130
|
+
# query_status: 440 Request Denied
|
|
131
|
+
#
|
|
132
|
+
def response_throttled?
|
|
133
|
+
cached_properties_fetch(:response_throttled?) do
|
|
134
|
+
node("query_status") == "440 Request Denied"
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
# NEWPROPERTY
|
|
140
|
+
def valid?
|
|
141
|
+
cached_properties_fetch(:valid?) do
|
|
142
|
+
!invalid?
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# NEWPROPERTY
|
|
147
|
+
def invalid?
|
|
148
|
+
cached_properties_fetch(:invalid?) do
|
|
149
|
+
status == :invalid
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
private
|
|
155
|
+
|
|
156
|
+
def build_contact(element, type)
|
|
157
|
+
node("#{element}_contact_name") do
|
|
158
|
+
Parser::Contact.new(
|
|
159
|
+
type: type,
|
|
160
|
+
id: nil,
|
|
161
|
+
name: node("#{element}_contact_name"),
|
|
162
|
+
address: node("#{element}_contact_address1"),
|
|
163
|
+
city: node("#{element}_contact_city"),
|
|
164
|
+
zip: node("#{element}_contact_postalcode"),
|
|
165
|
+
state: node("#{element}_contact_province"),
|
|
166
|
+
country: node("#{element}_contact_country"),
|
|
167
|
+
phone: node("#{element}_contact_phone"),
|
|
168
|
+
fax: node("#{element}_contact_fax"),
|
|
169
|
+
email: node("#{element}_contact_email")
|
|
170
|
+
)
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
end
|