I do believe that OTP/MFA is now working.

This commit is contained in:
2024-05-21 12:44:08 +01:00
parent 95675aa5ef
commit b72f88f60f
10 changed files with 65 additions and 6 deletions

View File

@@ -89,12 +89,12 @@ menu > li {
flex-grow: 1;
}
.domain {
.domain, .mfa {
background-color: #efefef;
border-radius:1rem;
padding:1rem;
}
.domain-header {
.domain-header, .mfa-header {
background-color: #fefefe;
border-radius:1rem;
padding:1rem 1rem;
@@ -108,7 +108,7 @@ menu > li {
scale: 75%;
}
.email-list, .domain-list {
.email-list, .domain-list, .mfa-list {
border-radius:1rem;
border:1rem black;
background-color:#e7eae7;

View File

@@ -0,0 +1,20 @@
class MfasController < ApplicationController
def new
issuer = "Hidden Agenda Email"
label = "#{issuer}:#{current_user.email}"
current_user.otp_secret = User.generate_otp_secret
current_user.save!
qrcode = RQRCode::QRCode.new([{ data: current_user.otp_provisioning_uri(label, issuer: issuer), mode: :byte_8bit }])
@svg = qrcode.as_svg(color: "000", shape_rendering: "crispEdges", module_size: 5, standalone: true,
use_path: true
)
end
def create
current_user.otp_required_for_login = true
current_user.save!
redirect_to root_url
end
end

View File

@@ -21,5 +21,5 @@
<%= f.submit "Change my password" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
<hr/>
<%#= render "devise/shared/links" %>

View File

@@ -35,5 +35,12 @@
<%= f.submit "Update" %>
</div>
<% end %>
<hr/>
<% if current_user.otp_secret.to_s.size == 0 %>
<%= link_to "Enable MFA", new_mfa_path %>
<% else %>
<%= link_to "Edit MFA", new_mfa_path %>
<% end %>
|
<%= link_to "Back", :back %>

View File

@@ -12,6 +12,11 @@
<%= f.password_field :password, autocomplete: "current-password", class: "input" %>
</div>
<div class="flex flex-column mt-3">
<%= f.label :otp_attempt, class: "my-2" %>
<%= f.password_field :otp_attempt, autocomplete: "OTP Code", class: "input" %>
</div>
<% if devise_mapping.rememberable? %>
<div class="flex flex-items-center mt-4">
<%= f.check_box :remember_me, class: "checkbox mr-3" %>

View File

@@ -26,12 +26,21 @@
<% if alert %><div class=""><%= alert %></div><% end %>
<%= yield %>
</main>
<% if Rails.env == "development" %>
<footer>
RoR Version <%= Rails.version %> (<%=Rails.env%>) | Ruby <%= "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}" %> | OS <%= RUBY_PLATFORM %> | App Version <%= `git describe --always` %>
<% if user_signed_in? %>
<hr/>
<%= "User:#{current_user.email} | OTP for login:#{current_user.otp_required_for_login} | " %>
<% end %>
<!--
<h3>To-Do (In order of importance):</h3>
<ul>
<li>2FA</li>
</ul>
-->
<% end %>
</footer>
</body>
</html>

View File

@@ -0,0 +1,9 @@
<div class="mfa">
<h1 class="mfa-header">New MFA</h1>
<div class="mfa-list">
<p>Scan the code below and then click "Done".</p>
<p>You will only be able to login with your authenticator app once you have clicked "Done"</p>
<%= @svg.html_safe%>
<p><%= link_to "Done", mfas_path, data: { turbo_method: :post} %></p>
</div>
</div>