Commit 09a425cb authored by Benjamin Neff's avatar Benjamin Neff

Merge branch 'release/0.7.12.0'

parents dc7c5ffe 1e8a96d8
# 0.7.12.0
## Refactor
* Harmonize markdown titles sizes [#8029](https://github.com/diaspora/diaspora/pull/8029)
## Bug fixes
* Improve handling of mixed case hostnames while fetching OpenGraph data [#8021](https://github.com/diaspora/diaspora/pull/8021)
* Fix "remember me" with two factor authentication enabled [#8031](https://github.com/diaspora/diaspora/pull/8031)
## Features
* Add line mentioning diaspora\* on the splash page [#7966](https://github.com/diaspora/diaspora/pull/7966)
* Improve communication about signing up on closed pods [#7896](https://github.com/diaspora/diaspora/pull/7896)
# 0.7.11.0
## Refactor
......
......@@ -42,6 +42,14 @@
padding: 15px;
}
.part-of-diaspora {
font-style: italic;
a {
color: $white;
}
}
.login-form {
fieldset { background: none; }
......
......@@ -16,6 +16,30 @@
}
}
h1 {
font-size: 2.7rem;
}
h2 {
font-size: 2.3rem;
}
h3 {
font-size: 2rem;
}
h4 {
font-size: 1.8rem;
}
h5 {
font-size: 1.6rem;
}
h6 {
font-size: 1.4rem;
}
.img-responsive {
display: inline;
}
......
.page-registrations.action-new,
.page-registrations.action-create {
.page-registrations {
.ball {
background: image-url('branding/ball.png') no-repeat;
background-size: contain;
......@@ -12,19 +11,24 @@
height: 633px;
}
@media (max-width: $screen-xs-max) {
.v-center {
height: auto;
}
}
.content {
display: table-cell;
vertical-align: middle;
h2 {
h1 {
font-size: 35px;
margin: 12px;
text-align: center;
margin: 12px 0;
}
}
form {
max-width: 400px;
max-width: 500px;
}
.captcha-img {
......@@ -34,16 +38,13 @@
width: 120px;
}
.captcha-input {
.form-control.captcha-input {
border-bottom: 1px solid $input-border;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
box-sizing: border-box;
font-size: 16px;
height: 40px;
line-height: $line-height-base;
padding: 10px 10px 10px 130px;
width: 100%;
padding-left: 130px;
}
.terms > a {
......
......@@ -5,9 +5,9 @@
# the COPYRIGHT file.
class RegistrationsController < Devise::RegistrationsController
before_action :check_registrations_open_or_valid_invite!
before_action :check_registrations_open_or_valid_invite!, except: :registrations_closed
layout -> { request.format == :mobile ? "application" : "with_header" }
layout -> { request.format == :mobile ? "application" : "with_header_with_footer" }
def create
@user = User.build(user_params)
......@@ -28,13 +28,17 @@ class RegistrationsController < Devise::RegistrationsController
end
end
def registrations_closed
render "registrations/registrations_closed"
end
private
def check_registrations_open_or_valid_invite!
return true if AppConfig.settings.enable_registrations? || invite.try(:can_be_used?)
flash[:error] = params[:invite] ? t("registrations.invalid_invite") : t("registrations.closed")
redirect_to new_user_session_path
flash[:error] = t("registrations.invalid_invite") if params[:invite]
redirect_to registrations_closed_path
end
def invite
......
......@@ -12,21 +12,21 @@ class SessionsController < Devise::SessionsController
# rubocop:enable Rails/LexicallyScopedActionFilter
def find_user
return User.find(session[:otp_user_id]) if session[:otp_user_id]
return User.find_for_authentication(username: params[:user][:username]) if params[:user][:username]
User.find_for_authentication(username: params[:user][:username]) if params[:user][:username]
User.find(session[:otp_user_id]) if session[:otp_user_id]
end
def authenticate_with_2fa
self.resource = find_user
u = find_user
return true unless u&.otp_required_for_login?
return true unless resource&.otp_required_for_login?
if params[:user][:otp_attempt].present? && session[:otp_user_id]
authenticate_with_two_factor_via_otp(u)
elsif u&.valid_password?(params[:user][:password])
prompt_for_two_factor(u)
authenticate_with_two_factor_via_otp(resource)
else
strategy = Warden::Strategies[:database_authenticatable].new(warden.env, :user)
prompt_for_two_factor(strategy.user) if strategy.valid? && strategy._run!.successful?
end
end
......
......@@ -33,7 +33,9 @@ class OpenGraphCache < ApplicationRecord
end
def fetch_and_save_opengraph_data!
object = OpenGraphReader.fetch!(self.url)
uri = URI.parse(url.start_with?("http") ? url : "http://#{url}")
uri.normalize!
object = OpenGraphReader.fetch!(uri)
return unless object
......
......@@ -591,6 +591,10 @@ class User < ApplicationRecord
end
end
def remember_me
true
end
private
def clearable_fields
......
......@@ -37,7 +37,6 @@
autocorrect: "off",
aria: {labelledby: "passwordConfirmationLabel"}
= hidden_field(:user, :remember_me, value: 1)
= f.submit t("devise.passwords.edit.change_password"), class: "btn btn-block btn-primary"
.text-center
......
......@@ -4,6 +4,10 @@
.row
.col-md-8.text-center
%h1= t("home.default.headline", pod_name: pod_name)
- if pod_name != "diaspora*"
%h2.part-of-diaspora
!= t("home.default.part_of_diaspora",
diaspora_site_link: link_to(t("home.default.diaspora_site_link"), "https://diasporafoundation.org/"))
%h2= t("home.default.byline")
.col-md-4.login-form
= render partial: "sessions/form", locals: {mobile: false, resource: User.new, resource_name: :user}
......
%ul.nav.navbar-nav.navbar-right
- if AppConfig.settings.enable_registrations? && !current_page?(controller: "/registrations", action: :new)
- unless current_page?(controller: "/registrations", action: :new)
%li= link_to t("devise.shared.links.sign_up"), new_user_registration_path, class: "login"
- unless current_page?(controller: "/sessions", action: :new)
%li= link_to t("devise.shared.links.sign_in"), new_user_session_path, class: "login"
......@@ -4,7 +4,7 @@
- if mobile
%legend
= image_tag("branding/logos/header-logo2x.png", height: 40, width: 40)
= t("aspects.aspect_stream.make_something")
= AppConfig.settings.pod_name
- if mobile
= f.label :email, t("registrations.new.email"), class: "control-label", id: "emailLabel"
......
%h2
= t("devise.shared.links.sign_up_closed")
!= t("registrations.closed.closed_pod",
wiki: link_to(t("registrations.closed.another_pod"), "https://diasporafoundation.org/getting_started/sign_up"))
!= t("registrations.closed.find_pods",
poduptime: link_to("Poduptime", "https://podupti.me/"))
!= t("registrations.closed.other_questions",
wiki: link_to("Wiki", "https://wiki.diasporafoundation.org/Choosing_a_pod"))
#registration
.container
.row
.col-md-10.offset1
.col-md-7.hidden-phone
%h1.ball
.col-md-5.v-center
.content.text-center
%h2#pod-name
= AppConfig.settings.pod_name
.col-sm-6.hidden-xs
.ball
.col-sm-6.col-xs-12.v-center
.content.text-center
%h1#pod-name
= AppConfig.settings.pod_name
= render partial: "form", locals: {mobile: false}
= render partial: "form", locals: {mobile: false}
#registration
.container
.row
.col-sm-6.hidden-xs
.ball
.col-sm-6.col-xs-12.v-center
.content
= render partial: "registrations_closed"
.stream#main-stream
- flash.each do |name, msg|
.expose#flash-container
.flash-message{class: "message alert alert-#{flash_class name}", role: "alert"}
= msg
.login-form
.login-container
= render partial: "registrations_closed"
......@@ -40,5 +40,4 @@
autocorrect: "off",
aria: {labelledby: "passwordLabel"}
= f.hidden_field :remember_me, value: 1
= f.submit t("devise.sessions.new.sign_in"), class: "btn btn-large btn-block btn-primary"
......@@ -4,7 +4,7 @@
defaults:
version:
number: "0.7.11.0" # Do not touch unless doing a release, do not backport the version number that's in master
number: "0.7.12.0" # Do not touch unless doing a release, do not backport the version number that's in master
heroku: false
environment:
url: "http://localhost:3000/"
......
......@@ -15,11 +15,6 @@ end
# Use this hook to configure devise mailer, warden hooks and so forth.
# Many of these configuration options can be set straight in your model.
Devise.setup do |config|
config.warden do |manager|
manager.default_strategies(scope: :user).unshift :two_factor_authenticatable
manager.default_strategies(scope: :user).unshift :two_factor_backupable
end
# The secret key used by Devise. Devise uses this key to generate
# random tokens. Changing this key will render invalid all existing
# confirmation, reset password and unlock tokens in the database.
......
......@@ -86,7 +86,7 @@ pt-BR:
remember_me: "Lembre-se de mim"
sign_in: "Entrar"
username: "Nome de usuário"
signed_in: "Você entrou com sucesso."
signed_in: "Você entrou."
signed_out: "Você saiu com sucesso."
shared:
links:
......
......@@ -442,7 +442,6 @@ ar:
updated: "تم تحديث ملفك الشخصى"
public: "عامّ"
registrations:
closed: "التسجيلات مغلقة على هذه المنصة"
create:
success: "لقد انضممت الى دياسبرا "
new:
......
......@@ -15,7 +15,7 @@ be:
contact:
attributes:
person_id:
taken: "павінна быць унікальным у кантактах гэтага карыстальніка."
taken: "мусіць быць унікальным у кантактах гэтага карыстальніка."
person:
attributes:
diaspora_handle:
......@@ -23,7 +23,7 @@ be:
reshare:
attributes:
root_guid:
taken: "Добра, але гэта ты ўжо перапосціў!"
taken: "Падабаецца? Але ты ўжо падзяліуся гэтым!"
user:
attributes:
email:
......@@ -33,42 +33,52 @@ be:
username:
invalid: "Памылка. Дазваляюцца літары, лічбы і падкрэсліванні."
taken: "ужо існуе."
all_aspects: "усе катыгорыі"
all_aspects: "Усе аспекты"
are_you_sure: "сапраўды?"
are_you_sure_delete_account: "Вы сапраўды хочаце выдаліць Ваш акаўнт? Гэта не магчыма будзе адмяніць!"
are_you_sure_delete_account: "Вы сапраўды жадаеце выдаліць Ваш акаўнт? Гэта не магчыма будзе адмяніць!"
aspects:
add_to_aspect:
failure: "Памылка пры спробе дадаць кантакты да аспекта."
success: "Кантакты паспяхова дададзены ў аспект."
aspect_listings:
add_an_aspect: "+ дадаць катыгорыю"
aspect_stream:
stay_updated: "Заўжды на сувязі"
destroy:
failure: "%{name} не пустая і не можа быць выдалена."
failure: "%{name} не магчыма выдаліць."
success: "%{name} паспяхова выдалена"
edit:
aspect_list_is_not_visible: "спіс катыгорый не бачны для ўсіх"
aspect_list_is_visible: "спіс катыгорый бачны для ўсіх"
aspect_list_is_not_visible: "Кантакты ў гэтым аспекце ня бачны нікому"
aspect_list_is_visible: "Кантакты ў гэтым аспекце бачны для ўсіх"
confirm_remove_aspect: "ты сапраўды жадаешь выдаліць гэтую катыгорыю?"
rename: "перайменаваць"
update: "абнавіць"
updating: "абнаўляю ..."
update: "аднавіць"
updating: "аднаўляю ..."
index:
donate: "падзяка"
help:
do_you: "Гэта тычыцца:"
here_to_help: "Супольнасці Diaspora тут!"
need_help: "дапамога патрэбна?"
feature_suggestion: "... жадаеце нешта %{link} прапанаваць?"
find_a_bug: "... знайшлі %{link}?"
have_a_question: "... маеце %{link}?"
here_to_help: "Суполка Дыаспара* заўсёды побач!"
need_help: "Патрэбна дапамога?"
tag_bug: "памылка"
tag_feature: "функцыя"
tag_question: "пытанне"
introduce_yourself: "Гэта ваша ручаіна. Скокайце ды пакажыце сябе."
new_here:
follow: "Сачы за %{link} і вітай новых карыстальнікаў diaspora*!"
learn_more: "паказаць больш"
title: "Прывітанне, Новы Ўдзельнік!(чалавек)"
title: "Прывітай новых удзельнікаў"
services:
content: "Вы можаце дадаць наступныя паслугі ў diaspora*:"
heading: "Далучыць паслугі"
welcome_to_diaspora: "Вітаем ў Diaspora, %{name}!"
no_contacts_message:
community_spotlight: "супольны прагляд"
community_spotlight: "Рэкамендуемыя удзельнікі"
or_spotlight: "ты можаш таксама падзяліцца %{link}"
try_adding_some_more_contacts: "ты можаш знайсці ці дадаць новыя катракты"
try_adding_some_more_contacts: "ты можаш знайсці ці %{invite_link} новыя кантакты."
you_should_add_some_more_contacts: "спачатку дадай пару кантактаў"
seed:
acquaintances: "знаёмыя"
......@@ -79,13 +89,31 @@ be:
failure: "не магчыма захаваць катыгорыю %{name}, занадта дліная назва."
success: "катыгорыя %{name} была паспяхова выдалена"
cancel: "адмяніць"
comments:
new_comment:
comment: "Каментарыі"
commenting: "Каменціраванне"
contacts:
index:
all_contacts: "усе кантакты"
all_contacts: "Усе кантакты"
my_contacts: "Мае кантакты"
start_a_conversation: "Пачаць гутарку"
title: "Кантакты"
conversations:
create:
fail: "Памылковае паведамленне"
sent: "Паведамленне даслана"
index:
inbox: "Уваходныя"
no_messages: "Няма паведамленняў"
new:
send: "даслаць"
sending: "адсылаю ..."
subject: "Тэма"
show:
delete: "Выдаліць гутарку"
reply: "Адачаць"
replying: "Адказваем..."
delete: "выдаліць"
email: "Email"
error_messages:
......@@ -93,16 +121,33 @@ be:
correct_the_following_errors_and_try_again: "спраўляй памылкі і паспрабуй зноў."
fill_me_out: "запоўні мяне"
find_people: "Пошук людзей ці #тэгаў"
help:
aspects:
title: "Аспекты"
what_is_an_aspect_q: "Што такое аспект?"
invitations:
create:
no_more: "Больш няма запрашенняў"
new:
invite_someone_to_join: "запрасі каго-небудзь да Diaspora!"
invite_someone_to_join: "Запрасі яшчэ кагосці да Diaspora*!"
language: "мова"
send_an_invitation: "Даслаць запрашэнне"
layouts:
application:
powered_by: "Заснавана на diaspora*"
whats_new: "Што новага?"
header:
code: "Код"
logout: "Выйсці"
profile: "Профіль"
settings: "налады"
limited: "абмежавана"
more: "больш"
no_results: "нічога не знайшлось"
no_results: "Нічога не знайшлось"
notifier:
click_here: "Націсні сюды"
hello: "Вітаем, %{name}!"
thanks: "Дзякуй,"
nsfw: "не дзеля ўсіх вачэй"
ok: "ok"
privacy: "Прыватнасць"
......@@ -110,4 +155,11 @@ be:
public: "адкрыта"
search: "Пошук"
settings: "Налады"
username: "Імя карыстальніка"
\ No newline at end of file
streams:
aspects:
title: "Мае аспекты"
aspects_stream: "Аспекты"
username: "Імя карыстальніка"
users:
edit:
auto_follow_aspect: "Дадаваць гэтых карыстальнікаў у аспект:"
\ No newline at end of file
......@@ -404,7 +404,6 @@ bg:
updated: "Профилът е обновен"
public: "Публична"
registrations:
closed: "Нови регистрации не са възможни на този pod на Diaspora."
create:
success: "Вие се присъединихте към Diaspora!"
invalid_invite: "Връзката за покана, която предоставихте, вече не е валидна!"
......
......@@ -505,7 +505,6 @@ br:
updated: "Patrom nevesaet"
public: "A-wel d'an holl"
registrations:
closed: "Stanket eo an enskrivadur war ar pod diaspora*-mañ"
create:
success: "Enskrivet oc'h war diaspora* !"
invalid_invite: "Al liamm pedadenn roet ganeoc'h n'eo ket mat ken"
......
......@@ -495,7 +495,6 @@ bs:
updated: "Profil ažuriran"
public: "Javno"
registrations:
closed: "Prijave su zatvorene na ovom Diaspora podu."
create:
success: "Pridružili ste se Diaspori!"
invalid_invite: "Veza pozivnice koji ste obezbijedili više nije važeća!"
......
......@@ -1017,7 +1017,6 @@ cs:
updated: "Profil aktualizován"
public: "Veřejné"
registrations:
closed: "Přihlášky nejsou na tomto podu diaspory* otevřeny."
create:
success: "Připojili jste se k diaspoře*!"
invalid_invite: "Odkaz na pozvánku, který jste poskytli, již neplatí!"
......
......@@ -593,9 +593,11 @@ da:
byline: "Det sociale netværk hvor det er dig der har kontrollen"
choose_your_audience: "Vælg dit publikum"
choose_your_audience_info: "Ved hjælp af Diasporas aspekter kan du vælge de mennesker du vil dele med. Du kan privat eller offentlig som du har lyst til. Del et sjovt foto med hele verden, eller en dyb hemmelighed kun med dine nærmeste. Du bestemmer."
diaspora_site_link: "Diaspora fødereret netværk"
headline: "Velkommen til %{pod_name}"
own_your_data: "Vær i besiddelse af dine egne data"
own_your_data_info: "Mange sociale netværk tjener penge dine data ved at analysere din opførsel og derefter bruge informationen til at sælge reklamer. Diaspora bruger ikke dine data til noget, men står til rådighed du kan kommunikere og dele med andre."
part_of_diaspora: "Del af %{diaspora_site_link}"
podmin:
byline: "Du er i gang med at ændre internettet. Lad os komme i gang."
configuration_info: "Åben %{database_path} og %{diaspora_path} i din favorit editor og gennemgå dem omhyggeligt. De er udførligt kommenteret."
......@@ -1011,7 +1013,11 @@ da:
updated: "Profil opdateret"
public: "Offentlig"
registrations:
closed: "Der er lukket for tilmeldinger denne Diaspora server."
closed:
another_pod: "en anden pod"
closed_pod: "Denne pod er for tiden lukket for tilgang. Du kan dog stadig blive en del af Diaspora-netværket ved at tilmelde dig %{wiki}. Fordi alle Diasporas pods er forbundet, vil du stadig have adgang til det samme indhold der."
find_pods: "Der er en liste over de pods du kan tilmelde dig %{poduptime}."
other_questions: "Har du nogen spørgsmål vedrørende valg af pod, se vores %{wiki}."
create:
success: "Du er nu en del af Diaspora!"
invalid_invite: "Det invitations-link som du anvendte er ikke længere gyldigt!"
......
......@@ -592,7 +592,6 @@ de-CH:
updated: "Pofil aktualisiert"
public: "Öffentlich"
registrations:
closed: "Uf dem pod isch d'Registrierig deaktiviert"
create:
success: "Du bisch ez volle Hahne bi diaspora* debii!"
invalid_invite: "De Iiladigslink wo'd benutzt hesch isch nüme gültig!"
......
This diff is collapsed.
......@@ -118,7 +118,7 @@ de:
are_you_sure_unlock_account: "Bist du dir sicher, dass du dieses Konto entsperren möchtest?"
close_account: "Konto schließen"
delete_admin: "%{name} wurde von der Liste der Administratoren entfernt."
delete_moderator: "%{name} wurde von der Liste der Moderatoren entfernt."
delete_moderator: "%{name} wurde von der Liste der Moderatoren entfernt."
delete_spotlight: "%{name} wurde vom Gemeinschafts-Schaukasten entfernt."
does_not_exist: "Benutzer existiert nicht!"
email_to: "per E-Mail einladen"
......@@ -208,7 +208,7 @@ de:
tos: "Die Nutzungsbedingungen der Anwendung ansehen"
are_you_sure: "Bist du dir sicher?"
are_you_sure_delete_account: "Möchtest du dein Konto wirklich schließen? Dieser Schritt kann nicht rückgängig gemacht werden!"
are_you_sure_ignore_user: "Bist du sicher das du den Nutzer ignorieren möchtest?"
are_you_sure_ignore_user: "Bist du sicher, dass du den Nutzer ignorieren möchtest?"
aspect_memberships:
destroy:
failure: "Die Person konnte nicht aus dem Aspekt entfernt werden."
......@@ -593,9 +593,11 @@ de:
byline: "Die soziale Onlinewelt, in der du deine Daten in der Hand hast."
choose_your_audience: "Wähle dein Publikum"
choose_your_audience_info: "diaspora*s Aspekte ermöglichen dir, nur mit den Menschen zu teilen, mit denen du möchtest. Du kannst so öffentlich oder privat sein, wie du willst. Teile ein witziges Foto mit der ganzen Welt oder ein tiefes Geheimnis nur mit deinen engsten Freunden. Es ist deine Entscheidung."
diaspora_site_link: "föderierten diaspora*-Netzwerks"
headline: "Willkommen auf %{pod_name}"
own_your_data: "Deine Daten, dein Eigentum"
own_your_data_info: "Viele Netzwerke nutzen deine Daten, um Geld zu verdienen, indem Sie deine Interaktionen auswerten und diese Informationen verwenden, um dir Werbung zu zeigen. diaspora* nutzt deine Daten zu keinem anderen Zweck, als es dir zu ermöglichen, dich mit anderen zu verbinden und mit ihnen zu teilen."
part_of_diaspora: "Teil des %{diaspora_site_link}"
podmin:
byline: "Du bist drauf und dran, das Internet zu ändern. Lass uns gleich alles einrichten, okay?"
configuration_info: "Öffne %{database_path} und %{diaspora_path} in deinem Lieblingstexteditor und sieh sie gründlich durch, sie sind ausführlich kommentiert."
......@@ -646,8 +648,8 @@ de:
public_feed: "Öffentlicher diaspora* Feed von %{name}"
source_package: "Quelltextpaket runterladen"
statistics_link: "Pod-Statistiken"
switch_to_standard_mode: "In den Standard-Modus wechseln"
switch_to_touch_optimized_mode: "Wechseln zum touch-optimierten Modus"
switch_to_standard_mode: "In den Standardmodus wechseln"
switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
whats_new: "Was gibt’s Neues?"
header:
code: "Code"
......@@ -1008,7 +1010,11 @@ de:
updated: "Profil aktualisiert"
public: "Öffentlich"
registrations:
closed: "Neuregistrierungen sind auf diesem diaspora*-Pod geschlossen."
closed:
another_pod: "einem anderen Pod"
closed_pod: "Dieser Pod ist derzeit für Neuanmeldungen geschlossen. Du kannst dem diaspora*-Netzwerk trotzdem beitreten, indem du dich auf %{wiki} registrierst. Da alle Pods miteinander verbunden sind, hast du von dort aus Zugriff auf dieselben Inhalte."
find_pods: "Es gibt eine Liste von Pods, auf denen du dich registrieren kannst, auf %{poduptime}."
other_questions: "Wenn du noch weitere Fragen dazu hast, wie du einen Pod auswählst, lies unser %{wiki}."
create:
success: "Du bist diaspora* beigetreten!"
invalid_invite: "Der von dir erstellte Einladungs-Link ist nicht mehr gültig!"
......@@ -1195,6 +1201,41 @@ de:
one: "1 Person ist mit %{tag} getaggt"
other: "%{count} Personen sind mit %{tag} getaggt"
zero: "Niemand ist mit %{tag} getaggt"
two_factor_auth:
activated:
change_button: "Deaktivieren"
change_label: "Die Zwei-Faktor-Authentifizierung deaktivieren durch Eingabe deines Passworts"
status: "Zwei-Faktor-Authentifizierung aktiviert"
confirm:
activate_button: "Bestätigen und aktivieren"
input_explanation: "Nach dem Scan oder der Eingabe des Schlüssels, gib den sechsstelligen Code ein, der dir angezeigt wird und bestätige die Einstellungen."
input_title: "Bestätige mit dem TOTP-Token"
manual_explanation: "Falls du den QR-Code nicht automatisch scannen kannst, kannst du den Schlüssel manuell in deiner App eingeben."
manual_explanation_cont: "Wir nutzen ein zeitgesteuertes Einmalpasswortverfahren (Time-based One-time Passwords, TOTP) mit sechsstelligen Tokens. Falls deine App dich nach einem Zeitintervall und Algorithmus fragt, gib 30 Sekunden und sha1 ein. <br /> Die Leerzeichen dienen nur der besseren Lesbarkeit, gib den Code ohne diese ein."
scan_explanation: "Bitte scanne den QR-Code mit einer TOTP-fähigen App, wie andOTP (Android), FreeOTP (iOS), oder SailOTP (SailfishOS)."
scan_title: "Scanne den QR-Code"
status: "Die Zwei-Faktor-Authentifizierung wurde noch nicht vollständig aktiviert. Du musst die Aktivierung mit einem TOTP-Token bestätigen."
title: "Aktivierung bestätigen"
deactivated:
change_button: "Aktivieren"
change_label: "Zwei-Faktor-Authentifizierung aktivieren"
status: "Zwei-Faktor-Authentifizierung nicht aktiviert"
explanation: "Die Zwei-Faktor-Authentifizierung ist eine wirkungsvolle Methode, um sicherzustellen, dass du die einzige Person bist, die sich in deinem Konto anmelden kann. Bei der Anmeldung gibst du einen 6-stelligen Code zusammen mit deinem Passwort ein, um deine Identität zu bestätigen. Achtung: Wenn du dein Telefon verlierst und die bei Aktivierung dieser Funktion erstellten Wiederherstellungscodes verloren gehen, wird der Zugriff auf dein diaspora*-Konto für immer gesperrt."
flash: