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.
Files changed (354) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +80 -0
  3. data/CODE_OF_CONDUCT.md +30 -0
  4. data/CONTRIBUTING.md +80 -0
  5. data/GOVERNANCE.md +59 -0
  6. data/LICENSE.txt +22 -0
  7. data/MAINTAINERS.md +44 -0
  8. data/README.md +123 -0
  9. data/RELEASING.md +43 -0
  10. data/ROADMAP.md +59 -0
  11. data/SECURITY.md +41 -0
  12. data/lib/whois/parser/contact.rb +56 -0
  13. data/lib/whois/parser/errors.rb +46 -0
  14. data/lib/whois/parser/nameserver.rb +39 -0
  15. data/lib/whois/parser/registrar.rb +25 -0
  16. data/lib/whois/parser/super_struct.rb +50 -0
  17. data/lib/whois/parser/version.rb +6 -0
  18. data/lib/whois/parser.rb +447 -0
  19. data/lib/whois/parser_extensions/whois.rb +83 -0
  20. data/lib/whois/parser_extensions/whois_parser.rb +24 -0
  21. data/lib/whois/parser_extensions/whois_record.rb +236 -0
  22. data/lib/whois/parser_extensions.rb +3 -0
  23. data/lib/whois/parsers/base.rb +413 -0
  24. data/lib/whois/parsers/base_afilias.rb +144 -0
  25. data/lib/whois/parsers/base_afilias2.rb +145 -0
  26. data/lib/whois/parsers/base_cocca.rb +97 -0
  27. data/lib/whois/parsers/base_cocca2.rb +93 -0
  28. data/lib/whois/parsers/base_icann_compliant.rb +158 -0
  29. data/lib/whois/parsers/base_icb.rb +51 -0
  30. data/lib/whois/parsers/base_iisse.rb +113 -0
  31. data/lib/whois/parsers/base_nic_fr.rb +175 -0
  32. data/lib/whois/parsers/base_shared1.rb +112 -0
  33. data/lib/whois/parsers/base_shared2.rb +130 -0
  34. data/lib/whois/parsers/base_shared3.rb +131 -0
  35. data/lib/whois/parsers/base_unsupported_registry.rb +30 -0
  36. data/lib/whois/parsers/base_verisign.rb +106 -0
  37. data/lib/whois/parsers/base_whoisd.rb +150 -0
  38. data/lib/whois/parsers/blank.rb +35 -0
  39. data/lib/whois/parsers/capetown-whois.registry.net.za.rb +25 -0
  40. data/lib/whois/parsers/ccwhois.ksregistry.net.rb +25 -0
  41. data/lib/whois/parsers/ccwhois.verisign-grs.com.rb +25 -0
  42. data/lib/whois/parsers/coza-whois.registry.net.za.rb +25 -0
  43. data/lib/whois/parsers/durban-whois.registry.net.za.rb +25 -0
  44. data/lib/whois/parsers/example.rb +163 -0
  45. data/lib/whois/parsers/joburg-whois.registry.net.za.rb +25 -0
  46. data/lib/whois/parsers/kero.yachay.pe.rb +97 -0
  47. data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
  48. data/lib/whois/parsers/registry_response_safety.rb +29 -0
  49. data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
  50. data/lib/whois/parsers/vunic.vu.rb +11 -0
  51. data/lib/whois/parsers/whois.1und1.info.rb +28 -0
  52. data/lib/whois/parsers/whois.35.com.rb +23 -0
  53. data/lib/whois/parsers/whois.aeda.net.ae.rb +65 -0
  54. data/lib/whois/parsers/whois.aero.rb +58 -0
  55. data/lib/whois/parsers/whois.afilias-grs.info.rb +33 -0
  56. data/lib/whois/parsers/whois.afilias-srs.net.rb +16 -0
  57. data/lib/whois/parsers/whois.afilias.net.rb +41 -0
  58. data/lib/whois/parsers/whois.amnic.net.rb +81 -0
  59. data/lib/whois/parsers/whois.ascio.com.rb +29 -0
  60. data/lib/whois/parsers/whois.ati.tn.rb +120 -0
  61. data/lib/whois/parsers/whois.auda.org.au.rb +12 -0
  62. data/lib/whois/parsers/whois.audns.net.au.rb +118 -0
  63. data/lib/whois/parsers/whois.ax.rb +64 -0
  64. data/lib/whois/parsers/whois.biz.rb +34 -0
  65. data/lib/whois/parsers/whois.bnnic.bn.rb +77 -0
  66. data/lib/whois/parsers/whois.cat.rb +75 -0
  67. data/lib/whois/parsers/whois.cctld.by.rb +98 -0
  68. data/lib/whois/parsers/whois.cctld.uz.rb +83 -0
  69. data/lib/whois/parsers/whois.cdmon.com.rb +23 -0
  70. data/lib/whois/parsers/whois.centralnic.com.rb +144 -0
  71. data/lib/whois/parsers/whois.cira.ca.rb +227 -0
  72. data/lib/whois/parsers/whois.cmc.iq.rb +25 -0
  73. data/lib/whois/parsers/whois.cnnic.cn.rb +108 -0
  74. data/lib/whois/parsers/whois.co.ca.rb +74 -0
  75. data/lib/whois/parsers/whois.co.pl.rb +82 -0
  76. data/lib/whois/parsers/whois.co.ug.rb +93 -0
  77. data/lib/whois/parsers/whois.comlaude.com.rb +113 -0
  78. data/lib/whois/parsers/whois.corporatedomains.com.rb +28 -0
  79. data/lib/whois/parsers/whois.denic.de.rb +164 -0
  80. data/lib/whois/parsers/whois.dk-hostmaster.dk.rb +88 -0
  81. data/lib/whois/parsers/whois.dns.be.rb +120 -0
  82. data/lib/whois/parsers/whois.dns.hr.rb +119 -0
  83. data/lib/whois/parsers/whois.dns.lu.rb +125 -0
  84. data/lib/whois/parsers/whois.dns.pl.rb +151 -0
  85. data/lib/whois/parsers/whois.dns.pt.rb +92 -0
  86. data/lib/whois/parsers/whois.domain-registry.nl.rb +133 -0
  87. data/lib/whois/parsers/whois.domainregistry.ie.rb +128 -0
  88. data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
  89. data/lib/whois/parsers/whois.donuts.co.rb +59 -0
  90. data/lib/whois/parsers/whois.dot.cf.rb +71 -0
  91. data/lib/whois/parsers/whois.dot.tk.rb +70 -0
  92. data/lib/whois/parsers/whois.dotgov.gov.rb +58 -0
  93. data/lib/whois/parsers/whois.dotmobiregistry.net.rb +21 -0
  94. data/lib/whois/parsers/whois.dotpostregistry.net.rb +25 -0
  95. data/lib/whois/parsers/whois.dreamhost.com.rb +23 -0
  96. data/lib/whois/parsers/whois.educause.edu.rb +198 -0
  97. data/lib/whois/parsers/whois.eenet.ee.rb +72 -0
  98. data/lib/whois/parsers/whois.enom.com.rb +34 -0
  99. data/lib/whois/parsers/whois.eu.org.rb +58 -0
  100. data/lib/whois/parsers/whois.eu.rb +130 -0
  101. data/lib/whois/parsers/whois.fi.rb +119 -0
  102. data/lib/whois/parsers/whois.gandi.net.rb +36 -0
  103. data/lib/whois/parsers/whois.gg.rb +93 -0
  104. data/lib/whois/parsers/whois.godaddy.com.rb +42 -0
  105. data/lib/whois/parsers/whois.gov.za.rb +60 -0
  106. data/lib/whois/parsers/whois.hkirc.hk.rb +71 -0
  107. data/lib/whois/parsers/whois.iana.org.rb +102 -0
  108. data/lib/whois/parsers/whois.id.rb +26 -0
  109. data/lib/whois/parsers/whois.iedr.ie.rb +18 -0
  110. data/lib/whois/parsers/whois.iis.nu.rb +46 -0
  111. data/lib/whois/parsers/whois.iis.se.rb +26 -0
  112. data/lib/whois/parsers/whois.in.ua.rb +75 -0
  113. data/lib/whois/parsers/whois.inregistry.net.rb +27 -0
  114. data/lib/whois/parsers/whois.isnic.is.rb +70 -0
  115. data/lib/whois/parsers/whois.isoc.org.il.rb +75 -0
  116. data/lib/whois/parsers/whois.ja.net.rb +75 -0
  117. data/lib/whois/parsers/whois.je.rb +75 -0
  118. data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
  119. data/lib/whois/parsers/whois.kenic.or.ke.rb +93 -0
  120. data/lib/whois/parsers/whois.kg.rb +77 -0
  121. data/lib/whois/parsers/whois.kr.rb +79 -0
  122. data/lib/whois/parsers/whois.markmonitor.com.rb +36 -0
  123. data/lib/whois/parsers/whois.marnet.mk.rb +20 -0
  124. data/lib/whois/parsers/whois.monic.mo.rb +83 -0
  125. data/lib/whois/parsers/whois.museum.rb +79 -0
  126. data/lib/whois/parsers/whois.mx.rb +16 -0
  127. data/lib/whois/parsers/whois.mynic.my.rb +86 -0
  128. data/lib/whois/parsers/whois.na-nic.com.na.rb +21 -0
  129. data/lib/whois/parsers/whois.nc.rb +122 -0
  130. data/lib/whois/parsers/whois.netcom.cm.rb +54 -0
  131. data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
  132. data/lib/whois/parsers/whois.nic.ac.rb +33 -0
  133. data/lib/whois/parsers/whois.nic.af.rb +32 -0
  134. data/lib/whois/parsers/whois.nic.ag.rb +33 -0
  135. data/lib/whois/parsers/whois.nic.ai.rb +62 -0
  136. data/lib/whois/parsers/whois.nic.ar.rb +54 -0
  137. data/lib/whois/parsers/whois.nic.art.rb +9 -0
  138. data/lib/whois/parsers/whois.nic.as.rb +73 -0
  139. data/lib/whois/parsers/whois.nic.asia.rb +112 -0
  140. data/lib/whois/parsers/whois.nic.at.rb +68 -0
  141. data/lib/whois/parsers/whois.nic.best.rb +9 -0
  142. data/lib/whois/parsers/whois.nic.bj.rb +127 -0
  143. data/lib/whois/parsers/whois.nic.bo.rb +82 -0
  144. data/lib/whois/parsers/whois.nic.business.rb +8 -0
  145. data/lib/whois/parsers/whois.nic.cat.rb +23 -0
  146. data/lib/whois/parsers/whois.nic.cd.rb +38 -0
  147. data/lib/whois/parsers/whois.nic.cfd.rb +9 -0
  148. data/lib/whois/parsers/whois.nic.ch.rb +109 -0
  149. data/lib/whois/parsers/whois.nic.chat.rb +10 -0
  150. data/lib/whois/parsers/whois.nic.ci.rb +74 -0
  151. data/lib/whois/parsers/whois.nic.cl.rb +76 -0
  152. data/lib/whois/parsers/whois.nic.cloud.rb +15 -0
  153. data/lib/whois/parsers/whois.nic.club.rb +15 -0
  154. data/lib/whois/parsers/whois.nic.co.rb +25 -0
  155. data/lib/whois/parsers/whois.nic.college.rb +25 -0
  156. data/lib/whois/parsers/whois.nic.coop.rb +70 -0
  157. data/lib/whois/parsers/whois.nic.cr.rb +64 -0
  158. data/lib/whois/parsers/whois.nic.cx.rb +25 -0
  159. data/lib/whois/parsers/whois.nic.cz.rb +42 -0
  160. data/lib/whois/parsers/whois.nic.delivery.rb +9 -0
  161. data/lib/whois/parsers/whois.nic.design.rb +30 -0
  162. data/lib/whois/parsers/whois.nic.direct.rb +9 -0
  163. data/lib/whois/parsers/whois.nic.dm.rb +39 -0
  164. data/lib/whois/parsers/whois.nic.domains.rb +8 -0
  165. data/lib/whois/parsers/whois.nic.dz.rb +67 -0
  166. data/lib/whois/parsers/whois.nic.ec.rb +44 -0
  167. data/lib/whois/parsers/whois.nic.es.rb +114 -0
  168. data/lib/whois/parsers/whois.nic.fm.rb +18 -0
  169. data/lib/whois/parsers/whois.nic.fo.rb +69 -0
  170. data/lib/whois/parsers/whois.nic.fr.rb +25 -0
  171. data/lib/whois/parsers/whois.nic.fun.rb +13 -0
  172. data/lib/whois/parsers/whois.nic.games.rb +9 -0
  173. data/lib/whois/parsers/whois.nic.gd.rb +31 -0
  174. data/lib/whois/parsers/whois.nic.gl.rb +49 -0
  175. data/lib/whois/parsers/whois.nic.group.rb +8 -0
  176. data/lib/whois/parsers/whois.nic.gs.rb +31 -0
  177. data/lib/whois/parsers/whois.nic.hn.rb +49 -0
  178. data/lib/whois/parsers/whois.nic.host.rb +37 -0
  179. data/lib/whois/parsers/whois.nic.ht.rb +25 -0
  180. data/lib/whois/parsers/whois.nic.hu.rb +78 -0
  181. data/lib/whois/parsers/whois.nic.icu.rb +12 -0
  182. data/lib/whois/parsers/whois.nic.im.rb +66 -0
  183. data/lib/whois/parsers/whois.nic.ink.rb +12 -0
  184. data/lib/whois/parsers/whois.nic.io.rb +52 -0
  185. data/lib/whois/parsers/whois.nic.ir.rb +70 -0
  186. data/lib/whois/parsers/whois.nic.it.rb +159 -0
  187. data/lib/whois/parsers/whois.nic.jobs.rb +25 -0
  188. data/lib/whois/parsers/whois.nic.ki.rb +25 -0
  189. data/lib/whois/parsers/whois.nic.kz.rb +69 -0
  190. data/lib/whois/parsers/whois.nic.la.rb +32 -0
  191. data/lib/whois/parsers/whois.nic.li.rb +68 -0
  192. data/lib/whois/parsers/whois.nic.life.rb +10 -0
  193. data/lib/whois/parsers/whois.nic.link.rb +13 -0
  194. data/lib/whois/parsers/whois.nic.lk.rb +109 -0
  195. data/lib/whois/parsers/whois.nic.ltd.rb +8 -0
  196. data/lib/whois/parsers/whois.nic.lv.rb +69 -0
  197. data/lib/whois/parsers/whois.nic.ly.rb +78 -0
  198. data/lib/whois/parsers/whois.nic.market.rb +8 -0
  199. data/lib/whois/parsers/whois.nic.md.rb +101 -0
  200. data/lib/whois/parsers/whois.nic.me.rb +85 -0
  201. data/lib/whois/parsers/whois.nic.mg.rb +35 -0
  202. data/lib/whois/parsers/whois.nic.ms.rb +37 -0
  203. data/lib/whois/parsers/whois.nic.mu.rb +25 -0
  204. data/lib/whois/parsers/whois.nic.mw.rb +33 -0
  205. data/lib/whois/parsers/whois.nic.mx.rb +79 -0
  206. data/lib/whois/parsers/whois.nic.name.rb +68 -0
  207. data/lib/whois/parsers/whois.nic.net.bw.rb +11 -0
  208. data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
  209. data/lib/whois/parsers/whois.nic.net.sa.rb +74 -0
  210. data/lib/whois/parsers/whois.nic.net.sb.rb +35 -0
  211. data/lib/whois/parsers/whois.nic.news.rb +8 -0
  212. data/lib/whois/parsers/whois.nic.nf.rb +50 -0
  213. data/lib/whois/parsers/whois.nic.ninja.rb +8 -0
  214. data/lib/whois/parsers/whois.nic.one.rb +41 -0
  215. data/lib/whois/parsers/whois.nic.online.rb +39 -0
  216. data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
  217. data/lib/whois/parsers/whois.nic.plus.rb +8 -0
  218. data/lib/whois/parsers/whois.nic.pm.rb +25 -0
  219. data/lib/whois/parsers/whois.nic.pr.rb +84 -0
  220. data/lib/whois/parsers/whois.nic.priv.at.rb +62 -0
  221. data/lib/whois/parsers/whois.nic.pub.rb +8 -0
  222. data/lib/whois/parsers/whois.nic.pw.rb +25 -0
  223. data/lib/whois/parsers/whois.nic.re.rb +29 -0
  224. data/lib/whois/parsers/whois.nic.rocks.rb +8 -0
  225. data/lib/whois/parsers/whois.nic.run.rb +8 -0
  226. data/lib/whois/parsers/whois.nic.sh.rb +25 -0
  227. data/lib/whois/parsers/whois.nic.site.rb +62 -0
  228. data/lib/whois/parsers/whois.nic.sl.rb +80 -0
  229. data/lib/whois/parsers/whois.nic.sm.rb +84 -0
  230. data/lib/whois/parsers/whois.nic.sn.rb +119 -0
  231. data/lib/whois/parsers/whois.nic.so.rb +71 -0
  232. data/lib/whois/parsers/whois.nic.software.rb +9 -0
  233. data/lib/whois/parsers/whois.nic.solutions.rb +9 -0
  234. data/lib/whois/parsers/whois.nic.space.rb +25 -0
  235. data/lib/whois/parsers/whois.nic.st.rb +76 -0
  236. data/lib/whois/parsers/whois.nic.store.rb +15 -0
  237. data/lib/whois/parsers/whois.nic.studio.rb +8 -0
  238. data/lib/whois/parsers/whois.nic.systems.rb +8 -0
  239. data/lib/whois/parsers/whois.nic.tc.rb +25 -0
  240. data/lib/whois/parsers/whois.nic.tech.rb +33 -0
  241. data/lib/whois/parsers/whois.nic.technology.rb +8 -0
  242. data/lib/whois/parsers/whois.nic.tel.rb +25 -0
  243. data/lib/whois/parsers/whois.nic.tg.rb +49 -0
  244. data/lib/whois/parsers/whois.nic.tl.rb +32 -0
  245. data/lib/whois/parsers/whois.nic.tm.rb +101 -0
  246. data/lib/whois/parsers/whois.nic.today.rb +8 -0
  247. data/lib/whois/parsers/whois.nic.tools.rb +9 -0
  248. data/lib/whois/parsers/whois.nic.tr.rb +159 -0
  249. data/lib/whois/parsers/whois.nic.travel.rb +25 -0
  250. data/lib/whois/parsers/whois.nic.tv.rb +15 -0
  251. data/lib/whois/parsers/whois.nic.uk.rb +177 -0
  252. data/lib/whois/parsers/whois.nic.us.rb +25 -0
  253. data/lib/whois/parsers/whois.nic.ve.rb +94 -0
  254. data/lib/whois/parsers/whois.nic.vg.rb +16 -0
  255. data/lib/whois/parsers/whois.nic.video.rb +10 -0
  256. data/lib/whois/parsers/whois.nic.vip.rb +13 -0
  257. data/lib/whois/parsers/whois.nic.website.rb +9 -0
  258. data/lib/whois/parsers/whois.nic.wf.rb +29 -0
  259. data/lib/whois/parsers/whois.nic.win.rb +10 -0
  260. data/lib/whois/parsers/whois.nic.work.rb +10 -0
  261. data/lib/whois/parsers/whois.nic.works.rb +8 -0
  262. data/lib/whois/parsers/whois.nic.world.rb +10 -0
  263. data/lib/whois/parsers/whois.nic.xxx.rb +42 -0
  264. data/lib/whois/parsers/whois.nic.xyz.rb +25 -0
  265. data/lib/whois/parsers/whois.nixiregistry.in.rb +15 -0
  266. data/lib/whois/parsers/whois.norid.no.rb +61 -0
  267. data/lib/whois/parsers/whois.ovh.com.rb +12 -0
  268. data/lib/whois/parsers/whois.pairnic.com.rb +28 -0
  269. data/lib/whois/parsers/whois.pandi.or.id.rb +25 -0
  270. data/lib/whois/parsers/whois.pir.org.rb +90 -0
  271. data/lib/whois/parsers/whois.pnina.ps.rb +31 -0
  272. data/lib/whois/parsers/whois.register.bg.rb +86 -0
  273. data/lib/whois/parsers/whois.register.com.rb +30 -0
  274. data/lib/whois/parsers/whois.register.si.rb +73 -0
  275. data/lib/whois/parsers/whois.registre.ma.rb +65 -0
  276. data/lib/whois/parsers/whois.registro.br.rb +126 -0
  277. data/lib/whois/parsers/whois.registry.co.rb +19 -0
  278. data/lib/whois/parsers/whois.registry.gy.rb +32 -0
  279. data/lib/whois/parsers/whois.registry.hm.rb +72 -0
  280. data/lib/whois/parsers/whois.registry.om.rb +40 -0
  281. data/lib/whois/parsers/whois.registry.qa.rb +25 -0
  282. data/lib/whois/parsers/whois.ricta.org.rw.rb +16 -0
  283. data/lib/whois/parsers/whois.ripe.net.rb +68 -0
  284. data/lib/whois/parsers/whois.rnids.rs.rb +135 -0
  285. data/lib/whois/parsers/whois.rotld.ro.rb +65 -0
  286. data/lib/whois/parsers/whois.rrpproxy.net.rb +32 -0
  287. data/lib/whois/parsers/whois.safenames.net.rb +48 -0
  288. data/lib/whois/parsers/whois.schlund.info.rb +34 -0
  289. data/lib/whois/parsers/whois.sgnic.sg.rb +92 -0
  290. data/lib/whois/parsers/whois.sk-nic.sk.rb +111 -0
  291. data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
  292. data/lib/whois/parsers/whois.srs.net.nz.rb +177 -0
  293. data/lib/whois/parsers/whois.sx.rb +127 -0
  294. data/lib/whois/parsers/whois.tcinet.ru.rb +114 -0
  295. data/lib/whois/parsers/whois.thnic.co.th.rb +80 -0
  296. data/lib/whois/parsers/whois.tld.ee.rb +134 -0
  297. data/lib/whois/parsers/whois.tld.sy.rb +34 -0
  298. data/lib/whois/parsers/whois.tonic.to.rb +100 -0
  299. data/lib/whois/parsers/whois.tonicregistry.to.rb +12 -0
  300. data/lib/whois/parsers/whois.trabis.gov.tr.rb +58 -0
  301. data/lib/whois/parsers/whois.tucows.com.rb +28 -0
  302. data/lib/whois/parsers/whois.twnic.net.tw.rb +72 -0
  303. data/lib/whois/parsers/whois.tznic.or.tz.rb +36 -0
  304. data/lib/whois/parsers/whois.ua.rb +242 -0
  305. data/lib/whois/parsers/whois.udag.net.rb +28 -0
  306. data/lib/whois/parsers/whois.uniregistry.net.rb +71 -0
  307. data/lib/whois/parsers/whois.usp.ac.fj.rb +72 -0
  308. data/lib/whois/parsers/whois.verisign-grs.com.rb +49 -0
  309. data/lib/whois/parsers/whois.vunic.vu.rb +14 -0
  310. data/lib/whois/parsers/whois.website.ws.rb +79 -0
  311. data/lib/whois/parsers/whois.wildwestdomains.com.rb +37 -0
  312. data/lib/whois/parsers/whois.yoursrs.com.rb +125 -0
  313. data/lib/whois/parsers/whois.za.net.rb +72 -0
  314. data/lib/whois/parsers/whois.za.org.rb +72 -0
  315. data/lib/whois/parsers/whois.zicta.zm.rb +13 -0
  316. data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
  317. data/lib/whois/parsers/za_central_registry.rb +80 -0
  318. data/lib/whois/parsers.rb +1 -0
  319. data/lib/whois/safe_record.rb +170 -0
  320. data/lib/whois/scanners/base.rb +114 -0
  321. data/lib/whois/scanners/base_afilias.rb +51 -0
  322. data/lib/whois/scanners/base_cocca2.rb +58 -0
  323. data/lib/whois/scanners/base_icann_compliant.rb +45 -0
  324. data/lib/whois/scanners/base_iisse.rb +36 -0
  325. data/lib/whois/scanners/base_shared1.rb +31 -0
  326. data/lib/whois/scanners/base_shared2.rb +35 -0
  327. data/lib/whois/scanners/base_shared3.rb +37 -0
  328. data/lib/whois/scanners/base_whoisd.rb +44 -0
  329. data/lib/whois/scanners/iana.rb +89 -0
  330. data/lib/whois/scanners/scannable.rb +65 -0
  331. data/lib/whois/scanners/verisign.rb +100 -0
  332. data/lib/whois/scanners/whois.ati.tn.rb +32 -0
  333. data/lib/whois/scanners/whois.audns.net.au.rb +32 -0
  334. data/lib/whois/scanners/whois.cctld.by.rb +35 -0
  335. data/lib/whois/scanners/whois.centralnic.com.rb +32 -0
  336. data/lib/whois/scanners/whois.cira.ca.rb +72 -0
  337. data/lib/whois/scanners/whois.cnnic.cn.rb +42 -0
  338. data/lib/whois/scanners/whois.denic.de.rb +103 -0
  339. data/lib/whois/scanners/whois.dns.hr.rb +30 -0
  340. data/lib/whois/scanners/whois.domainregistry.ie.rb +51 -0
  341. data/lib/whois/scanners/whois.fi.rb +66 -0
  342. data/lib/whois/scanners/whois.nc.rb +32 -0
  343. data/lib/whois/scanners/whois.nic.cz.rb +22 -0
  344. data/lib/whois/scanners/whois.nic.it.rb +92 -0
  345. data/lib/whois/scanners/whois.pir.org.rb +17 -0
  346. data/lib/whois/scanners/whois.rnids.rs.rb +52 -0
  347. data/lib/whois/scanners/whois.smallregistry.net.rb +50 -0
  348. data/lib/whois/scanners/whois.srs.net.nz.rb +23 -0
  349. data/lib/whois/scanners/whois.sx.rb +37 -0
  350. data/lib/whois/scanners/whois.tld.ee.rb +47 -0
  351. data/lib/whois/scanners/whois.tucows.com.rb +23 -0
  352. data/lib/whois/scanners/whois.yoursrs.com.rb +24 -0
  353. data/lib/whois-parser.rb +10 -0
  354. metadata +507 -0
