masq2 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +83 -0
  4. data/CODE_OF_CONDUCT.md +135 -0
  5. data/CONTRIBUTING.md +151 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +426 -0
  8. data/SECURITY.md +23 -0
  9. data/app/assets/images/masq/favicon.ico +0 -0
  10. data/app/assets/images/masq/openid_symbol.png +0 -0
  11. data/app/assets/images/masq/seatbelt_icon.png +0 -0
  12. data/app/assets/images/masq/seatbelt_icon_gray.png +0 -0
  13. data/app/assets/images/masq/seatbelt_icon_high.png +0 -0
  14. data/app/assets/stylesheets/masq/application.css.erb +61 -0
  15. data/app/controllers/masq/accounts_controller.rb +132 -0
  16. data/app/controllers/masq/base_controller.rb +78 -0
  17. data/app/controllers/masq/consumer_controller.rb +144 -0
  18. data/app/controllers/masq/info_controller.rb +23 -0
  19. data/app/controllers/masq/passwords_controller.rb +42 -0
  20. data/app/controllers/masq/personas_controller.rb +75 -0
  21. data/app/controllers/masq/server_controller.rb +247 -0
  22. data/app/controllers/masq/sessions_controller.rb +58 -0
  23. data/app/controllers/masq/sites_controller.rb +60 -0
  24. data/app/controllers/masq/yubikey_associations_controller.rb +25 -0
  25. data/app/helpers/masq/application_helper.rb +57 -0
  26. data/app/helpers/masq/personas_helper.rb +15 -0
  27. data/app/helpers/masq/server_helper.rb +15 -0
  28. data/app/mailers/masq/account_mailer.rb +17 -0
  29. data/app/models/masq/account.rb +245 -0
  30. data/app/models/masq/open_id_request.rb +42 -0
  31. data/app/models/masq/persona.rb +61 -0
  32. data/app/models/masq/release_policy.rb +11 -0
  33. data/app/models/masq/site.rb +68 -0
  34. data/app/views/layouts/masq/base.html.erb +70 -0
  35. data/app/views/layouts/masq/consumer.html.erb +30 -0
  36. data/app/views/masq/account_mailer/forgot_password.html.erb +3 -0
  37. data/app/views/masq/account_mailer/forgot_password.text.erb +3 -0
  38. data/app/views/masq/account_mailer/signup_notification.html.erb +5 -0
  39. data/app/views/masq/account_mailer/signup_notification.text.erb +5 -0
  40. data/app/views/masq/accounts/_hcard.html.erb +29 -0
  41. data/app/views/masq/accounts/edit.html.erb +100 -0
  42. data/app/views/masq/accounts/new.html.erb +27 -0
  43. data/app/views/masq/accounts/show.html.erb +4 -0
  44. data/app/views/masq/accounts/show.xrds.builder +40 -0
  45. data/app/views/masq/consumer/index.html.erb +31 -0
  46. data/app/views/masq/consumer/start.html.erb +2 -0
  47. data/app/views/masq/info/help.html.erb +8 -0
  48. data/app/views/masq/info/index.html.erb +5 -0
  49. data/app/views/masq/info/safe_login.html.erb +24 -0
  50. data/app/views/masq/passwords/edit.html.erb +13 -0
  51. data/app/views/masq/passwords/new.html.erb +11 -0
  52. data/app/views/masq/personas/_form.html.erb +159 -0
  53. data/app/views/masq/personas/edit.html.erb +9 -0
  54. data/app/views/masq/personas/index.html.erb +17 -0
  55. data/app/views/masq/personas/new.html.erb +9 -0
  56. data/app/views/masq/server/decide.html.erb +146 -0
  57. data/app/views/masq/server/index.xrds.builder +19 -0
  58. data/app/views/masq/server/seatbelt_config.xml.builder +24 -0
  59. data/app/views/masq/server/seatbelt_login_state.xml.builder +4 -0
  60. data/app/views/masq/sessions/new.html.erb +27 -0
  61. data/app/views/masq/shared/_error_messages.html.erb +12 -0
  62. data/app/views/masq/sites/edit.html.erb +42 -0
  63. data/app/views/masq/sites/index.html.erb +20 -0
  64. data/config/initializers/configuration.rb +5 -0
  65. data/config/initializers/mime_types.rb +1 -0
  66. data/config/initializers/requires.rb +6 -0
  67. data/config/locales/de.yml +281 -0
  68. data/config/locales/en.yml +271 -0
  69. data/config/locales/es.yml +254 -0
  70. data/config/locales/nl.yml +258 -0
  71. data/config/locales/rails.de.yml +225 -0
  72. data/config/locales/ru.yml +272 -0
  73. data/config/masq.example.yml +132 -0
  74. data/config/routes.rb +41 -0
  75. data/db/migrate/20120312120000_masq_schema.rb +152 -0
  76. data/db/migrate/20130626220915_remame_last_authenticated_with_yubikey_on_masq_accounts.rb +11 -0
  77. data/db/migrate/20130704205532_add_first_and_lastname_columns_to_personas.rb +11 -0
  78. data/db/migrate/20130807060329_change_open_id_associations_server_url_column_type.rb +22 -0
  79. data/lib/masq/active_record_openid_store/association.rb +16 -0
  80. data/lib/masq/active_record_openid_store/nonce.rb +9 -0
  81. data/lib/masq/active_record_openid_store/openid_ar_store.rb +58 -0
  82. data/lib/masq/authenticated_system.rb +136 -0
  83. data/lib/masq/engine.rb +12 -0
  84. data/lib/masq/openid_server_system.rb +110 -0
  85. data/lib/masq/signup.rb +53 -0
  86. data/lib/masq/version.rb +5 -0
  87. data/lib/masq.rb +50 -0
  88. data/lib/masq2.rb +1 -0
  89. data/lib/tasks/masq_tasks.rake +58 -0
  90. data.tar.gz.sig +2 -0
  91. metadata +377 -0
  92. metadata.gz.sig +0 -0
