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,144 @@
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/whois.centralnic.com.rb'
13
+
14
+
15
+ module Whois
16
+ class Parsers
17
+
18
+ # Parser for the whois.centralnic.com server.
19
+ class WhoisCentralnicCom < Base
20
+ include RegistryResponseSafety
21
+ include Scanners::Scannable
22
+
23
+ self.scanner = Scanners::WhoisCentralnicCom
24
+
25
+
26
+ property_supported :disclaimer do
27
+ node("field:disclaimer")
28
+ end
29
+
30
+
31
+ property_supported :domain do
32
+ node("Domain Name") { |str| str.downcase }
33
+ end
34
+
35
+ property_supported :domain_id do
36
+ node("Domain ID")
37
+ end
38
+
39
+
40
+ property_supported :status do
41
+ # OK, RENEW PERIOD, ...
42
+ Array.wrap(
43
+ node("Status") ||
44
+ node("Domain Status")
45
+ )
46
+ end
47
+
48
+ property_supported :available? do
49
+ !!node("status:available")
50
+ end
51
+
52
+ property_supported :registered? do
53
+ !available? && !Array.wrap(node("Status") || node("Domain Status")).empty? &&
54
+ !node('Domain Name').to_s.strip.empty? &&
55
+ Array.wrap(node("Status") || node("Domain Status")).none? { |value| value.to_s.strip.casecmp('unknown').zero? }
56
+ end
57
+
58
+
59
+ property_supported :created_on do
60
+ node("Created On") { |str| parse_time(str) } ||
61
+ node("Creation Date") { |str| parse_time(str) }
62
+ end
63
+
64
+ property_supported :updated_on do
65
+ node("Last Updated On") { |str| parse_time(str) } ||
66
+ node("Updated Date") { |str| parse_time(str) }
67
+ end
68
+
69
+ property_supported :expires_on do
70
+ node("Expiration Date") { |str| parse_time(str) } ||
71
+ node("Registry Expiry Date") { |str| parse_time(str) }
72
+ end
73
+
74
+
75
+ property_supported :registrar do
76
+ node("Sponsoring Registrar ID") do
77
+ Parser::Registrar.new(
78
+ :id => node("Sponsoring Registrar ID"),
79
+ :name => nil,
80
+ :organization => node("Sponsoring Registrar Organization"),
81
+ :url => node("Sponsoring Registrar Website")
82
+ )
83
+ end ||
84
+ node("Sponsoring Registrar IANA ID") do
85
+ Parser::Registrar.new(
86
+ :id => node("Sponsoring Registrar IANA ID"),
87
+ :name => node("Sponsoring Registrar"),
88
+ :organization => nil,
89
+ :url => nil
90
+ )
91
+ end
92
+ end
93
+
94
+ property_supported :registrant_contacts do
95
+ build_contact("Registrant", Parser::Contact::TYPE_REGISTRANT)
96
+ end
97
+
98
+ property_supported :admin_contacts do
99
+ build_contact("Admin", Parser::Contact::TYPE_ADMINISTRATIVE)
100
+ end
101
+
102
+ property_supported :technical_contacts do
103
+ build_contact("Tech", Parser::Contact::TYPE_TECHNICAL)
104
+ end
105
+
106
+
107
+ property_supported :nameservers do
108
+ Array.wrap(node("Name Server")).map do |name|
109
+ Parser::Nameserver.new(:name => name.downcase.chomp("."))
110
+ end
111
+ end
112
+
113
+
114
+ private
115
+
116
+ def build_contact(element, type)
117
+ node("#{element} ID") do
118
+ address = [nil, 1, 2, 3]
119
+ .map { |i| node("#{element} Street#{i}") }
120
+ .delete_if { |i| i.nil? || i.empty? }
121
+ .join("\n")
122
+ address = nil if address.empty?
123
+
124
+ Parser::Contact.new(
125
+ :type => type,
126
+ :id => node("#{element} ID"),
127
+ :name => node("#{element} Name"),
128
+ :organization => node("#{element} Organization"),
129
+ :address => address,
130
+ :city => node("#{element} City"),
131
+ :zip => node("#{element} Postal Code"),
132
+ :state => node("#{element} State/Province"),
133
+ :country_code => node("#{element} Country"),
134
+ :phone => node("#{element} Phone"),
135
+ :fax => node("#{element} FAX") || node("#{element} Fax"),
136
+ :email => node("#{element} Email")
137
+ )
138
+ end
139
+ end
140
+
141
+ end
142
+
143
+ end
144
+ end
@@ -0,0 +1,227 @@
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.cira.ca.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.cira.ca server.
18
+ #
19
+ # @see Whois::Parsers::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisCiraCa < Base
23
+ include Scanners::Scannable
24
+
25
+ self.scanner = Scanners::WhoisCiraCa
26
+
27
+
28
+ property_supported :disclaimer do
29
+ node("field:disclaimer")
30
+ end
31
+
32
+
33
+ property_supported :domain do
34
+ node("Domain name") || node("Domain Name")
35
+ end
36
+
37
+ property_not_supported :domain_id
38
+
39
+
40
+ property_supported :status do
41
+ status_value = node("Domain status") || node("Domain Status")
42
+
43
+ if status_value
44
+ case Array.wrap(status_value).map { |value| value.to_s.downcase.sub(%r{\s+https?://.*\z}, "") }
45
+ when ["registered"]
46
+ :registered
47
+ when ["redemption"]
48
+ :registered
49
+ when ["auto-renew grace"]
50
+ :registered
51
+ when ["to be released"]
52
+ :registered
53
+ when ["pending delete"]
54
+ :registered
55
+ when ["available"]
56
+ :available
57
+ when ["unavailable"]
58
+ :invalid
59
+ else
60
+ epp_statuses = Array.wrap(status_value).map { |value| value.to_s.downcase.sub(%r{\s+https?://.*\z}, "") }
61
+ if epp_statuses.all? { |value| value.match?(/\A(?:client|server)(?:delete|transfer|update|renew)prohibited\z/) }
62
+ :registered
63
+ else
64
+ Whois::Parser.bug!(ParserError, "Unknown status `#{epp_statuses.join(', ')}'.")
65
+ end
66
+ end
67
+ elsif content_for_scanner =~ /^Not found:\s+/i
68
+ :available
69
+ elsif content_for_scanner =~ /Domain status:\s+(.+?)\n/
70
+ case node("Domain status", &:downcase)
71
+ when "registered"
72
+ :registered
73
+ when "redemption"
74
+ :registered
75
+ when "auto-renew grace"
76
+ :registered
77
+ when "to be released"
78
+ :registered
79
+ when "pending delete"
80
+ :registered
81
+ when "available"
82
+ :available
83
+ when "unavailable"
84
+ :invalid
85
+ else
86
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
87
+ end
88
+ else
89
+ Whois::Parser.bug!(ParserError, "Unable to parse status.")
90
+ end
91
+ end
92
+
93
+ property_supported :available? do
94
+ status == :available
95
+ end
96
+
97
+ property_supported :registered? do
98
+ status == :registered
99
+ end
100
+
101
+
102
+ property_supported :created_on do
103
+ value = node("Creation date") || node("Creation Date")
104
+ parse_time(value) if value
105
+ end
106
+
107
+ property_supported :updated_on do
108
+ value = node("Updated date") || node("Updated Date")
109
+ parse_time(value) if value
110
+ end
111
+
112
+ property_supported :expires_on do
113
+ value = node("Expiry date") || node("Registry Expiry Date")
114
+ parse_time(value) if value
115
+ end
116
+
117
+
118
+ property_supported :registrar do
119
+ node("Registrar") do |value|
120
+ if value.is_a?(Hash)
121
+ Parser::Registrar.new(
122
+ id: value["Number"],
123
+ name: value["Name"],
124
+ organization: value["Name"]
125
+ )
126
+ else
127
+ Parser::Registrar.new(name: value, organization: value)
128
+ end
129
+ end
130
+ end
131
+
132
+
133
+ property_supported :registrant_contacts do
134
+ build_contact("Registrant", Parser::Contact::TYPE_REGISTRANT)
135
+ end
136
+
137
+ property_supported :admin_contacts do
138
+ build_contact("Administrative contact", Parser::Contact::TYPE_ADMINISTRATIVE)
139
+ end
140
+
141
+ property_supported :technical_contacts do
142
+ build_contact("Technical contact", Parser::Contact::TYPE_TECHNICAL)
143
+ end
144
+
145
+
146
+ property_supported :nameservers do
147
+ Array.wrap(node("nserver") || node("Name Server") || node("field:nameservers")).map do |line|
148
+ name, ipv4 = line.split(/\s+/)
149
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
150
+ end
151
+ end
152
+
153
+
154
+ # Nameservers are listed in the following formats:
155
+ #
156
+ # ns1.google.com
157
+ # ns2.google.com
158
+ #
159
+ # ns1.google.com 216.239.32.10
160
+ # ns2.google.com 216.239.34.10
161
+ #
162
+ property_supported :nameservers do
163
+ Array.wrap(node("field:nameservers") || node("Name Server") || node("nserver")).map do |line|
164
+ name, ipv4 = line.strip.split(/\s+/)
165
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
166
+ end
167
+ end
168
+
169
+
170
+ # Attempts to detect and returns the version.
171
+ #
172
+ # TODO: This is very empiric.
173
+ # Use the available status in combination with the creation date label.
174
+ #
175
+ # NEWPROPERTY
176
+ def version
177
+ cached_properties_fetch :version do
178
+ version = if content_for_scanner =~ /^% \(c\) (.+?) Canadian Internet Registration Authority/
179
+ case ::Regexp.last_match(1)
180
+ when "2007" then "1"
181
+ when "2010" then "2"
182
+ end
183
+ end
184
+ version || Whois::Parser.bug!(ParserError, "Unable to detect version.")
185
+ end
186
+ end
187
+
188
+ # NEWPROPERTY
189
+ def valid?
190
+ cached_properties_fetch(:valid?) do
191
+ !invalid?
192
+ end
193
+ end
194
+
195
+ # NEWPROPERTY
196
+ def invalid?
197
+ cached_properties_fetch(:invalid?) do
198
+ status == :invalid
199
+ end
200
+ end
201
+
202
+
203
+ private
204
+
205
+ def build_contact(element, type)
206
+ node(element) do |hash|
207
+ Parser::Contact.new(
208
+ :type => type,
209
+ :id => nil,
210
+ :name => hash["Name"],
211
+ :organization => nil,
212
+ :address => hash["Postal address"],
213
+ :city => nil,
214
+ :zip => nil,
215
+ :state => nil,
216
+ :country => nil,
217
+ :phone => hash["Phone"],
218
+ :fax => hash["Fax"],
219
+ :email => hash["Email"]
220
+ )
221
+ end
222
+ end
223
+
224
+ end
225
+
226
+ end
227
+ 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_cocca2'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.cmc.iq server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisCmcIq < BaseCocca2
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,108 @@
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.cnnic.cn.rb'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.cnnic.cn server.
18
+ class WhoisCnnicCn < Base
19
+ include Scanners::Scannable
20
+
21
+ self.scanner = Scanners::WhoisCnnicCn
22
+
23
+
24
+ property_not_supported :disclaimer
25
+
26
+
27
+ property_supported :domain do
28
+ node("Domain Name", &:downcase)
29
+ end
30
+
31
+ property_supported :domain_id do
32
+ node("ROID")
33
+ end
34
+
35
+
36
+ property_supported :status do
37
+ Array.wrap node("Domain Status")
38
+ end
39
+
40
+ property_supported :available? do
41
+ !!node("status:available")
42
+ end
43
+
44
+ property_supported :registered? do
45
+ !reserved? && !available?
46
+ end
47
+
48
+
49
+ property_supported :created_on do
50
+ node("Registration Time") { |value| parse_time(value) }
51
+ end
52
+
53
+ property_not_supported :updated_on
54
+
55
+ property_supported :expires_on do
56
+ node("Expiration Time") { |value| parse_time(value) }
57
+ end
58
+
59
+
60
+ property_supported :registrar do
61
+ node("Sponsoring Registrar") do |value|
62
+ Parser::Registrar.new(
63
+ :id => value,
64
+ :name => value
65
+ )
66
+ end
67
+ end
68
+
69
+ property_supported :registrant_contacts do
70
+ build_contact("Registrant", Parser::Contact::TYPE_REGISTRANT)
71
+ end
72
+
73
+ property_supported :admin_contacts do
74
+ build_contact("Administrative", Parser::Contact::TYPE_ADMINISTRATIVE)
75
+ end
76
+
77
+ property_not_supported :technical_contacts
78
+
79
+
80
+ property_supported :nameservers do
81
+ Array.wrap(node("Name Server")).map do |name|
82
+ Parser::Nameserver.new(name: name.downcase)
83
+ end
84
+ end
85
+
86
+
87
+ # NEWPROPERTY
88
+ def reserved?
89
+ !!node("status:reserved")
90
+ end
91
+
92
+
93
+ private
94
+
95
+ def build_contact(element, type)
96
+ node("#{element}") do |value|
97
+ Parser::Contact.new(
98
+ :type => type,
99
+ :id => node("#{element} ID"),
100
+ :name => value,
101
+ :email => node("#{element} Contact Email")
102
+ )
103
+ end
104
+ end
105
+
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,74 @@
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.co.ca 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 WhoisCoCa < Base
26
+
27
+ property_supported :status do
28
+ case
29
+ when available? then :available
30
+ when reserved? then :reserved
31
+ else :registered
32
+ end
33
+ end
34
+
35
+ property_supported :available? do
36
+ !!(content_for_scanner =~ /^(.+) is available/)
37
+ end
38
+
39
+ property_supported :registered? do
40
+ !available?
41
+ end
42
+
43
+
44
+ property_supported :created_on do
45
+ if content_for_scanner =~ /date_approved:\s+(.+)\n/
46
+ parse_time(::Regexp.last_match(1))
47
+ end
48
+ end
49
+
50
+ property_not_supported :updated_on
51
+
52
+ property_supported :expires_on do
53
+ if content_for_scanner =~ /date_renewal:\s+(.+)\n/
54
+ parse_time(::Regexp.last_match(1))
55
+ end
56
+ end
57
+
58
+
59
+ property_supported :nameservers do
60
+ content_for_scanner.scan(/ns\d_hostname:\s+(.+)\n/).flatten.map do |name|
61
+ Parser::Nameserver.new(:name => name)
62
+ end
63
+ end
64
+
65
+
66
+ # NEWPROPERTY
67
+ def reserved?
68
+ !!(content_for_scanner =~ /^Domain is not available or is reserved by the registry/)
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,82 @@
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.co.pl server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisCoPl < Base
22
+
23
+ property_not_supported :disclaimer
24
+
25
+
26
+ property_supported :domain do
27
+ if content_for_scanner =~ /domain:\s+(.+?)\n/
28
+ ::Regexp.last_match(1)
29
+ end
30
+ end
31
+
32
+ property_not_supported :domain_id
33
+
34
+
35
+ property_supported :status do
36
+ if available?
37
+ :available
38
+ else
39
+ :registered
40
+ end
41
+ end
42
+
43
+ property_supported :available? do
44
+ !!(content_for_scanner =~ /^% Unfortunately, No Results Were Found/)
45
+ end
46
+
47
+ property_supported :registered? do
48
+ !available?
49
+ end
50
+
51
+
52
+ property_not_supported :created_on
53
+
54
+ property_supported :updated_on do
55
+ if content_for_scanner =~ /changed:\s+(.+?)\n/
56
+ parse_time(::Regexp.last_match(1))
57
+ end
58
+ end
59
+
60
+ property_not_supported :expires_on
61
+
62
+
63
+ property_not_supported :registrar
64
+
65
+
66
+ property_not_supported :registrant_contacts
67
+
68
+ property_not_supported :admin_contacts
69
+
70
+ property_not_supported :technical_contacts
71
+
72
+
73
+ property_supported :nameservers do
74
+ content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten.map do |name|
75
+ Parser::Nameserver.new(:name => name)
76
+ end
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+ end