wibrfake-brk 0.0.2

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 (275) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +48 -0
  3. data/.gitattributes +19 -0
  4. data/.github/dependabot.yml +12 -0
  5. data/.github/workflows/ci.yml +90 -0
  6. data/.rubocop.yml +8 -0
  7. data/.ruby-version +1 -0
  8. data/Dockerfile +69 -0
  9. data/Gemfile +68 -0
  10. data/README.md +188 -0
  11. data/Rakefile +6 -0
  12. data/app/assets/config/manifest.js +5 -0
  13. data/app/assets/images/.keep +0 -0
  14. data/app/assets/images/2024-12-30-07:58:34-screenshot.png +0 -0
  15. data/app/assets/images/facebook/facebook-logo.svg +3 -0
  16. data/app/assets/images/google/googlelogo_color_272x92dp.png +0 -0
  17. data/app/assets/images/instagram/app-store.png +0 -0
  18. data/app/assets/images/instagram/google-play.png +0 -0
  19. data/app/assets/images/instagram/instagram-logo.png +0 -0
  20. data/app/assets/images/instagram/screenshot1.png +0 -0
  21. data/app/assets/images/instagram/screenshot2.png +0 -0
  22. data/app/assets/images/instagram/screenshot3.png +0 -0
  23. data/app/assets/images/instagram/screenshot4.png +0 -0
  24. data/app/assets/images/nauta_etecsa/CUBADEBATE.jpg +0 -0
  25. data/app/assets/images/nauta_etecsa/CUBAEDUCA.jpg +0 -0
  26. data/app/assets/images/nauta_etecsa/CUBARTE.jpg +0 -0
  27. data/app/assets/images/nauta_etecsa/CUBASI.jpg +0 -0
  28. data/app/assets/images/nauta_etecsa/ECURED.jpg +0 -0
  29. data/app/assets/images/nauta_etecsa/OFERTAS.jpg +0 -0
  30. data/app/assets/images/nauta_etecsa/PAPELETA.jpg +0 -0
  31. data/app/assets/images/nauta_etecsa/contenedor_bg.jpg +0 -0
  32. data/app/assets/images/nauta_etecsa/etecsa.jpg +0 -0
  33. data/app/assets/images/nauta_etecsa/nauta_wifi.jpg +0 -0
  34. data/app/assets/images/nauta_hogar/CUBADEBATE.jpg +0 -0
  35. data/app/assets/images/nauta_hogar/CUBAEDUCA.jpg +0 -0
  36. data/app/assets/images/nauta_hogar/CUBARTE.jpg +0 -0
  37. data/app/assets/images/nauta_hogar/CUBASI.jpg +0 -0
  38. data/app/assets/images/nauta_hogar/ECURED.jpg +0 -0
  39. data/app/assets/images/nauta_hogar/OFERTAS.jpg +0 -0
  40. data/app/assets/images/nauta_hogar/PAPELETA.jpg +0 -0
  41. data/app/assets/images/nauta_hogar/banner_hogar.png +0 -0
  42. data/app/assets/images/wibrfake/Breaker-Wallpaper1.jpg +0 -0
  43. data/app/assets/images/wibrfake/mac-list-parameter.png +0 -0
  44. data/app/assets/images/wibrfake/wibrfake-100x100.png +0 -0
  45. data/app/assets/images/wibrfake/wibrfake-32x32.png +0 -0
  46. data/app/assets/images/wibrfake/wibrfake-48x48.png +0 -0
  47. data/app/assets/images/wibrfake/wibrfake-apfake-on.png +0 -0
  48. data/app/assets/images/wibrfake/wibrfake-apfake-set-basic.png +0 -0
  49. data/app/assets/images/wibrfake/wibrfake-apfake-show.png +0 -0
  50. data/app/assets/images/wibrfake/wibrfake-help.png +0 -0
  51. data/app/assets/images/wibrfake/wibrfake-hostpot.png +0 -0
  52. data/app/assets/images/wibrfake/wibrfake-init.png +0 -0
  53. data/app/assets/images/wibrfake/wibrfake-init2.png +0 -0
  54. data/app/assets/images/wibrfake/wibrfake-login-basic.jpg +0 -0
  55. data/app/assets/images/wibrfake/wibrfake-mac-list.png +0 -0
  56. data/app/assets/images/wibrfake/wibrfake-mac-ramset-oui.png +0 -0
  57. data/app/assets/images/wibrfake/wibrfake-mac-ramset.png +0 -0
  58. data/app/assets/images/wibrfake/wibrfake-mac-set.png +0 -0
  59. data/app/assets/images/wibrfake/wibrfake-mac-show.png +0 -0
  60. data/app/assets/images/wibrfake/wibrfake-need-signin.jpg +0 -0
  61. data/app/assets/images/wibrfake/wibrfake-session-active.png +0 -0
  62. data/app/assets/images/wibrfake/wibrfake-session-init.png +0 -0
  63. data/app/assets/images/wibrfake/wibrfake-session-list.png +0 -0
  64. data/app/assets/images/wibrfake/wibrfake-session-new.png +0 -0
  65. data/app/assets/images/wibrfake/wibrfake-session-rename.png +0 -0
  66. data/app/assets/images/wibrfake/wibrfake-session-save.png +0 -0
  67. data/app/assets/images/wibrfake/wibrfake-web-server-apfake.png +0 -0
  68. data/app/assets/images/wibrfake/wibrfake-web-server-on.png +0 -0
  69. data/app/assets/images/wibrfake/wibrfake-web-server-show.png +0 -0
  70. data/app/assets/images/wibrfake/wibrfake-wkdump-loaded.png +0 -0
  71. data/app/assets/images/wibrfake/wibrfake-wkdump.png +0 -0
  72. data/app/assets/images/wibrfake/wibrfake.png +0 -0
  73. data/app/assets/stylesheets/application.css +15 -0
  74. data/app/assets/stylesheets/basic/page_basic.css +0 -0
  75. data/app/assets/stylesheets/facebook/page_facebook.css +93 -0
  76. data/app/assets/stylesheets/google/page_google.css +137 -0
  77. data/app/assets/stylesheets/instagram/page_instagram.css +94 -0
  78. data/app/assets/stylesheets/nauta_etecsa/page_nauta.css +325 -0
  79. data/app/assets/stylesheets/nauta_hogar/page_nauta.css +469 -0
  80. data/app/assets/stylesheets/wibrfake/page_wibrfake.css +1181 -0
  81. data/app/assets/stylesheets/wibrfake/page_wibrfake_about.css +486 -0
  82. data/app/channels/application_cable/channel.rb +4 -0
  83. data/app/channels/application_cable/connection.rb +4 -0
  84. data/app/controllers/application_controller.rb +15 -0
  85. data/app/controllers/concerns/.keep +0 -0
  86. data/app/controllers/sessions_controller.rb +111 -0
  87. data/app/helpers/application_helper.rb +2 -0
  88. data/app/helpers/sessions_helper.rb +2 -0
  89. data/app/javascript/application.js +3 -0
  90. data/app/javascript/bootstrap.bundle.min.js +7 -0
  91. data/app/javascript/controllers/application.js +9 -0
  92. data/app/javascript/controllers/hello_controller.js +7 -0
  93. data/app/javascript/controllers/index.js +4 -0
  94. data/app/javascript/google/page_google.js +50 -0
  95. data/app/javascript/incorrect3.js +29 -0
  96. data/app/javascript/page_wibrfake.js +50 -0
  97. data/app/javascript/page_wibrfake_about.js +147 -0
  98. data/app/jobs/application_job.rb +7 -0
  99. data/app/mailers/application_mailer.rb +4 -0
  100. data/app/models/application_record.rb +3 -0
  101. data/app/models/concerns/.keep +0 -0
  102. data/app/models/user.rb +6 -0
  103. data/app/views/layouts/application.html.erb +33 -0
  104. data/app/views/layouts/mailer.html.erb +13 -0
  105. data/app/views/layouts/mailer.text.erb +1 -0
  106. data/app/views/pwa/manifest.json.erb +22 -0
  107. data/app/views/pwa/service-worker.js +26 -0
  108. data/app/views/sessions/basic/basic.html.erb +21 -0
  109. data/app/views/sessions/facebook/facebook.html.erb +132 -0
  110. data/app/views/sessions/google/google.html.erb +72 -0
  111. data/app/views/sessions/index.html.erb +11 -0
  112. data/app/views/sessions/instagram/instagram.html.erb +69 -0
  113. data/app/views/sessions/nauta_etecsa/nauta_etecsa.html.erb +97 -0
  114. data/app/views/sessions/nauta_hogar/nauta_hogar.html.erb +135 -0
  115. data/app/views/sessions/wibrfake/about/about.html.erb +164 -0
  116. data/app/views/sessions/wibrfake/wibrfake.html.erb +417 -0
  117. data/bin/.names.rb.swp +0 -0
  118. data/bin/brakeman +7 -0
  119. data/bin/bundle +114 -0
  120. data/bin/docker-entrypoint +13 -0
  121. data/bin/google.wkdump +3 -0
  122. data/bin/importmap +4 -0
  123. data/bin/rails +4 -0
  124. data/bin/rake +4 -0
  125. data/bin/rubocop +8 -0
  126. data/bin/setup +37 -0
  127. data/bin/wibrfake +20 -0
  128. data/config/application.rb +26 -0
  129. data/config/boot.rb +4 -0
  130. data/config/cable.yml +10 -0
  131. data/config/credentials.yml.enc +1 -0
  132. data/config/database.yml +16 -0
  133. data/config/environment.rb +5 -0
  134. data/config/environments/development.rb +85 -0
  135. data/config/environments/production.rb +105 -0
  136. data/config/environments/test.rb +67 -0
  137. data/config/icons/application-x-wkdump.xml +13 -0
  138. data/config/icons/hicolor/16x16/mimetypes/application-x-wkdump.png +0 -0
  139. data/config/icons/hicolor/32x32/mimetypes/application-x-wkdump.png +0 -0
  140. data/config/icons/hicolor/48x48/mimetypes/application-x-wkdump.png +0 -0
  141. data/config/icons/hicolor/icon-theme.cache +0 -0
  142. data/config/icons/hicolor/index.theme +20 -0
  143. data/config/icons/wkdump.desktop +5 -0
  144. data/config/importmap.rb +7 -0
  145. data/config/initializers/assets.rb +12 -0
  146. data/config/initializers/content_security_policy.rb +25 -0
  147. data/config/initializers/devise.rb +313 -0
  148. data/config/initializers/filter_parameter_logging.rb +8 -0
  149. data/config/initializers/inflections.rb +16 -0
  150. data/config/initializers/permissions_policy.rb +13 -0
  151. data/config/locales/devise.en.yml +65 -0
  152. data/config/locales/en.yml +31 -0
  153. data/config/puma.rb +35 -0
  154. data/config/routes.rb +12 -0
  155. data/config/storage.yml +34 -0
  156. data/config.ru +6 -0
  157. data/db/development.sqlite3 +0 -0
  158. data/db/schema.rb +14 -0
  159. data/ext/wibrfake/extconf.rb +3 -0
  160. data/ext/wibrfake/wibrfake.h +0 -0
  161. data/images/ouilist.png +0 -0
  162. data/images/wibrfakehelp.png +0 -0
  163. data/images/wibrfakeinit.png +0 -0
  164. data/lib/assets/.keep +0 -0
  165. data/lib/tasks/.keep +0 -0
  166. data/lib/wibrfake/Config/ipaddr.rb +71 -0
  167. data/lib/wibrfake/Config/options.rb +98 -0
  168. data/lib/wibrfake/Config/security_wpa.rb +43 -0
  169. data/lib/wibrfake/DataBase/howuis.db +0 -0
  170. data/lib/wibrfake/DataBase/ouis.db +0 -0
  171. data/lib/wibrfake/DataBase/ouis.rb +24 -0
  172. data/lib/wibrfake/DataBase/rename.rb +15 -0
  173. data/lib/wibrfake/DataBase/show.rb +18 -0
  174. data/lib/wibrfake/Dnsmasq/dhcp.rb +149 -0
  175. data/lib/wibrfake/Dnsmasq/dhcp_prueba.rb +135 -0
  176. data/lib/wibrfake/Dnsmasq/dns.rb +34 -0
  177. data/lib/wibrfake/Dnsmasq/dns_prueba.rb +36 -0
  178. data/lib/wibrfake/Dnsmasq/dnsmasq.rb +33 -0
  179. data/lib/wibrfake/Listing/apfake.rb +28 -0
  180. data/lib/wibrfake/Listing/clients.rb +76 -0
  181. data/lib/wibrfake/Listing/ouis.rb +53 -0
  182. data/lib/wibrfake/Listing/process.rb +14 -0
  183. data/lib/wibrfake/Listing/sessions.rb +47 -0
  184. data/lib/wibrfake/Listing/web_server.rb +17 -0
  185. data/lib/wibrfake/Listing/wireless.rb +30 -0
  186. data/lib/wibrfake/Logs/credentials.log +59 -0
  187. data/lib/wibrfake/NetworkInterface/ip-routing.rb +99 -0
  188. data/lib/wibrfake/NetworkInterface/mac.rb +114 -0
  189. data/lib/wibrfake/NetworkInterface/monitor.rb +44 -0
  190. data/lib/wibrfake/NetworkInterface/ouis.db +0 -0
  191. data/lib/wibrfake/Process/id.rb +11 -0
  192. data/lib/wibrfake/Process/pids.log +5 -0
  193. data/lib/wibrfake/Process/pkill.rb +124 -0
  194. data/lib/wibrfake/Process/processes.rb +76 -0
  195. data/lib/wibrfake/Rails/login.rb +20 -0
  196. data/lib/wibrfake/Rails/routes.rb +76 -0
  197. data/lib/wibrfake/Rails/service.rb +58 -0
  198. data/lib/wibrfake/Rails/service_usage.rb +46 -0
  199. data/lib/wibrfake/Sessions/session.rb +188 -0
  200. data/lib/wibrfake/String/string.rb +109 -0
  201. data/lib/wibrfake/Tmp/config.yml +1 -0
  202. data/lib/wibrfake/config.rb +24 -0
  203. data/lib/wibrfake/help.rb +107 -0
  204. data/lib/wibrfake/optionpr.rb +68 -0
  205. data/lib/wibrfake/run.rb +9 -0
  206. data/lib/wibrfake/ty/apld.rb +110 -0
  207. data/lib/wibrfake/ty/prompt/answers_collector.rb +78 -0
  208. data/lib/wibrfake/ty/prompt/block_paginator.rb +59 -0
  209. data/lib/wibrfake/ty/prompt/choice.rb +147 -0
  210. data/lib/wibrfake/ty/prompt/choices.rb +129 -0
  211. data/lib/wibrfake/ty/prompt/confirm_question.rb +158 -0
  212. data/lib/wibrfake/ty/prompt/const.rb +17 -0
  213. data/lib/wibrfake/ty/prompt/converter_dsl.rb +21 -0
  214. data/lib/wibrfake/ty/prompt/converter_registry.rb +69 -0
  215. data/lib/wibrfake/ty/prompt/converters.rb +182 -0
  216. data/lib/wibrfake/ty/prompt/distance.rb +49 -0
  217. data/lib/wibrfake/ty/prompt/enum_list.rb +433 -0
  218. data/lib/wibrfake/ty/prompt/errors.rb +31 -0
  219. data/lib/wibrfake/ty/prompt/evaluator.rb +29 -0
  220. data/lib/wibrfake/ty/prompt/expander.rb +321 -0
  221. data/lib/wibrfake/ty/prompt/keypress.rb +98 -0
  222. data/lib/wibrfake/ty/prompt/list.rb +589 -0
  223. data/lib/wibrfake/ty/prompt/mask_question.rb +96 -0
  224. data/lib/wibrfake/ty/prompt/multi_list.rb +224 -0
  225. data/lib/wibrfake/ty/prompt/multiline.rb +72 -0
  226. data/lib/wibrfake/ty/prompt/paginator.rb +111 -0
  227. data/lib/wibrfake/ty/prompt/question/checks.rb +105 -0
  228. data/lib/wibrfake/ty/prompt/question/modifier.rb +96 -0
  229. data/lib/wibrfake/ty/prompt/question/validation.rb +72 -0
  230. data/lib/wibrfake/ty/prompt/question.rb +391 -0
  231. data/lib/wibrfake/ty/prompt/result.rb +42 -0
  232. data/lib/wibrfake/ty/prompt/selected_choices.rb +77 -0
  233. data/lib/wibrfake/ty/prompt/slider.rb +286 -0
  234. data/lib/wibrfake/ty/prompt/statement.rb +55 -0
  235. data/lib/wibrfake/ty/prompt/suggestion.rb +113 -0
  236. data/lib/wibrfake/ty/prompt/symbols.rb +89 -0
  237. data/lib/wibrfake/ty/prompt/test.rb +36 -0
  238. data/lib/wibrfake/ty/prompt/timer.rb +75 -0
  239. data/lib/wibrfake/ty/prompt/utils.rb +42 -0
  240. data/lib/wibrfake/ty/prompt/version.rb +7 -0
  241. data/lib/wibrfake/ty/prompt.rb +589 -0
  242. data/lib/wibrfake/version.rb +5 -0
  243. data/lib/wibrfake/wibrfake_cli.rb +683 -0
  244. data/log/.keep +0 -0
  245. data/pruebas/daemon1.pid +1 -0
  246. data/pruebas/daemon2.pid +1 -0
  247. data/pruebas/daemons.rb +44 -0
  248. data/public/404.html +67 -0
  249. data/public/406-unsupported-browser.html +66 -0
  250. data/public/422.html +67 -0
  251. data/public/500.html +66 -0
  252. data/public/icon.png +0 -0
  253. data/public/icon.svg +3 -0
  254. data/public/robots.txt +1 -0
  255. data/storage/.keep +0 -0
  256. data/test/application_system_test_case.rb +5 -0
  257. data/test/channels/application_cable/connection_test.rb +13 -0
  258. data/test/controllers/.keep +0 -0
  259. data/test/controllers/sessions_controller_test.rb +7 -0
  260. data/test/fixtures/files/.keep +0 -0
  261. data/test/fixtures/users.yml +11 -0
  262. data/test/helpers/.keep +0 -0
  263. data/test/integration/.keep +0 -0
  264. data/test/mailers/.keep +0 -0
  265. data/test/models/.keep +0 -0
  266. data/test/models/user_test.rb +7 -0
  267. data/test/system/.keep +0 -0
  268. data/test/test_helper.rb +15 -0
  269. data/tmp/.keep +0 -0
  270. data/tmp/pids/.keep +0 -0
  271. data/tmp/storage/.keep +0 -0
  272. data/vendor/.keep +0 -0
  273. data/vendor/javascript/.keep +0 -0
  274. data/wibrfake.gemspec +49 -0
  275. metadata +743 -0
