whois-parser-next 0.1.0 → 0.3.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 (285) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +59 -1
  3. data/README.md +31 -12
  4. data/RELEASING.md +2 -2
  5. data/ROADMAP.md +20 -15
  6. data/SECURITY.md +2 -2
  7. data/lib/whois/parser/version.rb +1 -1
  8. data/lib/whois/parsers/base_centralnic_icann.rb +12 -0
  9. data/lib/whois/parsers/base_cira_registry.rb +19 -0
  10. data/lib/whois/parsers/base_icann_compliant.rb +1 -1
  11. data/lib/whois/parsers/base_identity_digital.rb +12 -0
  12. data/lib/whois/parsers/base_jwhois.rb +48 -0
  13. data/lib/whois/parsers/base_nic_reserved_available.rb +17 -0
  14. data/lib/whois/parsers/base_reserved_registry.rb +27 -0
  15. data/lib/whois/parsers/base_top1000_icann.rb +39 -0
  16. data/lib/whois/parsers/base_top1000_retired.rb +26 -0
  17. data/lib/whois/parsers/base_unsupported_registry.rb +1 -1
  18. data/lib/whois/parsers/cwhois.cnnic.cn.rb +10 -0
  19. data/lib/whois/parsers/registry_response_safety.rb +2 -0
  20. data/lib/whois/parsers/whois.ax.rb +15 -3
  21. data/lib/whois/parsers/whois.cctld.uz.rb +50 -14
  22. data/lib/whois/parsers/whois.cnnic.cn.rb +31 -3
  23. data/lib/whois/parsers/whois.dominio.gq.rb +11 -0
  24. data/lib/whois/parsers/whois.dotukr.com.rb +23 -0
  25. data/lib/whois/parsers/whois.gtld.knet.cn.rb +10 -0
  26. data/lib/whois/parsers/whois.kyregistry.ky.rb +10 -0
  27. data/lib/whois/parsers/whois.madrid.rs.corenic.net.rb +8 -0
  28. data/lib/whois/parsers/whois.mediaserv.net.rb +9 -0
  29. data/lib/whois/parsers/whois.ngtld.cn.rb +8 -0
  30. data/lib/whois/parsers/whois.nic.academy.rb +8 -0
  31. data/lib/whois/parsers/whois.nic.accountant.rb +8 -0
  32. data/lib/whois/parsers/whois.nic.actor.rb +8 -0
  33. data/lib/whois/parsers/whois.nic.agency.rb +8 -0
  34. data/lib/whois/parsers/whois.nic.airforce.rb +8 -0
  35. data/lib/whois/parsers/whois.nic.amsterdam.rb +8 -0
  36. data/lib/whois/parsers/whois.nic.apartments.rb +8 -0
  37. data/lib/whois/parsers/whois.nic.army.rb +8 -0
  38. data/lib/whois/parsers/whois.nic.associates.rb +8 -0
  39. data/lib/whois/parsers/whois.nic.auction.rb +8 -0
  40. data/lib/whois/parsers/whois.nic.aw.rb +33 -0
  41. data/lib/whois/parsers/whois.nic.baby.rb +8 -0
  42. data/lib/whois/parsers/whois.nic.bank.rb +29 -0
  43. data/lib/whois/parsers/whois.nic.bar.rb +8 -0
  44. data/lib/whois/parsers/whois.nic.barcelona.rb +8 -0
  45. data/lib/whois/parsers/whois.nic.barclays.rb +8 -0
  46. data/lib/whois/parsers/whois.nic.bargains.rb +8 -0
  47. data/lib/whois/parsers/whois.nic.basketball.rb +8 -0
  48. data/lib/whois/parsers/whois.nic.bayern.rb +8 -0
  49. data/lib/whois/parsers/whois.nic.beauty.rb +8 -0
  50. data/lib/whois/parsers/whois.nic.beer.rb +8 -0
  51. data/lib/whois/parsers/whois.nic.berlin.rb +8 -0
  52. data/lib/whois/parsers/whois.nic.bible.rb +8 -0
  53. data/lib/whois/parsers/whois.nic.bid.rb +8 -0
  54. data/lib/whois/parsers/whois.nic.bike.rb +8 -0
  55. data/lib/whois/parsers/whois.nic.bingo.rb +8 -0
  56. data/lib/whois/parsers/whois.nic.blog.rb +34 -0
  57. data/lib/whois/parsers/whois.nic.bmw.rb +8 -0
  58. data/lib/whois/parsers/whois.nic.bond.rb +8 -0
  59. data/lib/whois/parsers/whois.nic.boston.rb +8 -0
  60. data/lib/whois/parsers/whois.nic.broker.rb +8 -0
  61. data/lib/whois/parsers/whois.nic.build.rb +8 -0
  62. data/lib/whois/parsers/whois.nic.builders.rb +8 -0
  63. data/lib/whois/parsers/whois.nic.buzz.rb +8 -0
  64. data/lib/whois/parsers/whois.nic.bzh.rb +32 -0
  65. data/lib/whois/parsers/whois.nic.cafe.rb +8 -0
  66. data/lib/whois/parsers/whois.nic.cam.rb +8 -0
  67. data/lib/whois/parsers/whois.nic.camera.rb +8 -0
  68. data/lib/whois/parsers/whois.nic.canon.rb +11 -0
  69. data/lib/whois/parsers/whois.nic.capital.rb +8 -0
  70. data/lib/whois/parsers/whois.nic.cards.rb +8 -0
  71. data/lib/whois/parsers/whois.nic.careers.rb +8 -0
  72. data/lib/whois/parsers/whois.nic.casa.rb +8 -0
  73. data/lib/whois/parsers/whois.nic.cash.rb +8 -0
  74. data/lib/whois/parsers/whois.nic.center.rb +8 -0
  75. data/lib/whois/parsers/whois.nic.ceo.rb +8 -0
  76. data/lib/whois/parsers/whois.nic.ch.rb +6 -2
  77. data/lib/whois/parsers/whois.nic.charity.rb +8 -0
  78. data/lib/whois/parsers/whois.nic.city.rb +8 -0
  79. data/lib/whois/parsers/whois.nic.claims.rb +8 -0
  80. data/lib/whois/parsers/whois.nic.cleaning.rb +8 -0
  81. data/lib/whois/parsers/whois.nic.coach.rb +8 -0
  82. data/lib/whois/parsers/whois.nic.codes.rb +8 -0
  83. data/lib/whois/parsers/whois.nic.coffee.rb +8 -0
  84. data/lib/whois/parsers/whois.nic.computer.rb +8 -0
  85. data/lib/whois/parsers/whois.nic.condos.rb +8 -0
  86. data/lib/whois/parsers/whois.nic.construction.rb +8 -0
  87. data/lib/whois/parsers/whois.nic.contractors.rb +8 -0
  88. data/lib/whois/parsers/whois.nic.cooking.rb +8 -0
  89. data/lib/whois/parsers/whois.nic.cool.rb +8 -0
  90. data/lib/whois/parsers/whois.nic.coop.rb +18 -3
  91. data/lib/whois/parsers/whois.nic.creditcard.rb +8 -0
  92. data/lib/whois/parsers/whois.nic.cruises.rb +8 -0
  93. data/lib/whois/parsers/whois.nic.cyou.rb +8 -0
  94. data/lib/whois/parsers/whois.nic.dance.rb +8 -0
  95. data/lib/whois/parsers/whois.nic.data.rb +8 -0
  96. data/lib/whois/parsers/whois.nic.deals.rb +8 -0
  97. data/lib/whois/parsers/whois.nic.degree.rb +8 -0
  98. data/lib/whois/parsers/whois.nic.democrat.rb +8 -0
  99. data/lib/whois/parsers/whois.nic.diamonds.rb +8 -0
  100. data/lib/whois/parsers/whois.nic.digital.rb +8 -0
  101. data/lib/whois/parsers/whois.nic.directory.rb +8 -0
  102. data/lib/whois/parsers/whois.nic.doctor.rb +8 -0
  103. data/lib/whois/parsers/whois.nic.dog.rb +8 -0
  104. data/lib/whois/parsers/whois.nic.dvag.rb +8 -0
  105. data/lib/whois/parsers/whois.nic.eco.rb +8 -0
  106. data/lib/whois/parsers/whois.nic.education.rb +8 -0
  107. data/lib/whois/parsers/whois.nic.email.rb +8 -0
  108. data/lib/whois/parsers/whois.nic.energy.rb +8 -0
  109. data/lib/whois/parsers/whois.nic.engineer.rb +8 -0
  110. data/lib/whois/parsers/whois.nic.equipment.rb +8 -0
  111. data/lib/whois/parsers/whois.nic.estate.rb +8 -0
  112. data/lib/whois/parsers/whois.nic.eus.rb +8 -0
  113. data/lib/whois/parsers/whois.nic.expert.rb +8 -0
  114. data/lib/whois/parsers/whois.nic.exposed.rb +8 -0
  115. data/lib/whois/parsers/whois.nic.express.rb +8 -0
  116. data/lib/whois/parsers/whois.nic.family.rb +8 -0
  117. data/lib/whois/parsers/whois.nic.fan.rb +8 -0
  118. data/lib/whois/parsers/whois.nic.fans.rb +8 -0
  119. data/lib/whois/parsers/whois.nic.feedback.rb +8 -0
  120. data/lib/whois/parsers/whois.nic.film.rb +8 -0
  121. data/lib/whois/parsers/whois.nic.fish.rb +8 -0
  122. data/lib/whois/parsers/whois.nic.fishing.rb +8 -0
  123. data/lib/whois/parsers/whois.nic.florist.rb +8 -0
  124. data/lib/whois/parsers/whois.nic.football.rb +8 -0
  125. data/lib/whois/parsers/whois.nic.forex.rb +8 -0
  126. data/lib/whois/parsers/whois.nic.foundation.rb +8 -0
  127. data/lib/whois/parsers/whois.nic.fox.rb +8 -0
  128. data/lib/whois/parsers/whois.nic.fr.rb +3 -0
  129. data/lib/whois/parsers/whois.nic.frl.rb +8 -0
  130. data/lib/whois/parsers/whois.nic.furniture.rb +8 -0
  131. data/lib/whois/parsers/whois.nic.futbol.rb +8 -0
  132. data/lib/whois/parsers/whois.nic.fyi.rb +8 -0
  133. data/lib/whois/parsers/whois.nic.gal.rb +8 -0
  134. data/lib/whois/parsers/whois.nic.gd.rb +4 -0
  135. data/lib/whois/parsers/whois.nic.ge.rb +74 -0
  136. data/lib/whois/parsers/whois.nic.gent.rb +8 -0
  137. data/lib/whois/parsers/whois.nic.giving.rb +8 -0
  138. data/lib/whois/parsers/whois.nic.glass.rb +8 -0
  139. data/lib/whois/parsers/whois.nic.gmbh.rb +8 -0
  140. data/lib/whois/parsers/whois.nic.graphics.rb +8 -0
  141. data/lib/whois/parsers/whois.nic.gratis.rb +8 -0
  142. data/lib/whois/parsers/whois.nic.guru.rb +8 -0
  143. data/lib/whois/parsers/whois.nic.hamburg.rb +8 -0
  144. data/lib/whois/parsers/whois.nic.haus.rb +8 -0
  145. data/lib/whois/parsers/whois.nic.holdings.rb +8 -0
  146. data/lib/whois/parsers/whois.nic.holiday.rb +8 -0
  147. data/lib/whois/parsers/whois.nic.house.rb +8 -0
  148. data/lib/whois/parsers/whois.nic.immo.rb +8 -0
  149. data/lib/whois/parsers/whois.nic.immobilien.rb +8 -0
  150. data/lib/whois/parsers/whois.nic.inc.rb +8 -0
  151. data/lib/whois/parsers/whois.nic.institute.rb +8 -0
  152. data/lib/whois/parsers/whois.nic.insure.rb +8 -0
  153. data/lib/whois/parsers/whois.nic.international.rb +8 -0
  154. data/lib/whois/parsers/whois.nic.jewelry.rb +8 -0
  155. data/lib/whois/parsers/whois.nic.kaufen.rb +8 -0
  156. data/lib/whois/parsers/whois.nic.kiwi.rb +8 -0
  157. data/lib/whois/parsers/whois.nic.kn.rb +8 -0
  158. data/lib/whois/parsers/whois.nic.kyoto.rb +8 -0
  159. data/lib/whois/parsers/whois.nic.land.rb +8 -0
  160. data/lib/whois/parsers/whois.nic.lat.rb +8 -0
  161. data/lib/whois/parsers/whois.nic.lawyer.rb +8 -0
  162. data/lib/whois/parsers/whois.nic.lease.rb +8 -0
  163. data/lib/whois/parsers/whois.nic.legal.rb +8 -0
  164. data/lib/whois/parsers/whois.nic.limited.rb +8 -0
  165. data/lib/whois/parsers/whois.nic.limo.rb +8 -0
  166. data/lib/whois/parsers/whois.nic.live.rb +8 -0
  167. data/lib/whois/parsers/whois.nic.london.rb +8 -0
  168. data/lib/whois/parsers/whois.nic.love.rb +8 -0
  169. data/lib/whois/parsers/whois.nic.luxury.rb +8 -0
  170. data/lib/whois/parsers/whois.nic.maison.rb +8 -0
  171. data/lib/whois/parsers/whois.nic.makeup.rb +8 -0
  172. data/lib/whois/parsers/whois.nic.man.rb +8 -0
  173. data/lib/whois/parsers/whois.nic.management.rb +8 -0
  174. data/lib/whois/parsers/whois.nic.mba.rb +8 -0
  175. data/lib/whois/parsers/whois.nic.media.rb +8 -0
  176. data/lib/whois/parsers/whois.nic.memorial.rb +8 -0
  177. data/lib/whois/parsers/whois.nic.men.rb +8 -0
  178. data/lib/whois/parsers/whois.nic.miami.rb +8 -0
  179. data/lib/whois/parsers/whois.nic.mobile.rb +8 -0
  180. data/lib/whois/parsers/whois.nic.moda.rb +8 -0
  181. data/lib/whois/parsers/whois.nic.moe.rb +8 -0
  182. data/lib/whois/parsers/whois.nic.money.rb +8 -0
  183. data/lib/whois/parsers/whois.nic.monster.rb +8 -0
  184. data/lib/whois/parsers/whois.nic.mortgage.rb +8 -0
  185. data/lib/whois/parsers/whois.nic.moscow.rb +8 -0
  186. data/lib/whois/parsers/whois.nic.museum.rb +8 -0
  187. data/lib/whois/parsers/whois.nic.net.sa.rb +28 -9
  188. data/lib/whois/parsers/whois.nic.network.rb +8 -0
  189. data/lib/whois/parsers/whois.nic.nrw.rb +8 -0
  190. data/lib/whois/parsers/whois.nic.observer.rb +8 -0
  191. data/lib/whois/parsers/whois.nic.okinawa.rb +17 -0
  192. data/lib/whois/parsers/whois.nic.ooo.rb +8 -0
  193. data/lib/whois/parsers/whois.nic.partners.rb +8 -0
  194. data/lib/whois/parsers/whois.nic.photography.rb +8 -0
  195. data/lib/whois/parsers/whois.nic.photos.rb +8 -0
  196. data/lib/whois/parsers/whois.nic.pizza.rb +8 -0
  197. data/lib/whois/parsers/whois.nic.place.rb +8 -0
  198. data/lib/whois/parsers/whois.nic.plumbing.rb +8 -0
  199. data/lib/whois/parsers/whois.nic.pm.rb +3 -0
  200. data/lib/whois/parsers/whois.nic.press.rb +8 -0
  201. data/lib/whois/parsers/whois.nic.properties.rb +8 -0
  202. data/lib/whois/parsers/whois.nic.quebec.rb +8 -0
  203. data/lib/whois/parsers/whois.nic.quest.rb +8 -0
  204. data/lib/whois/parsers/whois.nic.racing.rb +8 -0
  205. data/lib/whois/parsers/whois.nic.radio.rb +8 -0
  206. data/lib/whois/parsers/whois.nic.realty.rb +8 -0
  207. data/lib/whois/parsers/whois.nic.recipes.rb +8 -0
  208. data/lib/whois/parsers/whois.nic.reisen.rb +8 -0
  209. data/lib/whois/parsers/whois.nic.rent.rb +8 -0
  210. data/lib/whois/parsers/whois.nic.rentals.rb +8 -0
  211. data/lib/whois/parsers/whois.nic.republican.rb +8 -0
  212. data/lib/whois/parsers/whois.nic.rest.rb +8 -0
  213. data/lib/whois/parsers/whois.nic.restaurant.rb +8 -0
  214. data/lib/whois/parsers/whois.nic.review.rb +8 -0
  215. data/lib/whois/parsers/whois.nic.rip.rb +8 -0
  216. data/lib/whois/parsers/whois.nic.rodeo.rb +8 -0
  217. data/lib/whois/parsers/whois.nic.ruhr.rb +8 -0
  218. data/lib/whois/parsers/whois.nic.saarland.rb +8 -0
  219. data/lib/whois/parsers/whois.nic.salon.rb +8 -0
  220. data/lib/whois/parsers/whois.nic.sap.rb +8 -0
  221. data/lib/whois/parsers/whois.nic.sarl.rb +8 -0
  222. data/lib/whois/parsers/whois.nic.sbs.rb +8 -0
  223. data/lib/whois/parsers/whois.nic.schule.rb +8 -0
  224. data/lib/whois/parsers/whois.nic.schwarz.rb +8 -0
  225. data/lib/whois/parsers/whois.nic.scot.rb +8 -0
  226. data/lib/whois/parsers/whois.nic.security.rb +8 -0
  227. data/lib/whois/parsers/whois.nic.select.rb +8 -0
  228. data/lib/whois/parsers/whois.nic.services.rb +8 -0
  229. data/lib/whois/parsers/whois.nic.shoes.rb +8 -0
  230. data/lib/whois/parsers/whois.nic.shopping.rb +8 -0
  231. data/lib/whois/parsers/whois.nic.skin.rb +8 -0
  232. data/lib/whois/parsers/whois.nic.soccer.rb +8 -0
  233. data/lib/whois/parsers/whois.nic.solar.rb +8 -0
  234. data/lib/whois/parsers/whois.nic.sport.rb +8 -0
  235. data/lib/whois/parsers/whois.nic.ss.rb +36 -0
  236. data/lib/whois/parsers/whois.nic.storage.rb +8 -0
  237. data/lib/whois/parsers/whois.nic.study.rb +8 -0
  238. data/lib/whois/parsers/whois.nic.style.rb +8 -0
  239. data/lib/whois/parsers/whois.nic.support.rb +8 -0
  240. data/lib/whois/parsers/whois.nic.surf.rb +8 -0
  241. data/lib/whois/parsers/whois.nic.surgery.rb +8 -0
  242. data/lib/whois/parsers/whois.nic.swiss.rb +8 -0
  243. data/lib/whois/parsers/whois.nic.taipei.rb +8 -0
  244. data/lib/whois/parsers/whois.nic.tatar.rb +19 -0
  245. data/lib/whois/parsers/whois.nic.team.rb +8 -0
  246. data/lib/whois/parsers/whois.nic.tennis.rb +8 -0
  247. data/lib/whois/parsers/whois.nic.theater.rb +8 -0
  248. data/lib/whois/parsers/whois.nic.tickets.rb +8 -0
  249. data/lib/whois/parsers/whois.nic.tienda.rb +8 -0
  250. data/lib/whois/parsers/whois.nic.tips.rb +8 -0
  251. data/lib/whois/parsers/whois.nic.tires.rb +8 -0
  252. data/lib/whois/parsers/whois.nic.tirol.rb +8 -0
  253. data/lib/whois/parsers/whois.nic.top.rb +15 -0
  254. data/lib/whois/parsers/whois.nic.town.rb +8 -0
  255. data/lib/whois/parsers/whois.nic.toyota.rb +8 -0
  256. data/lib/whois/parsers/whois.nic.toys.rb +8 -0
  257. data/lib/whois/parsers/whois.nic.trade.rb +8 -0
  258. data/lib/whois/parsers/whois.nic.training.rb +8 -0
  259. data/lib/whois/parsers/whois.nic.university.rb +8 -0
  260. data/lib/whois/parsers/whois.nic.uno.rb +8 -0
  261. data/lib/whois/parsers/whois.nic.us.rb +30 -0
  262. data/lib/whois/parsers/whois.nic.vet.rb +8 -0
  263. data/lib/whois/parsers/whois.nic.viajes.rb +8 -0
  264. data/lib/whois/parsers/whois.nic.villas.rb +8 -0
  265. data/lib/whois/parsers/whois.nic.voyage.rb +8 -0
  266. data/lib/whois/parsers/whois.nic.webcam.rb +8 -0
  267. data/lib/whois/parsers/whois.nic.wedding.rb +8 -0
  268. data/lib/whois/parsers/whois.nic.wien.rb +8 -0
  269. data/lib/whois/parsers/whois.nic.wiki.rb +8 -0
  270. data/lib/whois/parsers/whois.nic.wtf.rb +8 -0
  271. data/lib/whois/parsers/whois.nic.xin.rb +8 -0
  272. data/lib/whois/parsers/whois.nic.xn--80adxhks.rb +8 -0
  273. data/lib/whois/parsers/whois.nic.xn--d1acj3b.rb +15 -0
  274. data/lib/whois/parsers/whois.nic.xn--mk1bu44c.rb +13 -0
  275. data/lib/whois/parsers/whois.nic.xn--t60b56a.rb +8 -0
  276. data/lib/whois/parsers/whois.nic.xn--tckwe.rb +39 -0
  277. data/lib/whois/parsers/whois.nic.yoga.rb +8 -0
  278. data/lib/whois/parsers/whois.nic.yokohama.rb +8 -0
  279. data/lib/whois/parsers/whois.nic.yt.rb +24 -0
  280. data/lib/whois/parsers/whois.online.rs.corenic.net.rb +8 -0
  281. data/lib/whois/parsers/whois.pknic.net.pk.rb +70 -0
  282. data/lib/whois/parsers/whois.publicinterestregistry.net.rb +8 -0
  283. data/lib/whois/parsers/whois.ryce-rsp.com.rb +13 -0
  284. data/lib/whois/parsers/whois.teleinfo.cn.rb +16 -0
  285. metadata +285 -1
