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,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_shared2'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.nic.tel server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisNicTel < BaseShared2
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,49 @@
1
+ require_relative 'base'
2
+ require_relative 'registry_response_safety'
3
+
4
+ module Whois
5
+ class Parsers
6
+ # Togo's JWhoisServer emits a repeated, label-aligned record rather than
7
+ # the key/value layout used by most modern gTLDs.
8
+ class WhoisNicTg < Base
9
+ include RegistryResponseSafety
10
+
11
+ property_supported :domain do
12
+ content_for_scanner[/^Domain:\.*\s*(\S+)\s*$/i, 1]
13
+ end
14
+
15
+ property_supported :status do
16
+ if content_for_scanner.match?(/^NO OBJECT FOUND!\s*$/i)
17
+ :available
18
+ elsif content_for_scanner.match?(/^Domain:\.*\s*\S+/i) &&
19
+ content_for_scanner.match?(/^Status:\.*\s*Activ(?:&eacute;|é)/i)
20
+ :registered
21
+ else
22
+ :unknown
23
+ end
24
+ end
25
+
26
+ property_supported :available? do
27
+ status == :available
28
+ end
29
+
30
+ property_supported :registered? do
31
+ status == :registered
32
+ end
33
+
34
+ property_supported :created_on do
35
+ parse_time(content_for_scanner[/^Activation:\.*\s*(\S+)\s*$/i, 1])
36
+ end
37
+
38
+ property_supported :expires_on do
39
+ parse_time(content_for_scanner[/^Expiration:\.*\s*(\S+)\s*$/i, 1])
40
+ end
41
+
42
+ property_supported :nameservers do
43
+ content_for_scanner.scan(/^Name Server \(DB\):\.*\s*(\S+)\s*$/i).flatten.map do |name|
44
+ Parser::Nameserver.new(name: name.downcase)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,32 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base_cocca2'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.nic.tl server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisNicTl < BaseCocca2
22
+ property_supported :status do
23
+ if content_for_scanner.match?(/^The queried object does not exist: No Object Found\s*$/i)
24
+ :available
25
+ else
26
+ super()
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,101 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+ require_relative 'registry_response_safety'
12
+
13
+
14
+ module Whois
15
+ class Parsers
16
+
17
+ # Parser for the whois.nic.tm server.
18
+ #
19
+ # @see Whois::Parsers::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisNicTm < Base
23
+ include RegistryResponseSafety
24
+
25
+ property_not_supported :disclaimer
26
+
27
+
28
+ property_supported :domain do
29
+ if registered?
30
+ content_for_scanner.match(/^Domain : (.+)\n/)[1]
31
+ elsif available?
32
+ content_for_scanner.match(/^Domain (.+) is available/)[1]
33
+ end
34
+ end
35
+
36
+ property_not_supported :domain_id
37
+
38
+
39
+ property_supported :status do
40
+ if available?
41
+ :available
42
+ elsif content_for_scanner.match?(/^Domain :\s*\S+/i)
43
+ :registered
44
+ else
45
+ :unknown
46
+ end
47
+ end
48
+
49
+ property_supported :available? do
50
+ !!(content_for_scanner =~ /^Domain \S+ is available for purchase\s*$/i)
51
+ end
52
+
53
+ property_supported :registered? do
54
+ status == :registered
55
+ end
56
+
57
+
58
+ property_not_supported :created_on
59
+
60
+ property_not_supported :updated_on
61
+
62
+ property_supported :expires_on do
63
+ if content_for_scanner =~ /Expiry : (.+?)\n/
64
+ parse_time(::Regexp.last_match(1))
65
+ end
66
+ end
67
+
68
+
69
+ property_not_supported :registrar
70
+
71
+ property_supported :registrant_contacts do
72
+ lines = content_for_scanner.scan(/^Owner\s+: (.+)\n/).flatten
73
+ return if lines.empty?
74
+
75
+ Parser::Contact.new(
76
+ type: Parser::Contact::TYPE_REGISTRANT,
77
+ name: lines[0],
78
+ organization: lines[1],
79
+ address: lines[2],
80
+ zip: nil,
81
+ state: lines[4],
82
+ city: lines[3],
83
+ country: lines[5]
84
+ )
85
+ end
86
+
87
+ property_not_supported :admin_contacts
88
+
89
+ property_not_supported :technical_contacts
90
+
91
+
92
+ property_supported :nameservers do
93
+ content_for_scanner.scan(/^NS \d\s+: (.+)/).flatten.map do |name|
94
+ Parser::Nameserver.new(name: name)
95
+ end
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicToday < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # Identity Digital does not expose .TOOLS through this WHOIS endpoint.
6
+ class WhoisNicTools < BaseUnsupportedRegistry
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,159 @@
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.nic.tr server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisNicTr < Base
22
+
23
+ property_not_supported :disclaimer
24
+
25
+
26
+ property_not_supported :domain
27
+
28
+ property_not_supported :domain_id
29
+
30
+
31
+ property_supported :status do
32
+ # NEWSTATUS invalid
33
+ if invalid?
34
+ :invalid
35
+ elsif available?
36
+ :available
37
+ else
38
+ :registered
39
+ end
40
+ end
41
+
42
+ property_supported :available? do
43
+ !invalid? && !!(content_for_scanner =~ /No match found for "(.+)"/)
44
+ end
45
+
46
+ property_supported :registered? do
47
+ !invalid? && !available?
48
+ end
49
+
50
+
51
+ property_supported :created_on do
52
+ if content_for_scanner =~ /Created on\.+:\s+(.+)\n/
53
+ time = parse_time(::Regexp.last_match(1))
54
+ Time.utc(time.year, time.month, time.day)
55
+ end
56
+ end
57
+
58
+ property_not_supported :updated_on
59
+
60
+ property_supported :expires_on do
61
+ if content_for_scanner =~ /Expires on\.+:\s+(.+)\n/
62
+ time = parse_time(::Regexp.last_match(1))
63
+ Time.utc(time.year, time.month, time.day)
64
+ end
65
+ end
66
+
67
+
68
+ property_not_supported :registrar
69
+
70
+
71
+ property_supported :registrant_contacts do
72
+ textblock = content_for_scanner.slice(/^\*\* Registrant:\n((?:\s+.+\n)+)/, 1)
73
+ return unless textblock
74
+
75
+ lines = textblock.lines.map(&:strip)
76
+
77
+ name = lines[0]
78
+ address = lines[1..2].delete_if(&:blank?).join("\n")
79
+ city, country = if lines[3] == "Out of Turkey,"
80
+ [nil, lines[4]]
81
+ else
82
+ [lines[3].chomp(","), lines[4]]
83
+ end
84
+
85
+ Parser::Contact.new(
86
+ type: Parser::Contact::TYPE_REGISTRANT,
87
+ name: name,
88
+ address: address,
89
+ city: city,
90
+ country: country,
91
+ email: lines[5],
92
+ phone: lines[6],
93
+ fax: lines[7]
94
+ )
95
+ end
96
+
97
+ property_supported :admin_contacts do
98
+ build_contact("Administrative Contact", Parser::Contact::TYPE_ADMINISTRATIVE)
99
+ end
100
+
101
+ property_supported :technical_contacts do
102
+ build_contact("Technical Contact", Parser::Contact::TYPE_TECHNICAL)
103
+ end
104
+
105
+
106
+ property_supported :nameservers do
107
+ if content_for_scanner =~ /Domain Servers:\n((.+\n)+)\n/
108
+ ::Regexp.last_match(1).split("\n").map do |line|
109
+ name, ipv4 = line.split(/\s+/)
110
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4)
111
+ end
112
+ end
113
+ end
114
+
115
+
116
+ def response_error?
117
+ content_for_scanner =~ /Invalid input/
118
+ end
119
+
120
+
121
+ # NEWPROPERTY invalid?
122
+ def invalid?
123
+ cached_properties_fetch :invalid? do
124
+ response_error?
125
+ end
126
+ end
127
+
128
+
129
+ private
130
+
131
+ def build_contact(element, type)
132
+ textblock = content_for_scanner.slice(/^\*\* #{element}:\n((?:.+\n)+)\n/, 1)
133
+ return unless textblock
134
+
135
+ lines = []
136
+ textblock.lines.each do |line|
137
+ if line =~ /^\s+.+/
138
+ lines.last.last << "\n" << line.strip
139
+ else
140
+ lines << line.match(/([^\t]+)\t+:\s+(.+)/).to_a[1..2]
141
+ end
142
+ end
143
+ lines = lines.to_h
144
+
145
+ Parser::Contact.new(
146
+ type: type,
147
+ id: lines["NIC Handle"],
148
+ name: lines["Person"],
149
+ organization: lines["Organization Name"],
150
+ address: lines["Address"],
151
+ phone: lines["Phone"],
152
+ fax: lines["Fax"]
153
+ )
154
+ end
155
+
156
+ end
157
+
158
+ end
159
+ 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_shared2'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.nic.travel server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisNicTravel < BaseShared2
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'base_icann_compliant'
2
+ require_relative 'registry_response_safety'
3
+
4
+ module Whois
5
+ class Parsers
6
+ # Parser for the whois.nic.tv server.
7
+ class WhoisNicTv < BaseIcannCompliant
8
+ include RegistryResponseSafety
9
+
10
+ self.scanner = Scanners::BaseIcannCompliant, {
11
+ pattern_available: /^No Data Found\n/,
12
+ }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,177 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2022 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require_relative 'base'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.nic.uk 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 http://www.nominet.org.uk/other/whois/detailedinstruct/
23
+ #
24
+ class WhoisNicUk < Base
25
+
26
+ # == Values for Status
27
+ #
28
+ # @see http://www.nominet.org.uk/registrars/systems/data/regstatus/
29
+ # @see http://www.nominet.org.uk/registrants/maintain/renew/status/
30
+ #
31
+ property_supported :status do
32
+ if content_for_scanner =~ /\s+Registration status:\s+(.+?)\n/
33
+ case ::Regexp.last_match(1).downcase
34
+ when "registered until expiry date."
35
+ :registered
36
+ when "registration request being processed."
37
+ :registered
38
+ when "renewal request being processed."
39
+ :registered
40
+ when "no longer required"
41
+ :registered
42
+ when "no registration status listed."
43
+ :reserved
44
+ # NEWSTATUS redemption (https://github.com/weppos/whois/issues/5)
45
+ when "renewal required."
46
+ :registered
47
+ else
48
+ Whois::Parser.bug!(ParserError, "Unknown status `#{::Regexp.last_match(1)}'.")
49
+ end
50
+ elsif invalid?
51
+ :invalid
52
+ else
53
+ :available
54
+ end
55
+ end
56
+
57
+ property_supported :available? do
58
+ !!(content_for_scanner =~ /This domain name has not been registered/)
59
+ end
60
+
61
+ property_supported :registered? do
62
+ !available?
63
+ end
64
+
65
+
66
+ property_supported :created_on do
67
+ if content_for_scanner =~ /\s+Registered on:\s+(.+)\n/
68
+ parse_time(::Regexp.last_match(1))
69
+ end
70
+ end
71
+
72
+ property_supported :updated_on do
73
+ if content_for_scanner =~ /\s+Last updated:\s+(.+)\n/
74
+ parse_time(::Regexp.last_match(1))
75
+ end
76
+ end
77
+
78
+ property_supported :expires_on do
79
+ if content_for_scanner =~ /\s+Expiry date:\s+(.+)\n/
80
+ parse_time(::Regexp.last_match(1))
81
+ end
82
+ end
83
+
84
+
85
+ # @see http://www.nic.uk/other/whois/instruct/
86
+ property_supported :registrar do
87
+ if content_for_scanner =~ /Registrar:\n((.+\n)+)\n/
88
+ content = ::Regexp.last_match(1).strip
89
+ id = name = org = url = nil
90
+
91
+ if content =~ /Tag =/
92
+ name, id = (content =~ /(.+) \[Tag = (.+)\]/) && [::Regexp.last_match(1).strip, ::Regexp.last_match(2).strip]
93
+ org, name = name.split(" t/a ")
94
+ url = (content =~ /URL: (.+)/) && ::Regexp.last_match(1).strip
95
+ elsif content =~ /This domain is registered directly with Nominet/
96
+ name = "Nominet"
97
+ org = "Nominet UK"
98
+ url = "http://www.nic.uk/"
99
+ end
100
+
101
+ Parser::Registrar.new(
102
+ :id => id,
103
+ :name => name || org,
104
+ :organization => org,
105
+ :url => url
106
+ )
107
+ end
108
+ end
109
+
110
+
111
+ property_supported :registrant_contacts do
112
+ if content_for_scanner =~ /Registrant's address:\n((.+\n)+)\n/
113
+ lines = ::Regexp.last_match(1).split("\n").map(&:strip)
114
+ address = lines[0..-5]
115
+ city = lines[-4]
116
+ state = lines[-3]
117
+ zip = lines[-2]
118
+ country = lines[-1]
119
+
120
+ Parser::Contact.new(
121
+ :type => Parser::Contact::TYPE_REGISTRANT,
122
+ :name => content_for_scanner[/Registrant:\n\s*(.+)\n/, 1],
123
+ :address => address.join("\n"),
124
+ :city => city,
125
+ :state => state,
126
+ :zip => zip,
127
+ :country => country
128
+ )
129
+ end
130
+ end
131
+
132
+
133
+ property_supported :nameservers do
134
+ if content_for_scanner =~ /Name servers:\n((.+\n)+)\n/
135
+ ::Regexp.last_match(1).split("\n").reject { |value| value =~ /No name servers listed/ }.map do |line|
136
+ name, ipv4, ipv6 = line.strip.split(/\s+/)
137
+ Parser::Nameserver.new(:name => name, :ipv4 => ipv4, :ipv6 => ipv6)
138
+ end
139
+ end
140
+ end
141
+
142
+
143
+ # Checks whether the response has been throttled.
144
+ #
145
+ # @return [Boolean]
146
+ #
147
+ # @example
148
+ # The WHOIS query quota for 127.0.0.1 has been exceeded
149
+ # and will be replenished in 50 seconds.
150
+ #
151
+ def response_throttled?
152
+ !!(content_for_scanner =~ /The WHOIS query quota for .+ has been exceeded/)
153
+ end
154
+
155
+
156
+ # NEWPROPERTY
157
+ def valid?
158
+ cached_properties_fetch(:valid?) do
159
+ !invalid?
160
+ end
161
+ end
162
+
163
+ # NEWPROPERTY
164
+ def invalid?
165
+ cached_properties_fetch(:invalid?) do
166
+ !!(content_for_scanner =~ /This domain cannot be registered/)
167
+ end
168
+ end
169
+
170
+ # NEWPROPERTY
171
+ # def suspended?
172
+ # end
173
+
174
+ end
175
+
176
+ end
177
+ 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_shared2'
11
+
12
+
13
+ module Whois
14
+ class Parsers
15
+
16
+ # Parser for the whois.nic.us server.
17
+ #
18
+ # @see Whois::Parsers::Example
19
+ # The Example parser for the list of all available methods.
20
+ #
21
+ class WhoisNicUs < BaseShared2
22
+ end
23
+
24
+ end
25
+ end