@@ -0,0 +1,146 @@
1
+ <h2><%= t(:identity_request_from_host, :host => h(extract_host(@site.url))).html_safe %></h2>
2
+
3
+ <% if ax_store_request %>
4
+ <p><%= t(:trust_root_sends_some_personal_data, :trust_root => "<strong>#{h checkid_request.trust_root}</strong>").html_safe %><br />
5
+ <% if @site.persona %>
6
+ <%= t(:select_information_to_accept) %></p>
7
+ <p class="note">
8
+ <%= t( :attributes_will_be_added_to_persona,
9
+ :persona => "<strong>#{h @site.persona.title}</strong>",
10
+ :choose_link => link_to(
11
+ t(:choose_other_persona),
12
+ '#',
13
+ :onclick => 'Element.toggle("persona_select"); return false;'
14
+ )
15
+ ).html_safe %>
16
+ </p>
17
+ <% else %>
18
+ <p>
19
+ <%= t( :identity_request_missing_persona,
20
+ :create_link => link_to(
21
+ t(:create_persona_link),
22
+ new_account_persona_path(:return => decide_path)
23
+ )
24
+ ).html_safe %>
25
+ </p>
26
+ <% end %>
27
+
28
+ <% elsif sreg_request || ax_fetch_request %>
29
+ <p><%= t(:trust_root_requests_some_personal_data, :trust_root => "<strong>#{h checkid_request.trust_root}</strong>").html_safe %><br />
30
+ <% if @site.persona %>
31
+ <%= t(:select_information_to_submit) %></p>
32
+ <p class="note"><%= t(:attributes_are_shown_from_persona, :persona => "<strong>#{h @site.persona.title}</strong>").html_safe %><br />
33
+ <%=
34
+ t( :to_submit_other_values_you_can_edit_or_choose,
35
+ :edit_link => link_to(
36
+ t(:edit_persona_link),
37
+ edit_account_persona_path(
38
+ @site.persona,
39
+ :return => decide_path(:persona_id => @site.persona.id)
40
+ )
41
+ ),
42
+ :choose_link => link_to(
43
+ t(:choose_other_persona),
44
+ '#',
45
+ :onclick => 'Element.toggle("persona_select"); return false;'
46
+ )
47
+ ).html_safe
48
+ %>
49
+ </p>
50
+ <% else %>
51
+ <p><%= t(:identity_request_missing_persona, :create_link => link_to(t(:create_persona_link), new_account_persona_path(:return => decide_path))).html_safe %></p>
52
+ <% end %>
53
+ <% else %>
54
+ <p><%= t(:trust_root_requires_authentication, :trust_root => "<strong>#{h checkid_request.trust_root}</strong>").html_safe %></p>
55
+ <% end %>
56
+
57
+ <%= form_tag decide_path, :method => :get, :id => 'persona_select', :style => 'display:none;' do %>
58
+
59
+ <h3><%= t(:choose_persona_title) %></h3>
60
+ <% unless current_account.personas.empty? %>
61
+ <div class="row">
62
+ <select id="persona_id" name="persona_id">
63
+ <%= options_from_collection_for_select(current_account.personas, :id, :title, @site.persona.id) %>
64
+ </select>
65
+ </div>
66
+ <div>
67
+ <%= submit_tag t(:choose_persona_submit) %> <%= t(:or) %>
68
+ <%= link_to t(:create_new_persona_link), new_account_persona_path(:return => decide_path) %>
69
+ </div>
70
+ <% end %>
71
+
72
+ <% end if sreg_request || ax_fetch_request || ax_store_request %>
73
+
74
+ <%= form_for @site, :url => complete_path do |f| %>
75
+
76
+ <% if sreg_request || ax_fetch_request %>
77
+ <table cellspacing="0">
78
+ <tr>
79
+ <th colspan="2"><h4><%= t(:requested_information_title) %></h4></th>
80
+ <th class="disclosure"><%= t(:disclosure) %></th>
81
+ </tr>
82
+ <% (sreg_request.required + sreg_request.optional).each do |property| %>
83
+ <tr>
84
+ <td><%= label_tag "site_sreg_#{property}", property_label_text(property) %></td>
85
+ <td><%= label_tag "site_sreg_#{property}", @site.persona.property(property) %></td>
86
+ <td>
87
+ <%= check_box_tag "site[sreg][#{property}]", @site.persona.property(property), sreg_request.required.include?(property), :id => "site_sreg_#{property}", :class => sreg_request_for_field(property) %>
88
+ <%= label_tag "site_sreg_#{property}", sreg_request_for_field(property), :class => 'note' %>
89
+ </td>
90
+ </tr>
91
+ <% end if sreg_request %>
92
+ <% ax_fetch_request.attributes.each do |property| %>
93
+ <% supported = !Masq::Persona.attribute_name_for_type_uri(property.type_uri).nil? %>
94
+ <tr>
95
+ <td><%= label_tag "site_ax_fetch_#{property.ns_alias}", property_label_text(property.ns_alias) %></td>
96
+ <td><%= label_tag "site_ax_fetch_#{property.ns_alias}", supported ? @site.persona.property(property.type_uri) : t(:not_supported), :class => supported ? nil : 'note' %></td>
97
+ <td>
98
+ <%= check_box_tag "site[ax_fetch][#{property.ns_alias}][value]", @site.persona.property(property.type_uri), property.required, :id => "site_ax_fetch_#{property.ns_alias}", :class => ax_request_for_field(property), :disabled => !supported %>
99
+ <%= hidden_field_tag "site[ax_fetch][#{property.ns_alias}][type]", property.type_uri, :id => "site_ax_fetch_type_#{property.ns_alias}" %>
100
+ <%= label_tag "site_ax_fetch_#{property.ns_alias}", ax_request_for_field(property), :class => 'note' %>
101
+ </td>
102
+ </tr>
103
+ <% end if ax_fetch_request %>
104
+ </table>
105
+ <% end %>
106
+
107
+ <% if ax_store_request %>
108
+ <table cellspacing="0">
109
+ <tr>
110
+ <th colspan="2"><h4><%= t(:sent_information_title) %></h4></th>
111
+ <th class="current"><%= t(:current) %></th>
112
+ <th class="accept"><%= t(:accept) %></th>
113
+ </tr>
114
+ <% ax_store_request.data.each do |type_uri, value| %>
115
+ <% if attribute = Masq::Persona.attribute_name_for_type_uri(type_uri) %>
116
+ <tr>
117
+ <td><%= label_tag "site_ax_store_#{attribute}", property_label_text_for_type_uri(type_uri) %></td>
118
+ <td><%= label_tag "site_ax_store_#{attribute}", value %></td>
119
+ <td><%= label_tag "site_ax_store_#{attribute}", @site.persona.property(type_uri) %></td>
120
+ <td>
121
+ <%= check_box_tag "site[ax_store][#{attribute}][value]", value, false, :id => "site_ax_store_#{attribute}" %>
122
+ <%= hidden_field_tag "site[ax_store][#{attribute}][type]", type_uri, :id => "site_ax_store_type_#{attribute}" %>
123
+ </td>
124
+ </tr>
125
+ <% end %>
126
+ <% end %>
127
+ </table>
128
+ <% end %>
129
+
130
+ <div>
131
+ <% if sreg_request || ax_fetch_request || ax_store_request %>
132
+ <%= f.hidden_field :persona_id %>
133
+ <%= f.hidden_field :url %>
134
+ <% end %>
135
+
136
+ <% if sreg_request || ax_fetch_request %>
137
+ <%= submit_tag t(:trust_site_only_this_time), :name => 'temporary', :class => 'space' %>
138
+ <%= submit_tag t(:always_trust_site), :name => 'always', :class => 'space' %>
139
+ <% else %>
140
+ <%= submit_tag t(:approve_request), :name => 'temporary', :class => 'space' %>
141
+ <% end %>
142
+ <%= submit_tag t(:cancel_request), :name => 'cancel' %>
143
+ </div>
144
+
145
+ <% end unless current_account.personas.empty? %>
146
+
@@ -0,0 +1,19 @@
1
+ xml.instruct!
2
+ xml.xrds(
3
+ :XRDS,
4
+ "xmlns:openid" => OpenID::OPENID_1_0_NS,
5
+ "xmlns:xrds" => "xri://$xrds",
6
+ "xmlns" => "xri://$xrd*($v*2.0)",
7
+ ) do
8
+ xml.XRD do
9
+ xml.Service(priority: 1) do
10
+ xml.Type(OpenID::OPENID_IDP_2_0_TYPE)
11
+ xml.Type(OpenID::SReg::NS_URI_1_1)
12
+ xml.Type(OpenID::SReg::NS_URI_1_0)
13
+ xml.Type(OpenID::AX::AXMessage::NS_URI)
14
+ xml.Type(OpenID::PAPE::AUTH_MULTI_FACTOR) if Masq::Engine.config.masq["use_ssl"]
15
+ xml.Type(OpenID::PAPE::AUTH_PHISHING_RESISTANT) if Masq::Engine.config.masq["use_ssl"]
16
+ xml.URI(endpoint_url)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ xml.instruct!
2
+ xml.opConfig(version: "1.0", serverIdentifier: endpoint_url) do
3
+ xml.configRevision("2008090801")
4
+ xml.title(Masq::Engine.config.masq["name"])
5
+ xml.serverIdentifier(endpoint_url)
6
+ xml.opDomain(Masq::Engine.config.masq["host"])
7
+ xml.opCertCommonName(Masq::Engine.config.masq["ssl_certificate_common_name"]) if Masq::Engine.config.masq["use_ssl"]
8
+ xml.opCertSHA1Hash(Masq::Engine.config.masq["ssl_certificate_sha1"]) if Masq::Engine.config.masq["use_ssl"]
9
+ xml.loginUrl(login_url(protocol: scheme))
10
+ xml.welcomeUrl(root_url(protocol: scheme))
11
+ xml.loginStateUrl(seatbelt_state_url(protocol: scheme, format: :xml))
12
+ xml.settingsIconUrl("#{root_url(protocol: scheme)}images/seatbelt_icon.png")
13
+ xml.toolbarGrayIconUrl("#{root_url(protocol: scheme)}images/seatbelt_icon_gray.png")
14
+ xml.toolbarHighIconUrl("#{root_url(protocol: scheme)}images/seatbelt_icon_high.png")
15
+ xml.toolbarGrayBackground("#EBEBEB")
16
+ xml.toolbarGrayBorder("#666666")
17
+ xml.toolbarGrayText("#666666")
18
+ xml.toolbarLoginBackground("#EBEBEB")
19
+ xml.toolbarLoginBorder("#2B802B")
20
+ xml.toolbarLoginText("#2B802B")
21
+ xml.toolbarHighBackground("#EBEBEB")
22
+ xml.toolbarHighBorder("#F50012")
23
+ xml.toolbarHighText("#F50012")
24
+ end
@@ -0,0 +1,4 @@
1
+ xml.instruct!
2
+ xml.personaConfig(serverIdentifier: endpoint_url, version: "1.0") do
3
+ xml.persona(identifier(current_account), displayName: current_account.login) if logged_in?
4
+ end
@@ -0,0 +1,27 @@
1
+ <h2><%=t :login_title %></h2>
2
+
3
+ <%= form_tag session_path do %>
4
+ <div class="row">
5
+ <% if checkid_request && !checkid_request.id_select %>
6
+ <strong><%=t :your_openid %>:</strong>
7
+ <%= checkid_request.identity %>
8
+ <span class="note"><%= link_to t(:cancel_this_request), cancel_path %></span>
9
+ <%= hidden_field_tag :login, extract_login_from_identifier(checkid_request.identity) %>
10
+ <% else %>
11
+ <%= label_tag :login, email_as_login? ? t(:email) : t(:login) %>
12
+ <%= text_field_tag :login %>
13
+ <% end %>
14
+ </div>
15
+ <div class="row">
16
+ <%= label_tag :password, t(:password) %>
17
+ <%= password_field_tag :password %>
18
+ </div>
19
+ <div class="row">
20
+ <%= check_box_tag :remember_me %>
21
+ <%= label_tag :remember_me, t(:remember_me), :class => 'check' %>
22
+ </div>
23
+ <div>
24
+ <%= submit_tag t(:login_submit) %>
25
+ <span class="note"><%= link_to t(:i_forgot_my_password), forgot_password_path %></span>
26
+ </div>
27
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <% errors = objects.map { |object| object.errors.full_messages.map { |msg| msg } } %>
2
+ <% if errors.any? %>
3
+ <div id="error_explanation">
4
+ <ul>
5
+ <% errors.each do |messages| %>
6
+ <% messages.each do |msg| %>
7
+ <li><%= msg %></li>
8
+ <% end %>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
@@ -0,0 +1,42 @@
1
+ <h2><%=t :your_release_policy_for_site, :site => h(extract_host(site.url)) %></h2>
2
+
3
+ <%= error_messages_for site %>
4
+
5
+ <%= form_for site, :url => account_site_path(site), :method => :put do |f| %>
6
+ <div class="row space">
7
+ <%= f.label :persona_id, t(:persona_label) %>
8
+ <%= f.select :persona_id, current_account.personas.collect { |p| [ p.title, p.id ] } %>
9
+ <%= submit_tag t(:choose_persona_submit) %>
10
+ </div>
11
+
12
+ <h3>
13
+ <%=h site.persona.title %>
14
+ <span class="note">
15
+ <%= link_to t(:edit_persona_link), edit_account_persona_path(site.persona, :return => params[:persona_id] ? url_for(:persona_id => params[:persona_id]) : nil) %> <%=t :or %>
16
+ <%= link_to t(:create_new_persona_link), new_account_persona_path(:return => request.url) %>
17
+ </span>
18
+ </h3>
19
+
20
+ <table cellspacing="0">
21
+ <tr>
22
+ <th><%=t :property %></th>
23
+ <th><%=t :value %></th>
24
+ <th><%=t :disclosure %></th>
25
+ </tr>
26
+ <% site.release_policies.each do |release_policy| %>
27
+ <% property, type, value = release_policy.property, release_policy.type_identifier, site.persona.property(release_policy.type_identifier) %>
28
+ <tr>
29
+ <td><%= label_tag "site_properties_#{property}", property_label_text(property) %></td>
30
+ <td><%= label_tag "site_properties_#{property}", value unless value.blank? %></td>
31
+ <td>
32
+ <%= check_box_tag "site[properties][#{property}][value]", value, true, :id => "site_properties_#{property}" %>
33
+ <%= hidden_field_tag "site[properties][#{property}][type]", type, :id => "site_properties_type_#{property}" %>
34
+ </td>
35
+ </tr>
36
+ <% end %>
37
+ </table>
38
+
39
+ <div>
40
+ <%= submit_tag t(:update_release_policy_submit) %>
41
+ </div>
42
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <h2><%=t :my_trusted_sites %></h2>
2
+
3
+ <p><%=t :identity_request_answered_without_interaction %><br />
4
+ <%=t :alter_release_policies_here %></p>
5
+
6
+ <% unless @sites.empty? %>
7
+ <ul>
8
+ <% @sites.each do |site| %>
9
+ <li>
10
+ <h3><%=h extract_host(site.url) %> <span class="note">(<%=h site.persona.title %>)</span></h3>
11
+ <div class="options">
12
+ <%= link_to t(:edit_link), edit_account_site_path(site) %>
13
+ <%= link_to t(:delete_link), account_site_path(site), :data => { :confirm => t(:really_want_to_delete_trust_for_site, :site => h(extract_host(site.url))) }, :method => :delete %>
14
+ </div>
15
+ </li>
16
+ <% end %>
17
+ </ul>
18
+ <% else %>
19
+ <p><%=t :no_entries_yet %></p>
20
+ <% end %>
@@ -0,0 +1,5 @@
1
+ Masq::Engine.configure do
2
+ config_file_path = Rails.root.join("config", "masq.yml")
3
+ parsed_erb = ERB.new(config_file_path.read).result
4
+ config.masq = YAML.safe_load(parsed_erb, aliases: true)[Rails.env]
5
+ end
@@ -0,0 +1 @@
1
+ Mime::Type.register("application/xrds+xml", :xrds)
@@ -0,0 +1,6 @@
1
+ require "openid"
2
+ require "openid/consumer/discovery"
3
+ require "openid/extensions/sreg"
4
+ require "openid/extensions/pape"
5
+ require "openid/extensions/ax"
6
+ require "yubikey" if Masq::Engine.config.masq["can_use_yubikey"]
@@ -0,0 +1,281 @@
1
+ de:
2
+ # account controller
3
+ thanks_for_signing_up_activation_link: Danke für Ihre Anmeldung! Wir haben Ihnen eine E-Mail mit einem Aktivierungslink geschickt.
4
+ thanks_for_signing_up: Danke für Ihre Anmeldung!
5
+ activation_link_resent: Wir haben Ihnen eine E-Mail mit einem Aktivierungslink geschickt.
6
+ profile_updated: Ihr Account wurde aktualisiert.
7
+ account_disabled: Ihr Account wurde deaktiviert.
8
+ entered_password_is_wrong: Das eingegebene Passwort ist falsch.
9
+ account_activated_login_now: Ihr Account wurde aktiviert - Sie können sich jetzt einloggen.
10
+ couldnt_find_account_with_code_create_new_one: Wir konnten keinen Account mit dem angegebenen Aktivierungscode finden. Bitte erstellen Sie einen neuen Account.
11
+ account_already_activated_please_login: Ihr Account wurde bereits aktiviert - bitte loggen Sie sich ein.
12
+ account_already_activated_or_missing: Der Account wurde bereits aktiviert oder existiert nicht.
13
+ password_has_been_changed: Ihr Passwort wurde geändert.
14
+ sorry_password_couldnt_be_changed: "Entschuldigung, Ihr Passwort konnte nicht geändert werden."
15
+ confirmation_of_new_password_invalid: Die Bestätigung des neuen Passworts war inkorrekt.
16
+ old_password_incorrect: Ihr altes Passwort ist falsch.
17
+ # account views
18
+ public_persona: Öffentliche Rolle
19
+ forgot_password_create_new_one: Sie haben Ihr Passwort vergessen? Hier können Sie ein neues setzen
20
+ account_created_but_not_activated_yet: Ihr OpenID-Account wurde angelegt. Er ist jedoch noch nicht aktiviert.
21
+ please_activate_it_by_clicking_the_following_link: "Bitte aktivieren Sie den Account, indem Sie auf den Link klicken"
22
+ my_profile: Mein Profil
23
+ login: Login
24
+ password: Passwort
25
+ my_password: Mein Passwort
26
+ old_password: Altes Passwort
27
+ new_password_minimum_6_characters: Neues Passwort <span class="note">(mindestens 6 Zeichen)</span>
28
+ password_confirmation: Passwort bestätigen
29
+ submit_update: Aktualisieren
30
+ my_yubikey: Mein Yubikey
31
+ your_account_is_associated_with_the_yubico_identity: Ihr Account ist mit der verbunden mit der Yubikey-Identität
32
+ yubikey_how_to_use: "Sie können den Yubikey benutzen, um sich zusätzlich zu Ihrem Passwort einzuloggen. Geben Sie einfach
33
+ Ihr Passwort und Ihr Yubico OTP (ohne Leerzeichen oder sonstige Trennzeichen) auf der Login-Seite ein."
34
+ remove_association: Assoziation entfernen.
35
+ your_yubikey_a_one_time_password: Ihr Yubikey <span class="note">(ein Yubico Einmalpasswort)</span>
36
+ your_yubikey_is_optional_for_login: Ihr Yubikey ist beim Login zur Zeit optional.
37
+ make_my_yubikey_optional: Meinen Yubikey beim Einloggen optional machen
38
+ your_yubikey_is_mandatory_for_login: Ihr Yubikey ist beim Login zur Zeit erforderlich.
39
+ make_my_yubikey_mandatory: Meinen Yubikey bei jedem Einloggen erfordern
40
+ associate_account_with_yubikey: Meinen Account mit diesem Yubikey verbinden
41
+ disable_my_account: Meinen Account deaktivieren
42
+ wont_be_possible_to_reclaim_identifier: Bitte beachten Sie, dass Sie Ihre aktuelle OpenID-Kennung nicht erneut verwenden können
43
+ confirm_by_entering_password: Bestätigen Sie bitte durch Eingabe Ihres Passworts
44
+ delete_my_account_and_data: Meinen Account und alle Daten löschen
45
+
46
+ signup_title: Anmelden
47
+ signup: Anmelden
48
+ resend_activation_email: Aktivierungsmail erneut zuschicken
49
+
50
+ # account mailer
51
+ please_activate_your_account: Bitte aktivieren Sie Ihren Account
52
+ your_request_for_a_new_password: Ihre Anfrage nach einem neuen Passwort
53
+ activation_link: Aktivierungslink
54
+
55
+ # consumer controller
56
+ immediate_request_failed_setup_needed: Immediate Request fehlgeschlagen - Einstellungen nötig
57
+ openid_transaction_cancelled: OpenID-Transaktion abgebrochen.
58
+ verification_of_identifier_failed: "Überprüfung von %{identifier} fehlgeschlagen: %{message}"
59
+ verification_failed_message: "Überprüfung fehlgeschlagen: %{message}"
60
+ verification_of_identifier_succeeded: Überprüfung von %{identifier} erfolgreich.
61
+ simple_registration_data_requested: Simple Registration Data wurde angefordert
62
+ but_none_was_returned: aber nichts wurde zurück geliefert.
63
+ but_got_no_response: aber es gab keine Antwort.
64
+ but_an_error_occured: "aber es trat ein Fehler auf:\n%{error_message}"
65
+ and_saved_at_the_identity_provider: und auf dem Server gespeichert.
66
+ the_following_data_were_sent: "Die folgenden Daten wurden gesendet:"
67
+ attribute_exchange_data_requested: Attribute Exchange-Daten wurden angefordert
68
+ attribute_exchange_store_requested: Attribute Exchange-Daten wurden gesendet
69
+ authentication_policies_requested: Authentifizierungsregeln wurden angefordert
70
+ and_server_reported_the_following: "und der Server antwortete Folgendes:"
71
+ but_the_server_did_not_report_one: aber der Server meldete keine.
72
+ authentication_time: Authentifizierungszeit
73
+
74
+ # consumer views
75
+ identifier: Kennung
76
+ verify: Überprüfen
77
+ use_immediate_mode: Immediate Modus benutzen
78
+ request_registration_data: SReg-Daten anfordern
79
+ request_attribute_exchange_data: AX-Daten anfordern (Fetch Modus)
80
+ store_attribute_exchange_data: AX-Daten senden (Store Modus)
81
+ request_pape: PAPE-Anfrage (Anti-Phishing Modus) senden
82
+ force_post: Die Transaktion mit HTTP POST durchführen
83
+
84
+ # info
85
+ questions_answers: Fragen? Antworten!
86
+ here_we_cover_openid_topics: Hier werden einige grundlegende OpenID-Themen behandelt.
87
+ openid_delegation: OpenID-Delegation
88
+ delegation_explanation: "Mit Hilfe von Delegation können Sie Ihre eigene Website oder Ihren Blog als OpenID-Kennung verwenden. Anfragen können
89
+ an diesen Server weiter geleitet werden, indem Sie folgendes HTML-Fragment in den <code>&lt;head&gt;</code>
90
+ Ihrer Website einbauen:"
91
+ get_your_openid: Holen Sie sich eine OpenID
92
+ openid_intro: "<p>OpenID ist ein Dienst für eine gemeinsame Identität, durch den Sie sich mit einer einzigen
93
+ digitalen Identität an unterschiedlichen Webseiten anmelden können. Dadurch benötigen Sie nicht mehr für jede Website
94
+ einen eigenen Benutzernamen und Passwort.</p>
95
+ <p>OpenID ist dezentral, kostenlos und ein offener Standard. Es erlaubt Ihnen zu entscheiden, wie viele und welche
96
+ persönlichen Angaben Sie anderen Webseiten übermitteln.</p>"
97
+ openid_intro_link: "<p>Legen Sie los und %{signup_link}.</p>"
98
+ signup_for_an_openid: melden Sie sich für eine OpenID an
99
+ login_to_proceed: Bitte loggen Sie sich ein, um fort zu fahren
100
+ host_requests_identification_you_need_to_login: "%{host} möchte Ihre Identität ermitteln. Dafür müssen Sie sich einloggen."
101
+ login_intro: "Um sich einzuloggen, gehen Sie bitte zu <strong>%{login_url}</strong>. Die Seite, die Sie gerade sehen,
102
+ ist <strong>als Schutz vor Phishing-Attacken und Identitätsklau</strong> gedacht
103
+ und sollte keine Links enthalten.<br />Falls hier Links auftauchen, geben Sie uns bitte Bescheid, wer Sie auf diese Seite
104
+ geleitet hat."
105
+
106
+ # nav
107
+ nav_identity: Identität
108
+ nav_profile: Account
109
+ nav_personas: Rollen
110
+ nav_trusted_sites: Websites
111
+ logout: ausloggen
112
+ current_verification_request: aktuelle Prüfanfrage
113
+ login_link: Einloggen
114
+ signup_link: Anmelden
115
+ help: Hilfe
116
+ get_help: Hilfe erhalten
117
+ openid_consumer_testsuite_title: OpenID Consumer Testsuite
118
+ relying_party_title: Vertrauende Gegenstelle
119
+
120
+ # passwords controller
121
+ password_reset_link_has_been_sent: Ein Link zum Zurücksetzen des Passwortes wurde an Ihre E-Mail-Adresse geschickt.
122
+ could_not_find_user_with_email_address: Konnte keinen User mit dieser E-Mail-Adresse finden.
123
+ password_reset: Das Passwort wurde zurück gesetzt.
124
+ password_mismatch: Das Passwort stimmt nicht überein.
125
+ password_cannot_be_blank: Das Passwort kann nicht leer sein.
126
+ reset_code_invalid_try_again: Entschuldigung, der Code zum Zurücksetzen des Passworts ist falsch. Bitte prüfen Sie den Code und versuchen Sie es noch einmal.
127
+
128
+ # passwords views
129
+ reset_password: Passwort zurück setzen
130
+ forgot_password_title: Passwort vergessen
131
+ please_enter_email: Bitte geben Sie Ihre E-Mail-Adresse ein
132
+ submit_send: Senden
133
+
134
+ # personas controller
135
+ persona_successfully_created: Die Rolle wurde erfolgreich angelegt.
136
+ persona_updated: Die Rolle wurde aktualisiert.
137
+ persona_cannot_be_deleted: Diese Rolle kann nicht gelöscht werden.
138
+
139
+ # personas views
140
+ edit_your_persona: Bearbeiten Sie Ihre Rolle “%{title}”
141
+ personal_information: Persönliche Angaben
142
+ professional_information: Berufliche Angaben
143
+ phone: Telefon
144
+ instant_messaging: Instant Messaging
145
+ other_information: Weitere Angaben
146
+
147
+ nickname: Nickname
148
+ email: E-Mail
149
+ address: Adresse
150
+ postcode: Postleitzahl
151
+ city: Stadt
152
+ state: Bundesland
153
+ country: Land
154
+ language: Sprache
155
+ timezone: Zeitzone
156
+ gender: Geschlecht
157
+ company_name: Firma
158
+ job_title: Job-Bezeichnung
159
+ phone_home: Tel. privat
160
+ phone_mobile: Tel. mobil
161
+ phone_fax: Fax
162
+ phone_work: Tel. geschäftlich
163
+ biography: Biographie
164
+ title: Titel
165
+ fullname: Vor- und Nachname
166
+ birth_date: Geburtsdatum
167
+ address_business: Adresse
168
+ address_additional: Weitere
169
+ address_additional_business: Weitere
170
+ postcode_business: Postleitzahl
171
+ city_business: Stadt
172
+ state_business: Bundesland
173
+ country_business: Land
174
+ im_aim: AIM
175
+ im_icq: ICQ
176
+ im_msn: MSN
177
+ im_yahoo: Yahoo
178
+ im_jabber: Jabber
179
+ im_skype: Skype
180
+ image_url: Bild-URL
181
+ website_url: URL der Website
182
+ blog_url: Blog-URL
183
+ dob: Geburtsdatum
184
+ date_of_birth: Geburtsdatum
185
+
186
+ my_personas_title: Meine Rollen
187
+ personas_intro: "Sie können in Ihrem Account mehrere verschiedene Rollen nutzen. Zum Beispiel können Sie eine
188
+ Rolle privat nutzen und eine fürs Geschäftliche. Wenn eine Gegenstelle Informationen anfordert können Sie
189
+ auswählen, aus welcher Rolle Ihre Daten übernommen werden."
190
+ edit: bearbeiten
191
+ delete: löschen
192
+ really_want_to_delete_persona: Wollen Sie die Rolle ”%{title}” wirklich löschen?
193
+ create_a_new_persona: neue Rolle anlegen
194
+ create_a_new_persona_title: Neue Rolle anlegen
195
+
196
+ # sessions controller
197
+ you_are_logged_in: Sie sind jetzt eingeloggt.
198
+ account_not_yet_activated: Ihr Account wurde noch nicht aktiviert.
199
+ login_incorrect: Benutzer nicht vorhanden
200
+ password_incorrect: Falsches Passwort
201
+ you_are_now_logged_out: Sie sind jetzt ausgeloggt.
202
+ account_deactivated: Ihr Account ist deaktiviert.
203
+
204
+ # sessions views
205
+ login_title: Einloggen
206
+ your_openid: Ihre OpenID
207
+ cancel_this_request: diese Anfrage abbrechen
208
+ remember_me: Merken
209
+ login_submit: Einloggen
210
+ i_forgot_my_password: Ich habe mein Passwort vergessen
211
+
212
+ # server controller
213
+ this_is_openid_not_a_human_resource: Dies ist ein OpenID-Server-Endpunkt und keine von Menschen lesbare Ressource.
214
+ identity_verification_request_invalid: Die Anfrage zur Identitätsprüfung ist ungültig.
215
+ service_provider_requires_reauthentication_last_login_too_long_ago: Der Dienstanbieter erfordert eine erneute Authentifizierung, da Ihr letzter Login zu lange her war.
216
+ login_to_verify_identity: Bitte loggen Sie sich ein, um Ihre Identität zu bestätigen.
217
+
218
+ # server views
219
+ identity_request_from_host: Identitätsanfrage von %{host}
220
+ identity_request_missing_persona: Bitte %{create_link}, um die Identitätsanfrage zu beantworten.
221
+ trust_root_requests_some_personal_data: "%{trust_root} verlangt persönliche Angaben."
222
+ trust_root_sends_some_personal_data: "%{trust_root} sendet persönliche Angaben:"
223
+ trust_root_requires_authentication: "%{trust_root} verlangt Ihre Autorisierung."
224
+ select_information_to_submit: Bitte wählen Sie die Angaben aus, die Sie übermitteln möchten.
225
+ select_information_to_accept: Bitte wählen Sie die Angaben aus, die Sie akzeptieren möchten.
226
+ attributes_are_shown_from_persona: Die folgenden Angaben stammen aus Ihrer Rolle %{persona}.
227
+ attributes_will_be_added_to_persona: Die Werte werden in Ihre Rolle %{persona} übernommen (%{choose_link}).
228
+ to_submit_other_values_you_can_edit_or_choose: Um andere Werte zu übermitteln können Sie %{edit_link} oder %{choose_link}.
229
+ create_persona_link: erstellen Sie eine Rolle
230
+ edit_persona_link: die Rolle bearbeiten
231
+ choose_other_persona: eine andere Rolle auswählen
232
+ choose_persona_title: Wählen Sie eine Rolle
233
+ choose_persona_submit: Rolle auswählen
234
+ create_new_persona_link: neue Rolle anlegen
235
+ requested_information_title: Verlangte Angaben
236
+ sent_information_title: Gesendete Angaben
237
+ disclosure: freigeben
238
+ accept: akzeptieren
239
+ current: aktueller Wert
240
+ required: benötigt
241
+ optional: optional
242
+ not_supported: nicht unterstützt
243
+ trust_site_only_this_time: Dieser Website einmal vertrauen
244
+ always_trust_site: Dieser Website immer vertrauen
245
+ approve_request: Anfrage bestätigen
246
+ cancel_request: Anfrage widerrufen
247
+
248
+ # sites controllers
249
+ release_policy_for_site_updated: Die Richtlinie für diese Website wurde aktualisiert.
250
+
251
+ # sites views
252
+ edit_link: bearbeiten
253
+ delete_link: löschen
254
+ or: oder
255
+ your_release_policy_for_site: Ihre Vertrauensrichtlinien für %{site}
256
+ persona_label: Rolle
257
+ property: Eigenschaft
258
+ value: Wert
259
+ update_release_policy_submit: Richtlinie aktualisieren
260
+ identity_request_answered_without_interaction: Identitätsanfragen der folgenden Websites werden ohne Nachfrage akzeptiert.
261
+ alter_release_policies_here: Sie können Ihre Richtlinien für diese Websites hier ändern.
262
+ really_want_to_delete_trust_for_site: Wollen Sie die Vertrauensstellung für %{site} wirklich löschen?
263
+ no_entries_yet: Es gibt noch keine Einträge.
264
+ ext0: Ext0
265
+ ext1: Ext1
266
+ ext2: Ext2
267
+
268
+ # yubikey controller
269
+ account_associated_with_yubico_identity: Ihr Account wurde mit Ihrer Yubico-Identität verknüpft.
270
+ sorry_yubico_one_time_password_incorrect: Entschuldigung, das angegebene Yubico-Einmalpasswort ist falsch.
271
+ account_disassociated_from_yubico_identity: Ihr Account wurde von der Yubico-Identität gelöst.
272
+
273
+
274
+ # AR
275
+ activerecord:
276
+ attributes:
277
+ persona:
278
+ title: Titel
279
+ account:
280
+ email: E-Mail
281
+ public_persona: Öffentliche Rolle