@@ -8,6 +8,7 @@
8
8
 
9
9
 
10
10
  require_relative 'base'
11
+ require_relative 'registry_response_safety'
11
12
  require 'whois/scanners/whois.cnnic.cn.rb'
12
13
 
13
14
 
@@ -16,10 +17,13 @@ module Whois
16
17
 
17
18
  # Parser for the whois.cnnic.cn server.
18
19
  class WhoisCnnicCn < Base
20
+ include RegistryResponseSafety
19
21
  include Scanners::Scannable
20
22
 
21
23
  self.scanner = Scanners::WhoisCnnicCn
22
24
 
25
+ RESPONSE_MARKER = /(?:^No matching record\.?\s*$|^The domain you requested is prohibited\.?\s*$|^Sorry, The domain you requested is in the reserved list\.?\s*$|^Domain Name:\s*\S+)/i
26
+
23
27
 
24
28
  property_not_supported :disclaimer
25
29
 
@@ -34,15 +38,26 @@ module Whois
34
38
 
35
39
 
36
40
  property_supported :status do
37
- Array.wrap node("Domain Status")
41
+ return [] if available? || reserved?
42
+ return :unknown unless recognized_response?
43
+
44
+ statuses = Array.wrap node("Domain Status")
45
+ if statuses.empty?
46
+ :unknown
47
+ else
48
+ statuses
49
+ end
38
50
  end
