masks-server 0.7.0 → 0.8.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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/masks/server/enrollments_controller.rb +66 -0
  3. data/app/controllers/masks/server/introspections_controller.rb +2 -2
  4. data/app/controllers/masks/server/registrations_controller.rb +31 -1
  5. data/app/graphql/masks/server/manage/types/client_type.rb +8 -0
  6. data/app/graphql/masks/server/manage/types/query_type.rb +6 -1
  7. data/app/helpers/masks/server/application_helper.rb +0 -1
  8. data/app/helpers/masks/server/scopes_helper.rb +28 -0
  9. data/app/jobs/masks/server/cleanup_job.rb +1 -0
  10. data/app/models/masks/server/client.rb +81 -1
  11. data/app/models/masks/server/client_keys.rb +6 -1
  12. data/app/models/masks/server/enrollment_token.rb +54 -0
  13. data/app/models/masks/server/event.rb +3 -0
  14. data/app/models/masks/server/issuer.rb +1 -0
  15. data/app/models/masks/server/namespace.rb +6 -3
  16. data/app/models/masks/server/replay.rb +22 -4
  17. data/app/models/masks/server/token.rb +1 -0
  18. data/app/views/layouts/masks/server/manage.html.erb +2 -2
  19. data/app/views/masks/server/application/_person.html.erb +1 -1
  20. data/app/views/masks/server/handshakes/show.html.erb +129 -59
  21. data/config/locales/de/account.yml +1 -1
  22. data/config/locales/de/events.yml +5 -2
  23. data/config/locales/de/flashes.yml +2 -2
  24. data/config/locales/de/handshakes.yml +33 -14
  25. data/config/locales/de/mailers.yml +1 -1
  26. data/config/locales/de/manage/activity.yml +2 -2
  27. data/config/locales/de/manage/actor.yml +41 -23
  28. data/config/locales/de/manage/actors.yml +16 -15
  29. data/config/locales/de/manage/api.yml +1 -1
  30. data/config/locales/de/manage/app.yml +6 -6
  31. data/config/locales/de/manage/client.yml +45 -45
  32. data/config/locales/de/manage/clients.yml +28 -32
  33. data/config/locales/de/manage/connections.yml +2 -2
  34. data/config/locales/de/manage/consents.yml +2 -2
  35. data/config/locales/de/manage/device.yml +7 -7
  36. data/config/locales/de/manage/devices.yml +18 -18
  37. data/config/locales/de/manage/directory.yml +1 -1
  38. data/config/locales/de/manage/domains.yml +6 -6
  39. data/config/locales/de/manage/emails.yml +4 -4
  40. data/config/locales/de/manage/events.yml +3 -0
  41. data/config/locales/de/manage/groups.yml +6 -6
  42. data/config/locales/de/manage/ldap.yml +8 -8
  43. data/config/locales/de/manage/namespaces.yml +1 -1
  44. data/config/locales/de/manage/organization.yml +15 -8
  45. data/config/locales/de/manage/organizations.yml +3 -3
  46. data/config/locales/de/manage/policies.yml +6 -6
  47. data/config/locales/de/manage/policy_rules.yml +1 -1
  48. data/config/locales/de/manage/presence.yml +6 -6
  49. data/config/locales/de/manage/providers.yml +70 -48
  50. data/config/locales/de/manage/provisioning.yml +4 -4
  51. data/config/locales/de/manage/senders.yml +1 -1
  52. data/config/locales/de/manage/settings.yml +37 -26
  53. data/config/locales/de/manage/settings_shell.yml +2 -2
  54. data/config/locales/de/refusals.yml +5 -5
  55. data/config/locales/en/account.yml +3 -3
  56. data/config/locales/en/events.yml +4 -1
  57. data/config/locales/en/flashes.yml +3 -3
  58. data/config/locales/en/handshakes.yml +33 -14
  59. data/config/locales/en/logins.yml +2 -2
  60. data/config/locales/en/manage/actor.yml +32 -14
  61. data/config/locales/en/manage/actors.yml +16 -15
  62. data/config/locales/en/manage/app.yml +5 -5
  63. data/config/locales/en/manage/client.yml +9 -9
  64. data/config/locales/en/manage/clients.yml +8 -12
  65. data/config/locales/en/manage/connections.yml +1 -1
  66. data/config/locales/en/manage/consents.yml +1 -1
  67. data/config/locales/en/manage/device.yml +1 -1
  68. data/config/locales/en/manage/devices.yml +1 -1
  69. data/config/locales/en/manage/directory.yml +1 -1
  70. data/config/locales/en/manage/domains.yml +6 -6
  71. data/config/locales/en/manage/emails.yml +4 -4
  72. data/config/locales/en/manage/events.yml +3 -0
  73. data/config/locales/en/manage/groups.yml +6 -6
  74. data/config/locales/en/manage/ldap.yml +8 -8
  75. data/config/locales/en/manage/messages.yml +1 -1
  76. data/config/locales/en/manage/namespaces.yml +1 -1
  77. data/config/locales/en/manage/organization.yml +16 -9
  78. data/config/locales/en/manage/organizations.yml +3 -3
  79. data/config/locales/en/manage/policies.yml +6 -6
  80. data/config/locales/en/manage/policy_rules.yml +2 -2
  81. data/config/locales/en/manage/presence.yml +1 -1
  82. data/config/locales/en/manage/providers.yml +70 -48
  83. data/config/locales/en/manage/provisioning.yml +4 -4
  84. data/config/locales/en/manage/senders.yml +2 -2
  85. data/config/locales/en/manage/settings.yml +34 -23
  86. data/config/locales/es/account.yml +1 -1
  87. data/config/locales/es/application.yml +1 -1
  88. data/config/locales/es/events.yml +4 -1
  89. data/config/locales/es/flashes.yml +4 -4
  90. data/config/locales/es/handshakes.yml +33 -14
  91. data/config/locales/es/logins.yml +12 -12
  92. data/config/locales/es/mailers.yml +7 -7
  93. data/config/locales/es/manage/activity.yml +2 -2
  94. data/config/locales/es/manage/actor.yml +33 -15
  95. data/config/locales/es/manage/actors.yml +17 -16
  96. data/config/locales/es/manage/api.yml +1 -1
  97. data/config/locales/es/manage/app.yml +6 -6
  98. data/config/locales/es/manage/client.yml +30 -30
  99. data/config/locales/es/manage/clients.yml +22 -26
  100. data/config/locales/es/manage/connections.yml +1 -1
  101. data/config/locales/es/manage/consents.yml +1 -1
  102. data/config/locales/es/manage/device.yml +1 -1
  103. data/config/locales/es/manage/directory.yml +1 -1
  104. data/config/locales/es/manage/domains.yml +5 -5
  105. data/config/locales/es/manage/emails.yml +7 -7
  106. data/config/locales/es/manage/events.yml +3 -0
  107. data/config/locales/es/manage/groups.yml +6 -6
  108. data/config/locales/es/manage/ldap.yml +8 -8
  109. data/config/locales/es/manage/namespaces.yml +1 -1
  110. data/config/locales/es/manage/organization.yml +16 -9
  111. data/config/locales/es/manage/organizations.yml +3 -3
  112. data/config/locales/es/manage/policies.yml +8 -8
  113. data/config/locales/es/manage/policy_rules.yml +2 -2
  114. data/config/locales/es/manage/providers.yml +70 -48
  115. data/config/locales/es/manage/provisioning.yml +4 -4
  116. data/config/locales/es/manage/senders.yml +1 -1
  117. data/config/locales/es/manage/settings.yml +38 -27
  118. data/config/locales/es/manage/settings_shell.yml +2 -2
  119. data/config/locales/es/refusals.yml +3 -3
  120. data/config/locales/fr/events.yml +3 -0
  121. data/config/locales/fr/flashes.yml +1 -1
  122. data/config/locales/fr/handshakes.yml +33 -14
  123. data/config/locales/fr/manage/activity.yml +4 -4
  124. data/config/locales/fr/manage/actor.yml +43 -25
  125. data/config/locales/fr/manage/actors.yml +22 -21
  126. data/config/locales/fr/manage/api.yml +1 -1
  127. data/config/locales/fr/manage/app.yml +7 -7
  128. data/config/locales/fr/manage/client.yml +50 -50
  129. data/config/locales/fr/manage/clients.yml +28 -32
  130. data/config/locales/fr/manage/connections.yml +2 -2
  131. data/config/locales/fr/manage/consents.yml +1 -1
  132. data/config/locales/fr/manage/device.yml +1 -1
  133. data/config/locales/fr/manage/directory.yml +1 -1
  134. data/config/locales/fr/manage/domains.yml +6 -6
  135. data/config/locales/fr/manage/emails.yml +5 -5
  136. data/config/locales/fr/manage/events.yml +3 -0
  137. data/config/locales/fr/manage/groups.yml +6 -6
  138. data/config/locales/fr/manage/ldap.yml +8 -8
  139. data/config/locales/fr/manage/namespaces.yml +1 -1
  140. data/config/locales/fr/manage/organization.yml +15 -8
  141. data/config/locales/fr/manage/organizations.yml +3 -3
  142. data/config/locales/fr/manage/policies.yml +6 -6
  143. data/config/locales/fr/manage/policy_rules.yml +1 -1
  144. data/config/locales/fr/manage/providers.yml +70 -48
  145. data/config/locales/fr/manage/provisioning.yml +4 -4
  146. data/config/locales/fr/manage/senders.yml +1 -1
  147. data/config/locales/fr/manage/settings.yml +38 -27
  148. data/config/locales/fr/manage/settings_shell.yml +2 -2
  149. data/config/routes.rb +2 -0
  150. data/config/vite.json +1 -0
  151. data/db/migrate/20261011190000_add_enrolled_by_to_clients.rb +5 -0
  152. data/db/migrate/20261012100000_create_replays.rb +23 -0
  153. data/public/masks-assets/.vite/manifest-assets.json +1 -0
  154. data/public/masks-assets/.vite/manifest.json +62 -0
  155. data/public/masks-assets/assets/app-DoQZrM_J.css +2 -0
  156. data/public/masks-assets/assets/console-DoyNbIw3.css +1 -0
  157. data/public/masks-assets/assets/handshake-DIFZPSAK.js +2 -0
  158. data/public/masks-assets/assets/handshake-DIFZPSAK.js.map +1 -0
  159. data/public/masks-assets/assets/manage-isLCrWiU.js +567 -0
  160. data/public/masks-assets/assets/manage-isLCrWiU.js.map +1 -0
  161. data/version.txt +1 -1
  162. metadata +14 -7
  163. data/public/masks-assets/assets/app-olx-5PkA.css +0 -2
  164. data/public/masks-assets/assets/console-CiuQ3qj0.css +0 -1
  165. data/public/masks-assets/assets/handshake-BYhhQ_X3.js +0 -2
  166. data/public/masks-assets/assets/handshake-BYhhQ_X3.js.map +0 -1
  167. data/public/masks-assets/assets/manage-Z3GmPDNQ.js +0 -560
  168. data/public/masks-assets/assets/manage-Z3GmPDNQ.js.map +0 -1
