]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+login/login.component.html
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / client / src / app / +login / login.component.html
index 390d77dd7927be706025cca62ebc126037a832e2..5d267f168e9b6cc813e17b10ec8a574ac73c9825 100644 (file)
-<div class="margin-content">
-  <div i18n class="title-page title-page-single">
-    Login
-  </div>
-
-  <div class="alert alert-danger" i18n *ngIf="externalAuthError">
-    Sorry but there was an issue with the external login process. Please <a routerLink="/about">contact an administrator</a>.
-  </div>
+<h1 i18n class="title-page-v2">
+  <strong class="underline-orange">{{ instanceName }}</strong>
+  >
+  Login
+</h1>
 
+<div class="margin-content">
   <ng-container *ngIf="!externalAuthError && !isAuthenticatedWithExternalAuth">
-    <div class="looking-for-account alert alert-info" *ngIf="signupAllowed === false" role="alert">
-      <h6 class="alert-heading" i18n>
-        If you are looking for an account…
-      </h6>
 
-      <div i18n>
-        Currently this instance doesn't allow for user registration, but you can find an instance
-        that gives you the possibility to sign up for an account and upload your videos there.
+    <div class="alert pt-alert-primary" role="alert">
+      <h5 class="alert-heading" i18n>
+        Logging into an account lets you publish content
+      </h5>
 
-        <br />
+      <p *ngIf="signupAllowed" i18n>
+        This instance allows registration. However, be careful to check the <a class="link-orange terms-anchor d-inline" (click)="onTermsClick($event, instanceInformation)" href='#'>Terms</a><a class="terms-link" target="_blank" routerLink="/about/instance" fragment="terms">Terms</a> before creating an account.
+        You may also search for another instance to match your exact needs at: <a class="link-orange" href="https://joinpeertube.org/instances" target="_blank" rel="noopener noreferrer">https://joinpeertube.org/instances</a>.
+      </p>
 
-        Find yours among multiple instances at <a class="alert-link" href="https://joinpeertube.org/instances" target="_blank" rel="noopener noreferrer">https://joinpeertube.org/instances</a>.
-      </div>
+      <p *ngIf="!signupAllowed" i18n>
+        Currently this instance doesn't allow for user registration, you may check the <a class="link-orange" (click)="onTermsClick($event, instanceInformation)" href='#'>Terms</a> for more details or find an instance that gives you the possibility to sign up for an account and upload your videos there.
+        Find yours among multiple instances at: <a class="link-orange" href="https://joinpeertube.org/instances" target="_blank" rel="noopener noreferrer">https://joinpeertube.org/instances</a>.
+      </p>
     </div>
 
-    <div *ngIf="error" class="alert alert-danger">{{ error }}
-      <span *ngIf="error === 'User email is not verified.'"> <a i18n routerLink="/verify-account/ask-send-email">Request new verification email.</a></span>
+    <div class="alert alert-danger" i18n *ngIf="externalAuthError">
+      Sorry but there was an issue with the external login process. Please <a class="link-orange" routerLink="/about">contact an administrator</a>.
     </div>
 
-    <div class="login-form-and-externals">
+    <div *ngIf="error" class="alert alert-danger">
+      {{ error }}
 
-      <form role="form" (ngSubmit)="login()" [formGroup]="form">
-        <div class="form-group">
-          <div>
-            <label i18n for="username">User</label>
-            <input
-              type="text" id="username" i18n-placeholder placeholder="Username or email address" required tabindex="1"
-              formControlName="username" class="form-control" [ngClass]="{ 'input-error': formErrors['username'] }" #usernameInput
-            >
-            <a i18n *ngIf="signupAllowed === true" routerLink="/signup" class="create-an-account">
-              or create an account
-            </a>
+      <a *ngIf="error === 'User email is not verified.'" class="ms-1 link-orange" i18n routerLink="/verify-account/ask-send-email">
+        Request new verification email
+      </a>
+    </div>
+
+    <div class="wrapper">
+      <div class="login-form-and-externals">
+
+        <form class="w-100 m-0" myPluginSelector pluginSelectorId="login-form" role="form" (ngSubmit)="login()" [formGroup]="form">
+          <ng-container *ngIf="!otpStep">
+            <div class="form-group">
+              <div>
+                <label i18n for="username">Username or email address</label>
+                <input
+                  type="text" id="username" i18n-placeholder placeholder="Example: john@example.com" required tabindex="1"
+                  formControlName="username" class="form-control" [ngClass]="{ 'input-error': formErrors['username'] }" myAutofocus
+                >
+              </div>
+
+              <div *ngIf="formErrors.username" class="form-error">{{ formErrors.username }}</div>
+
+              <div *ngIf="hasUsernameUppercase()" i18n class="form-warning">
+                ⚠️ Most email addresses do not include capital letters.
+              </div>
+            </div>
+
+            <div class="form-group">
+              <label i18n for="password">Password</label>
+
+              <my-input-text
+                formControlName="password" inputId="password" i18n-placeholder placeholder="Password"
+                [formError]="formErrors['password']" autocomplete="current-password" [tabindex]="2"
+              ></my-input-text>
+            </div>
+          </ng-container>
+
+          <div *ngIf="otpStep" class="form-group">
+            <p i18n>Enter the two-factor code generated by your phone app:</p>
+
+            <label i18n for="otp-token">Two factor authentication token</label>
+
+            <my-input-text
+              #otpTokenInput
+              [show]="true" formControlName="otp-token" inputId="otp-token"
+              [formError]="formErrors['otp-token']" autocomplete="otp-token"
+            ></my-input-text>
           </div>
 