39
51
 
40
52
  property_supported :available? do
53
+ return true if content_for_scanner.match?(/^No matching record\.?\s*$/i)
54
+ return false unless recognized_response?
55
+
41
56
  !!node("status:available")
42
57
  end
43
58
 
44
59
  property_supported :registered? do
45
- !reserved? && !available?
60
+ status.is_a?(Array) && !status.empty? && registered_evidence?
46
61
  end
47
62
 
48
63
 
@@ -86,12 +101,25 @@ module Whois
86
101
 
87
102
  # NEWPROPERTY
88
103
  def reserved?
104
+ return true if content_for_scanner.match?(/^The domain you requested is prohibited\.?\s*$/i)
105
+ return true if content_for_scanner.match?(/^Sorry, The domain you requested is in the reserved list\.?\s*$/i)
106
+ return false unless recognized_response?
107
+
89
108
  !!node("status:reserved")
90
109
  end
91
110
 
92
-
93
111
  private
94
112
 
113
+ def registered_evidence?
114
+ !node("Domain Name").to_s.strip.empty? &&
115
+ !Array.wrap(node("Domain Status")).empty?
116
+ end
117
+
118
+ def recognized_response?
119
+ content_for_scanner.match?(RESPONSE_MARKER)
120
+ end
121
+
122
+
95
123
  def build_contact(element, type)
