1 <h1 i18n
class=
"title-page-v2">
2 <strong class=
"underline-orange">{{ instanceName }}
</strong>
7 <div class=
"margin-content">
8 <ng-container *
ngIf=
"!externalAuthError && !isAuthenticatedWithExternalAuth">
10 <div class=
"alert pt-alert-primary" role=
"alert">
11 <h5 class=
"alert-heading" i18n
>
12 Logging into an account lets you publish content
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>.
20 <p *
ngIf=
"!signupAllowed" i18n
>
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.
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>.
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>.
30 <div *
ngIf=
"error" class=
"alert alert-danger">
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
39 <div class=
"login-form-and-externals">
41 <form myPluginSelector
pluginSelectorId=
"login-form" role=
"form" (ngSubmit)=
"login()" [formGroup]=
"form">
42 <ng-container *
ngIf=
"!otpStep">
43 <div class=
"form-group">
45 <label i18n
for=
"username">Username or email address
</label>
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
52 <div *
ngIf=
"formErrors.username" class=
"form-error">{{ formErrors.username }}
</div>
54 <div *
ngIf=
"hasUsernameUppercase()" i18n
class=
"form-warning">
55 ⚠️ Most email addresses do not include capital letters.
59 <div class=
"form-group">
60 <label i18n
for=
"password">Password
</label>
63 formControlName=
"password" inputId=
"password" i18n-placeholder
placeholder=
"Password"
64 [formError]=
"formErrors['password']" autocomplete=
"current-password" [tabindex]=
"2"
69 <div *
ngIf=
"otpStep" class=
"form-group">
70 <p i18n
>Enter the two-factor code generated by your phone app:
</p>
72 <label i18n
for=
"otp-token">Two factor authentication token
</label>
76 [show]=
"true" formControlName=
"otp-token" inputId=
"otp-token"
77 [formError]=
"formErrors['otp-token']" autocomplete=
"otp-token"
81 <input type=
"submit" class=
"peertube-button orange-button" i18n-value
value=
"Login" [disabled]=
"!form.valid">
83 <div *
ngIf=
"!otpStep" class=
"additional-links">
84 <a i18n
role=
"button" class=
"link-orange" (click)=
"openForgotPasswordModal()" i18n-title
title=
"Click here to reset your password">I forgot my password
</a>
86 <ng-container *
ngIf=
"signupAllowed">
88 <a i18n
routerLink=
"/signup" class=
"link-orange">Create an account
</a>
93 <div class=
"external-login-blocks" *
ngIf=
"getExternalLogins().length !== 0">
94 <div class=
"block-title" i18n
>Or sign in with
</div>
97 <a class=
"external-login-block" *
ngFor=
"let auth of getExternalLogins()" [href]=
"getAuthHref(auth)" role=
"button">
98 {{ auth.authDisplayName }}
104 <div #instanceInformation
class=
"instance-information">
105 <my-instance-about-accordion
106 [displayInstanceName]=
"false"
107 (init)=
"onInstanceAboutAccordionInit($event)" [panels]=
"instanceInformationPanels"
108 pluginScope=
"login" pluginHook=
"filter:login.instance-about-plugin-panels.create.result"
109 ></my-instance-about-accordion>
115 <ng-template #forgotPasswordModal
>
116 <div class=
"modal-header">
117 <h4 i18n
class=
"modal-title">Forgot your password
</h4>
119 <my-global-icon iconName=
"cross" aria-label=
"Close" role=
"button" (click)=
"hideForgotPasswordModal()"></my-global-icon>
122 <div class=
"modal-body">
124 <div *
ngIf=
"isEmailDisabled()" class=
"alert alert-danger" i18n
>
125 We are sorry, you cannot recover your password because your instance administrator did not configure the PeerTube email system.
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.
132 <div class=
"form-group" [hidden]=
"isEmailDisabled()">
133 <label i18n
for=
"forgot-password-email">Email
</label>
135 type=
"email" id=
"forgot-password-email" i18n-placeholder
placeholder=
"Email address" required
136 [(ngModel)]=
"forgotPasswordEmail" #forgotPasswordEmailInput
141 <div class=
"modal-footer inputs">
143 type=
"button" role=
"button" i18n-value
value=
"Cancel" class=
"peertube-button grey-button"
144 (click)=
"hideForgotPasswordModal()" (key.enter)=
"hideForgotPasswordModal()"
148 type=
"submit" i18n-value=
"Password reset button" value=
"Reset" class=
"peertube-button orange-button"
149 (click)=
"askResetPassword()" [disabled]=
"!forgotPasswordEmailInput.validity.valid"