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,198 @@
|
|
|
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.educause.edu 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
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
|
22
|
+
# and examples.
|
|
23
|
+
#
|
|
24
|
+
class WhoisEducauseEdu < Base
|
|
25
|
+
|
|
26
|
+
property_supported :disclaimer do
|
|
27
|
+
if content_for_scanner =~ /\A((.*\n)+)\n--------------------------\n/
|
|
28
|
+
::Regexp.last_match(1)
|
|
29
|
+
else
|
|
30
|
+
Whois::Parser.bug!(ParserError, "Unable to parse disclaimer.")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
property_supported :domain do
|
|
36
|
+
if content_for_scanner =~ /Domain Name:\s(.+?)\n/
|
|
37
|
+
::Regexp.last_match(1).downcase
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
property_not_supported :domain_id
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
property_supported :status do
|
|
45
|
+
if available?
|
|
46
|
+
:available
|
|
47
|
+
else
|
|
48
|
+
:registered
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
property_supported :available? do
|
|
53
|
+
!!(content_for_scanner =~ /(?:No Match|The domain name you requested was not found in our database\.)/)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
property_supported :registered? do
|
|
57
|
+
!available?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
property_supported :created_on do
|
|
62
|
+
if content_for_scanner =~ /Domain record activated:\s+(.+?)\n/
|
|
63
|
+
parse_time(::Regexp.last_match(1))
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
property_supported :updated_on do
|
|
68
|
+
if content_for_scanner =~ /Domain record last updated:\s+(.+?)\n/
|
|
69
|
+
parse_time(::Regexp.last_match(1))
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
property_supported :expires_on do
|
|
74
|
+
if content_for_scanner =~ /Domain expires:\s+(.+?)\n/
|
|
75
|
+
parse_time(::Regexp.last_match(1))
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
property_not_supported :registrar
|
|
81
|
+
|
|
82
|
+
property_supported :registrant_contacts do
|
|
83
|
+
build_contact_registrant("Registrant", Parser::Contact::TYPE_REGISTRANT)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
property_supported :admin_contacts do
|
|
87
|
+
build_contact("Administrative Contact", Parser::Contact::TYPE_ADMINISTRATIVE)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
property_supported :technical_contacts do
|
|
91
|
+
build_contact("Technical Contact", Parser::Contact::TYPE_TECHNICAL)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
property_supported :nameservers do
|
|
96
|
+
if content_for_scanner =~ /Name Servers: \n((.+\n)+)\n/
|
|
97
|
+
::Regexp.last_match(1).split("\n").map do |line|
|
|
98
|
+
name, ipv4 = line.strip.split(/\s+/)
|
|
99
|
+
Parser::Nameserver.new(:name => name.downcase, :ipv4 => ipv4)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
# [NAME] | EMPTY
|
|
108
|
+
# [ROLE]?
|
|
109
|
+
# [ORGANIZATION]
|
|
110
|
+
# [ADDRESS]*
|
|
111
|
+
# [CITY, ST ZIP]
|
|
112
|
+
# [COUNTRY]
|
|
113
|
+
# [PHONE]
|
|
114
|
+
# [EMAIL]
|
|
115
|
+
def build_contact(element, type)
|
|
116
|
+
if content_for_scanner =~ /#{element}:\n+((.+\n)+)\n/
|
|
117
|
+
lines = ::Regexp.last_match(1).split("\n").map(&:strip)
|
|
118
|
+
items = lines.dup
|
|
119
|
+
|
|
120
|
+
# Extract variables
|
|
121
|
+
|
|
122
|
+
# items.shift if items[0].strip == ''
|
|
123
|
+
|
|
124
|
+
v13 = items.delete_at(-1)
|
|
125
|
+
|
|
126
|
+
v11 = items.delete_at(-1)
|
|
127
|
+
|
|
128
|
+
v9 = items.delete_at(-1)
|
|
129
|
+
|
|
130
|
+
v6 = items.delete_at(-1)
|
|
131
|
+
if v6 =~ /([^\n,]+),\s([A-Z]{2})(?:\s(\d{5}(?:-\d{4})?))/
|
|
132
|
+
v6, v7, v8 = ::Regexp.last_match(1), ::Regexp.last_match(2), ::Regexp.last_match(3)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
v4 = []
|
|
136
|
+
v4 << items.shift until items[0] =~ /^\d+/ || items.empty?
|
|
137
|
+
v4 = v4.join("\n")
|
|
138
|
+
|
|
139
|
+
v5 = items.empty? ? nil : items.join("\n")
|
|
140
|
+
|
|
141
|
+
# Create Contact
|
|
142
|
+
|
|
143
|
+
Parser::Contact.new(
|
|
144
|
+
:type => type,
|
|
145
|
+
:name => v4,
|
|
146
|
+
:organization => nil,
|
|
147
|
+
:address => v5,
|
|
148
|
+
:city => v6,
|
|
149
|
+
:state => v7,
|
|
150
|
+
:zip => v8,
|
|
151
|
+
:country => v9,
|
|
152
|
+
:phone => v11,
|
|
153
|
+
:email => v13
|
|
154
|
+
)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# [ORGANIZATION]
|
|
159
|
+
# [ADDRESS]*
|
|
160
|
+
# [CITY, ST ZIP] | [CITY]
|
|
161
|
+
# [COUNTRY]
|
|
162
|
+
def build_contact_registrant(element, type)
|
|
163
|
+
if content_for_scanner =~ /#{element}:\n((.+\n)+)\n/
|
|
164
|
+
lines = ::Regexp.last_match(1).split("\n").map(&:strip)
|
|
165
|
+
items = lines.dup
|
|
166
|
+
|
|
167
|
+
# Extract variables
|
|
168
|
+
|
|
169
|
+
v9 = items.delete_at(-1)
|
|
170
|
+
|
|
171
|
+
v4 = items.delete_at(0)
|
|
172
|
+
|
|
173
|
+
v6 = items.delete_at(-1)
|
|
174
|
+
if v6 =~ /([^\n,]+),\s([A-Z]{2})(?:\s(\d{5}))/
|
|
175
|
+
v6, v7, v8 = ::Regexp.last_match(1), ::Regexp.last_match(2), ::Regexp.last_match(3)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
v5 = items.empty? ? nil : items.join("\n")
|
|
179
|
+
|
|
180
|
+
# Create Contact
|
|
181
|
+
|
|
182
|
+
Parser::Contact.new(
|
|
183
|
+
:type => type,
|
|
184
|
+
:name => nil,
|
|
185
|
+
:organization => v4,
|
|
186
|
+
:address => v5,
|
|
187
|
+
:city => v6,
|
|
188
|
+
:state => v7,
|
|
189
|
+
:zip => v8,
|
|
190
|
+
:country => v9
|
|
191
|
+
)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
end
|
|
198
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
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.eenet.ee 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
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
|
22
|
+
# and examples.
|
|
23
|
+
#
|
|
24
|
+
# @deprecated The official .ee TLD host is now whois.tld.ee.
|
|
25
|
+
# This parser only exists for BC.
|
|
26
|
+
#
|
|
27
|
+
class WhoisEenetEe < Base
|
|
28
|
+
|
|
29
|
+
property_supported :status do
|
|
30
|
+
if available?
|
|
31
|
+
:available
|
|
32
|
+
else
|
|
33
|
+
:registered
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property_supported :available? do
|
|
38
|
+
!!(content_for_scanner =~ /^NOT FOUND:/)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
property_supported :registered? do
|
|
42
|
+
!available?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
property_supported :created_on do
|
|
47
|
+
if content_for_scanner =~ /Record created on (.*)\n/
|
|
48
|
+
parse_time(::Regexp.last_match(1))
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
property_supported :updated_on do
|
|
53
|
+
if content_for_scanner =~ /Record changed on (.*)\n/
|
|
54
|
+
parse_time(::Regexp.last_match(1))
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
property_not_supported :expires_on
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
property_supported :nameservers do
|
|
62
|
+
if content_for_scanner =~ /Domain servers:\n((.+\n)+)\n/
|
|
63
|
+
::Regexp.last_match(1).split("\n").map do |name|
|
|
64
|
+
Parser::Nameserver.new(:name => name.strip.chomp("."))
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
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.enom.com server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisEnomCom < BaseIcannCompliant
|
|
22
|
+
self.scanner = Scanners::BaseIcannCompliant, {
|
|
23
|
+
pattern_available: /^Domain not found\.\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,58 @@
|
|
|
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.eu.org parser
|
|
18
|
+
#
|
|
19
|
+
# Parser for the whois.eu.org 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 WhoisEuOrg < Base
|
|
28
|
+
|
|
29
|
+
property_supported :status do
|
|
30
|
+
if available?
|
|
31
|
+
:available
|
|
32
|
+
else
|
|
33
|
+
:registered
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property_supported :available? do
|
|
38
|
+
!!(content_for_scanner =~ /Key not found/)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
property_supported :registered? do
|
|
42
|
+
!available?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
property_not_supported :created_on
|
|
47
|
+
|
|
48
|
+
property_not_supported :updated_on
|
|
49
|
+
|
|
50
|
+
property_not_supported :expires_on
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
property_not_supported :nameservers
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
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.eu server.
|
|
17
|
+
#
|
|
18
|
+
class WhoisEu < Base
|
|
19
|
+
|
|
20
|
+
property_supported :domain do
|
|
21
|
+
if content_for_scanner =~ /Domain:\s+(.+)\n/
|
|
22
|
+
"#{::Regexp.last_match(1).downcase}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
property_not_supported :domain_id
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
property_supported :status do
|
|
30
|
+
if available?
|
|
31
|
+
:available
|
|
32
|
+
else
|
|
33
|
+
:registered
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property_supported :available? do
|
|
38
|
+
!!(content_for_scanner =~ /Status:\s+AVAILABLE/)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
property_supported :registered? do
|
|
42
|
+
!available?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
property_not_supported :created_on
|
|
47
|
+
|
|
48
|
+
property_not_supported :updated_on
|
|
49
|
+
|
|
50
|
+
property_not_supported :expires_on
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
property_supported :registrar do
|
|
54
|
+
if content_for_scanner =~ /Registrar:\s((.+\n)+)\n/
|
|
55
|
+
lines = ::Regexp.last_match(1)
|
|
56
|
+
Parser::Registrar.new(
|
|
57
|
+
name: lines.slice(/Name:\s+(.+)/, 1),
|
|
58
|
+
url: lines.slice(/Website:\s+(.+)/, 1)
|
|
59
|
+
)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
property_not_supported :registrant_contacts
|
|
64
|
+
|
|
65
|
+
property_not_supported :admin_contacts
|
|
66
|
+
|
|
67
|
+
# Technical Contact
|
|
68
|
+
#
|
|
69
|
+
# Technical:
|
|
70
|
+
# Name: DNS Admin
|
|
71
|
+
# Organisation: Google Inc.
|
|
72
|
+
# Language: en
|
|
73
|
+
# Phone: +1.6506234000
|
|
74
|
+
# Fax: +1.6506188571
|
|
75
|
+
# Email: dns-admin@google.com
|
|
76
|
+
#
|
|
77
|
+
property_supported :technical_contacts do
|
|
78
|
+
if content_for_scanner =~ /Technical:\s((.+\n)+)\n/
|
|
79
|
+
lines = ::Regexp.last_match(1)
|
|
80
|
+
Parser::Contact.new(
|
|
81
|
+
:type => Parser::Contact::TYPE_TECHNICAL,
|
|
82
|
+
:id => nil,
|
|
83
|
+
:name => lines.slice(/Name:\s*(.*)/, 1),
|
|
84
|
+
:organization => lines.slice(/Organisation:\s*(.*)/, 1),
|
|
85
|
+
:phone => lines.slice(/Phone:\s*(.*)/, 1),
|
|
86
|
+
:fax => lines.slice(/Fax:\s*(.*)/, 1),
|
|
87
|
+
:email => lines.slice(/Email:\s*(.*)/, 1)
|
|
88
|
+
)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
# Nameservers are listed in the following formats:
|
|
94
|
+
#
|
|
95
|
+
# Name servers:
|
|
96
|
+
# dns1.servicemagic.eu
|
|
97
|
+
# dns2.servicemagic.eu
|
|
98
|
+
#
|
|
99
|
+
# Name servers:
|
|
100
|
+
# dns1.servicemagic.eu (91.121.133.61)
|
|
101
|
+
# dns2.servicemagic.eu (91.121.103.77)
|
|
102
|
+
#
|
|
103
|
+
property_supported :nameservers do
|
|
104
|
+
if content_for_scanner =~ /Name\sservers:\s((.+\n)+)\n/
|
|
105
|
+
::Regexp.last_match(1).split("\n").map do |line|
|
|
106
|
+
if line.strip =~ /(.+) \((.+)\)/
|
|
107
|
+
Parser::Nameserver.new(:name => ::Regexp.last_match(1), :ipv4 => ::Regexp.last_match(2))
|
|
108
|
+
else
|
|
109
|
+
Parser::Nameserver.new(:name => line.strip)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Checks whether the response has been throttled.
|
|
117
|
+
#
|
|
118
|
+
# @return [Boolean]
|
|
119
|
+
#
|
|
120
|
+
# @example
|
|
121
|
+
# -1: Still in grace period, wait 7777777 seconds
|
|
122
|
+
#
|
|
123
|
+
def response_throttled?
|
|
124
|
+
!!(content_for_scanner =~ /Still in grace period/)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
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.fi.rb'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module Whois
|
|
15
|
+
class Parsers
|
|
16
|
+
|
|
17
|
+
# Parser for the whois.fi server.
|
|
18
|
+
#
|
|
19
|
+
# @see Whois::Parsers::Example
|
|
20
|
+
# The Example parser for the list of all available methods.
|
|
21
|
+
#
|
|
22
|
+
class WhoisFi < Base
|
|
23
|
+
include Scanners::Scannable
|
|
24
|
+
|
|
25
|
+
self.scanner = Scanners::WhoisFi
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
property_supported :disclaimer do
|
|
29
|
+
node("field:disclaimer")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
property_supported :domain do
|
|
34
|
+
node("domain")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property_not_supported :domain_id
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
property_supported :status do
|
|
41
|
+
if reserved?
|
|
42
|
+
:reserved
|
|
43
|
+
elsif registered?
|
|
44
|
+
case node("status", &:downcase)
|
|
45
|
+
when "granted"
|
|
46
|
+
:registered
|
|
47
|
+
when "registered"
|
|
48
|
+
:registered
|
|
49
|
+
when "grace period"
|
|
50
|
+
:registered
|
|
51
|
+
else
|
|
52
|
+
Whois::Parser.bug!(ParserError, "Unknown status `#{node('status')}'.")
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
:available
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
property_supported :available? do
|
|
60
|
+
!!node("status:available")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
property_supported :registered? do
|
|
64
|
+
!available?
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
property_supported :created_on do
|
|
69
|
+
node("created") { |value| parse_time(value) }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
property_supported :updated_on do
|
|
73
|
+
node("modified") { |value| parse_time(value) }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
property_supported :expires_on do
|
|
77
|
+
node("expires") { |value| parse_time(value) }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
property_not_supported :registrar
|
|
82
|
+
|
|
83
|
+
property_supported :registrant_contacts do
|
|
84
|
+
node("descr") do |array|
|
|
85
|
+
address = node("address")
|
|
86
|
+
|
|
87
|
+
Parser::Contact.new(
|
|
88
|
+
type: Parser::Contact::TYPE_REGISTRANT,
|
|
89
|
+
id: array[1],
|
|
90
|
+
name: address[0],
|
|
91
|
+
organization: array[0],
|
|
92
|
+
address: address[1],
|
|
93
|
+
zip: address[2],
|
|
94
|
+
city: address[3],
|
|
95
|
+
phone: node("phone")
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
property_not_supported :admin_contacts
|
|
101
|
+
|
|
102
|
+
property_not_supported :technical_contacts
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
property_supported :nameservers do
|
|
106
|
+
Array.wrap(node("nserver")).map do |line|
|
|
107
|
+
Parser::Nameserver.new(name: line.split(" ").first)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# NEWPROPERTY
|
|
112
|
+
def reserved?
|
|
113
|
+
!!content_for_scanner.match(/Domain not available/)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
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.gandi.net server.
|
|
17
|
+
#
|
|
18
|
+
# @see Whois::Parsers::Example
|
|
19
|
+
# The Example parser for the list of all available methods.
|
|
20
|
+
#
|
|
21
|
+
class WhoisGandiNet < BaseIcannCompliant
|
|
22
|
+
|
|
23
|
+
property_supported :available? do
|
|
24
|
+
content_for_scanner == "\n"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def response_unavailable?
|
|
28
|
+
return false if content_for_scanner == "\n"
|
|
29
|
+
|
|
30
|
+
super
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|