@@ -0,0 +1,417 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Wibrfake</title>
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
9
+ <% content_for :stylesheet do %>
10
+ <%= stylesheet_link_tag 'wibrfake/page_wibrfake' %>
11
+ <% end %>
12
+ <% content_for :javascript do %>
13
+ <%= javascript_include_tag 'page_wibrfake' %>
14
+ <% end %>
15
+ <% content_for :javascript do %>
16
+ <%= javascript_include_tag 'bootstrap.bundle.min' %>
17
+ <% end %>
18
+
19
+
20
+ </head>
21
+ <body>
22
+ <div class="wrapper">
23
+ <!-- Enhanced Sidebar Navigation -->
24
+ <nav id="sidebar" class="sidebar">
25
+ <div class="sidebar-header">
26
+ <h3>
27
+ <%= image_tag 'wibrfake/wibrfake-48x48.png', alt: 'wibrfake'%>
28
+ Wibrfake
29
+ </h3>
30
+ </div>
31
+ <ul class="components">
32
+ <li class="active">
33
+ <a href="#" onclick="showSection('dashboard-section')">
34
+ <i class="fas fa-home" style="transform: translateX(0px);"></i>
35
+ Dashboard
36
+ </a>
37
+ </li>
38
+ <li class="collapsed">
39
+ <a href="#staticSubmenu" data-bs-toggle="collapse">
40
+ <i class="fas fa-house-signal" style="transform: translateX(0px);"></i>
41
+ Usage
42
+ <i class="fas fa-chevron-down menu-arrow"></i>
43
+ </a>
44
+ <ul class="collapse submenu" id="staticSubmenu" style="">
45
+ <li>
46
+ <a href="#initialize" onclick="showSubsection('usage-section', 'initialize')">
47
+ <i class="fa fa-external-link-square" style="transform: translateX(0px);"></i>
48
+ Initialize
49
+ </a>
50
+ </li>
51
+ <li>
52
+ <a href="#macchanger" onclick="showSubsection('usage-section', 'macchanger')">
53
+ <i class="fas fa-fingerprint" style="transform: translateX(0px);"></i>
54
+ Mac Changer
55
+ </a>
56
+ </li>
57
+ <li>
58
+ <a href="#wkdump" onclick="showSubsection('usage-section', 'wkdump')">
59
+ <i class="fa-solid fa-file-circle-plus" style="transform: translateX(0px);"></i>
60
+ Wkdump
61
+ </a>
62
+ </li>
63
+ <li>
64
+ <a href="#sessions" onclick="showSubsection('usage-section', 'sessions')">
65
+ <i class="fas fa-user-edit" style="transform: translateX(0px);"></i>
66
+ Sessions
67
+ </a>
68
+ </li>
69
+ </ul>
70
+ </li>
71
+ <li class="collapsed">
72
+ <a href="#dynamicSubmenu" data-bs-toggle="collapse">
73
+ <i class="fab fa-mandalorian" style="transform: translateX(0px);"></i>
74
+ Attacks
75
+ <i class="fas fa-chevron-down menu-arrow"></i>
76
+ </a>
77
+ <ul class="collapse submenu" id="dynamicSubmenu">
78
+ <li>
79
+ <a href="#rogueap" onclick="showSubsection('attacks-section', 'rogueap')">
80
+ <i class="fas fa-wifi" style="transform: translateX(0px);"></i>
81
+ Rogue AP
82
+ </a>
83
+ </li>
84
+ <li>
85
+ <a href="#captiveportal" onclick="showSubsection('attacks-section', 'captiveportal')">
86
+ <i class="fas fa-sign-in-alt" style="transform: translateX(0px);"></i>
87
+ Captive Portal
88
+ </a>
89
+ </li>
90
+ <li>
91
+ <a href="#eviltwin-section" onclick="showSubsection('attacks-section', 'eviltwin')">
92
+ <i class="fas fa-user-group" style="transform: translateX(0px);"></i>
93
+ Evil Twin
94
+ </a>
95
+ </li>
96
+ </ul>
97
+ </li>
98
+ <li>
99
+ <a href="/wibrfake/about/">
100
+ <i class="fas fa-info-circle"></i>
101
+ About
102
+ </a>
103
+ </li>
104
+ </ul>
105
+ </nav>
106
+ <div class="body-page" id="content">
107
+ <button class="nav-btn">hola</button>
108
+ <div id="dashboard-section" class="main-section active"></div>
109
+ <section class="body-img">
110
+ <%= image_tag 'wibrfake/wibrfake.png', alt: 'wibrfake'%>
111
+ <span class="circle-spin"></span>
112
+ </section>
113
+
114
+ <div class="row justify-content-center">
115
+ <section class="info-wibrfake text-center">
116
+ <div class="info-card-summary mt-5">
117
+ <div class="info-tittle">
118
+ <h2>WibrFake</h2>
119
+ </div>
120
+ <div class="features-grid mt-4">
121
+ <div class="feature-item feature-item-hover">
122
+ <div class="info-summary">
123
+ <p>WibrFake is an advanced tool designed to help researchers and security professionals assess Wi-Fi network vulnerabilities through Rogue Access Point (AP) techniques. It allows you to simulate a malicious access point, making it easier to identify weaknesses in wireless network security and user behavior. With an intuitive interface and customizable functionalities, WibrFake allows for real-time penetration testing and traffic analysis.</p>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </section>
129
+ </div>
130
+ </div>
131
+
132
+ <section id="usage-section" class="main-section" style="display:none">
133
+
134
+ <div class="initialize info-card" id="initialize">
135
+ <div class="initialize-tittle">
136
+ <h2>Initialize</h2>
137
+ </div>
138
+ <p>Help Command</p>
139
+ <div class="features-grid mt-4">
140
+ <div class="feature-item">
141
+ <p><span class="command">wibrfake</span> <span class="parameter">--help</span></p>
142
+ </div>
143
+ </div>
144
+ <div class="features-grid mt-4">
145
+ <%= image_tag 'wibrfake/wibrfake-init.png', class: 'wibrfake-img', alt: 'wibrfake'%>
146
+ </div>
147
+ <div class="summary"><p>To start in wibrfake, we have to choose the interface, in this case we will start with the command line interface (CLI) with the parameter [--mode], and we must also put the network interface which we operate with [--iface], in my case it is (wlo1)</p></div>
148
+ <div class="features-grid mt-4">
149
+ <div class="feature-item">
150
+ <p><span class="command">wibrfake</span> <span class="parameter">--mode</span> <span class="valor">cli</span> <span class="parameter">--iface</span> <span class="valor">wlo1</span></p>
151
+ </div>
152
+ </div>
153
+ <div class="features-grid mt-4">
154
+ <%= image_tag 'wibrfake/wibrfake-init2.png', class: 'wibrfake-img', alt: 'wibrfake'%>
155
+ </div>
156
+ <div class="summary"><p>To view the help panel run 'help'</p></div>
157
+ <div class="features-grid mt-4">
158
+ <div class="img-help"><%= image_tag 'wibrfake/wibrfake-help.png', class: 'wibrfake-img-help', alt: 'wibrfake'%></div>
159
+
160
+ </div>
161
+ </div>
162
+ <div class="space"></div>
163
+ <div class="macchanger info-card" id="macchanger">
164
+ <div class="macchanger-tittle">
165
+ <h2>Mac Changer</h2>
166
+ </div>
167
+ <div class="summary"><p>A MAC change (or MAC spoofing) refers to modifying the MAC (Media Access Control) address assigned to a network device (such as a Wi-Fi card, Ethernet, etc.) to replace it with a different address. The MAC address is a unique and permanent identifier assigned by the manufacturer, but it is possible to alter it temporarily or permanently using specific software or tools.</p></div>
168
+ <div class="summary"><p>To show your mac:</p></div>
169
+ <div class="features-grid mt-4">
170
+ <div class="feature-item">
171
+ <p><span class="command">mac</span> <span class="parameter">show</span></p>
172
+ </div>
173
+ </div>
174
+ <div class="features-grid mt-4">
175
+ <%= image_tag 'wibrfake/wibrfake-mac-show.png', class: 'wibrfake-img', alt: 'wibrfake'%>
176
+ </div>
177
+ <div class="summary"><p>An OUI (Organizationally Unique Identifier) is a unique 3-byte (24-bit) code assigned by the IEEE (Institute of Electrical and Electronics Engineers) to network device manufacturers. This identifier forms the first half of a MAC (Media Access Control) address and allows the manufacturer of a device (network card, router, smartphone, etc.) to be recognized globally.</p></div>
178
+ <div class="summary"><p>To display the list of OUIs:</p></div>
179
+ <div class="features-grid mt-4">
180
+ <div class="feature-item">
181
+ <p><span class="command">mac</span> <span class="parameter">list</span></p>
182
+ </div>
183
+ </div>
184
+ <div class="features-grid mt-4">
185
+ <%= image_tag 'wibrfake/wibrfake-mac-list.png', class: 'wibrfake-img', alt: 'wibrfake'%>
186
+ </div>
187
+ <div class="features-grid mt-4">
188
+ <%= image_tag 'wibrfake/mac-list-parameter.png', class: 'wibrfake-img', alt: 'wibrfake'%>
189
+ </div>
190
+ <div class="summary"><p>To assign a new MAC address:</p></div>
191
+ <div class="features-grid mt-4">
192
+ <div class="feature-item">
193
+ <p><span class="command">mac</span> <span class="parameter">set</span> <span class="valor">2a:af:19:f6:27:54</span></p>
194
+ </div>
195
+ </div>
196
+ <div class="features-grid mt-4">
197
+ <%= image_tag 'wibrfake/wibrfake-mac-set.png', class: 'wibrfake-img', alt: 'wibrfake'%>
198
+ </div>
199
+ <div class="summary"><p>To assign a new random MAC address:</p></div>
200
+ <div class="features-grid mt-4">
201
+ <div class="feature-item">
202
+ <p><span class="command">mac</span> <span class="parameter">ramset</span></p>
203
+ </div>
204
+ </div>
205
+ <div class="features-grid mt-4">
206
+ <%= image_tag 'wibrfake/wibrfake-mac-ramset.png', class: 'wibrfake-img', alt: 'wibrfake'%>
207
+ </div>
208
+ <div class="summary"><p>To assign a new random MAC address based on an OUI:</p></div>
209
+ <div class="features-grid mt-4">
210
+ <div class="feature-item">
211
+ <p><span class="command">mac</span> <span class="parameter">ramset</span> <span class="valor">fc:58:fa</span></p>
212
+ </div>
213
+ </div>
214
+ <div class="features-grid mt-4">
215
+ <%= image_tag 'wibrfake/wibrfake-mac-ramset-oui.png', class: 'wibrfake-img', alt: 'wibrfake'%>
216
+ </div>
217
+ </div>
218
+ <div class="space"></div>
219
+ <div class="wkdump info-card" id="wkdump">
220
+ <div class="macchanger-tittle">
221
+ <h2>File WKdump</h2>
222
+ </div>
223
+ <div class="summary"><p>The .wkdump extension is Wibrfake files, a malicious configuration file designed to automate advanced network attacks, such as the creation of rogue APs (fake access points), fraudulent captive portals, or evil twin attacks. This file allows you to execute predefined scripts in Wibrfake without manual intervention, streamlining illegal or ethical operations.</p></div>
224
+ <div class="summary"><p>To create and configure a wkdump file:</p></div>
225
+ <div class="features-grid mt-4">
226
+ <div class="feature-item"><p><span class="command">touch</span> <span class="parameter">archive.wkdump</span></p></div>
227
+ </div>
228
+ <div class="features-grid mt-4">
229
+ <div class="feature-item"><p><span class="command">nano</span> <span class="parameter">archive.wkdump</span></p></div>
230
+ </div>
231
+ <div class="features-grid mt-4">
232
+ <%= image_tag 'wibrfake/wibrfake-wkdump.png', class: 'wibrfake-img', alt: 'wibrfake'%>
233
+ </div>
234
+ <div class="summary"><p>Details of the above configuration:</p></div>
235
+ <div class="feature-item"><p><span class="command">set</span> <span class="parameter">ssid</span> <span class="valor">Wifi_Free</span> #The command 'set ssid' is to assign a name to the access point.<br><span class="command">set</span> <span class="parameter">channel</span> <span class="valor">6</span> #The 'set channel' command is for assigning a channel to the access point.<br><span class="command">set</span> <span class="parameter">gateway</span> <span class="valor">192.168.1.1</span> #The 'set gateway' command is for assigning an IP address to the access point (router).</p></div>
236
+ <div class="summary"><p>We are now ready to upload the file to wibrfake</p></div>
237
+ <div class="summary"><p>To upload the file is with the following command:</p></div>
238
+ <div class="features-grid mt-4">
239
+ <div class="feature-item"><p><span class="command">wibrfake</span> <span class="parameter">--mode</span> <span class="valor">cli</span> <span class="parameter">--iface</span> <span class="valor">wlo1</span> <span class="parameter">--wkdump</span> <span class="valor">archive.wkdump</span></p></div>
240
+ </div>
241
+ <div class="features-grid mt-4">
242
+ <%= image_tag 'wibrfake/wibrfake-wkdump-loaded.png', class: 'wibrfake-img', alt: 'wibrfake'%>
243
+ </div>
244
+ </div>
245
+ <div class="space"></div>
246
+ <div class="sessions info-card" id="sessions">
247
+ <div class="sessions-tittle">
248
+ <h2>Sessions</h2>
249
+ </div>
250
+ <div class="summary"><p>Tool that manages network operations (attacks or tests) through individual sessions with unique ID and predefined configuration (e.g.: attack type, interface). It allows you to create, delete, activate, rename, save (in .wksession files), and run multiple sessions in parallel. It facilitates organization and efficiency by avoiding manual reconfigurations. The session will be automatically deleted when you exit the application unless you activate it.</p></div>
251
+ <div class="summary"><p>To display created sessions:</p></div>
252
+ <div class="features-grid mt-4">
253
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">list</span></p></div>
254
+ </div>
255
+ <div class="features-grid mt-4">
256
+ <%= image_tag 'wibrfake/wibrfake-session-list.png', class: 'wibrfake-img', alt: 'wibrfake'%>
257
+ </div>
258
+ <div class="summary"><p>On the right side when listing the sessions, there are 2 descriptions, one tells you if the session is active or not, what does this mean? It means that if it is active, the session will remain saved in the application and you will always be able to use it whenever you want, otherwise the session is not active, it will be automatically deleted when you exit the application. And the other one tells you if the session is saved or not, what does this mean? That if it is saved it is that the changes made in the session were saved, in the opposite case that it is not saved the changes will not be saved, this second one goes very hand in hand with the premium, but they are not the same, you need to activate the session before.</p></div>
259
+ <div class="summary"><p>Now let's rename the current session for easier recall.</p></div>
260
+ <div class="summary"><p>To rename a session:</p></div>
261
+ <div class="features-grid mt-4">
262
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">rename</span> <span class="valor">wlo1-202503081740070500-cdf9d0-7a9baf602770</span> <span class="valor">session1</span></p></div>
263
+ </div>
264
+ <div class="features-grid mt-4">
265
+ <%= image_tag 'wibrfake/wibrfake-session-rename.png', class: 'wibrfake-img', alt: 'wibrfake'%>
266
+ </div>
267
+ <div class="summary"><p>Let's now look at how to create a new session in case we want to handle multiple attacks</p></div>
268
+ <div class="summary"><p>To create a new session:</p></div>
269
+ <div class="features-grid mt-4">
270
+ <%= image_tag 'wibrfake/wibrfake-session-new.png', class: 'wibrfake-img', alt: 'wibrfake'%>
271
+ </div>
272
+ <div class="summary"><p>What if we want to enter that new session that we have just created? Easy.</p></div>
273
+ <div class="summary"><p>To log in:</p></div>
274
+ <div class="features-grid mt-4">
275
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">init</span> <span class="valor">session1</span></p></div>
276
+ </div>
277
+ <div class="features-grid mt-4">
278
+ <%= image_tag 'wibrfake/wibrfake-session-init.png', class: 'wibrfake-img', alt: 'wibrfake'%>
279
+ </div>
280
+ <div class="summary"><p>Previously we logged in to the 'session1' session, we no longer need the previous session, what if we delete it?.</p></div>
281
+ <div class="summary"><p>To delete it:</p></div>
282
+ <div class="features-grid mt-4">
283
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">remove</span> <span class="valor">wlo1-202503081750370500-041dd9-18473dabb7cf</span></p></div>
284
+ </div>
285
+ <div class="summary"><p>Now comes the most important thing, if we want to activate the session with all the changes already made to be able to use it later</p></div>
286
+ <div class="summary"><p>We can use this:</p></div>
287
+ <div class="features-grid mt-4">
288
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">active</span></p></div>
289
+ </div>
290
+ <div class="features-grid mt-4">
291
+ <%= image_tag 'wibrfake/wibrfake-session-active.png', class: 'wibrfake-img', alt: 'wibrfake'%>
292
+ </div>
293
+ <div class="summary"><p>Perfect, now the session called 'session1' will be active until you delete it, if you make any configuration changes while in that session to save the configuration, it's very easy</p></div>
294
+ <div class="summary"><p>We can use this:</p></div>
295
+ <div class="features-grid mt-4">
296
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">save</span></p></div>
297
+ </div>
298
+ <div class="features-grid mt-4">
299
+ <%= image_tag 'wibrfake/wibrfake-session-save.png', class: 'wibrfake-img', alt: 'wibrfake'%>
300
+ </div>
301
+ </div>
302
+ </div>
303
+ </section>
304
+
305
+
306
+ <section id="attacks-section" class="main-section" style="display:none">
307
+ <div class="rogueap info-card" id="rogueap">
308
+ <div class="rogueap-tittle">
309
+ <h2>Rogue AP</h2>
310
+ </div>
311
+ <p>A Rogue AP (Fake Access Point) is a fake Wi-Fi network created to trick users into stealing their data (passwords, banking information) or infiltrating malware. The WibrFake tool automates this attack: it simulates legitimate networks (e.g., "Wifi_Free") and captures traffic using techniques such as Man-in-the-Middle or phishing, redirecting to fake pages to obtain credentials. In addition, it can inject malware into connected devices.</p>
312
+ <div class="summary"><p>To begin with, we must know that wibrfake is already preconfigured to mount fake access points automatically, just run, start wibrfake and launch the access point.</p></div>
313
+ <div class="summary"><p>To view the preset use:</p></div>
314
+ <div class="features-grid mt-4">
315
+ <div class="feature-item"><p><span class="command">apfake</span> <span class="parameter">show</span></p></div>
316
+ </div>
317
+ <div class="features-grid mt-4">
318
+ <%= image_tag 'wibrfake/wibrfake-apfake-show.png', class: 'wibrfake-img', alt: 'wibrfake'%>
319
+ </div>
320
+ <div class="summary"><p>As we can see, wibrfake already provides us with a preconfiguration, we just have to launch the fake access point.</p></div>
321
+ <div class="summary"><p>So, since everything is already preconfigured, we are only going to change the ssid and the gateway to the access point.</p></div>
322
+ <div class="features-grid mt-4">
323
+ <div class="feature-item">
324
+ <p><span class="command">set</span> <span class="parameter">ssid</span> <span class="valor">Wifi_Free</span> #The command 'set ssid' is to assign a name to the access point.
325
+ <span class="command">set</span> <span class="parameter">gateway</span> <span class="valor">192.168.1.1</span> #The 'set gateway' command is for assigning an IP address to the access point (router).
326
+ </p>
327
+ </div>
328
+ </div>
329
+ <div class="features-grid mt-4">
330
+ <%= image_tag 'wibrfake/wibrfake-apfake-set-basic.png', class: 'wibrfake-img', alt: 'wibrfake'%>
331
+ </div>
332
+ <div class="summary"><p>We are now ready to launch the access point</p></div>
333
+ <div class="summary"><p>To launch it use:</p></div>
334
+ <div class="features-grid mt-4">
335
+ <div class="feature-item"><p><span class="command">apfake</span> <span class="parameter">on</span></p></div>
336
+ </div>
337
+ <div class="features-grid mt-4">
338
+ <%= image_tag 'wibrfake/wibrfake-apfake-on.png', class: 'wibrfake-img', alt: 'wibrfake'%>
339
+ </div>
340
+ <div class="summary"><p>Before launching an access point, wibrfake creates the environment to work, configures 192.168.1.1 for the network interface, in my case (wlo1 passing it through the default network gateway), and sets a routing rule so that all outbound traffic from the fake network is routed through 192.168.1.1. This allows the attacker to intercept, modify, or block packets.</p></div>
341
+ <div class="summary"><p>So, after launching the hotspot, we run:</p></div>
342
+ <div class="features-grid mt-4">
343
+ <div class="feature-item"><p><span class="command">show</span> <span class="parameter">options</span></p></div>
344
+ </div>
345
+ <div class="summary"><p>To view the status of the access point</p></div>
346
+ <div class="features-grid mt-4">
347
+ <div class="img-help"><%= image_tag 'wibrfake/wibrfake-hostpot.png', class: 'wibrfake-img-help', alt: 'wibrfake'%></div>
348
+ </div>
349
+ </div>
350
+ <div class="captiveportal info-card" id="captiveportal">
351
+ <div class="captiveportal-tittle">
352
+ <h2>Captive Portal</h2>
353
+ </div>
354
+ <h3>Rogue AP + Captive Portal</h3>
355
+ <p>The captive portal is a fraudulent page that forces victims to enter their data (credentials, credit card information, SMS) when connecting to a fake Wi-Fi network. Here's how it works:</p>
356
+ <ul>
357
+ <li>Malicious redirection: When trying to browse, WibrFake intercepts traffic and displays a portal that mimics real services (e.g. Gmail login, Nauta, Facebook).</li>
358
+ <li>Information theft: Records everything entered (passwords, bank details)</li>
359
+ <li>Controlled access: After the theft, you can allow the Internet so as not to alert the victim, while still monitoring their activity.</li>
360
+ </ul>
361
+ <div class="summary"><p>Example: A fake "Wifi_Free" AP redirects to a cloned Starbucks portal where the victim enters their email and password, which WibrFake stores for spoofing.</p></div>
362
+ <p>So, let's start with the captive portal, this module also offers us a help panel and even presets to use.</p>
363
+ <div class="summary"><p>To view captive portal presets:</p></div>
364
+ <div class="features-grid mt-4">
365
+ <div class="feature-item"><p><span class="command">web_server</span> <span class="parameter">show</span></p></div>
366
+ </div>
367
+ <div class="features-grid mt-4">
368
+ <%= image_tag 'wibrfake/wibrfake-web-server-show.png', class: 'wibrfake-img', alt: 'wibrfake'%>
369
+ </div>
370
+ <div class="summary"><p>By default WibrFake in the captive portal attack already has some predefined configurations, let's see them:</p></div>
371
+ <ul>
372
+ <li>Login: In login the type of login that is going to be used in the captive portal is assigned, in this case a basic login made of an html structure is assigned by default.</li>
373
+ <li>Route: The route parameter is used to manage the route where the page is going to be viewed, in this case it is set to 'login/'.</li>
374
+ <li>Host: This parameter is to assign the host where the web server is going to be hosted and who can access them, in this case '0.0.0.0', that is, anyone can access it.</li>
375
+ <li>Port: This is for assigning a port to the web server. It functions as a "virtual gateway" that organizes and directs data traffic to the correct program.</li>
376
+ <li>Credentials: Credentials are used to assign where to store the captured credentials, in this case it is empty, that is, it is not going to be saved</li>
377
+ </ul>
378
+ <div class="summary"><p>Since everything was already pre-configured, we're launching the captive portal</p></div>
379
+ <div class="summary"><p>We launched the Captive Portal with:</p></div>
380
+ <div class="features-grid mt-4">
381
+ <div class="feature-item"><p><span class="command">web_server</span> <span class="parameter">on</span></p></div>
382
+ </div>
383
+ <div class="features-grid mt-4">
384
+ <%= image_tag 'wibrfake/wibrfake-web-server-on.png', class: 'wibrfake-img', alt: 'wibrfake'%>
385
+ </div>
386
+ <div class="summary"><p>Since the rogue ap + captive portal was launched, I will now connect my android device to the hotspot to test</p></div>
387
+ <div class="features-grid mt-4">
388
+ <div class="img-help"><%= image_tag 'wibrfake/wibrfake-need-signin.jpg', class: 'wibrfake-img-help', alt: 'wibrfake'%></div>
389
+ </div>
390
+ <div class="summary"><p>As we can see, I am already connected to the access point and this is the result:</p></div>
391
+ <div class="features-grid mt-4">
392
+ <div class="img-help"><%= image_tag 'wibrfake/wibrfake-login-basic.jpg', class: 'wibrfake-img-help', alt: 'wibrfake'%></div>
393
+ </div>
394
+ <div class="summary"><p>Once the basic login has been shown as a captive portal, I will put the credentials User: breaker, Password: HolaMundo</p></div>
395
+ <div class="summary"><p>Here's the bottom line:</p></div>
396
+ <div class="features-grid mt-4">
397
+ <%= image_tag 'wibrfake/wibrfake-web-server-apfake.png', class: 'wibrfake-img', alt: 'wibrfake'%>
398
+ </div>
399
+ </div>
400
+ <div class="eviltwin info-card">
401
+ <div class="eviltwin-tittle">
402
+ <h2>Evil Twin</h2>
403
+ </div>
404
+ <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Distinctio magni, libero pariatur iusto amet ipsam nisi consectetur itaque dolores molestiae enim ducimus numquam reiciendis sunt voluptas laudantium laboriosam, delectus animi.</p>
405
+
406
+ <div class="features-grid mt-4">
407
+ <div class="feature-item"><p><span class="command">session</span> <span class="parameter">save</span></p></div>
408
+ </div>
409
+ </div>
410
+ </section>
411
+
412
+
413
+ </div>
414
+
415
+
416
+
417
+ <protonpass-root-2e6e data-protonpass-role="root" data-protonpass-theme="dark"></protonpass-root-2e6e></body></html>
data/bin/.names.rb.swp ADDED
Binary file
data/bin/brakeman ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+
5
+ ARGV.unshift("--ensure-latest")
6
+
7
+ load Gem.bin_path("brakeman", "brakeman")
data/bin/bundle ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby3.1
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'bundle' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "rubygems"
12
+
13
+ m = Module.new do
14
+ module_function
15
+
16
+ def invoked_as_script?
17
+ File.expand_path($0) == File.expand_path(__FILE__)
18
+ end
19
+
20
+ def env_var_version
21
+ ENV["BUNDLER_VERSION"]
22
+ end
23
+
24
+ def cli_arg_version
25
+ return unless invoked_as_script? # don't want to hijack other binstubs
26
+ return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
27
+ bundler_version = nil
28
+ update_index = nil
29
+ ARGV.each_with_index do |a, i|
30
+ if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
31
+ bundler_version = a
32
+ end
33
+ next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
34
+ bundler_version = $1
35
+ update_index = i
36
+ end
37
+ bundler_version
38
+ end
39
+
40
+ def gemfile
41
+ gemfile = ENV["BUNDLE_GEMFILE"]
42
+ return gemfile if gemfile && !gemfile.empty?
43
+
44
+ File.expand_path("../Gemfile", __dir__)
45
+ end
46
+
47
+ def lockfile
48
+ lockfile =
49
+ case File.basename(gemfile)
50
+ when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
51
+ else "#{gemfile}.lock"
52
+ end
53
+ File.expand_path(lockfile)
54
+ end
55
+
56
+ def lockfile_version
57
+ return unless File.file?(lockfile)
58
+ lockfile_contents = File.read(lockfile)
59
+ return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
60
+ Regexp.last_match(1)
61
+ end
62
+
63
+ def bundler_requirement
64
+ @bundler_requirement ||=
65
+ env_var_version || cli_arg_version ||
66
+ bundler_requirement_for(lockfile_version)
67
+ end
68
+
69
+ def bundler_requirement_for(version)
70
+ return "#{Gem::Requirement.default}.a" unless version
71
+
72
+ bundler_gem_version = Gem::Version.new(version)
73
+
74
+ requirement = bundler_gem_version.approximate_recommendation
75
+
76
+ return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")
77
+
78
+ requirement += ".a" if bundler_gem_version.prerelease?
79
+
80
+ requirement
81
+ end
82
+
83
+ def load_bundler!
84
+ ENV["BUNDLE_GEMFILE"] ||= gemfile
85
+
86
+ activate_bundler
87
+ end
88
+
89
+ def activate_bundler
90
+ gem_error = activation_error_handling do
91
+ gem "bundler", bundler_requirement
92
+ end
93
+ return if gem_error.nil?
94
+ require_error = activation_error_handling do
95
+ require "bundler/version"
96
+ end
97
+ return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
98
+ warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
99
+ exit 42
100
+ end
101
+
102
+ def activation_error_handling
103
+ yield
104
+ nil
105
+ rescue StandardError, LoadError => e
106
+ e
107
+ end
108
+ end
109
+
110
+ m.load_bundler!
111
+
112
+ if m.invoked_as_script?
113
+ load Gem.bin_path("bundler", "bundle")
114
+ end
@@ -0,0 +1,13 @@
1
+ #!/bin/bash -e
2
+
3
+ # Enable jemalloc for reduced memory usage and latency.
4
+ if [ -z "${LD_PRELOAD+x}" ] && [ -f /usr/lib/*/libjemalloc.so.2 ]; then
5
+ export LD_PRELOAD="$(echo /usr/lib/*/libjemalloc.so.2)"
6
+ fi
7
+
8
+ # If running the rails server then create or migrate existing database
9
+ if [ "${1}" == "./bin/rails" ] && [ "${2}" == "server" ]; then
10
+ ./bin/rails db:prepare
11
+ fi
12
+
13
+ exec "${@}"
data/bin/google.wkdump ADDED
@@ -0,0 +1,3 @@
1
+ set login google
2
+ web_server on
3
+ web_server status
data/bin/importmap ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../config/application"
4
+ require "importmap/commands"
data/bin/rails ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path("../config/application", __dir__)
3
+ require_relative "../config/boot"
4
+ require "rails/commands"
data/bin/rake ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../config/boot"
3
+ require "rake"
4
+ Rake.application.run
data/bin/rubocop ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+
5
+ # explicit rubocop config increases performance slightly while avoiding config confusion.
6
+ ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__))
7
+
8
+ load Gem.bin_path("rubocop", "rubocop")
data/bin/setup ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+ require "fileutils"
3
+
4
+ APP_ROOT = File.expand_path("..", __dir__)
5
+ APP_NAME = "wibrfake"
6
+
7
+ def system!(*args)
8
+ system(*args, exception: true)
9
+ end
10
+
11
+ FileUtils.chdir APP_ROOT do
12
+ # This script is a way to set up or update your development environment automatically.
13
+ # This script is idempotent, so that you can run it at any time and get an expectable outcome.
14
+ # Add necessary setup steps to this file.
15
+
16
+ puts "== Installing dependencies =="
17
+ system! "gem install bundler --conservative"
18
+ system("bundle check") || system!("bundle install")
19
+
20
+ # puts "\n== Copying sample files =="
21
+ # unless File.exist?("config/database.yml")
22
+ # FileUtils.cp "config/database.yml.sample", "config/database.yml"
23
+ # end
24
+
25
+ puts "\n== Preparing database =="
26
+ system! "bin/rails db:prepare"
27
+
28
+ puts "\n== Removing old logs and tempfiles =="
29
+ system! "bin/rails log:clear tmp:clear"
30
+
31
+ puts "\n== Restarting application server =="
32
+ system! "bin/rails restart"
33
+
34
+ # puts "\n== Configuring puma-dev =="
35
+ # system "ln -nfs #{APP_ROOT} ~/.puma-dev/#{APP_NAME}"
36
+ # system "curl -Is https://#{APP_NAME}.test/up | head -n 1"
37
+ end