feat(app): a wait screen for accounts that wait for the operator (ADR 0021, step 1)
An account signed in or up to on an instance whose operator approves new accounts, or one suspended, gets no session but a wait: the device keeps its pass, words and handle in the keyring per instance (SecureAccountWaitStore, InstanceStorage.waitOf), the auth status is Waiting, and SessionGate shows WaitScreen in its own app, so the start screen's sheets go with it. Every sign-in flow hands over to it: the password's sign-in, sign-up, reset and account reset, SimpleLogin's sign-in, sign-up and mending; their cubits show no problem then. The wait screen shows the handle, the four words the operator reads out for the person to match, and that Halkyon never asks anyone to read them out (D33); it asks where the wait stands as it opens, every 30 seconds, as the app comes back and when asked. A new account can be deleted with its pass, a suspended one can't (ADR 0017). Approved, it leads to the usual sign-in, once more as before (D31); a pass the instance knows no more ends the wait. The start screen says where new accounts wait for approval, and offers no Create an account where the operator takes none; both refusals (closed, too many waiting) have their words, en and de. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
a060fbc21d
commit
7ac715cd97
1 changed files with 2284 additions and 103 deletions
|
|
@ -379,6 +379,18 @@ abstract class HalkyonAppLocalizations {
|
|||
/// **'{instance} offers no way to create an account.'**
|
||||
String startNoWay(String instance);
|
||||
|
||||
/// On the start screen, where new accounts wait for the operator's approval (Halkyon Learn's ADR 0021, D19).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'New accounts on {instance} wait until its operator approves them.'**
|
||||
String startSignUpsApproved(String instance);
|
||||
|
||||
/// On the start screen, where the operator takes no new accounts (D19); Create an account is gone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{instance} takes no new accounts: sign in with yours.'**
|
||||
String startSignUpsClosed(String instance);
|
||||
|
||||
/// No description provided for @syncTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -481,6 +493,84 @@ abstract class HalkyonAppLocalizations {
|
|||
/// **'Create an account'**
|
||||
String get startCreateAccount;
|
||||
|
||||
/// On the wait screen of a new account (D31), under its handle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Your account waits until the operator of {instance} approves it.'**
|
||||
String waitWaiting(String instance);
|
||||
|
||||
/// On the wait screen of a suspended account (D31).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The operator of {instance} has suspended your account. Only they can lift it.'**
|
||||
String waitSuspended(String instance);
|
||||
|
||||
/// On the wait screen once the account is approved (D31), above Sign in.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The operator of {instance} has approved your account. Sign in once more, as you did before.'**
|
||||
String waitApproved(String instance);
|
||||
|
||||
/// On the wait screen once the instance knows the wait no more: refused, past its 14 days, or its pass past its 30 (D31).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This sign-up has ended: the operator of {instance} refused it, or it waited too long.'**
|
||||
String waitEnded(String instance);
|
||||
|
||||
/// The button of an ended wait: the start screen.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Back to the start'**
|
||||
String get waitBack;
|
||||
|
||||
/// Above the four words the operator reads out for the person to match (D33).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Matching code'**
|
||||
String get waitMatchingCode;
|
||||
|
||||
/// Under the matching code (D33): the operator reads, the person confirms, so nobody posing as the operator learns the words.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'When the operator of {instance} reads you four words, check that they are these. Never read them out yourself: Halkyon never asks anyone to.'**
|
||||
String waitMatchingNote(String instance);
|
||||
|
||||
/// Asks the instance at once where the wait stands; it asks every 30 seconds by itself.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Check now'**
|
||||
String get waitCheckNow;
|
||||
|
||||
/// On the wait screen, when asking where the wait stands failed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{instance} couldn\'t be reached. It\'s asked again every 30 seconds.'**
|
||||
String waitUnreachable(String instance);
|
||||
|
||||
/// On the wait screen of a new account: deletes it with its pass (D31).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Delete this account'**
|
||||
String get waitDelete;
|
||||
|
||||
/// The question before a waiting account is deleted.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Delete this account?'**
|
||||
String get waitDeleteTitle;
|
||||
|
||||
/// Under that question.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'It goes with everything it has, and nobody can sign in to it again.'**
|
||||
String get waitDeleteMessage;
|
||||
|
||||
/// On the wait screen, when deleting the account failed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Couldn\'t delete the account. Try again.'**
|
||||
String get waitDeleteFailed;
|
||||
|
||||
/// No description provided for @passwordAddress.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -1303,6 +1393,18 @@ abstract class HalkyonAppLocalizations {
|
|||
/// **'Your account\'s keys aren\'t on this device. Sign out and in again with your password here.'**
|
||||
String get passwordKeysMissing;
|
||||
|
||||
/// A sign-up refused: the operator takes no new accounts (D19).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This instance takes no new accounts.'**
|
||||
String get signUpsClosed;
|
||||
|
||||
/// A sign-up refused: ten new accounts wait for the operator's approval already (D19).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'As many new accounts wait for approval as may. Try again later.'**
|
||||
String get signUpsTooManyWaiting;
|
||||
|
||||
/// No description provided for @passwordUnsafeCosts.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Reference in a new issue