@@ -0,0 +1,106 @@
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/verisign'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ class BaseVerisign < Base
18
+ include Scanners::Scannable
19
+
20
+ self.scanner = Scanners::Verisign
21
+
22
+
23
+ property_supported :disclaimer do
24
+ node("Disclaimer")
25
+ end
26
+
27
+
28
+ property_supported :domain do
29
+ node("Domain Name", &:downcase)
30
+ end
31
+
32
+ property_supported :domain_id do
33
+ node("Registry Domain ID")
34
+ end
35
+
36
+
37
+ property_supported :status do
38
+ # node("Status")
39
+ if available?
40
+ :available
41
+ else
42
+ :registered
43
+ end
44
+ end
45
+
46
+ property_supported :available? do
47
+ !!(content_for_scanner =~ /^No match for/)
48
+ end
49
+
50
+ property_supported :registered? do
51
+ !available?
52
+ end
53
+
54
+
55
+ property_supported :created_on do
56
+ node("Creation Date") { |value| parse_time(value) }
57
+ end
58
+
59
+ property_supported :updated_on do
60
+ node("Updated Date") { |value| parse_time(value) }
61
+ end
62
+
63
+ property_supported :expires_on do
64
+ node("Registry Expiry Date") { |value| parse_time(value) }
65
+ end
66
+
67
+
68
+ property_supported :registrar do
69
+ node("Registrar") do |value|
70
+ Parser::Registrar.new(
71
+ id: last_useful_item(node("Registrar IANA ID")),
72
+ name: last_useful_item(value),
73
+ url: referral_url
74
+ )
75
+ end
76
+ end
77
+
78
+
79
+ property_supported :nameservers do
80
+ Array.wrap(node("Name Server")).reject { |value| value =~ /no nameserver/i }.map do |name|
81
+ Parser::Nameserver.new(name: name.downcase)
82
+ end
83
+ end
84
+
85
+
86
+ def referral_whois
87
+ node("Registrar WHOIS Server")
88
+ end
89
+
90
+ def referral_url
91
+ last_useful_item(node("Registrar URL"))
92
+ end
93
+
94
+
95
+ private
96
+
97
+ # In case of "SPAM Response", the response contains more than one item
98
+ # for the same value and the value becomes an Array.
99
+ def last_useful_item(values)
100
+ values.is_a?(Array) ? values.last : values
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+ end
@@ -0,0 +1,150 @@
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
+ require 'whois/scanners/base_whoisd'
13
+
14
+
15
+ module Whois
16
+ class Parsers
17
+
18
+ # Base parser for Whoisd servers.
19
+ #
20
+ # @abstract
21
+ class BaseWhoisd < Base
22
+ include RegistryResponseSafety
23
+ include Scanners::Scannable
24
+
25
+ class_attribute :status_mapping
26
+
27
+ self.status_mapping = {
28
+ "paid and in zone" => :registered,
29
+ "expired" => :expired,
30
+ }
31
+ self.scanner = Scanners::BaseWhoisd
32
+
33
+
34
+ property_supported :domain do
35
+ node('domain')
36
+ end
37
+
38
+ property_not_supported :domain_id
39
+
40
+
41
+ property_supported :status do
42
+ if available?
43
+ :available
44
+ elsif node('status')
45
+ values = Array.wrap(node('status'))
46
+ mapped_status = values.filter_map { |value| self.class.status_mapping[value.downcase] }.first
47
+ mapped_status || Whois::Parser.bug!(ParserError, "Unknown status `#{values.join(', ')}'.")
48
+ elsif node('domain') && [node('registered'), node('registrar'), node('expire')].any?(&:present?)
49
+ :registered
50
+ else
51
+ :unknown
52
+ end
53
+ end
54
+
55
+ property_supported :available? do
56
+ !!node('status:available')
57
+ end
58
+
59
+ property_supported :registered? do
60
+ [:registered, :expired].include?(status)
61
+ end
62
+
63
+
64
+ property_supported :created_on do
65
+ node('registered') { |string| parse_time(string) }
66
+ end
67
+
68
+ property_supported :updated_on do
69
+ node('changed') { |string| parse_time(string) }
70
+ end
71
+
72
+ property_supported :expires_on do
73
+ node('expire') { |string| parse_time(string) }
74
+ end
75
+
76
+
77
+ property_supported :registrar do
78
+ node('registrar') do |string|
79
+ Parser::Registrar.new(
80
+ :id => string,
81
+ :name => string
82
+ )
83
+ end
84
+ end
85
+
86
+ property_supported :registrant_contacts do
87
+ node('registrant') do |value|
88
+ build_contact(value, Parser::Contact::TYPE_REGISTRANT)
89
+ end
90
+ end
91
+
92
+ property_supported :admin_contacts do
93
+ node('admin-c') do |value|
94
+ build_contact(value, Parser::Contact::TYPE_ADMINISTRATIVE)
95
+ end
96
+ end
97
+
98
+ property_supported :technical_contacts do
99
+ id = node_nsset['tech-c'] rescue nil
100
+ if id
101
+ build_contact(id, Parser::Contact::TYPE_TECHNICAL)
102
+ end
103
+ end
104
+
105
+
106
+ property_supported :nameservers do
107
+ lines = node_nsset['nserver'] rescue nil
108
+ Array.wrap(lines).map do |line|
109
+ if line =~ /(.+) \((.+)\)/
110
+ name = ::Regexp.last_match(1)
111
+ ipv4, ipv6 = ::Regexp.last_match(2).split(', ')
112
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4, :ipv6 => ipv6)
113
+ else
114
+ Parser::Nameserver.new(:name => line.strip)
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ private
121
+
122
+ def node_nsset
123
+ node("node:nsset/#{node('nsset')}")
124
+ end
125
+
126
+ def build_contact(element, type)
127
+ node("node:contact/#{element}") do |hash|
128
+ address = hash['street'] || hash['address']
129
+ address = address.join("\n") if address.respond_to?(:join)
130
+
131
+ Parser::Contact.new(
132
+ :type => type,
133
+ :id => element,
134
+ :name => hash['name'],
135
+ :organization => hash['org'],
136
+ :address => address,
137
+ :city => hash['city'],
138
+ :zip => hash['postal code'],
139
+ :country_code => hash['country'],
140
+ :phone => hash['phone'],
141
+ :email => hash['e-mail'],
142
+ :created_on => parse_time(hash['created'])
143
+ )
144
+ end
145
+ end
146
+
147
+ end
148
+
149
+ end
150
+ end
@@ -0,0 +1,35 @@
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
+ # The Blank parser isn't a real parser. It's just a fake parser
17
+ # that acts as a parser but doesn't provide any special capability.
18
+ #
19
+ # It doesn't register itself in the parser_registry,
20
+ # it doesn't scan any string, it only exists to be initialized
21
+ # in case a record needs to create a parser for a WHOIS server
22
+ # not yet supported.
23
+ #
24
+ class Blank < Base
25
+
26
+ Parser::PROPERTIES.each do |method|
27
+ define_method(method) do
28
+ raise ParserNotFound, "Unable to find a parser for the server `#{part.host}'"
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,25 @@
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 'za_central_registry'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the capetown-whois.registry.net.za server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class CapetownWhoisRegistryNetZa < ZaCentralRegistry
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
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_shared3'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the ccwhois.ksregistry.net server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class CcwhoisKsregistryNet < BaseShared3
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
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_verisign'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the ccwhois.verisign-grs.com server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class CcwhoisVerisignGrsCom < BaseVerisign
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
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 'za_central_registry'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the coza-whois.registry.za.net server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class CozaWhoisRegistryNetZa < ZaCentralRegistry
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
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 'za_central_registry'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the durban-whois.registry.net.za server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class DurbanWhoisRegistryNetZa < ZaCentralRegistry
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,163 @@
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.example.com server.
17
+ #
18
+ # In case you are not implementing all the methods,
19
+ # please add the following statement to the class docblock.
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
+ class Example < Base
25
+
26
+ # Gets the registry disclaimer that comes with the record.
27
+ #
28
+ # Returns a String with the disclaimer if available,
29
+ # <tt>nil</tt> otherwise.
30
+ property_supported :disclaimer do
31
+ nil
32
+ end
33
+
34
+
35
+ # Gets the domain name as stored by the registry.
36
+ #
37
+ # Returns a String with the domain name if available,
38
+ # <tt>nil</tt> otherwise.
39
+ property_supported :domain do
40
+ nil
41
+ end
42
+
43
+ # Gets the unique domain ID as stored by the registry.
44
+ #
45
+ # Returns a String with the domain ID if available,
46
+ # <tt>nil</tt> otherwise.
47
+ property_supported :domain_id do
48
+ nil
49
+ end
50
+
51
+
52
+ # Gets the record status or statuses.
53
+ #
54
+ # Returns a String/Array with the record status if available,
55
+ # <tt>nil</tt> otherwise.
56
+ property_supported :status do
57
+ nil
58
+ end
59
+
60
+ # Checks whether this record is available.
61
+ #
62
+ # Returns true/false depending whether this record is available.
63
+ property_supported :available? do
64
+ nil
65
+ end
66
+
67
+ # Checks whether this record is registered.
68
+ #
69
+ # Returns true/false depending this record is available.
70
+ property_supported :registered? do
71
+ nil
72
+ end
73
+
74
+
75
+ # Gets the date the record was created,
76
+ # according to the registry record.
77
+ #
78
+ # Returns a Time object representing the date the record was created or
79
+ # <tt>nil</tt> otherwise.
80
+ property_supported :created_on do
81
+ nil
82
+ end
83
+
84
+ # Gets the date the record was last updated,
85
+ # according to the registry record.
86
+ #
87
+ # Returns a Time object representing the date the record was last updated or
88
+ # <tt>nil</tt> if not available.
89
+ property_supported :updated_on do
90
+ nil
91
+ end
92
+
93
+ # Gets the date the record is set to expire,
94
+ # according to the registry record.
95
+ #
96
+ # Returns a Time object representing the date the record is set to expire or
97
+ # <tt>nil</tt> if not available.
98
+ property_supported :expires_on do
99
+ nil
100
+ end
101
+
102
+
103
+ # Gets the registrar object containing the registrar details
104
+ # extracted from the registry record.
105
+ #
106
+ # Returns an instance of <tt>Parser::Registrar</tt> representing the registrar or
107
+ # <tt>nil</tt> if not available.
108
+ property_supported :registrar do
109
+ nil
110
+ end
111
+
112
+
113
+ # Gets the registrant contact object containing the details of the record owner
114
+ # extracted from the registry record.
115
+ #
116
+ # Returns an instance of <tt>Parser::Contact</tt> representing the registrant contact or
117
+ # <tt>nil</tt> if not available.
118
+ property_supported :registrant_contacts do
119
+ nil
120
+ end
121
+
122
+ # Gets the administrative contact object containing the details of the record administrator
123
+ # extracted from the registry record.
124
+ #
125
+ # Returns an instance of <tt>Parser::Contact</tt> representing the administrative contact or
126
+ # <tt>nil</tt> if not available.
127
+ property_supported :admin_contacts do
128
+ nil
129
+ end
130
+
131
+ # Gets the technical contact object containing the details of the technical representative
132
+ # extracted from the registry record.
133
+ #
134
+ # Returns an instance of <tt>Parser::Contact</tt> representing the technical contact or
135
+ # <tt>nil</tt> if not available.
136
+ property_supported :technical_contacts do
137
+ nil
138
+ end
139
+
140
+
141
+ # Gets the list of name server entries for this record,
142
+ # extracted from the registry record.
143
+ #
144
+ # @example
145
+ # nameserver
146
+ # # => []
147
+ #
148
+ # @example
149
+ # nameserver
150
+ # # => [
151
+ # # #<struct Parser::Nameserver name="ns1.google.com">,
152
+ # # #<struct Parser::Nameserver name="ns2.google.com">
153
+ # # ]
154
+ #
155
+ # @return [Array<Parser::Nameserver>]
156
+ property_supported :nameservers do
157
+ []
158
+ end
159
+
160
+ end
161
+
162
+ end
163
+ end
@@ -0,0 +1,25 @@
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 'za_central_registry'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the joburg-whois.registry.net.za server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class JoburgWhoisRegistryNetZa < ZaCentralRegistry
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,97 @@
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 kero.yachay.pe 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 KeroYachayPe < Base
26
+
27
+ property_supported :status do
28
+ if content_for_scanner =~ /Status:\s+(.+?)\n/
29
+ case ::Regexp.last_match(1).strip.downcase
30
+ when "active"
31
+ :registered
32
+ # NEWSTATUS suspended (https://github.com/weppos/whois/issues/5)
33
+ when "suspended"
34
+ :registered
35
+ when "not registered"
36
+ :available
37
+ when "no object found"
38
+ :available
39
+ when "inactive"
40
+ :inactive
41
+ else
42
+ current_statuses = %w[clientdeleteprohibited clienttransferprohibited clientupdateprohibited]
43
+ if current_statuses.include?(::Regexp.last_match(1).strip.downcase)
44
+ :registered
45
+ else
46
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
47
+ end
48
+ end
49
+ elsif content_for_scanner =~ /^Domain Status:\s+No Object Found\s*$/i
50
+ :available
51
+ elsif content_for_scanner.match?(/^Domain Status:\s+/i)
52
+ :registered
53
+ else
54
+ Whois::Parser.bug!(ParserError, "Unable to parse status.")
55
+ end
56
+ end
57
+
58
+ property_supported :available? do
59
+ status == :available
60
+ end
61
+
62
+ property_supported :registered? do
63
+ !available?
64
+ end
65
+
66
+
67
+ property_not_supported :created_on
68
+
69
+ property_not_supported :updated_on
70
+
71
+ property_not_supported :expires_on
72
+
73
+
74
+ property_supported :nameservers do
75
+ if content_for_scanner =~ /Name Servers:\n((.+\n)+)\n/
76
+ ::Regexp.last_match(1).split("\n").map do |name|
77
+ Parser::Nameserver.new(:name => name.strip)
78
+ end
79
+ end
80
+ end
81
+
82
+
83
+ # Checks whether the response has been throttled.
84
+ #
85
+ # @return [Boolean]
86
+ #
87
+ # @example
88
+ # Looup quota exceeded.
89
+ #
90
+ def response_throttled?
91
+ !content_for_scanner.match(/Looup quota exceeded./).nil?
92
+ end
93
+
94
+ end
95
+
96
+ end
97
+ end