]>
Commit | Line | Data |
---|---|---|
11056966 C |
1 | <h1 i18n class="title-page-v2"> |
2 | <strong class="underline-orange">{{ instanceName }}</strong> | |
3 | > | |
4 | Login | |
5 | </h1> | |
192ea60b | 6 | |
11056966 | 7 | <div class="margin-content"> |
bc90883f | 8 | <ng-container *ngIf="!externalAuthError && !isAuthenticatedWithExternalAuth"> |
11056966 C |
9 | |
10 | <div class="alert pt-alert-primary" role="alert"> | |
11 | <h5 class="alert-heading" i18n> | |
12 | Logging into an account lets you publish content | |
13 | </h5> | |
14 | ||
15 | <p *ngIf="signupAllowed" i18n> | |
16 | This instance allows registration. However, be careful to check the <a class="link-orange terms-anchor" (click)="onTermsClick($event, instanceInformation)" href='#'>Terms</a><a class="terms-link" target="_blank" routerLink="/about/instance" fragment="terms">Terms</a> before creating an account. | |
17 | 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>. | |
18 | </p> | |
19 | ||
20 | <p *ngIf="!signupAllowed" i18n> | |
6e391224 | 21 | 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. |
11056966 C |
22 | 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>. |
23 | </p> | |
4a8d113b | 24 | </div> |
b1794c53 | 25 | |
c4a05171 C |
26 | <div class="alert alert-danger" i18n *ngIf="externalAuthError"> |
27 | Sorry but there was an issue with the external login process. Please <a class="link-orange" routerLink="/about">contact an administrator</a>. | |
28 | </div> | |
29 | ||
30 | <div *ngIf="error" class="alert alert-danger"> | |
31 | {{ error }} | |
32 | ||
33 | <a *ngIf="error === 'User email is not verified.'" class="ms-1 link-orange" i18n routerLink="/verify-account/ask-send-email"> | |
34 | Request new verification email | |
35 | </a> | |
36 | </div> | |
37 | ||
40360c17 K |
38 | <div class="wrapper"> |
39 | <div class="login-form-and-externals"> | |
40 | ||
8afade26 | 41 | <form myPluginSelector pluginSelectorId="login-form" role="form" (ngSubmit)="login()" [formGroup]="form"> |
d12b40fb C |
42 | <ng-container *ngIf="!otpStep"> |
43 | <div class="form-group"> | |
44 | <div> | |
45 | <label i18n for="username">Username or email address</label> | |
46 | <input | |
47 | type="text" id="username" i18n-placeholder placeholder="Example: john@example.com" required tabindex="1" | |
48 | formControlName="username" class="form-control" [ngClass]="{ 'input-error': formErrors['username'] }" myAutofocus | |
49 | > | |
50 | </div> | |
51 | ||
52 | <div *ngIf="formErrors.username" class="form-error">{{ formErrors.username }}</div> | |
53 | ||
54 | <div *ngIf="hasUsernameUppercase()" i18n class="form-warning"> | |
55 | ⚠️ Most email addresses do not include capital letters. | |
56 | </div> | |
40360c17 K |
57 | </div> |
58 | ||
d12b40fb C |
59 | <div class="form-group"> |
60 | <label i18n for="password">Password</label> | |
7f28f2dd | 61 | |
d12b40fb C |
62 | <my-input-text |
63 | formControlName="password" inputId="password" i18n-placeholder placeholder="Password" | |
64 | [formError]="formErrors['password']" autocomplete="current-password" [tabindex]="2" | |
65 | ></my-input-text> | |
7f28f2dd | 66 | </div> |
d12b40fb C |
67 | </ng-container> |
68 | ||
69 | <div *ngIf="otpStep" class="form-group"> | |
70 | <p i18n>Enter the two-factor code generated by your phone app:</p> | |
2b084d70 | 71 | |
d12b40fb | 72 | <label i18n for="otp-token">Two factor authentication token</label> |
11056966 | 73 | |
75084782 | 74 | <my-input-text |
d12b40fb C |
75 | #otpTokenInput |
76 | [show]="true" formControlName="otp-token" inputId="otp-token" | |
77 | [formError]="formErrors['otp-token']" autocomplete="otp-token" | |
75084782 | 78 | ></my-input-text> |
ebefc902 | 79 | </div> |
40360c17 | 80 | |
266947e5 | 81 | <input type="submit" class="peertube-button orange-button" i18n-value value="Login" [disabled]="!form.valid"> |
1916c966 | 82 | |
d12b40fb | 83 | <div *ngIf="!otpStep" class="additional-links"> |
11056966 | 84 | <a i18n role="button" class="link-orange" (click)="openForgotPasswordModal()" i18n-title title="Click here to reset your password">I forgot my password</a> |
8406a9e8 | 85 | |
11056966 | 86 | <ng-container *ngIf="signupAllowed"> |
40360c17 | 87 | <span>·</span> |
11056966 C |
88 | <a i18n routerLink="/signup" class="link-orange">Create an account</a> |
89 | </ng-container> | |
40360c17 K |
90 | </div> |
91 | </form> | |
ebefc902 | 92 | |
40360c17 K |
93 | <div class="external-login-blocks" *ngIf="getExternalLogins().length !== 0"> |
94 | <div class="block-title" i18n>Or sign in with</div> | |
ebefc902 | 95 | |
40360c17 K |
96 | <div> |
97 | <a class="external-login-block" *ngFor="let auth of getExternalLogins()" [href]="getAuthHref(auth)" role="button"> | |
98 | {{ auth.authDisplayName }} | |
99 | </a> | |
100 | </div> | |
4a8d113b | 101 | </div> |
ecb4e35f | 102 | </div> |
897ec54d | 103 | |
40360c17 | 104 | <div #instanceInformation class="instance-information"> |
071f3e51 | 105 | <my-instance-about-accordion |
11056966 | 106 | [displayInstanceName]="false" |
071f3e51 C |
107 | (init)="onInstanceAboutAccordionInit($event)" [panels]="instanceInformationPanels" |
108 | pluginScope="login" pluginHook="filter:login.instance-about-plugin-panels.create.result" | |
109 | ></my-instance-about-accordion> | |
40360c17 K |
110 | </div> |
111 | </div> | |
4a8d113b | 112 | </ng-container> |
897ec54d | 113 | </div> |
ecb4e35f | 114 | |
63347a0f C |
115 | <ng-template #forgotPasswordModal> |
116 | <div class="modal-header"> | |
117 | <h4 i18n class="modal-title">Forgot your password</h4> | |
457bb213 C |
118 | |
119 | <my-global-icon iconName="cross" aria-label="Close" role="button" (click)="hideForgotPasswordModal()"></my-global-icon> | |
63347a0f | 120 | </div> |
ecb4e35f | 121 | |
63347a0f | 122 | <div class="modal-body"> |
3b3b1820 C |
123 | |
124 | <div *ngIf="isEmailDisabled()" class="alert alert-danger" i18n> | |
32d7f2b7 | 125 | We are sorry, you cannot recover your password because your instance administrator did not configure the PeerTube email system. |
3b3b1820 C |
126 | </div> |
127 | ||
ab0beac7 K |
128 | <div *ngIf="!isEmailDisabled()" class="forgot-password-instructions" i18n> |
129 | Enter your email address and we will send you a link to reset your password. | |
130 | </div> | |
131 | ||
3b3b1820 | 132 | <div class="form-group" [hidden]="isEmailDisabled()"> |
63347a0f C |
133 | <label i18n for="forgot-password-email">Email</label> |
134 | <input | |
135 | type="email" id="forgot-password-email" i18n-placeholder placeholder="Email address" required | |
136 | [(ngModel)]="forgotPasswordEmail" #forgotPasswordEmailInput | |
137 | > | |
138 | </div> | |
139 | </div> | |
ecb4e35f | 140 | |
63347a0f | 141 | <div class="modal-footer inputs"> |
a6d5ff76 | 142 | <input |
266947e5 | 143 | type="button" role="button" i18n-value value="Cancel" class="peertube-button grey-button" |
a6d5ff76 RK |
144 | (click)="hideForgotPasswordModal()" (key.enter)="hideForgotPasswordModal()" |
145 | > | |
ecb4e35f | 146 | |
63347a0f | 147 | <input |
266947e5 | 148 | type="submit" i18n-value="Password reset button" value="Reset" class="peertube-button orange-button" |
63347a0f C |
149 | (click)="askResetPassword()" [disabled]="!forgotPasswordEmailInput.validity.valid" |
150 | > | |
ecb4e35f | 151 | </div> |
63347a0f | 152 | </ng-template> |