-          <div *ngIf="formErrors.username" class="form-error">
-            {{ formErrors.username }}
+          <input type="submit" class="peertube-button orange-button w-100" i18n-value value="Login" [disabled]="!form.valid">
+
+          <div *ngIf="!otpStep" class="additional-links d-flex justify-content-center mt-4 mb-5">
+            <button i18n class="button-unstyle link-orange mx-3" (click)="openForgotPasswordModal()" i18n-title title="Click here to reset your password">
+              I forgot my password
+            </button>
+
+            <ng-container *ngIf="signupAllowed">
+              <span class="lh-1">·</span>
+              <a i18n routerLink="/signup" class="link-orange mx-3">Create an account</a>
+            </ng-container>
           </div>
-        </div>
+        </form>
+
+        <div class="external-login-blocks" *ngIf="getExternalLogins().length !== 0">
+          <div class="fw-semibold" i18n>Or sign in with</div>
 
-        <div class="form-group">
-          <label i18n for="password">Password</label>
           <div>
-            <my-input-toggle-hidden formControlName="password" id="password"
-                                    i18n-placeholder placeholder="Password"
-                                    [ngClass]="{ 'input-error': formErrors['password'] }"
-                                    autocomplete="current-password"></my-input-toggle-hidden>
-            <a i18n-title class="forgot-password-button" (click)="openForgotPasswordModal()" title="Click here to reset your password">I forgot my password</a>
-          </div>
-          <div *ngIf="formErrors.password" class="form-error">
-            {{ formErrors.password }}
+            <a class="external-login-block" *ngFor="let auth of getExternalLogins()" [href]="getAuthHref(auth)" role="button">
+              {{ auth.authDisplayName }}
+            </a>
           </div>
         </div>
+      </div>
 
-        <input type="submit" i18n-value value="Login" [disabled]="!form.valid">
-      </form>
-
-      <div class="external-login-blocks" *ngIf="getExternalLogins().length !== 0">
-        <div class="block-title" i18n>Or sign in with</div>
-
-        <div>
-          <a class="external-login-block" *ngFor="let auth of getExternalLogins()" [href]="getAuthHref(auth)" role="button">
-            {{ auth.authDisplayName }}
-          </a>
-        </div>
+      <div #instanceInformation class="instance-information">
+        <my-instance-about-accordion
+          #instanceAboutAccordion
+          [displayInstanceName]="false"
+          (init)="onInstanceAboutAccordionInit($event)" [panels]="instanceInformationPanels"
+          pluginScope="login" pluginHook="filter:login.instance-about-plugin-panels.create.result"
+        ></my-instance-about-accordion>
       </div>
     </div>
-
   </ng-container>
 </div>
 
     <my-global-icon iconName="cross" aria-label="Close" role="button" (click)="hideForgotPasswordModal()"></my-global-icon>
   </div>
 
-  <div class="modal-body">
+  <div class="modal-body text-start">
 
     <div *ngIf="isEmailDisabled()" class="alert alert-danger" i18n>
       We are sorry, you cannot recover your password because your instance administrator did not configure the PeerTube email system.
     </div>
 
-    <div *ngIf="!isEmailDisabled()" class="forgot-password-instructions" i18n>
+    <div *ngIf="!isEmailDisabled()" class="mb-4" i18n>
       Enter your email address and we will send you a link to reset your password.
     </div>
 
 
   <div class="modal-footer inputs">
     <input
-      type="button" role="button" i18n-value value="Cancel" class="action-button action-button-cancel"
+      type="button" role="button" i18n-value value="Cancel" class="peertube-button d-none d-sm-block"
       (click)="hideForgotPasswordModal()" (key.enter)="hideForgotPasswordModal()"
     >
 
     <input
-      type="submit" i18n-value="Password reset button" value="Reset" class="action-button-submit"
+      type="submit" i18n-value="Password reset button" value="Reset" class="peertube-button orange-button"
       (click)="askResetPassword()" [disabled]="!forgotPasswordEmailInput.validity.valid"
     >
   </div>