@@ -1,84 +1,117 @@
1
- <% content_for :title, t(@existing ? ".page_title_again" : ".page_title") %>
1
+ <% tenant = Masks::Server::Current.tenant&.name.to_s %>
2
+ <% name = @handshake.name %>
3
+ <% content_for :title, t(@existing ? ".page_title_again" : ".page_title", name: name) %>
2
4
  <% content_for :surface, "grant" %>
3
5
 
4
6
  <% content_for :scripts do %>
5
7
  <%= vite_javascript_tag "handshake" %>
6
8
  <% end %>
7
9
 
8
- <% hot, rest = ranked_scopes(@scopes) %>
9
- <% tenant = Masks::Server::Current.tenant&.name.to_s %>
10
+ <% areas = Masks::Server::Namespace.prefixes(@handshake.scopes) %>
11
+ <% plain = plain_scopes(@scopes, areas: areas) %>
12
+ <% hot, rest = @scopes.to_a.partition { |scope, _| heeded_scope?(scope) } %>
13
+ <% after_sign_out = @handshake.try(:post_logout_redirect_uri) %>
10
14
 
11
15
  <div class="auth-pair">
12
- <span class="auth-mark auth-mark-client" aria-hidden="true"><%= @handshake.name.to_s.first&.upcase %></span>
16
+ <span class="auth-mark auth-mark-client" aria-hidden="true"><%= name.to_s.first&.upcase %></span>
13
17
  <span class="auth-wire"></span>
