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
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 64090073c595bd3cbd6e1a52628cf6d3481de3933b791d9338bf1793922dc6a4
|
|
4
|
+
data.tar.gz: b15050ea47d7662aedb25a2f0e6e0e8997c7c825b2de70e149dce0f85fd7dd8c
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8946d38a18bdb012fc79661fc31fcf67f4e63b7cdd728e14dacf48c77a72317322f145544d89b97725f292d4e1860a2aa9ba4842824378745541aea0e9408eee
|
|
7
|
+
data.tar.gz: 8d10ae4db2cfdf8aee03bc17d4867afd56e03dfa19ddcf4ca31610acbd4957bad49a34a3c6fbbbc2988c77ae42c7f86e1c4ae8e1f2a0bd1342ffe5febd68bbbe
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This project uses [Semantic Versioning 2.0.0](http://semver.org/).
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
#### Unreleased 0.1.0
|
|
7
|
+
|
|
8
|
+
- CHANGED: Continued the project as `whois-parser-next`, with the original MIT
|
|
9
|
+
license, attribution, and Git history preserved.
|
|
10
|
+
- CHANGED: Established Ruby 3.2 as the minimum supported version and refreshed
|
|
11
|
+
the maintained dependency range.
|
|
12
|
+
- TESTED: Verified CI support through Ruby 4.0.7; Ruby 3.2 remains the minimum
|
|
13
|
+
supported version.
|
|
14
|
+
- ADDED: Audits and regression fixtures for current registry responses.
|
|
15
|
+
- ADDED: Documented the 2026-09-19 usage-ranked audit through rank 300, using the ICANN DNS
|
|
16
|
+
Magnitude snapshot dated 2026-09-12 and generated 2026-09-18, retaining
|
|
17
|
+
source daily-rank positions and classifying `.arpa` outside registrable-domain
|
|
18
|
+
parser scope.
|
|
19
|
+
- TESTED: The combined audit suite passes 6,640 examples with 0 failures.
|
|
20
|
+
- PACKAGING: The published gem is runtime-only, containing the library and
|
|
21
|
+
essential documentation while excluding tests, fixtures, and repository
|
|
22
|
+
automation.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#### Release 2.0.0
|
|
26
|
+
|
|
27
|
+
- CHANGED: Minimum Ruby version 2.6
|
|
28
|
+
|
|
29
|
+
- FIXED: Addressed security issues with eval and YAML.load. Thanks Francis Beaudoin
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
#### Release 1.2.0
|
|
33
|
+
|
|
34
|
+
- CHANGED: Updated .ORG parser to the latest response (GH-98, GH-97). [Thanks @talarini]
|
|
35
|
+
- CHANGED: Updated .IO, .AC, .SH, .TM parsers to the latest response.
|
|
36
|
+
- CHANGED: Renamed WhoisDomainKg to WhoisKg (GH-48)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#### Release 1.1.0
|
|
40
|
+
|
|
41
|
+
- NEW: Added .FM parser (GH-74). [Thanks @thomas07vt]
|
|
42
|
+
- NEW: Added .BR parser contacts (GH-31). [Thanks @forain]
|
|
43
|
+
|
|
44
|
+
- CHANGED: Updated WhoisAi to WhoisNicAi.
|
|
45
|
+
- CHANGED: WhoizBiz to the new response (GH-73). [Thanks @thomas07vt]
|
|
46
|
+
- CHANGED: WhoizNicSt to the new response (GH-72). [Thanks @fturmel]
|
|
47
|
+
- CHANGED: WhoisRegistryNetZa to the new response (GH-43). [Thanks @sheldonh]
|
|
48
|
+
|
|
49
|
+
- FIXED: Bug where .EU domain property had double .eu suffix (GH-63).
|
|
50
|
+
- FIXED: Fix scanning issue with .ca when keys have no value (GH-36).
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#### Release 1.0.1
|
|
54
|
+
|
|
55
|
+
- CHANGED: Updated GoDaddy parser to the new response (GH-60).
|
|
56
|
+
- CHANGED: Updated Donuts parser to the new response. It looks like Donuts is now more compliant with base ICANN parser.
|
|
57
|
+
- CHANGED: Updated Verisign parser to the new response (GH-57). [Thanks @phcyso]
|
|
58
|
+
- CHANGED: Updated .BR parser to the new response (GH-51). [Thanks @otaviojr]
|
|
59
|
+
- CHANGED: Add support for :expires_on to base_nic_fr (GH-54). [Thanks @yastupin]
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
#### Release 1.0
|
|
63
|
+
|
|
64
|
+
**1.0.0-beta2**
|
|
65
|
+
|
|
66
|
+
- NEW: Added whois.cdmon.com parser (GH-27). [Thanks @sfumanal]
|
|
67
|
+
|
|
68
|
+
- FIXED: Fix for Record#respond_to?(:available?) (GH-28, GH-29, GH-30). Thanks [@marcandre]
|
|
69
|
+
|
|
70
|
+
**1.0.0-beta1**
|
|
71
|
+
|
|
72
|
+
Initial import from the `whois` library.
|
|
73
|
+
|
|
74
|
+
- NEW: whois.dk-hostmaster.dk parser now recognizes throttled responses (whois/GH-382). [Thanks @troelskn]
|
|
75
|
+
- NEW: Safer time parsing (GH-18). [Thanks @davidcornu]
|
|
76
|
+
- NEW: Detect reserved .INFO domains (whois/GH-468).
|
|
77
|
+
|
|
78
|
+
- CHANGED: whois.audns.net.au removed the registrar ID field (GH-20, GH-21). Thanks [@afoster]
|
|
79
|
+
- CHANGED: Updated .JOBS from obswhois.verisign-grs.com to whois.nic.jobs (GH-23).
|
|
80
|
+
- CHANGED: Updated .PRO from whois.dotproregistry.net to whois.afilias.net (GH-24).
|
data/CODE_OF_CONDUCT.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
`whois-parser-next` is a welcoming technical project. We expect contributors,
|
|
4
|
+
maintainers, and users to treat one another with patience, respect, and good
|
|
5
|
+
faith.
|
|
6
|
+
|
|
7
|
+
## Expected behavior
|
|
8
|
+
|
|
9
|
+
- Be respectful and constructive.
|
|
10
|
+
- Welcome questions and different levels of experience.
|
|
11
|
+
- Focus criticism on code, evidence, and decisions, not people.
|
|
12
|
+
- Explain disagreements clearly and assume good intentions.
|
|
13
|
+
- Protect private, personal, and security-sensitive information.
|
|
14
|
+
|
|
15
|
+
## Unacceptable behavior
|
|
16
|
+
|
|
17
|
+
Harassment, discrimination, personal attacks, intimidation, threats,
|
|
18
|
+
deliberate disruption, unwanted private contact, publishing personal
|
|
19
|
+
information, and any other conduct that would make participation unsafe or
|
|
20
|
+
unwelcoming are not acceptable.
|
|
21
|
+
|
|
22
|
+
## Enforcement
|
|
23
|
+
|
|
24
|
+
Maintainers may edit, close, or remove contributions and may restrict
|
|
25
|
+
participation when necessary to protect the project and its community. Serious
|
|
26
|
+
or repeated violations may result in removal from project spaces.
|
|
27
|
+
|
|
28
|
+
For a conduct concern that cannot be handled publicly, use the private
|
|
29
|
+
reporting path documented in [SECURITY.md](SECURITY.md). Do not publish
|
|
30
|
+
security-sensitive details in a public issue.
|
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Contributing to whois-parser-next
|
|
2
|
+
|
|
3
|
+
Thank you for helping maintain `whois-parser-next`. The project is sponsored
|
|
4
|
+
and supported by [DomScan](https://domscan.net/whois-api), but it is an independent
|
|
5
|
+
community project. Contributions are welcome from everyone who treats
|
|
6
|
+
maintainers, users, and other contributors with respect.
|
|
7
|
+
|
|
8
|
+
WHOIS behavior changes over time. Reliable evidence and focused pull requests
|
|
9
|
+
help us keep the parser useful.
|
|
10
|
+
|
|
11
|
+
## Getting started
|
|
12
|
+
|
|
13
|
+
Fork and clone the repository, then install its dependencies:
|
|
14
|
+
|
|
15
|
+
```shell
|
|
16
|
+
git clone git@github.com:your-username/whois-parser-next.git
|
|
17
|
+
cd whois-parser-next
|
|
18
|
+
bundle install
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Create a focused branch, add fixtures and tests with your change, then run:
|
|
22
|
+
|
|
23
|
+
```shell
|
|
24
|
+
bundle exec rspec
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Open a pull request against
|
|
28
|
+
[`estevecastells/whois-parser-next`](https://github.com/estevecastells/whois-parser-next/compare/).
|
|
29
|
+
|
|
30
|
+
## Pull request rules
|
|
31
|
+
|
|
32
|
+
Please follow these rules for every behavior change:
|
|
33
|
+
|
|
34
|
+
1. Keep one focused registry or server-family change per pull request.
|
|
35
|
+
2. Add exact, current raw-response fixtures for registered and
|
|
36
|
+
likely-unregistered cases where applicable.
|
|
37
|
+
3. Never include personal registrant data in fixtures. If a current response
|
|
38
|
+
contains personal data, provide a minimally redacted fixture that preserves
|
|
39
|
+
the parser-relevant structure and document the redaction.
|
|
40
|
+
4. Never interpret rate limits, blocks, timeouts, malformed responses, or
|
|
41
|
+
ambiguous responses as either available or absent. Unknown must remain
|
|
42
|
+
unknown.
|
|
43
|
+
5. Add tests for every behavior change, including successful parsing, expected
|
|
44
|
+
absence, errors, and important unknown states.
|
|
45
|
+
6. Document the date of live verification and the source or server used.
|
|
46
|
+
7. Do not add paid, private, authenticated, or otherwise inaccessible source
|
|
47
|
+
dependencies.
|
|
48
|
+
8. Preserve the existing loading path and public API where possible. Discuss
|
|
49
|
+
proposed breaking changes in an issue before opening the implementation PR.
|
|
50
|
+
9. Run the full test suite before requesting review and report the result in the
|
|
51
|
+
pull request.
|
|
52
|
+
10. Keep changes understandable and avoid unrelated cleanup in a focused pull
|
|
53
|
+
request.
|
|
54
|
+
|
|
55
|
+
A parser result is not an availability guarantee. Registry policy, rate limits,
|
|
56
|
+
server changes, and the distinction between WHOIS and RDAP all matter.
|
|
57
|
+
|
|
58
|
+
## Fixtures and privacy
|
|
59
|
+
|
|
60
|
+
Fixtures should represent current server behavior, not invented examples. Do
|
|
61
|
+
not commit names, email addresses, telephone numbers, postal addresses, or
|
|
62
|
+
other personal registrant information. Preserve the fields and response
|
|
63
|
+
structure needed to reproduce the behavior while removing personal data.
|
|
64
|
+
|
|
65
|
+
Never commit credentials, private endpoints, paid-service responses, or data
|
|
66
|
+
that you are not allowed to redistribute.
|
|
67
|
+
|
|
68
|
+
## Licensing
|
|
69
|
+
|
|
70
|
+
Contributions are made under the MIT license. This project does not require a
|
|
71
|
+
Contributor License Agreement. By submitting a contribution, you confirm that
|
|
72
|
+
you have the right to submit it under those terms.
|
|
73
|
+
|
|
74
|
+
## Review
|
|
75
|
+
|
|
76
|
+
Maintainers may request narrower scope, stronger evidence, additional fixtures,
|
|
77
|
+
or clearer handling of unknown results. Review is about correctness, evidence,
|
|
78
|
+
privacy, compatibility, and maintainability.
|
|
79
|
+
|
|
80
|
+
Please follow the project's [Code of Conduct](CODE_OF_CONDUCT.md).
|
data/GOVERNANCE.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Governance
|
|
2
|
+
|
|
3
|
+
## Project status
|
|
4
|
+
|
|
5
|
+
`whois-parser-next` is an independent, community-maintained successor to
|
|
6
|
+
`weppos/whois-parser`. It is sponsored and supported by
|
|
7
|
+
[DomScan](https://domscan.net/whois-api), which helps fund maintenance and operational
|
|
8
|
+
work.
|
|
9
|
+
|
|
10
|
+
DomScan sponsorship does not make DomScan the owner of parser truth. It does
|
|
11
|
+
not buy favorable classifications, priority for private requirements, or the
|
|
12
|
+
ability to make the parser report availability or absence when the evidence is
|
|
13
|
+
unknown.
|
|
14
|
+
|
|
15
|
+
## Maintainer model
|
|
16
|
+
|
|
17
|
+
The project uses a benevolent-maintainer model. Maintainers are responsible for
|
|
18
|
+
reviewing contributions, protecting compatibility, enforcing project
|
|
19
|
+
standards, and making decisions when consensus is not practical.
|
|
20
|
+
|
|
21
|
+
Maintainers should explain important decisions in public issues or pull
|
|
22
|
+
requests. Decisions should be based on evidence, correctness, privacy,
|
|
23
|
+
security, compatibility, and the long-term health of the project.
|
|
24
|
+
|
|
25
|
+
A maintainer may ask for more evidence, narrow a pull request, defer a change,
|
|
26
|
+
or decline it. Substantive decisions should remain visible in the relevant
|
|
27
|
+
issue or pull request whenever doing so does not expose private or
|
|
28
|
+
security-sensitive information.
|
|
29
|
+
|
|
30
|
+
## Sponsorship boundary
|
|
31
|
+
|
|
32
|
+
DomScan may propose work, fund maintenance, and contribute code. Sponsorship
|
|
33
|
+
does not permit result manipulation, hidden behavior, preferential parser
|
|
34
|
+
outcomes, or suppression of inconvenient registry evidence.
|
|
35
|
+
|
|
36
|
+
The same standards apply to contributions from DomScan and from every other
|
|
37
|
+
contributor.
|
|
38
|
+
|
|
39
|
+
## Security reports
|
|
40
|
+
|
|
41
|
+
Do not publish suspected vulnerabilities, credentials, private responses, or
|
|
42
|
+
other sensitive security details in public issues or pull requests. Follow the
|
|
43
|
+
private reporting instructions in [SECURITY.md](SECURITY.md).
|
|
44
|
+
|
|
45
|
+
## Future maintainers
|
|
46
|
+
|
|
47
|
+
Additional maintainers may be invited based on sustained, high-quality
|
|
48
|
+
contributions, sound technical judgment, respectful collaboration, and
|
|
49
|
+
consistent care for the project's users and evidence standards.
|
|
50
|
+
|
|
51
|
+
Maintainer status is a responsibility, not a reward. It may be reviewed if a
|
|
52
|
+
maintainer becomes inactive or repeatedly fails to uphold this governance and
|
|
53
|
+
the Code of Conduct.
|
|
54
|
+
|
|
55
|
+
## Changes to governance
|
|
56
|
+
|
|
57
|
+
Proposed governance changes should be discussed publicly in an issue or pull
|
|
58
|
+
request. Maintainers may adopt changes after considering community feedback
|
|
59
|
+
and documenting the decision.
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2009-2022 Simone Carletti
|
|
4
|
+
Copyright (c) 2026 Esteve Castells and whois-parser-next contributors
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
data/MAINTAINERS.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Maintainers
|
|
2
|
+
|
|
3
|
+
## Project owner and lead maintainer
|
|
4
|
+
|
|
5
|
+
Esteve Castells ([@estevecastells](https://github.com/estevecastells)) is the
|
|
6
|
+
project owner and lead maintainer of `whois-parser-next`.
|
|
7
|
+
|
|
8
|
+
Responsibilities include:
|
|
9
|
+
|
|
10
|
+
- Setting project direction and maintaining the public roadmap
|
|
11
|
+
- Reviewing code, fixtures, issues, and pull requests
|
|
12
|
+
- Protecting API compatibility and evidence standards
|
|
13
|
+
- Coordinating releases, security response, and maintainer access
|
|
14
|
+
- Ensuring parser results do not turn uncertain evidence into availability or
|
|
15
|
+
absence
|
|
16
|
+
- Maintaining clear attribution to the original project and its contributors
|
|
17
|
+
|
|
18
|
+
The project is sponsored and supported by
|
|
19
|
+
[DomScan](https://domscan.net/whois-api). Sponsorship supports maintenance and
|
|
20
|
+
does not give any sponsor control over parser results or review decisions.
|
|
21
|
+
|
|
22
|
+
## Contributor to maintainer
|
|
23
|
+
|
|
24
|
+
Contributors may be invited to become maintainers after sustained,
|
|
25
|
+
high-quality work that demonstrates:
|
|
26
|
+
|
|
27
|
+
- Reliable registry or server-family contributions
|
|
28
|
+
- Strong tests and current, privacy-safe fixtures
|
|
29
|
+
- Careful treatment of unknown and ambiguous responses
|
|
30
|
+
- Respectful, constructive collaboration
|
|
31
|
+
- Sound judgment during issue and pull request review
|
|
32
|
+
|
|
33
|
+
There is no fixed contribution count or automatic promotion process. Maintainer
|
|
34
|
+
invitations are based on demonstrated responsibility and project needs.
|
|
35
|
+
|
|
36
|
+
## Original-project attribution
|
|
37
|
+
|
|
38
|
+
`whois-parser-next` is an independent, community-maintained successor to
|
|
39
|
+
[`weppos/whois-parser`](https://github.com/weppos/whois-parser).
|
|
40
|
+
|
|
41
|
+
The original project was created and maintained by Simone Carletti, known as
|
|
42
|
+
`weppos`, together with its contributors. This project preserves the original
|
|
43
|
+
MIT license heritage and attribution. It is not affiliated with or endorsed by
|
|
44
|
+
Simone Carletti or `weppos`.
|
data/README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# whois-parser-next
|
|
2
|
+
|
|
3
|
+
`whois-parser-next` is an independent, community-maintained successor to
|
|
4
|
+
[`weppos/whois-parser`](https://github.com/weppos/whois-parser).
|
|
5
|
+
|
|
6
|
+
The original project was created and maintained by Simone Carletti, known as
|
|
7
|
+
`weppos`, together with its contributors. We are grateful for that work and
|
|
8
|
+
for the foundation it provides. This project preserves the original MIT
|
|
9
|
+
license heritage, attribution, notices, and Git history while continuing
|
|
10
|
+
development under a new name.
|
|
11
|
+
|
|
12
|
+
This project is independent and is not affiliated with or endorsed by Simone
|
|
13
|
+
Carletti or `weppos`.
|
|
14
|
+
|
|
15
|
+
[](https://github.com/estevecastells/whois-parser-next/actions/workflows/tests.yml)
|
|
16
|
+
|
|
17
|
+
## Sponsored and supported by DomScan
|
|
18
|
+
|
|
19
|
+
`whois-parser-next` is sponsored and supported by
|
|
20
|
+
[DomScan](https://domscan.net/whois-api), which uses domain intelligence in production
|
|
21
|
+
and helps fund maintenance, testing, and registry-format research.
|
|
22
|
+
|
|
23
|
+
The project remains independent from DomScan and independent from the original
|
|
24
|
+
`weppos/whois-parser` maintainer. DomScan sponsorship does not imply
|
|
25
|
+
endorsement by Simone Carletti or `weppos`, and it does not give any sponsor
|
|
26
|
+
the right to influence parser results.
|
|
27
|
+
|
|
28
|
+
WHOIS formats drift. Parsers should keep up.
|
|
29
|
+
|
|
30
|
+
Project owner and lead maintainer:
|
|
31
|
+
[Esteve Castells](https://github.com/estevecastells). See
|
|
32
|
+
[MAINTAINERS.md](MAINTAINERS.md) and [GOVERNANCE.md](GOVERNANCE.md).
|
|
33
|
+
|
|
34
|
+
## Status
|
|
35
|
+
|
|
36
|
+
The project is under active development. The initial focus is reliable parsing
|
|
37
|
+
of current WHOIS responses, explicit unknown states, registry-specific
|
|
38
|
+
fixtures, and safe handling of malformed, rate-limited, retired, or changed
|
|
39
|
+
server responses.
|
|
40
|
+
|
|
41
|
+
The current development gem name is `whois-parser-next`. It has not yet been
|
|
42
|
+
published to RubyGems.
|
|
43
|
+
|
|
44
|
+
## Compatibility
|
|
45
|
+
|
|
46
|
+
The compatibility target is the existing `whois-parser` loading path and
|
|
47
|
+
namespace:
|
|
48
|
+
|
|
49
|
+
```ruby
|
|
50
|
+
require "whois-parser"
|
|
51
|
+
|
|
52
|
+
Whois::Parser
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Existing applications can retain `require "whois-parser"` and their
|
|
56
|
+
`Whois::Parser` integrations while changing the dependency source:
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
gem "whois-parser-next",
|
|
60
|
+
github: "estevecastells/whois-parser-next",
|
|
61
|
+
require: "whois-parser"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Requirements
|
|
65
|
+
|
|
66
|
+
- Ruby 3.2 or newer
|
|
67
|
+
|
|
68
|
+
## Scope
|
|
69
|
+
|
|
70
|
+
The project parses and normalizes WHOIS responses. It does not guarantee domain
|
|
71
|
+
availability. Registry policies, server responses, rate limits, endpoint
|
|
72
|
+
changes, and the distinction between WHOIS and RDAP can all affect the result.
|
|
73
|
+
|
|
74
|
+
Unknown, malformed, unsupported, rate-limited, and ambiguous responses must
|
|
75
|
+
remain distinguishable from an authoritative availability result.
|
|
76
|
+
|
|
77
|
+
## Development
|
|
78
|
+
|
|
79
|
+
```shell
|
|
80
|
+
bundle install
|
|
81
|
+
bundle exec rspec
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Coverage evidence
|
|
85
|
+
|
|
86
|
+
The 2026-09-19 live audit covers the ICANN DNS Magnitude ordering through rank
|
|
87
|
+
300. Start with the [Top 20 review](docs/audits/top-20-tlds-2026-09-19.md) and
|
|
88
|
+
[Top 100 audit](docs/audits/top-100-tlds-2026-09-19.md); the same directory
|
|
89
|
+
contains the contiguous 25-TLD reports for ranks 101 through 300. Each report
|
|
90
|
+
separates verified parsing from unavailable, retired, restricted, web-only,
|
|
91
|
+
and unresolved WHOIS paths.
|
|
92
|
+
|
|
93
|
+
## Join the work
|
|
94
|
+
|
|
95
|
+
We want this to be useful to people who maintain domain tools, registry
|
|
96
|
+
integrations, security services, and developer libraries. Small, focused
|
|
97
|
+
contributions are welcome. You do not need to be a long-time Ruby contributor
|
|
98
|
+
or a WHOIS expert to help.
|
|
99
|
+
|
|
100
|
+
Useful contributions include current registry fixtures, parser corrections,
|
|
101
|
+
tests, documentation, and careful reports of changed server behavior. If you
|
|
102
|
+
are unsure whether an observation is a bug, open an issue with the TLD, source,
|
|
103
|
+
date, sanitized response shape, and expected interpretation. We would rather
|
|
104
|
+
help shape an investigation than lose a useful report because it was not
|
|
105
|
+
perfectly packaged.
|
|
106
|
+
|
|
107
|
+
Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request.
|
|
108
|
+
The [public roadmap](ROADMAP.md) lists current priorities, non-goals, and the
|
|
109
|
+
evidence gate for any optional Rust work.
|
|
110
|
+
Maintainers should also follow [RELEASING.md](RELEASING.md), including the
|
|
111
|
+
package smoke test and trusted-publishing checks.
|
|
112
|
+
|
|
113
|
+
## License and attribution
|
|
114
|
+
|
|
115
|
+
This project continues work derived from the MIT-licensed
|
|
116
|
+
[`weppos/whois-parser`](https://github.com/weppos/whois-parser) project.
|
|
117
|
+
|
|
118
|
+
Original author: Simone Carletti (`weppos`)
|
|
119
|
+
|
|
120
|
+
Original project: <https://github.com/weppos/whois-parser>
|
|
121
|
+
|
|
122
|
+
See [LICENSE.txt](LICENSE.txt) and the retained attribution notices for the
|
|
123
|
+
applicable terms. New contributions remain available under the MIT license.
|
data/RELEASING.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Releasing whois-parser-next
|
|
2
|
+
|
|
3
|
+
Releases are made from a reviewed commit on `main` and published to RubyGems
|
|
4
|
+
through GitHub's trusted-publishing flow. Maintainers must not add a long-lived
|
|
5
|
+
RubyGems API key to the repository or its Actions secrets.
|
|
6
|
+
|
|
7
|
+
## Before tagging
|
|
8
|
+
|
|
9
|
+
1. Confirm the version in `lib/whois/parser/version.rb` and prepare a dated
|
|
10
|
+
changelog entry.
|
|
11
|
+
2. Run the complete test suite with `bundle exec rspec`.
|
|
12
|
+
3. Run `./script/package-smoke` and inspect the built gem's file list.
|
|
13
|
+
4. Confirm the GitHub Actions matrix passes on every supported Ruby version.
|
|
14
|
+
5. Confirm the RubyGems trusted publisher names this repository,
|
|
15
|
+
`.github/workflows/release.yml`, and the `release` environment.
|
|
16
|
+
6. Review the diff from the previous release for fixtures containing personal
|
|
17
|
+
data, credentials, or unneeded registry response content.
|
|
18
|
+
|
|
19
|
+
## Publish
|
|
20
|
+
|
|
21
|
+
Create and push the annotated release tag only after the checks above pass:
|
|
22
|
+
|
|
23
|
+
```shell
|
|
24
|
+
git tag -a v0.1.0 -m "whois-parser-next 0.1.0"
|
|
25
|
+
git push origin v0.1.0
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The release workflow repeats the full suite and package smoke test before it
|
|
29
|
+
requests a short-lived RubyGems publishing credential through OIDC.
|
|
30
|
+
|
|
31
|
+
## Verify
|
|
32
|
+
|
|
33
|
+
After the workflow succeeds:
|
|
34
|
+
|
|
35
|
+
1. Confirm the version and metadata on RubyGems.
|
|
36
|
+
2. Install the released gem into an empty gem home.
|
|
37
|
+
3. Verify `require "whois-parser"` and `Whois::Parser`.
|
|
38
|
+
4. Parse at least one registered and one available fixture.
|
|
39
|
+
5. Publish release notes that describe only tested behavior.
|
|
40
|
+
|
|
41
|
+
If a release is wrong, stop downstream upgrades and document the issue before
|
|
42
|
+
yanking. A yank does not remove code already downloaded by users, so follow it
|
|
43
|
+
with a corrected release and a clear changelog entry.
|
data/ROADMAP.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
This roadmap is a direction, not a promise of dates. Registry behavior changes
|
|
4
|
+
without notice, so correctness and current evidence take priority over a fixed
|
|
5
|
+
feature calendar.
|
|
6
|
+
|
|
7
|
+
## Current release
|
|
8
|
+
|
|
9
|
+
- Establish a safe, maintained successor with Ruby 3.2 through Ruby 4 support.
|
|
10
|
+
- Audit the first 300 rows of a dated, reproducible TLD-usage snapshot.
|
|
11
|
+
- Replace unsafe fallback classifications with explicit unknown or unavailable
|
|
12
|
+
outcomes when a response lacks authoritative evidence.
|
|
13
|
+
- Keep the gem compatible with `require "whois-parser"` and `Whois::Parser`.
|
|
14
|
+
- Publish through short-lived RubyGems trusted-publishing credentials.
|
|
15
|
+
|
|
16
|
+
## Next priorities
|
|
17
|
+
|
|
18
|
+
1. Continue evidence-backed TLD coverage in reproducible, non-overlapping
|
|
19
|
+
batches.
|
|
20
|
+
2. Add regression fixtures when registries change format, server, policy, or
|
|
21
|
+
availability wording.
|
|
22
|
+
3. Reduce avoidable runtime dependencies without changing public behavior.
|
|
23
|
+
4. Improve contributor tooling for fixture privacy, server-mapping drift, and
|
|
24
|
+
ambiguous-response safety.
|
|
25
|
+
5. Document parser confidence and provenance without pretending that a parsed
|
|
26
|
+
WHOIS response is an availability guarantee.
|
|
27
|
+
|
|
28
|
+
## Performance and Rust
|
|
29
|
+
|
|
30
|
+
The Ruby parser is already small compared with the network request that
|
|
31
|
+
produces a WHOIS response. We will profile real workloads before adding native
|
|
32
|
+
code or attempting a rewrite.
|
|
33
|
+
|
|
34
|
+
If parsing becomes a measured bottleneck, the preferred experiment is a small,
|
|
35
|
+
optional Rust-backed parser for one high-volume server family behind the
|
|
36
|
+
existing Ruby API. It must pass the same fixtures and differential tests as the
|
|
37
|
+
Ruby implementation. A full rewrite is not planned without evidence that it
|
|
38
|
+
would improve user-visible performance enough to justify the maintenance,
|
|
39
|
+
packaging, and compatibility cost.
|
|
40
|
+
|
|
41
|
+
## Non-goals
|
|
42
|
+
|
|
43
|
+
- Guessing availability from an empty, blocked, throttled, or malformed reply.
|
|
44
|
+
- Hiding registry limitations or converting unknown evidence into certainty.
|
|
45
|
+
- Adding paid, private, or authenticated data sources to the parser.
|
|
46
|
+
- Breaking the established Ruby API merely to modernize internal style.
|
|
47
|
+
- Combining WHOIS transport, RDAP policy, billing, or product-specific routing
|
|
48
|
+
into this parsing library.
|
|
49
|
+
|
|
50
|
+
## How to help
|
|
51
|
+
|
|
52
|
+
Good first contributions include a current sanitized fixture, a focused parser
|
|
53
|
+
regression, a server-mapping correction, or an adversarial unknown-response
|
|
54
|
+
test. Larger proposals should start in a public issue so contributors and
|
|
55
|
+
maintainers can agree on the evidence, compatibility boundary, and test plan
|
|
56
|
+
before implementation.
|
|
57
|
+
|
|
58
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the rules and
|
|
59
|
+
[GOVERNANCE.md](GOVERNANCE.md) for how decisions are made.
|
data/SECURITY.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Until the first release, only the current main branch is supported.
|
|
6
|
+
|
|
7
|
+
| Version | Supported |
|
|
8
|
+
|---|---|
|
|
9
|
+
| main | Yes |
|
|
10
|
+
| Released versions | No released versions yet |
|
|
11
|
+
|
|
12
|
+
## Reporting a vulnerability
|
|
13
|
+
|
|
14
|
+
Please use [GitHub private vulnerability reporting](https://github.com/estevecastells/whois-parser-next/security/advisories/new).
|
|
15
|
+
|
|
16
|
+
Do not open a public issue or pull request for a suspected vulnerability.
|
|
17
|
+
|
|
18
|
+
Please include:
|
|
19
|
+
|
|
20
|
+
- A clear description of the issue and its impact
|
|
21
|
+
- A minimal reproduction or proof of concept
|
|
22
|
+
- The affected commit, branch, or dependency version
|
|
23
|
+
- The Ruby version and relevant environment details
|
|
24
|
+
- The TLD, WHOIS server, and observed date where relevant
|
|
25
|
+
- Expected behavior and actual behavior
|
|
26
|
+
- Sanitized response examples where needed
|
|
27
|
+
- Any suggested mitigation
|
|
28
|
+
|
|
29
|
+
Remove credentials, access tokens, private endpoints, personal registrant data,
|
|
30
|
+
and other sensitive information before submitting a report. Do not include
|
|
31
|
+
secrets or private source responses in public fixtures.
|
|
32
|
+
|
|
33
|
+
## Disclosure
|
|
34
|
+
|
|
35
|
+
Please do not disclose a vulnerability publicly before the maintainers have had
|
|
36
|
+
an opportunity to investigate, coordinate a fix or mitigation, and agree on
|
|
37
|
+
disclosure timing.
|
|
38
|
+
|
|
39
|
+
We expect to acknowledge reports after they reach the maintainers and provide
|
|
40
|
+
follow-up after triage. Workload and severity vary, so no exact response or
|
|
41
|
+
remediation timeline is promised.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require_relative 'super_struct'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
module Whois
|
|
5
|
+
class Parser
|
|
6
|
+
|
|
7
|
+
# Holds the details of a contact extracted from the WHOIS response.
|
|
8
|
+
#
|
|
9
|
+
# A contact is composed by the several attributes,
|
|
10
|
+
# accessible through corresponding getter / setter methods.
|
|
11
|
+
#
|
|
12
|
+
# Please note that a response is not required to provide
|
|
13
|
+
# all the attributes. When an attribute is not available,
|
|
14
|
+
# the corresponding value is set to nil.
|
|
15
|
+
#
|
|
16
|
+
# @attr [String] id
|
|
17
|
+
# @attr [String] type
|
|
18
|
+
# @attr [String] name
|
|
19
|
+
# @attr [String] organization
|
|
20
|
+
# @attr [String] address
|
|
21
|
+
# @attr [String] city
|
|
22
|
+
# @attr [String] zip
|
|
23
|
+
# @attr [String] state
|
|
24
|
+
# @attr [String] country
|
|
25
|
+
# @attr [String] country_code
|
|
26
|
+
# @attr [String] phone
|
|
27
|
+
# @attr [String] fax
|
|
28
|
+
# @attr [String] email
|
|
29
|
+
# @attr [String] url - e. g. to the contact form
|
|
30
|
+
# @attr [Time] created_on
|
|
31
|
+
# @attr [Time] updated_on
|
|
32
|
+
#
|
|
33
|
+
class Contact < SuperStruct.new(:id, :type, :name, :organization,
|
|
34
|
+
:address, :city, :zip, :state, :country, :country_code,
|
|
35
|
+
:phone, :fax, :email, :url,
|
|
36
|
+
:created_on, :updated_on)
|
|
37
|
+
|
|
38
|
+
TYPE_REGISTRANT = 1
|
|
39
|
+
TYPE_ADMINISTRATIVE = 2
|
|
40
|
+
TYPE_TECHNICAL = 3
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def self.const_missing(name)
|
|
44
|
+
case name
|
|
45
|
+
when :TYPE_ADMIN
|
|
46
|
+
Whois.deprecate("Whois::Record::Contact::TYPE_ADMIN is now Whois::Record::Contact::TYPE_ADMINISTRATIVE")
|
|
47
|
+
const_set(name, TYPE_ADMINISTRATIVE)
|
|
48
|
+
else
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|