96
124
  node("#{element}") do |value|
97
125
  Parser::Contact.new(
@@ -0,0 +1,11 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisDominioGq < BaseUnsupportedRegistry
6
+ def response_unavailable?
7
+ super || content_for_scanner.match?(/\AThe domain you requested is not known in Freenoms database\.\n\nThis TLD has no whois server\./i)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ require_relative 'base'
2
+ require_relative 'registry_response_safety'
3
+
4
+ module Whois
5
+ class Parsers
6
+ # The .укр registry uses an exact "No match for domain" response.
7
+ class WhoisDotukrCom < Base
8
+ include RegistryResponseSafety
9
+
10
+ property_supported :status do
11
+ available? ? :available : :unknown
12
+ end
13
+
14
+ property_supported :available? do
15
+ !!(content_for_scanner =~ /^No match for domain\s+\S+\.?\s*$/i)
16
+ end
17
+
18
+ property_supported :registered? do
19
+ false
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisGtldKnetCn < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, {
6
+ pattern_available: /^The queried object does not exist:\s+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+\s*$/i,
7
+ }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'whois.nic.store'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # The .ky registry uses the ICANN layout and Radix's exact availability
6
+ # sentence.
7
+ class WhoisKyregistryKy < WhoisNicStore
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisMadridRsCorenicNet < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^The queried object does not exist: no matching objects found\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'base_jwhois'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # Parser for the JWhoisServer shared by .gf and .mq.
6
+ class WhoisMediaservNet < BaseJwhois
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_reserved_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNgtldCn < BaseReservedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicAcademy < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_reserved_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicAccountant < BaseReservedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicActor < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicAgency < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicAirforce < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisNicAmsterdam < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^Domain Status:\s*free\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicApartments < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicArmy < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicAssociates < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicAuction < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'base'
2
+ require_relative 'registry_response_safety'
3
+
4
+ module Whois
5
+ class Parsers
6
+ # Parser for the Aruba registry's compact port-43 response.
7
+ class WhoisNicAw < Base
8
+ include RegistryResponseSafety
9
+
10
+ property_supported :domain do
11
+ content_for_scanner[/^Domain name:\s*(\S+)/i, 1]&.downcase
12
+ end
13
+
14
+ property_supported :status do
15
+ if available?
16
+ :available
17
+ elsif content_for_scanner.match?(/^Status:\s*active\s*$/i)
18
+ :registered
19
+ else
20
+ :unknown
21
+ end
22
+ end
23
+
24
+ property_supported :available? do
25
+ !!(content_for_scanner =~ /^\S+\s+is free\s*$/i)
26
+ end
27
+
28
+ property_supported :registered? do
29
+ status == :registered
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'whois.centralnic.com'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBaby < WhoisCentralnicCom
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ require_relative 'base_icann_compliant'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBank < BaseIcannCompliant
6
+ property_supported :status do
7
+ if no_data_found?
8
+ :available
9
+ else
10
+ super()
11
+ end
12
+ end
13
+
14
+ property_supported :available? do
15
+ status == :available
16
+ end
17
+
18
+ property_supported :registered? do
19
+ status == :registered
20
+ end
21
+
22
+ private
23
+
24
+ def no_data_found?
25
+ content_for_scanner.lines.first.to_s.strip.casecmp?('No Data Found')
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBar < BaseTop1000Icann
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'whois.nic.cat'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBarcelona < WhoisNicCat
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisNicBarclays < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^Domain not found\.\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBargains < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBasketball < BaseTop1000Icann
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'whois.nic.cat'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBayern < WhoisNicCat
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisNicBeauty < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^The queried object does not exist: DOMAIN NOT FOUND\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_icann_compliant'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBeer < BaseIcannCompliant
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBerlin < BaseTop1000Icann
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_reserved_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBible < BaseReservedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisNicBid < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^No Data Found\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBike < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBingo < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'whois.cira.ca'
2
+ require_relative 'registry_response_safety'
3
+
4
+ module Whois
5
+ class Parsers
6
+ # The .blog registry uses the CIRA response layout and an exact
7
+ # `Not found:` absence marker.
8
+ class WhoisNicBlog < WhoisCiraCa
9
+ include RegistryResponseSafety
10
+
11
+ property_supported :status do
12
+ if content_for_scanner.match?(/^Not found:\s+/i)
13
+ :available
14
+ elsif content_for_scanner.match?(/^Domain Status:\s+\S+/i)
15
+ :registered
16
+ else
17
+ :unknown
18
+ end
19
+ end
20
+
21
+ property_supported :available? do
22
+ status == :available
23
+ end
24
+
25
+ property_supported :registered? do
26
+ status == :registered
27
+ end
28
+
29
+ def response_unavailable?
30
+ super || content_for_scanner.match?(/^Error code:\s*\S+/i)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisNicBmw < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^The queried object does not exist: DOMAIN NOT FOUND\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_icann_compliant'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBond < BaseIcannCompliant
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBoston < BaseTop1000Icann
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBroker < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_identity_digital'
2
+ module Whois
3
+ class Parsers
4
+ class WhoisNicBuild < BaseIdentityDigital
5
+ self.scanner = Scanners::BaseIcannCompliant, { pattern_available: /^The queried object does not exist: DOMAIN NOT FOUND\s*$/i }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBuilders < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicBuzz < BaseTop1000Icann
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ require_relative 'base_icann_compliant'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # The .bzh registry uses the ICANN key/value record layout and AFNIC's
6
+ # compact `%% NOT FOUND` absence marker.
7
+ class WhoisNicBzh < BaseIcannCompliant
8
+ self.scanner = Scanners::BaseIcannCompliant, {
9
+ pattern_available: /^%% NOT FOUND\s*$/i,
10
+ }
11
+
12
+ property_supported :status do
13
+ if content_for_scanner.match?(/^%% NOT FOUND\s*$/i)
14
+ :available
15
+ elsif content_for_scanner.match?(/^Domain Name:\s+\S+/i) &&
16
+ content_for_scanner.match?(/^Domain Status:\s+\S+/i)
17
+ :registered
18
+ else
19
+ :unknown
20
+ end
21
+ end
22
+
23
+ property_supported :available? do
24
+ status == :available
25
+ end
26
+
27
+ property_supported :registered? do
28
+ status == :registered
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicCafe < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicCam < BaseTop1000Icann
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicCamera < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicCanon < BaseUnsupportedRegistry
6
+ def response_unavailable?
7
+ super || content_for_scanner.match?(/\ANotice: .*WHOIS service has been retired/i)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicCapital < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_unsupported_registry'
2
+
3
+ module Whois
4
+ class Parsers
5
+ class WhoisNicCards < BaseUnsupportedRegistry
6
+ end
7
+ end
8
+ end