14
18
  <%= tenant_mark(Masks::Server::Current.tenant) %>
15
19
  </div>
16
20
 
17
21
  <div class="prompt-head">
18
- <h1 class="prompt-title"><%= t(@existing ? ".title_again" : ".title") %></h1>
22
+ <h1 class="prompt-title"><%= t(@existing ? ".title_again" : ".title", name: name, tenant: tenant) %></h1>
23
+
24
+ <p class="handshake-origin">
25
+ <span class="handshake-origin-label"><%= t(".runs_at") %></span>
26
+ <span class="handshake-origin-value"><%= @handshake.origin %></span>
27
+ </p>
28
+
19
29
  <p class="prompt-lede">
20
- <%= t(@existing ? ".lede_again_html" : ".lede_html", name: @handshake.name, tenant: tenant) %>
30
+ <%= t(@existing ? ".lede_again_html" : ".lede_html", name: name, tenant: tenant) %>
21
31
  </p>
22
32
  </div>
23
33
 
24
- <%= render "masks/server/application/person", actor: current_actor, sign_out: true %>
34
+ <% if @existing %>
35
+ <% by_you = @existing.approved_by_id == current_actor.id %>
36
+ <% who = by_you ? nil : @existing.approved_by&.identifier || t(".someone") %>
37
+ <% date = l(@existing.approved_at.to_date, format: :long) %>
38
+ <div class="note note-warn handshake-replacing">
39
+ <strong><%= t(".stops_working", name: @existing.name) %></strong>
40
+ <span><%= by_you ? t(".connected_by_you", name: @existing.name, date: date) : t(".connected_by", name: @existing.name, who: who, date: date) %></span>
41
+ </div>
42
+ <% end %>
43
+
44
+ <div class="handshake-as">
45
+ <span class="handshake-caption"><%= t(".signed_in_as") %></span>
46
+ <%= render "masks/server/application/person", actor: current_actor, sign_out: true, unconfirmed: t(".unconfirmed") %>
47
+ </div>
48
+
49
+ <div class="slab handshake-plain">
50
+ <% if plain[:heeds].any? %>
51
+ <div class="ledger-row">
52
+ <span class="ledger-label"><%= t(".check") %></span>
53
+ <ul class="handshake-heeds">
54
+ <% plain[:heeds].each do |scope, description| %>
55
+ <% why = if scope == Masks::Server::Scopes::OFFLINE then t(".heed.offline_access", name: name)
56
+ elsif scope == Masks::Server::Scopes::DELEGATE then t(".heed.delegates", name: name)
57
+ elsif scope.start_with?(Masks::Server::Scopes::DELEGATE) then t(".heed.delegate", name: name)
58
+ elsif scope == Masks::Server::Scopes::MANAGE then t(".heed.manage", name: name)
59
+ end %>
60
+ <li class="handshake-heed<%= " handshake-heed-alarm" if scope == Masks::Server::Scopes::MANAGE %>"<%= ' role="alert"'.html_safe if scope == Masks::Server::Scopes::MANAGE %>>
61
+ <span class="handshake-heed-what"><%= scope == Masks::Server::Scopes::DELEGATE ? t(".heed.delegates_title") : description %></span>
62
+ <% if why %>
63
+ <span class="handshake-heed-why"><%= why %></span>
64
+ <% end %>
65
+ </li>
66
+ <% end %>
67
+ </ul>
25
68
 
26
- <div class="slab">
27
- <% if @existing %>
28
- <% who = @existing.approved_by_id == current_actor.id ? t(".you") : @existing.approved_by&.identifier || t(".someone") %>
29
- <div class="ledger-row ledger-row-tight">
30
- <span class="ledger-label"><%= t(".replaces") %></span>
31
- <span class="ledger-value handshake-warn">
32
- <%= t(".replaced", name: @existing.name, who: who, date: l(@existing.approved_at.to_date, format: :long)) %>
33
- </span>
34
69
  </div>
35
70
  <% end %>
36
71
 
37
- <div class="ledger-row">
38
- <span class="ledger-label"><%= t(".may_ask") %></span>
39
- <ul class="grant-scopes">
40
- <% hot.each do |scope, description| %>
41
- <li class="grant-scope grant-scope-hot">
42
- <span><%= description %></span>
43
- <span class="chip-key"><%= scope %></span>
44
- </li>
45
- <% end %>
46
-
47
- <% if hot.any? && rest.any? %>
48
- <li class="grant-scope-split"></li>
49
- <% end %>
72
+ <% if plain[:sees].any? %>
73
+ <div class="ledger-row">
74
+ <span class="ledger-label"><%= t(".sees", name: name) %></span>
75
+ <ul class="handshake-sees">
76
+ <% plain[:sees].each do |_, description| %>
77
+ <li><%= description %></li>
78
+ <% end %>
79
+ </ul>
80
+ </div>
81
+ <% end %>
50
82
 
51
- <% rest.each do |scope, description| %>
52
- <li class="grant-scope">
53
- <span><%= description %></span>
54
- <span class="chip-key"><%= scope %></span>
55
- </li>
83
+ <% if areas.any? %>
84
+ <div class="ledger-row">
85
+ <span class="ledger-label"><%= t(".area", name: name) %></span>
86
+ <p class="handshake-say">
87
+ <%= t(".area_says_html", name: name, namespaces: safe_join(areas.map { |area| content_tag(:code, area, class: "chip-key") }, ", ")) %>
88
+ <% if @granting.present? %><%= t(".area_yours") %><% end %>
89
+ </p>
90
+
91
+ <% if @beneath.present? %>
92
+ <details class="disclosure">
93
+ <summary class="textlink"><%= t(".beneath", count: @beneath.size) %></summary>
94
+ <ul class="grant-scopes">
95
+ <% @beneath.each do |scope, description| %>
96
+ <li class="grant-scope<%= " grant-scope-hot" if consequential_scope?(scope) %>">
97
+ <span><%= description %></span>
98
+ <span class="chip-key"><%= scope %></span>
99
+ </li>
100
+ <% end %>
101
+ </ul>
102
+ </details>
56
103
  <% end %>
57
- </ul>
58
-
59
- <% if @handshake.scopes.include?(Masks::Server::Scopes::MANAGE) %>
60
- <div class="note note-warn" role="alert"><%= t(".manage_warning", name: @handshake.name) %></div>
61
- <% end %>
62
-
63
- <% if @beneath.present? %>
64
- <details class="disclosure">
65
- <summary class="textlink"><%= t(".beneath", count: @beneath.size) %></summary>
66
- <ul class="grant-scopes">
67
- <% @beneath.each do |scope, description| %>
68
- <li class="grant-scope">
69
- <span><%= description %></span>
70
- <span class="chip-key"><%= scope %></span>
71
- </li>
72
- <% end %>
73
- </ul>
74
- </details>
75
- <% end %>
76
- </div>
104
+ </div>
105
+ <% end %>
77
106
 
78
- <% if @granting.present? %>
79
- <div class="ledger-row ledger-row-tight">
80
- <span class="ledger-label"><%= t(".claims") %></span>
81
- <span class="ledger-value"><%= t(".claimed", namespaces: @granting.to_sentence, name: @handshake.name) %></span>
107
+ <% if plain[:also].any? %>
108
+ <div class="ledger-row">
109
+ <span class="ledger-label"><%= t(".also", name: name) %></span>
110
+ <ul class="handshake-sees">
111
+ <% plain[:also].each do |_, description| %>
112
+ <li><%= description %></li>
113
+ <% end %>
114
+ </ul>
82
115
  </div>
83
116
  <% end %>
84
117
  </div>
@@ -87,6 +120,36 @@
87
120
  <summary class="textlink"><%= t(".details") %></summary>
88
121
 
89
122
  <div class="slab">
123
+ <div class="ledger-row ledger-row-tight">
124
+ <span class="ledger-label"><%= t(".scopes") %></span>
125
+ <ul class="grant-scopes">
126
+ <% (hot + rest).each do |scope, description| %>
127
+ <li class="grant-scope<%= " grant-scope-hot" if heeded_scope?(scope) %>">
128
+ <span><%= description %></span>
129
+ <span class="chip-key"><%= scope %></span>
130
+ </li>
131
+ <% end %>
132
+ </ul>
133
+
134
+ <% if @handshake.scopes.include?(Masks::Server::Scopes::MANAGE) %>
135
+ <div class="note note-warn"><%= t(".manage_warning", name: name) %></div>
136
+ <% end %>
137
+ </div>
138
+
139
+ <% if @granting.present? %>
140
+ <div class="ledger-row ledger-row-tight">
141
+ <span class="ledger-label"><%= t(".claims") %></span>
142
+ <span class="ledger-value"><%= t(".claimed", namespaces: @granting.to_sentence, name: name) %></span>
143
+ </div>
144
+ <% end %>
145
+
146
+ <% if @existing %>
147
+ <div class="ledger-row ledger-row-tight">
148
+ <span class="ledger-label"><%= t(".replaces") %></span>
149
+ <span class="ledger-value"><%= t(".replaced", name: @existing.name, who: who || t(".you"), date: date) %></span>
150
+ </div>
151
+ <% end %>
152
+
90
153
  <div class="ledger-row ledger-row-tight">
91
154
  <span class="ledger-label"><%= t(".client") %></span>
92
155
  <span class="ledger-value"><%= t(".credentials.#{@handshake.credentials}") %></span>
@@ -125,17 +188,24 @@
125
188
  <span class="ledger-value aside-mono"><%= @handshake.backchannel_logout_uri %></span>
126
189
  </div>
127
190
  <% end %>
191
+
192
+ <% if after_sign_out %>
193
+ <div class="ledger-row ledger-row-tight">
194
+ <span class="ledger-label"><%= t(".after_sign_out") %></span>
195
+ <span class="ledger-value aside-mono"><%= after_sign_out %></span>
196
+ </div>
197
+ <% end %>
128
198
  </div>
129
199
  </details>
130
200
 
131
201
  <%= form_with url: handshake_path, method: :post do |form| %>
132
202
  <%= hidden_field_tag :hid, @hid %>
133
203
  <%= hidden_field_tag :shown, @shown %>
134
- <% approve = @existing ? "replace" : "register" %>
204
+ <% approve = @existing ? "reconnect" : "connect" %>
135
205
  <div class="action-row">
136
206
  <button type="submit" name="approve" value="yes" class="action action-grow action-countdown"
137
207
  data-countdown="<%= Masks::Server::HandshakesController::WAIT.to_i %>"
138
- data-waiting="<%= t(".#{approve}_in", seconds: "%{seconds}") %>"><%= t(".#{approve}") %></button>
208
+ data-waiting="<%= t(".#{approve}_in", name: name, seconds: "%{seconds}") %>"><%= t(".#{approve}", name: name) %></button>
139
209
  <button type="submit" name="deny" value="yes" class="action action-quiet action-fit"><%= t(".cancel") %></button>
140
210
  </div>
141
211
  <% end %>
@@ -141,7 +141,7 @@ de:
141
141
  here: "Dieses Gerät"
142
142
  signed_in: "Angemeldet"
143
143
  signed_out: "Abgemeldet"
144
- blocked: "Gesperrt"
144
+ blocked: "Blockiert"
145
145
  seen: "Zuletzt gesehen vor %{age}."
146
146
  from: "Zuletzt verwendet von %{address}."
147
147
  skips_code: "Dieses Gerät muss keinen Code eingeben."
@@ -71,8 +71,8 @@ de:
71
71
  trusted: "Gerät als vertrauenswürdig markiert"
72
72
  named: "Gerät umbenannt"
73
73
  forgotten: "Gerät abgemeldet"
74
- blocked: "Gerät gesperrt"
75
- unblocked: "Gerät entsperrt"
74
+ blocked: "Gerät blockiert"
75
+ unblocked: "Gerät freigegeben"
76
76
  avatar:
77
77
  uploaded: "Foto hochgeladen"
78
78
  removed: "Foto entfernt"
@@ -112,6 +112,9 @@ de:
112
112
  restored: "App wiederhergestellt"
113
113
  secret_rotated: "App-Secret rotiert"
114
114
  logo_refused: "App-Logo konnte nicht verwendet werden"
115
+ enrollment_issued: "Anmeldung einer Maschine angefordert"
116
+ enrolled: "Maschine angemeldet"
117
+ unenrolled: "Maschine abgemeldet"
115
118
  token:
116
119
  revoked: "Token widerrufen"
117
120
  saml:
@@ -2,7 +2,7 @@ de:
2
2
  devices:
3
3
  unknown: "Dieses Gerät gibt es in diesem Konto nicht."
4
4
  refused_agent: "Mit diesem Browser ist hier keine Anmeldung möglich."
5
- blocked: "Dieses Gerät ist gesperrt."
5
+ blocked: "Dieses Gerät ist blockiert."
6
6
  renamed: "Gerät umbenannt."
7
7
  shared: "Auf diesem Gerät hat sich auch jemand anderes angemeldet, daher kann es hier nicht umbenannt werden."
8
8
  signed_out: "Dieses Gerät wurde abgemeldet."
@@ -138,7 +138,7 @@ de:
138
138
  sent: "Ein Bestätigungslink ist unterwegs an %{email}."
139
139
 
140
140
  avatars:
141
- updated: "Ihr Foto wurde aktualisiert."
141
+ updated: "Ihr Foto wurde geändert."
142
142
  removed: "Ihr Foto wurde entfernt."
143
143
 
144
144
  handshakes:
@@ -1,12 +1,32 @@
1
1
  de:
2
2
  handshakes:
3
3
  show:
4
- page_title: "Neue App registrieren"
5
- page_title_again: "Bestehende App ersetzen"
6
- title: "Neue App registrieren?"
7
- title_again: "Bestehende App ersetzen?"
8
- lede_html: "Mit der Zustimmung wird <strong>%{name}</strong> für alle auf %{tenant} registriert und nur für Ihr Konto erlaubt."
9
- lede_again_html: "Mit der Zustimmung wird <strong>%{name}</strong> für alle auf %{tenant} ersetzt und nur für Ihr Konto erlaubt."
4
+ page_title: "%{name} verbinden"
5
+ page_title_again: "%{name} neu verbinden"
6
+ title: "%{name} mit %{tenant} verbinden?"
7
+ title_again: "%{name} neu verbinden?"
8
+ runs_at: "Läuft unter"
9
+ lede_html: "Alle können sich dann mit ihrem %{tenant}-Konto bei <strong>%{name}</strong> anmelden. Vorerst haben nur Sie Zugang, und Sie legen später fest, wer noch hinein darf."
10
+ lede_again_html: "<strong>%{name}</strong> ist bereits mit %{tenant} verbunden. Beim neuen Verbinden wird die App neu eingerichtet. Vorerst haben nur Sie Zugang, und Sie legen später fest, wer noch hinein darf."
11
+ stops_working: "Die bisherige Verbindung zu %{name} funktioniert dann nicht mehr."
12
+ connected_by_you: "Sie haben %{name} am %{date} verbunden."
13
+ connected_by: "%{who} hat %{name} am %{date} verbunden."
14
+ signed_in_as: "Sie stimmen zu als"
15
+ unconfirmed: "(E-Mail noch nicht bestätigt)"
16
+ check: "Sehen Sie sich das zuerst an"
17
+ heed:
18
+ offline_access: "%{name} kann Personen angemeldet halten, ohne erneut zu fragen, bis sie sich abmelden."
19
+ delegates_title: "Personen bitten, ihre anderen Konten zu verbinden"
20
+ delegates: "Jede Person entscheidet selbst. %{name} kann diese Konten dann nutzen, während sie nicht da sind."
21
+ delegate: "%{name} kann dieses Konto nutzen, während Sie nicht da sind, bis Sie es beenden."
22
+ manage: "Alle, die sich über %{name} anmelden, können jede Einstellung auf diesem Server ändern."
23
+ sees: "%{name} sieht"
24
+ area: "Eigene Berechtigungen von %{name}"
25
+ area_says_html: "%{name} erhält eigene Berechtigungen mit dem Namen %{namespaces}. Sie entscheiden, wer sie bekommt."
26
+ area_yours: " Sie erhalten sie jetzt alle."
27
+ also: "%{name} kann außerdem"
28
+ details: "Technische Details"
29
+ scopes: "Scopes"
10
30
  client: "Zugangsdaten"
11
31
  credentials:
12
32
  public: "Öffentlich. Sie hat kein Geheimnis."
@@ -16,24 +36,23 @@ de:
16
36
  replaced: "Die App %{name}, die %{who} am %{date} genehmigt hat. Ihre aktuellen Zugangsdaten funktionieren dann nicht mehr."
17
37
  you: "Sie"
18
38
  someone: "jemand"
19
- may_ask: "Darf anfordern"
20
39
  manage_warning: "masks:manage erlaubt allen, die sich über %{name} anmelden, jede Einstellung auf diesem Server zu ändern."
21
40
  beneath:
22
- one: "Was das heute umfasst (1)"
23
- other: "Was das heute umfasst (%{count})"
41
+ one: "Was sie heute umfassen (1)"
42
+ other: "Was sie heute umfassen (%{count})"
24
43
  signs_in_at: "Meldet sich an bei"
25
44
  claims: "Beansprucht"
26
45
  claimed: "%{namespaces} gehört dann zu %{name}, und Ihnen wird es jetzt gewährt."
27
- details: "Weitere Details"
28
46
  origin: "Von"
29
47
  redirect_uris: "Redirect-URIs"
30
48
  returns: "Kehrt zurück zu"
31
49
  auth_method: "Authentifiziert sich mit"
32
50
  backchannel: "Backchannel-Logout"
33
- register: "Registrieren und erlauben"
34
- register_in: "Registrieren und erlauben in %{seconds}"
35
- replace: "Ersetzen und erlauben"
36
- replace_in: "Ersetzen und erlauben in %{seconds}"
51
+ after_sign_out: "Nach dem Abmelden zurück zu"
52
+ connect: "%{name} verbinden"
53
+ connect_in: "%{name} verbinden in %{seconds}"
54
+ reconnect: "%{name} neu verbinden"
55
+ reconnect_in: "%{name} neu verbinden in %{seconds}"
37
56
  cancel: "Abbrechen"
38
57
 
39
58
  refused:
@@ -73,7 +73,7 @@ de:
73
73
  sign_in:
74
74
  risky: "Eine Anmeldung bei Ihrem Konto bei %{tenant} wirkte ungewöhnlich, daher wurde mehr verlangt oder sie wurde abgelehnt. Wenn Sie das nicht waren, ändern Sie Ihr Passwort."
75
75
  device:
76
- blocked: "Ein Gerät wurde für Ihr Konto bei %{tenant} gesperrt. Es kann sich nicht anmelden, bis jemand es entsperrt."
76
+ blocked: "Ein Gerät wurde für Ihr Konto bei %{tenant} blockiert. Es kann sich nicht anmelden, bis jemand es freigibt."
77
77
  consent:
78
78
  granted: "%{client} wurde Zugriff auf Ihr Konto bei %{tenant} erlaubt und kann jetzt lesen, was Sie zu teilen zugestimmt haben."
79
79
  connection:
@@ -7,7 +7,7 @@ de:
7
7
  title: "Aktivität"
8
8
  nouns:
9
9
  actor: "Akteur"
10
- client: "App"
10
+ client: "Client"
11
11
  downloading:
12
12
  one: "%{count} Ereignis wird heruntergeladen."
13
13
  other: "%{count} Ereignisse werden heruntergeladen."
@@ -15,7 +15,7 @@ de:
15
15
  involves_end: "."
16
16
  gone:
17
17
  actor: "Nur, was einen Akteur betrifft, der nicht mehr existiert."
18
- client: "Nur, was eine App betrifft, die nicht mehr existiert."
18
+ client: "Nur, was einen Client betrifft, der nicht mehr existiert."
19
19
  everything: "Alles anzeigen"
20
20
  show: "Anzeigen"
21
21
  all: "alles"
@@ -18,7 +18,7 @@ de:
18
18
  left_group: "Nicht mehr in %{group}."
19
19
  joined_group: "In %{group}."
20
20
  profile_saved: "Profil gespeichert."
21
- scopes_updated: "Scopes aktualisiert."
21
+ scopes_updated: "Scopes geändert."
22
22
  codes_generated: "Backup-Codes erstellt. Sie werden einmal angezeigt und nie wieder."
23
23
  emailed: "Per E-Mail gesendet. Der Link wird hier nicht angezeigt, damit seine Verwendung die Adresse bestätigt."
24
24
  no_mailer: "Es ist kein E-Mail-Versand konfiguriert. Geben Sie diesen Link also selbst weiter. Er funktioniert einmal."
@@ -27,11 +27,11 @@ de:
27
27
  confirm_question: "Einen Bestätigungslink für diese Adresse senden? Jeder frühere funktioniert dann nicht mehr."
28
28
  remove_passkey_question: "Den Passkey „%{label}“ entfernen?"
29
29
  passkey_removed: "Passkey entfernt."
30
- photo_updated: "Foto aktualisiert."
30
+ photo_updated: "Foto geändert."
31
31
  remove_photo_question: "Das Foto dieses Akteurs entfernen?"
32
32
  photo_removed: "Foto entfernt."
33
33
  disable_question: "Die Authenticator-App und alle Backup-Codes dieses Akteurs entfernen?"
34
- authenticator_removed: "Authenticator entfernt."
34
+ authenticator_removed: "Authenticator-App entfernt."
35
35
  factors:
36
36
  email:
37
37
  name: "Codes per E-Mail"
@@ -41,14 +41,14 @@ de:
41
41
  lower: "Codes per SMS"
42
42
  turn_off_question: "%{name} für diesen Akteur deaktivieren?"
43
43
  turned_off: "%{name} deaktiviert."
44
- suspend_question: "%{identifier} sperren? Die Person wird überall abgemeldet, alle ihre Tokens funktionieren nicht mehr, und sie kann sich erst wieder anmelden, wenn sie wiederhergestellt ist."
44
+ suspend_question: "%{identifier} sperren? Der Akteur wird überall abgemeldet, alle seine Tokens funktionieren nicht mehr, und er kann sich erst wieder anmelden, wenn er wiederhergestellt ist."
45
45
  suspended: "Gesperrt."
46
- restored: "Wiederhergestellt. Die Person kann sich wieder anmelden."
47
- delete_question: "%{identifier} löschen? Sitzungen, Tokens, Passkeys, Zustimmungen und Avatar werden mit gelöscht. Das lässt sich nicht rückgängig machen, und nichts wird aufbewahrt."
46
+ restored: "Wiederhergestellt. Der Akteur kann sich wieder anmelden."
47
+ delete_question: "%{identifier} löschen? Sitzungen, Tokens, Passkeys, Zustimmungen und Foto werden mit gelöscht. Das lässt sich nicht rückgängig machen, und nichts wird aufbewahrt."
48
48
  missing: "Diesen Akteur gibt es nicht."
49
49
  back: "Akteure"
50
- signed_in_lede: "Angemeldet %{when}."
51
- invited_lede: "Eingeladen, hat noch nicht angenommen."
50
+ signed_in_lede: "angemeldet %{when}"
51
+ invited_lede: "eingeladen, noch nicht angemeldet"
52
52
  never: "nie"
53
53
  link_once: "Dieser Link funktioniert einmal."
54
54
  write_down: "Notieren Sie diese. Sie lassen sich nicht wiederherstellen."
@@ -69,12 +69,11 @@ de:
69
69
  remove_photo: "Foto entfernen"
70
70
  uploading: "Wird hochgeladen..."
71
71
  scopes: "Scopes"
72
- access: "Zugriff"
73
- suspended_on: "Gesperrt am %{day}. Die Person kann sich nicht anmelden."
72
+ suspended_on: "Gesperrt am %{day}. Der Akteur kann sich nicht anmelden."
74
73
  restore: "Wiederherstellen"
75
74
  provisioned_as: "Provisioniert als"
76
- provider_may_change: "Der Identitätsanbieter kann diesen Akteur ebenfalls ändern oder sperren."
77
- directory_provisioned: "Das Verzeichnis von %{organization} hat die Person provisioniert als"
75
+ provider_may_change: "Das Verzeichnis, das diesen Akteur angelegt hat, kann ihn ebenfalls ändern oder sperren."
76
+ directory_provisioned: "Das Verzeichnis von %{organization} hat den Akteur provisioniert als"
78
77
  directory_may_change: "und kann sie ebenfalls ändern."
79
78
  reset_password: "Passwort zurücksetzen"
80
79
  invited_on: "Eingeladen am %{day}, nicht angenommen."
@@ -91,35 +90,54 @@ de:
91
90
  last_used: "Zuletzt verwendet %{when}"
92
91
  approval:
93
92
  title: "Wartet auf Genehmigung"
94
- lede: "Die Person kann sich erst anmelden, wenn ein Verwalter sie genehmigt."
95
- approved: "Genehmigt. Die Person kann sich jetzt anmelden und wurde benachrichtigt."
93
+ lede: "Der Akteur kann sich erst anmelden, wenn ein Verwalter ihn genehmigt."
94
+ approved: "Genehmigt. Der Akteur kann sich jetzt anmelden und wurde benachrichtigt."
96
95
  approve: "Genehmigen"
97
96
  recovery:
98
97
  title: "Bittet um Hilfe"
99
- lede: "Die Person hat %{when} ihren ersten Faktor bestanden und kann die Anmeldung nicht mit einem zweiten abschließen. Stellen Sie per Anruf oder persönlich sicher, dass es wirklich die Person ist, bevor Sie zurücksetzen."
100
- explain: "Das Zurücksetzen entfernt ihre Authenticator-App, Backup-Codes, Passkeys und Anmeldecodes und meldet sie überall ab. Bei der nächsten Anmeldung wird sie gebeten, einen neuen zweiten Faktor einzurichten."
98
+ lede: "Der Akteur hat %{when} seinen ersten Faktor bestanden und kann die Anmeldung nicht mit einem zweiten abschließen. Stellen Sie per Anruf oder persönlich sicher, dass er es wirklich ist, bevor Sie zurücksetzen."
99
+ explain: "Das Zurücksetzen entfernt seine Authenticator-App, Backup-Codes, Passkeys und Anmeldecodes und meldet ihn überall ab. Bei der nächsten Anmeldung wird er gebeten, einen neuen zweiten Faktor einzurichten."
101
100
  question: "Alle zweiten Faktoren von %{identifier} zurücksetzen?"
102
- done: "Zweite Faktoren zurückgesetzt. Die Person wurde benachrichtigt und kann bei der nächsten Anmeldung einen neuen einrichten."
101
+ done: "Zweite Faktoren zurückgesetzt. Der Akteur wurde benachrichtigt und kann bei der nächsten Anmeldung einen neuen einrichten."
103
102
  reset: "Zweite Faktoren zurücksetzen"
104
103
  dismissed: "Verworfen."
105
104
  dismiss: "Verwerfen"
106
105
  groups: "Gruppen"
107
106
  no_groups: "Noch keine Gruppen."
108
107
  add_group: "Eine hinzufügen"
109
- group_labels: "Apps, die Gruppen anfordern, sehen %{labels}."
108
+ group_labels: "Clients, die Gruppen anfordern, sehen %{labels}."
110
109
  second_factor: "Zweiter Faktor"
111
- authenticator_enabled:
112
- one: "Authenticator aktiviert. %{count} Backup-Code übrig."
113
- other: "Authenticator aktiviert. %{count} Backup-Codes übrig."
114
110
  generate: "Backup-Codes erstellen"
115
111
  remove_authenticator: "Authenticator-App entfernen"
116
- password_only: "Nur Passwort – nichts eingerichtet."
112
+ password_only: "Nur Passwort. Sonst ist nichts eingerichtet."
117
113
  factor_on: "%{name} aktiv."
118
114
  turn_off: "%{name} deaktivieren"
119
115
  activity: "Aktivität"
120
116
  all_activity: "Alle Aktivitäten"
121
117
  no_activity: "Noch nichts."
122
118
  danger: "Sperren oder löschen"
123
- yourself: "Das sind Sie – ein anderer Verwalter muss das tun."
119
+ yourself: "Das sind Sie. Ein anderer Verwalter muss das tun."
124
120
  suspend: "%{identifier} sperren"
125
121
  delete: "%{identifier} löschen"
122
+ parts:
123
+ label: "Akteur"
124
+ profile: "Profil"
125
+ access: "Zugriff"
126
+ sign_in: "Anmeldung"
127
+ activity: "Aktivität"
128
+ scopes_lede: "Das Höchste, was ein Token dieses Akteurs halten kann. Der Verlust von masks:manage wirkt sofort."
129
+ groups_lede: "Ein Client, der den Scope groups anfragt, erhält diese im Claim groups."
130
+ provisioned: "Bereitgestellt"
131
+ consents_lede: "Clients, die dieser Akteur zugelassen hat, mit den Scopes, die jeder erhalten hat."
132
+ connections_lede: "Konten anderswo, mit denen sich dieser Akteur über einen Anbieter anmeldet."
133
+ password: "Passwort"
134
+ password_lede: "Ein Zurücksetzen sendet einen Link. Jede Sitzung und jedes Refresh-Token endet, wenn er benutzt wird."
135
+ password_invited: "Die Einladung ist noch nicht angenommen."
136
+ authenticator: "Authenticator-App"
137
+ backup_codes:
138
+ one: "%{count} Backup-Code übrig"
139
+ other: "%{count} Backup-Codes übrig"
140
+ tokens_lede: "Access- und Refresh-Tokens, die Clients für diesen Akteur ausgestellt wurden."
141
+ photo_lede: "Identicons und Initialen werden gezeichnet. Ein hochgeladenes Foto tritt an ihre Stelle."
142
+ change_photo: "Foto ändern"
143
+ danger_lede: "Sperren meldet überall ab und behält alles für eine Wiederherstellung. Löschen entfernt den Akteur endgültig."
@@ -1,9 +1,20 @@
1
1
  de:
2
2
  manage:
3
3
  actors:
4
+ marks:
5
+ manager: "Hat einen Verwaltungs-Scope"
6
+ second_factor:
7
+ one: "Nutzt eine Authenticator-App, %{count} Backup-Code übrig"
8
+ other: "Nutzt eine Authenticator-App, %{count} Backup-Codes übrig"
9
+ invited: "Eingeladen, noch nicht angemeldet"
10
+ unconfirmed: "E-Mail-Adresse nicht bestätigt"
11
+ waiting: "Wartet auf Freigabe"
12
+ help: "Hat um Hilfe bei der Anmeldung gebeten"
13
+ suspended: "Gesperrt"
14
+ blocked: "Ein Gerät ist blockiert"
4
15
  invite_many: "Mehrere einladen"
5
16
  invites:
6
- title: "Mehrere Personen einladen"
17
+ title: "Mehrere Akteure einladen"
7
18
  lede: "Fügen Sie Adressen ein, getrennt durch Zeilen, Leerzeichen oder Kommas. Jede neue Adresse erhält eine Einladung."
8
19
  addresses: "E-Mail-Adressen"
9
20
  groups: "Hinzufügen zu"
@@ -13,7 +24,7 @@ de:
13
24
  other: "%{count} eingeladen"
14
25
  outcomes:
15
26
  invited: "eingeladen"
16
- exists: "hat bereits ein Konto"
27
+ exists: "ist bereits ein Akteur"
17
28
  invalid: "ist keine Adresse, die masks einladen kann"
18
29
  title: "Akteure"
19
30
  lenses:
@@ -25,8 +36,6 @@ de:
25
36
  suspended: "Gesperrt"
26
37
  columns:
27
38
  actor: "Akteur"
28
- scopes: "Scopes"
29
- second_factor: "Zweiter Faktor"
30
39
  signed_in_on: "Angemeldet auf"
31
40
  last_seen: "Zuletzt gesehen"
32
41
  sessions:
@@ -47,15 +56,15 @@ de:
47
56
  minimum: "Mindestens %{count} Zeichen, und Sie werden es kennen."
48
57
  scopes: "Scopes"
49
58
  adding: "Wird hinzugefügt..."
50
- create: "Konto erstellen"
59
+ create: "Akteur hinzufügen"
51
60
  invite: "Einladung senden"
52
61
  cancel: "Abbrechen"
53
62
  created:
54
- account: "Konto erstellt"
63
+ account: "Akteur hinzugefügt"
55
64
  invitation: "Einladung gesendet"
56
65
  can_sign_in: "%{identifier} kann sich jetzt anmelden."
57
66
  confirm_link: "Dieser Link bestätigt die Adresse:"
58
- emailed: "Per E-Mail gesendet – die Annahme bestätigt die Adresse."
67
+ emailed: "Per E-Mail gesendet. Die Annahme bestätigt die Adresse."
59
68
  pass_along: "Geben Sie diesen Link selbst weiter. Er funktioniert einmal."
60
69
  empty:
61
70
  search: "Kein Akteur passt zu \"%{search}\"."
@@ -66,13 +75,5 @@ de:
66
75
  suspended: "Niemand ist gesperrt."
67
76
  everyone: "Noch kann sich niemand anmelden. Fügen Sie den ersten Akteur hinzu."
68
77
  no_email: "keine E-Mail-Adresse"
69
- unconfirmed: "unbestätigt"
70
- invited: "eingeladen"
71
78
  last_seen: "Zuletzt gesehen %{when}"
72
79
  never: "nie"
73
- authenticator: "Authenticator"
74
- blocked: "gesperrt"
75
- backup_codes:
76
- one: "%{count} Backup-Code"
77
- other: "%{count} Backup-Codes"
78
- password: "Passwort"
@@ -1,5 +1,5 @@
1
1
  de:
2
2
  manage:
3
3
  api:
4
- unregistered: "für diesen Browser ist keine App registriert"
4
+ unregistered: "für diesen Browser ist kein Client registriert"
5
5
  refused: "abgelehnt"
@@ -2,8 +2,8 @@ de:
2
2
  manage:
3
3
  app:
4
4
  waiting:
5
- one: "%{count} Person wartet auf Sie"
6
- other: "%{count} Personen warten auf Sie"
5
+ one: "%{count} Akteur wartet auf Sie"
6
+ other: "%{count} Akteure warten auf Sie"
7
7
  missing: "Unter dieser Adresse gibt es keine Seite."
8
8
  account: "Konto"
9
9
  starting: "Wird gestartet"
@@ -16,9 +16,9 @@ de:
16
16
  overview: "Übersicht"
17
17
  actors: "Akteure"
18
18
  organizations: "Organisationen"
19
- clients: "Apps"
19
+ clients: "Clients"
20
20
  limited:
21
21
  read: "Sie können hier alles lesen und nichts ändern."
22
- support: "Sie können Personen bei ihren Konten helfen. Einstellungen, Schlüssel und andere Verwalter erfordern einen Eigentümer."
23
- security: "Sie können Schlüssel, Apps, Anbieter und Richtlinien ändern. Konten von Personen erfordern Support oder einen Eigentümer."
24
- both: "Sie können Einstellungen ändern und Personen helfen. Andere Verwalter und Mandanteneinstellungen erfordern einen Eigentümer."
22
+ support: "Sie können Akteuren helfen. Einstellungen, Schlüssel und andere Verwalter erfordern einen Eigentümer."
23
+ security: "Sie können Schlüssel, Clients, Anbieter und Richtlinien ändern. Akteure erfordern Support oder einen Eigentümer."
24
+ both: "Sie können Einstellungen ändern und Akteuren helfen. Andere Verwalter und Mandanteneinstellungen erfordern einen Eigentümer."