Commit 75b2226a authored by o@immerda.ch's avatar o@immerda.ch
Browse files

better ux regarding mail_crypt and tokens

parent dd4552e2
class MailCryptController < ApplicationController
def update
if (p = params[:pass]).present?
def enable
@keep_recovery_token = params[:keep_recovery_token]
if !@keep_recovery_token
flash[:notice] = :decide_recovery_token
elsif (p = params[:pass]).present?
begin
ApiBackend::mail_crypt_enable(current_user, p)
session[:mail_crypt_enabled] = true
flash[:notice] = :mail_crypt_enabled
redirect_to '/mail_crypt_token' and return
if @keep_recovery_token == 'yes'
redirect_to '/mail_crypt_token' and return
else
create_token and return
end
rescue ApiBackend::ApiError => e
if e.api_msg == 'auth_fail'
flash[:notice] = :auth_fail
......@@ -14,6 +21,28 @@ class MailCryptController < ApplicationController
end
end
end
render 'show_enable'
end
def create_token
begin
res = ApiBackend::mail_crypt_token(current_user, params[:pass])
recovery_token = res['mail_crypt_recovery_token']
begin
@qr = RQRCode::QRCode.new(recovery_token, :size => 12, :level => :h)
rescue => e
@qr = ''
puts "qr token generation failed #{e}"
end
@recovery_token = recovery_token.gsub(/(.{8})/, '\1<wbr>').html_safe
rescue ApiBackend::ApiError => e
if e.api_msg == 'auth_fail'
flash[:notice] = :auth_fail
else
flash[:notice] = :get_token_failed
end
end
render 'show'
end
end
class MailCryptTokenController < ApplicationController
def create
begin
res = ApiBackend::mail_crypt_token(current_user, params[:pass])
recovery_token = res['mail_crypt_recovery_token']
begin
@qr = RQRCode::QRCode.new(recovery_token, :size => 12, :level => :h)
rescue => e
puts "qr token generation failed #{e}"
end
@recovery_token = recovery_token.gsub(/(.{8})/, '\1<wbr>').html_safe
rescue ApiBackend::ApiError => e
if e.api_msg == 'auth_fail'
flash[:notice] = :auth_fail
else
flash[:notice] = :get_token_failed
end
end
render 'show'
end
end
......@@ -13,7 +13,7 @@ class SignupController < ApplicationController
(redirect_to '/signup' and return) unless @token
@email = params[:email]
@new_pw = params[:new]
@enable_mail_crypt = params[:enable_mail_crypt]
@enable_mail_crypt = true
@recovery_email = params[:recovery_email]
@domain = params[:domain]
@keep_recovery_token = params[:keep_recovery_token]
......@@ -53,7 +53,15 @@ class SignupController < ApplicationController
@recovery_email, @keep_recovery_token == 'yes')
if @keep_recovery_token != 'yes'
@mail_crypt_recovery_token = res['mail_crypt_recovery_token']
begin
@qr = RQRCode::QRCode.new(@mail_crypt_recovery_token, :size => 12, :level => :h)
rescue => e
puts "qr token generation failed #{e}"
@qr = ''
end
@mail_crypt_recovery_token = @mail_crypt_recovery_token.gsub(/(.{8})/, '\1<wbr>').html_safe
end
flash[:notice] = nil
render 'success'
rescue ApiBackend::ApiError
flash[:notice] = :signup_failed
......@@ -73,6 +81,7 @@ class SignupController < ApplicationController
res = ApiBackend::check_invite(token_to_validate)
@token = token_to_validate
@domains = res['domains']
flash[:notice] = nil
rescue ApiBackend::ApiError
flash[:notice] = :check_token_failed
end
......
<h3><%= @page_title = t(:encrypt_mailbox) %></h3>
<p>
<%= t :encrypt_mailbox_help %>
<%= t :encrypt_mailbox_help_existing %>
</p>
<%= form_tag(mail_crypt_path, method: "post") do %>
<%= label_tag(:pass, (t :password_for_enable)) %>
<%= password_field_tag(:pass) %>
<%= submit_tag(t :activate) %>
<%= link_to "Cancel", root_path %>
<h3><%= @page_title = t(:recovery_token) %></h3>
<% if @recovery_token %>
<p>
<%= t :recovery_token_help %>
</p>
<p>
<b><%= t(:recovery_token) %></b>
<div class="recovery-token"><%= @recovery_token %></div>
</p>
<br />
<p>
<b><%= t(:qr_code) %></b>
<div class="recovery-token-qr"><%= raw(@qr.as_html) %></div>
</p>
<% else %>
<p>
<%= t :recovery_token_help %>
</p>
<%= form_tag(mail_crypt_token_path, method: "post") do %>
<%= label_tag(:pass, (t :password_for_recovery_token)) %>
<%= password_field_tag(:pass) %>
<br />
<%= submit_tag(t :recovery_token_show) %>
<% end %>
<% end %>
<br />
<%= link_to t(:cancel), root_path %>
<h3><%= @page_title = t(:mail_crypt_settings) %></h3>
<p>
<%= t(:mail_crypt_help_existing).html_safe %>
</p>
<%= form_tag(mail_crypt_path, method: "post") do %>
<table>
<tr><td><%= label_tag(:pass, (t :password)) %></td><td><%= password_field_tag(:pass) %></td></tr>
</table>
<div id="keep_recovery_token_question">
<%= t :recovery_token_short_help %>
<br />
<input type="radio" id="keep_recovery_token_no" name="keep_recovery_token" value="no"
<%= if @keep_recovery_token == 'no' then 'checked="checked"' else '' end %>
/>
<%= t(:backup_recovery_token_delete) %>
<br />
<input type="radio" id="keep_recovery_token_yes" name="keep_recovery_token" value="yes"
<%= if @keep_recovery_token == 'yes' then 'checked="checked"' else '' end %>
/>
<%= t(:backup_recovery_token_keep) %>
</div>
<br>
<%= submit_tag(t :activate) %>
<%= link_to "Cancel", root_path %>
<% end %>
<h3><%= @page_title = t(:recovery_token) %></h3>
<% if @recovery_token %>
<p>
<%= t :recovery_token_help %>
</p>
<p>
<b><%= t(:token) %></b>
<div class="recovery-token"><%= @recovery_token %></div>
</p>
<br />
<p>
<b><%= t(:qr_code) %></b>
<div class="recovery-token-qr"><%= raw(@qr.as_html) %></div>
</p>
<% else %>
<p>
<%= t :recovery_token_help %>
</p>
<%= form_tag(mail_crypt_token_path, method: "post") do %>
<%= label_tag(:pass, (t :password_for_reveal)) %>
<%= password_field_tag(:pass) %>
<br />
<%= submit_tag(t :recovery_token_show) %>
<% end %>
<% end %>
<br />
<%= link_to t(:cancel), root_path %>
......@@ -38,28 +38,20 @@
</table>
<%= t :recovery_email_short_help %>
<br />
<br />
<p>
<input type="checkbox" id="enable_mail_crypt" name="enable_mail_crypt" value="true"
<%= if @enable_mail_crypt then 'checked="checked"' else '' end %>/>
<b><%= t :encrypt_mailbox %></b>
<br/>
<%= t :encrypt_mailbox_help %>
<br />
<div id="keep_recovery_token_question">
<br />
<%= t :keep_recovery_token_help %>
<%= t :recovery_token_short_help %>
<br />
<input type="radio" id="keep_recovery_token_no" name="keep_recovery_token" value="no"
<%= if @keep_recovery_token == 'no' then 'checked="checked"' else '' end %>
/>
<%= t(:init_delete_token) %>
<%= t(:backup_recovery_token_delete) %>
<br />
<input type="radio" id="keep_recovery_token_yes" name="keep_recovery_token" value="yes"
<%= if @keep_recovery_token == 'yes' then 'checked="checked"' else '' end %>
/>
<%= t(:init_keep_token) %>
<%= t(:backup_recovery_token_keep) %>
</div>
</p>
......
......@@ -6,12 +6,19 @@
<%= t(:new_account_intro1) %>
</p>
<p>
<%= t(:new_account_intro_token) %>
<br />
<% if @mail_crypt_recovery_token %>
<p>
<%= t(:new_account_intro_token) %>
<%= t(:new_account_intro_token_display) %>
<br />
<br />
<b>Token</b> <div class="recovery-token"><%= @mail_crypt_recovery_token %></div>
<b><%= t(:recovery_token) %></b> <div class="recovery-token"><%= @mail_crypt_recovery_token %></div>
</p>
<p>
<b><%= t(:qr_code) %></b>
<div class="recovery-token-qr"><%= raw(@qr.as_html) %></div>
</p>
<p>
......@@ -19,6 +26,8 @@
</p>
<br />
<br />
<% else %>
<%= t(:new_account_intro_token_generate) %>
<% end %>
<p>
......
......@@ -8,7 +8,7 @@
</li>
<% if mail_crypt_enabled? %>
<li><%= link_to (t :recovery_token) , mail_crypt_token_path %>
<br /><%= t(:mail_crypt_token_short_help) %>
<br /><%= t(:recovery_token_short_help) %>
</li>
<% if feature_toggle?('app_passwords') %>
<%# still a feature we want only in beta %>
......@@ -17,9 +17,9 @@
</li>
<% end %>
<% else %>
<% if feature_toggle?('enable_mail_crypt') %>
<% if feature_toggle?('mail_crypt') %>
<li><%= link_to (t :mail_crypt_settings) , mail_crypt_path %> (beta)
<br /><%= t(:enable_mail_crypt_short_help) %>
<br /><%= t(:mail_crypt_short_help) %>
</li>
<% end %>
<% end %>
......
de:
hello: "Hallo"
change_password: "Immerda Passwort ändern"
mail_crypt_settings: "Mailbox Verschlüsselung"
logout: "Abmelden"
new_pw: "Neues Passwort"
old_pw: "Altes Passwort"
......@@ -12,23 +11,37 @@ de:
submit: "Abschicken"
activate: "Aktivieren"
present: "Gesetzt"
encrypt_mailbox: "Mailbox Verschlüsseln"
encrypt_mailbox_help: "ACHTUNG: Diese Funktion ist erst im Testbetrieb. Es könnten Mails verloren gehen. Aktiviere diese Funktion, damit alle Emails verschlüsselt in deiner Mailbox abgelegt werden."
encrypt_mailbox_help_existing: "(Das gilt zZ. nur für neue Mails) Nach dem aktivieren bitte Mailprogram neustarten und/oder im Webmail ausloggen."
recovery_token: "Wiederherstellungs Token"
recovery_token_help: "Hier kannst du einen Token generieren, mit dem du deine verschlüsselten Mails wiederherstellen kannst, wenn du dein Passwort vergisst. Wir empfehlen den angezeigten Token möglichst sicher und gut aufzubewahren. Wenn du dein Passwort vergisst, können wir deine Mails ohne diesen Token nicht wiederherstellen. Wir zeigen dir den Token an, danach besitzen wir keine Kopie des Tokens mehr!"
mail_crypt_enabled: "Verschlüsselung aktiviert"
mail_crypt_settings: "Geschützte Mailablage"
mail_crypt_short_help: "Bestimme wie deine Mails auf unserem Server gespeichert werden."
mail_crypt_help_existing: "ACHTUNG: Diese Funktion ist erst im Testbetrieb und gilt aktuell nur für neu eintreffende Nachrichten. Möchtest du, dass deine Mails auf unserem Server mit deinem Passwort gesichert abgelegt werden? Dann kannst du dies hier aktivieren."
mail_crypt_enabled: "Gesicherte Mailbox aktiviert"
recovery_token_hint: "Wir empfehlen dir ein Wiederherstellungscode zu generieren"
backup_recovery_token_keep: "Ich kann den Wiederherstellungscode jetzt gerade nicht aufbewahren und werde ihn später generieren."
backup_recovery_token_delete: "Ich kann den Wiederherstellungscode jetzt sicher aufbewahren."
decide_recovery_token: "Bitte wähle aus, ob du dein Wiederherstellungscode aufbewahren kannst"
recovery_token: "Wiederherstellungscode"
recovery_token_short_help: "Deine Mailbox ist mit deinem Passwort gesichert. Wenn du es vergisst, kannst du die bestehenden Mails nur mit einem Wiederherstellungscode wieder lesen."
recovery_token_help: "Deine Mails sind auf unsern Servern mit deinem Passwort gesichert. Wenn du dein Passwort vergisst, sind sie nicht mehr lesbar. Aber keine Angst, du kannst Vorsorgen. Generiere einen Wiederherstellungscode und bewahre ihn sicher und gut auf."
recovery_token_show: "Anzeigen"
password_for_recovery_token: "Passwort eingeben, um einen Code zu generieren"
get_token_failed: "Code kann zur Zeit nicht angezeigt werden"
mail_crypt_enable_failed: "Gesicherte Mailbox kann zur Zeit nicht aktiviert werden"
password_changed: "Passwort geändert"
login_failed: "Anmelden fehlgeschlagen"
login: "Anmelden"
recovery_token_show: "Token anzeigen"
pwstrength: "Passwortstärke"
password_change_mismatch: "Die eingegebenen Passwörter stimmen nicht überein"
password_too_short: "Das gewählte Passwort ist zu kurz (mind. 10 Zeichen)"
password_policy_fail: "Das gewählte Passwort ist zu einfach zu erraten"
password_change_failed: "Passwortänderung fehlgeschlagen"
get_token_failed: "Token kann zur Zeit nicht angezeigt werden"
mail_crypt_enable_failed: "Verschlüsselung kann zur Zeit nicht aktiviert werden"
unlock: "entsperren"
update: "aktualisieren"
delete: "löschen"
......@@ -40,31 +53,23 @@ de:
app_passwords_help: "Um mit externen Programmen einzuloggen, kannst du ein zusätzliches Applikations Passwort. Damit du nicht dein Hauptpasswort in Thunderbird, oder dem Phone speichern musst, kannst du hier ein spezifisches Passwort generieren. Gib dazu den Verwendungszweck, sowie dein Hauptpasswort ein und klicke auf generieren. Das Passwort wird dir danach angezeigt und du kannst es kopieren. Ebenfalls kannst du hier bestehende Applikations Passwörter löschen."
generate: "generieren"
change_password_short_help: "Das Hauptpasswort ändern"
mail_crypt_token_short_help: "Wenn du dein Passwort vergisst können deine Mails nur mit diesem Token wiederhergestellt werden"
enable_mail_crypt_short_help: "Verschlüsselt Mails in deiner Mailbox mit deinem Passwort"
your_main_pw: "Dein Hauptpasswort"
new_app_passwords: "Neues Applikations Passwort anfordern"
password_for_reveal: "Passwort eingeben um Token anzuzeigen"
password_for_clear: "Passwort eingeben um unsere Kopie zu löschen"
password_for_enable: "Passwort eingeben um Verschlüsselung zu aktivieren"
recovery_token_hint: "Wir empfehlen dir ein Wiederherstellungs Token zu generieren"
signup_success: "Konto erfolgreich erstellt"
check_token_failed: "Ungültiger Einladungstoken!"
invalid_alias_domain: "Ungültige Emailadresse"
main_title: "Immerda Konto Verwaltung"
new_account_intro1: "Dein Konto ist erstellt! Hier ein paar infos"
new_account_intro_token: "Deine Mails sind mit deinem Passwort verschlüsselt. Wenn du es vergisst, brauchst du diesen Token, damit wir dein Passwort zurücksetzen können. Ansonsten können deine Mails nicht mehr gelesen werden. Kopiere das Token jetzt und bewahre es sicher auf, es kann später nicht mehr angezeigt werden!"
new_account_intro2: "Wir empfehlen dir im Webmail einen GPG Schlüssel zu erstellen. Die Anleitung findest du in unserem Willkommens Email, das du nun erhalten hast."
new_account_intro_token: "Deine Mails sind auf dem Server mit deinem Passwort gesichert abgelegt. Wenn du es vergisst, brauchst du einen Wiederherstellungscode, um sie wieder lesen zu können."
new_account_intro_token_display: "Kopiere den Code jetzt und bewahre ihn sicher auf."
new_account_intro_token_generate: "Einen Wiederhestellungscode kannst du in deinen Kontoeinstellungen generieren."
new_account_intro2: "Um verschlüsselte Mails zu versenden, empfehlen wir dir im Webmail einen GPG Schlüssel zu erstellen. Die Anleitung findest du in unserem Willkommens Email, das du nun erhalten hast."
recovery_email: "Backup Email"
recovery_email_help: "Du kannst hier bestimmen, von welcher Email Adresse aus du ein Passwort zurücksetzen kannst. Wenn du dies bereits getan hast, kannst du hier deine Entscheidung überschreiben. Solltest du deine Mailbox verschlüsselt haben, so brauchst du zusätzlich den Token zu deiner Mailbox um die Emails wiederherzustellen. Wir speichern die Emailadresse, so dass wir sie zwar vergleichen können, sie aber nicht lesen können. (Stichwort: Gehashed)"
recovery_email_short_help: "Von dieser Adresse aus kannst du dein Passwort zurücksetzen."
keep_recovery_token_help: "Beim Passwortverlust brauchst du ein Token, um deine Mailbox wiederherzustellen."
init_keep_token: "Ich kann jetzt gerade das Token nicht sicher aufbewahren und werde es später abholen."
init_delete_token: "Ich bewahre das Token selber auf."
invite_token: "Einladungscode"
new_account: "Neues Konto"
invalid_recovery_email: "Backup Email ist keine gültige Adresse"
decide_recovery_token: "Bitte wähle aus, ob du dein Wiederherstellungs Token aufbewahren kannst"
auth_fail: "Falsches Passwort"
app_password_duplicate: "Applikations Passwort mit diesem Namen besteht bereits"
back: "zurück"
......
en:
hello: "Hello"
change_password: "Change your Immerda password"
mail_crypt_settings: "Mailbox Encryption"
logout: "logout"
new_pw: "new password"
old_pw: "old passowrd"
......@@ -12,22 +11,37 @@ en:
submit: "submit"
activate: "activate"
present: "present"
encrypt_mailbox: "Encrypt Mailbox"
encrypt_mailbox_help: "WARNING: This feature is not stable yet and it might happen that mails become unreadable. Activate this option to encrypt all new incomming mails in your mailbox."
encrypt_mailbox_help_existing: "(Currently only applies to new incoming mails) After enabling encryption please restart your mail program and/or sign out in the Webmail."
mail_crypt_enabled: "Encryption activated"
mail_crypt_settings: "Secured Mailstorage"
mail_crypt_short_help: "Decide how your mails are stored on our servers."
mail_crypt_help_existing: "Warning: This option is currently in test mode and only accounts for newly delivered mails. Would you like to protect the storage of your mails with your password on our servers?"
mail_crypt_enabled: "Secured Mailstorage activated"
recovery_token_hint: "We recommend you generate a recovery token"
backup_recovery_token_delete: "I can safely store my token."
backup_recovery_token_keep: "I can't safely store the token right now. I will generate one later."
decide_recovery_token: "Please decide if your store your recovery token"
recovery_token: "Recovery Token"
recovery_token_short_help: "Your mailbox is secured by your password. If you forget your password, you can only regain access to your old messages with a recovery token."
recovery_token_help: "Your messages are secured by your password. The storage on our servers is unreadable without it. If you forget your password, you need a recovery token to regain access to your old messages. We can't restore them in any other way."
recovery_token_show: "show"
password_for_recovery_token: "Enter your password to generate a recovery token"
get_token_failed: "Failed to display token"
mail_crypt_enable_failed: "Failed to enable secure mailstorage"
password_changed: "Password changed"
login_failed: "Login failed"
login: "Login"
recovery_token_help: "Here you can generate a new recovery token. You need this token to restore your encrypted emails in case you forget your password. Please store it safely. If you forget your password, we cannot restore your emails Without this token. Once we revealed the token to you, we will not have a copy of your token anymore!"
recovery_token_show: "Show token"
pwstrength: "Password strength"
password_change_mismatch: "The passwords do not match"
password_policy_fail: "The password is too easy to guess"
password_too_short: "The password is too short (min 10 characters)"
password_change_failed: "Password change failed"
get_token_failed: "Failed to display token"
mail_crypt_enable_failed: "Failed to enable encryption"
unlock: "unlock"
update: "update"
delete: "delete"
......@@ -36,34 +50,26 @@ en:
create: "create"
app_passwords: "Application Passwords"
app_passwords_short_help: "To log in by external mail applications you can generate an app password"
app_passwords_help: "To connect with external programs you can generate an application specific password. In case you do not want to store your main password in Thunderbird, or your phone, you can create a special password here. To do so enter the intended usage, your main password and click generate. The application password will be shown and you can copy & paste it. Additionally you can delete existing application passwords here."
generate: "generate"
change_password_short_help: "Change your main password"
mail_crypt_token_short_help: "If you forget your password only the recovery token will allow you to recover your mails"
enable_mail_crypt_short_help: "Encrypt your mailbox with your password"
your_main_pw: "Your main password"
new_app_passwords: "Request new application password"
app_passwords_help: "To connect with external programs you can generate an application specific password. In case you do not want to store your main password in Thunderbird, or your phone, you can create a special password here. To do so enter the intended usage, your main password and click generate. The application password will be shown and you can copy & paste it. Additionally you can delete existing application passwords here."
generate: "generate"
password_for_reveal: "Enter password to show token"
password_for_clear: "Enter password to clear our copy"
password_for_enable: "Enter password to enable encryption"
recovery_token_hint: "We recommend you to create a recovery token"
signup_success: "Account successfully created"
check_token_failed: "Invalid Invitation token!"
invalid_alias_domain: "Invalid emailaddress"
main_title: "Immerda Account Management"
new_account_intro1: "Your account is now ready! Here some things to consider"
new_account_intro_token: "Your mails are encrypted with your password. If you forget your password, you need your recovery token to gain access. If you do not have the token anymore, you mails cannot be recovered. Copy the token now and store it safely."
new_account_intro2: "We recommend you create a GPG key in the webmail. We sent you a welcome email with instructions."
new_account_intro_token: "On our servers your messages are secured by your password. If you foget your password, you need a recovery token to regain access to old messages."
new_account_intro_token_display: "Copy the token now and store it safely."
new_account_intro_token_generate: "You can generate a recovery token in our account settings."
new_account_intro2: "To encrypt your mails, we recommend you create a GPG key in the webmail. We sent you a welcome email with instructions."
recovery_email: "Recovery Email"
recovery_email_short_help: "You can request a new password from your recovery email address."
recovery_email_help: "You can set a recovery email here. From this address you are able to ask us to reset your password. If you already did this, then submitting it again, will override your former choice. For encrypted mailboxes you need additionally the token of your mailbox to recover the data. We are storing the recovery email, so that we are able to check it, but not able to read it (hashed)."
keep_recovery_token_help: "You need this token to recover your data, when you forget your password."
init_keep_token: "I can't safely store the token right now. I will pick it up later."
init_delete_token: "I will safely store my token."
recovery_email_short_help: "You can request a new password from your recovery email address."
invite_token: "Invite Code"
new_account: "New Account"
invalid_recovery_email: "Recovery email is not valid"
decide_recovery_token: "Please decide if your store your recovery token"
auth_fail: "password wrong"
app_password_duplicate: "Application password with this name already exists"
delete_account: "Delete Account"
......
......@@ -11,10 +11,10 @@ Rails.application.routes.draw do
get '/recovery_email', to: 'recovery_email#show'
post '/recovery_email', to: 'recovery_email#update'
get '/mail_crypt', to: 'mail_crypt#show'
post '/mail_crypt', to: 'mail_crypt#update'
get '/mail_crypt_token', to: 'mail_crypt_token#show'
post '/mail_crypt_token', to: 'mail_crypt_token#create'
get '/mail_crypt', to: 'mail_crypt#show_enable'
post '/mail_crypt', to: 'mail_crypt#enable'
get '/mail_crypt_token', to: 'mail_crypt#show'
post '/mail_crypt_token', to: 'mail_crypt#create_token'
get '/delete_account', to: 'delete_account#show'
post '/delete_account', to: 'delete_account#delete'
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment