diff --git a/ui/src/app/account/account.module.ts b/ui/src/app/account/account.module.ts
index af6d657e2..3942f2e8a 100644
--- a/ui/src/app/account/account.module.ts
+++ b/ui/src/app/account/account.module.ts
@@ -9,7 +9,8 @@ import { SettingsComponent } from './settings/settings.component'
import { SharedModule } from '../shared/shared.module'
import { PasswordComponent } from './password/password.component'
import { PasswordStrengthComponent } from './password/password-strength.component';
-import { PasswordResetFinishComponent } from './password/password-reset-finish.component'
+import { PasswordResetFinishComponent } from './password/password-reset-finish.component';
+import { ActivationComponent } from './activation/activation.component'
@NgModule({
declarations: [
@@ -19,6 +20,7 @@ import { PasswordResetFinishComponent } from './password/password-reset-finish.c
PasswordComponent,
PasswordStrengthComponent,
PasswordResetFinishComponent,
+ ActivationComponent,
],
imports: [SharedModule, CommonModule, ReactiveFormsModule, RouterModule.forChild(routes)],
})
diff --git a/ui/src/app/account/account.route.ts b/ui/src/app/account/account.route.ts
index 517f89720..c1930b3d6 100644
--- a/ui/src/app/account/account.route.ts
+++ b/ui/src/app/account/account.route.ts
@@ -5,6 +5,7 @@ import { SettingsComponent } from './settings/settings.component'
import { AuthGuard } from './auth.guard'
import { PasswordComponent } from './password/password.component'
import { PasswordResetFinishComponent } from './password/password-reset-finish.component'
+import { ActivationComponent } from './activation/activation.component'
export const routes: Routes = [
{
@@ -24,8 +25,8 @@ export const routes: Routes = [
component: PasswordResetFinishComponent,
data: {
authorities: [],
- pageTitle: 'global.menu.account.password.string'
- }
+ pageTitle: 'global.menu.account.password.string',
+ },
},
{
path: 'settings',
@@ -45,4 +46,12 @@ export const routes: Routes = [
},
canActivate: [AuthGuard],
},
+ {
+ path: 'activate',
+ component: ActivationComponent,
+ data: {
+ authorities: [],
+ pageTitle: 'activate.title.string',
+ },
+ },
]
diff --git a/ui/src/app/account/activation/activate.route.ts b/ui/src/app/account/activation/activate.route.ts
new file mode 100644
index 000000000..b9fe7e386
--- /dev/null
+++ b/ui/src/app/account/activation/activate.route.ts
@@ -0,0 +1,12 @@
+import { Route } from '@angular/router'
+
+import { ActivationComponent } from './activation.component'
+
+export const activationRoute: Route = {
+ path: 'activate',
+ component: ActivationComponent,
+ data: {
+ authorities: [],
+ pageTitle: 'activate.title.string',
+ },
+}
diff --git a/ui/src/app/account/activation/activation.component.html b/ui/src/app/account/activation/activation.component.html
new file mode 100644
index 000000000..db1b82de5
--- /dev/null
+++ b/ui/src/app/account/activation/activation.component.html
@@ -0,0 +1 @@
+
activation works!
diff --git a/ui/src/app/account/activation/activation.component.scss b/ui/src/app/account/activation/activation.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/ui/src/app/account/activation/activation.component.spec.ts b/ui/src/app/account/activation/activation.component.spec.ts
new file mode 100644
index 000000000..182c26eb5
--- /dev/null
+++ b/ui/src/app/account/activation/activation.component.spec.ts
@@ -0,0 +1,55 @@
+import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'
+
+import { ActivationComponent } from './activation.component'
+import { ActivationService } from './activation.service'
+import { ActivatedRoute } from '@angular/router'
+import { async, of, throwError } from 'rxjs'
+import { RouterTestingModule } from '@angular/router/testing'
+
+describe('ActivationComponent', () => {
+ let component: ActivationComponent
+ let fixture: ComponentFixture
+ let activationServiceSpy: jasmine.SpyObj
+
+ beforeEach(() => {
+ activationServiceSpy = jasmine.createSpyObj('ActivationService', ['get'])
+
+ TestBed.configureTestingModule({
+ declarations: [ActivationComponent],
+ imports: [RouterTestingModule],
+ providers: [{ provide: ActivationService, useValue: activationServiceSpy }],
+ }).compileComponents()
+
+ fixture = TestBed.createComponent(ActivationComponent)
+ component = fixture.componentInstance
+ fixture.detectChanges()
+
+ activationServiceSpy = TestBed.inject(ActivationService) as jasmine.SpyObj
+ })
+
+ it('should create', () => {
+ expect(component).toBeTruthy()
+ })
+
+ it('non-error response from server when sending key should indicate success', () => {
+ activationServiceSpy.get.and.returnValue(of({}))
+ component.ngOnInit()
+ expect(component.success).toBeTruthy()
+ expect(component.error).toBeFalsy()
+ })
+
+ it('error response from server when sending key should indicate failure', () => {
+ activationServiceSpy.get.and.returnValue(throwError(() => new Error('error')))
+ component.ngOnInit()
+
+ expect(component.success).toBeFalsy()
+ expect(component.error).toBeTruthy()
+ })
+})
+
+export class MockActivatedRoute extends ActivatedRoute {
+ constructor() {
+ super()
+ this.queryParams = of({ key: 'key' })
+ }
+}
diff --git a/ui/src/app/account/activation/activation.component.ts b/ui/src/app/account/activation/activation.component.ts
new file mode 100644
index 000000000..71fd0fc54
--- /dev/null
+++ b/ui/src/app/account/activation/activation.component.ts
@@ -0,0 +1,38 @@
+import { Component, OnInit } from '@angular/core'
+import { ActivatedRoute, Router } from '@angular/router'
+import { ActivationService } from './activation.service'
+
+@Component({
+ selector: 'app-activation',
+ templateUrl: './activation.component.html',
+ styleUrls: ['./activation.component.scss'],
+})
+export class ActivationComponent implements OnInit {
+ error: string | null = null
+ success: string | null = null
+
+ constructor(
+ private activationService: ActivationService,
+ private route: ActivatedRoute,
+ private router: Router
+ ) {}
+
+ ngOnInit() {
+ this.route.queryParams.subscribe((params) => {
+ this.activationService.get(params['key']).subscribe({
+ next: () => {
+ this.error = null
+ this.success = 'OK'
+ },
+ error: () => {
+ this.success = null
+ this.error = 'ERROR'
+ },
+ })
+ })
+ }
+
+ login() {
+ this.router.navigate(['/login'])
+ }
+}
diff --git a/ui/src/app/account/activation/activation.service.ts b/ui/src/app/account/activation/activation.service.ts
new file mode 100644
index 000000000..61c735a6c
--- /dev/null
+++ b/ui/src/app/account/activation/activation.service.ts
@@ -0,0 +1,14 @@
+import { Injectable } from '@angular/core'
+import { HttpClient, HttpParams } from '@angular/common/http'
+import { Observable } from 'rxjs'
+
+@Injectable({ providedIn: 'root' })
+export class ActivationService {
+ constructor(private http: HttpClient) {}
+
+ get(key: string): Observable {
+ return this.http.get('/services/userservice/api/activate', {
+ params: new HttpParams().set('key', key),
+ })
+ }
+}
diff --git a/ui/src/i18n/messages.cs.xlf b/ui/src/i18n/messages.cs.xlf
index bf73aff7c..36c5f55ee 100644
--- a/ui/src/i18n/messages.cs.xlf
+++ b/ui/src/i18n/messages.cs.xlf
@@ -70,8 +70,10 @@
-
- Slide of
+
+ Slide of
+
Currently selected slide number read by screen reader
node_modules/src/ngb-config.ts
@@ -287,8 +289,12 @@
-
- Přihlášení se nezdařilo! Zkontrolujte prosím své přihlašovací údaje a zkuste to znovu.
+
+ Přihlášení
+ se nezdařilo!
+ Zkontrolujte prosím své přihlašovací údaje a zkuste to znovu.
src/app/account/login/login.component.html
6
@@ -302,7 +308,8 @@
10
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
22
@@ -318,7 +325,8 @@
16
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
28
@@ -386,15 +394,21 @@
Obnovit vaše heslo
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
4
-
- E-mailová adresa není zaregistrovaná! Zkontrolujte ji prosím a zkuste to znovu
-
- src/app/account/password/password-reset-init.component.html
+
+ E-mailová
+ adresa není zaregistrovaná! Zkontrolujte ji prosím a zkuste to znovu
+
+
+ src/app/account/password/password-reset-init.component.html
7
@@ -402,7 +416,8 @@
Vložte e-mailovou adresu, kterou jste použili při registraci
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
11
@@ -410,7 +425,8 @@
Podrobnosti o tom, jak obnovit heslo, najdete v e-mailu.
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
15
@@ -418,7 +434,8 @@
Váš e-mail je povinný.
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
42
@@ -426,7 +443,8 @@
Váš email je neplatný.
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
49
@@ -434,7 +452,8 @@
Váš email musí mít alespoň 5 znaků.
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
56
@@ -442,7 +461,8 @@
Váš e-mail nesmí být delší než 50 znaků.
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
64
@@ -450,7 +470,8 @@
Obnovit heslo
- src/app/account/password/password-reset-init.component.html
+
+ src/app/account/password/password-reset-init.component.html
75
@@ -463,8 +484,10 @@
-
- Nastavení uloženo!
+
+ Nastavení
+ uloženo!
src/app/account/settings/settings.component.html
8
@@ -579,8 +602,12 @@
-
- Přidejte další stupeň zabezpečení do svého účtu členského portálu ORCID povolením dvoufázového ověření. Při každém přihlášení budete vyzváni k zadání šestimístného kódu, který zašleme do vámi preferované ověřovací aplikace.
+
+ Přidejte další stupeň zabezpečení do svého účtu členského portálu ORCID
+ povolením dvoufázového ověření. Při každém přihlášení budete vyzváni k zadání
+ šestimístného kódu, který zašleme do vámi preferované ověřovací aplikace.
src/app/account/settings/settings.component.html
144
@@ -603,16 +630,40 @@
-
- Nainstalujte si aplikaci pro dvoufázové ověřeníAplikace pro dvoufázové ověření je vyžadována, abyste vytvořili šestimístní kód a pomocí něj získali přístup ke svému účtu pokaždé, když se přihlásíte. Většina aplikací je pro mobilní zařízení. Některé jsou také dostupné jako desktopové a prohlížečové aplikace. Stáhněte a nainstalujte si vámi preferovanou aplikaci pro dvoufázové ověření jako například Google Authenticator, FreeOTP nebo Authy.
+
+ Nainstalujte si aplikaci pro dvoufázové ověřeníAplikace pro dvoufázové ověření je vyžadována,
+ abyste vytvořili šestimístní kód a pomocí něj získali přístup ke svému účtu pokaždé, když
+ se přihlásíte. Většina aplikací je pro mobilní zařízení. Některé jsou také dostupné jako
+ desktopové a prohlížečové aplikace. Stáhněte a nainstalujte si vámi preferovanou aplikaci
+ pro dvoufázové ověření jako například Google
+ Authenticator,
+ FreeOTP nebo Authy.
src/app/account/settings/settings.component.html
164
-
- Naskenujte tento QR kód vaším zařízenímOtěvřete svou aplikaci pro dvoufázové ověření a naskenujte obrázek níže.
+
+ Naskenujte tento QR kód vaším zařízenímOtěvřete svou aplikaci pro dvoufázové ověření a naskenujte
+ obrázek níže.
src/app/account/settings/settings.component.html
172
@@ -643,8 +694,14 @@
-
- Vložte šestimístní kód z aplikacePo naskenování QR kódu nebo vložení kódu z SMS se v aplikaci pro dvoufázové ověření zobrazí šestimístní kód. Vložte tento kód do pole níže a klikněte na tlačítko Uložit.
+
+ Vložte šestimístní kód z aplikacePo naskenování QR kódu nebo vložení kódu z SMS se v
+ aplikaci pro dvoufázové ověření zobrazí šestimístní kód. Vložte tento kód do pole níže a
+ klikněte na tlačítko Uložit.
src/app/account/settings/settings.component.html
203
@@ -667,8 +724,10 @@
-
- Poznamenejte si následující záložní kódy, toto je jediný případ, kdy se zobrazí.
+
+ Poznamenejte si následující záložní kódy, toto je jediný případ, kdy se
+ zobrazí.
src/app/account/settings/settings.component.html
226
@@ -868,23 +927,29 @@
- Heslo pro {{username}} (vy)undefined
+ Heslo pro (vy)
src/app/account/password/password.component.ts
33
-
- Heslo změněno!
+
+ Heslo
+ změněno!
src/app/account/password/password.component.html
7
-
- Došlo k chybě! Heslo nelze změnit.
+
+ Došlo
+ k chybě! Heslo
+ nelze změnit.
src/app/account/password/password.component.html
10
@@ -894,8 +959,9 @@
Heslo a jeho potvrzení nesouhlasí
- src/app/account/password/password-reset-finish.component.html
- 55
+
+ src/app/account/password/password-reset-finish.component.html
+ 62
src/app/account/password/password.component.html
@@ -922,8 +988,9 @@
Je potřeba vaše heslo
- src/app/account/password/password-reset-finish.component.html
- 84
+
+ src/app/account/password/password-reset-finish.component.html
+ 91
src/app/account/password/password.component.html
@@ -938,8 +1005,9 @@
Nové heslo
- src/app/account/password/password-reset-finish.component.html
- 63
+
+ src/app/account/password/password-reset-finish.component.html
+ 70
src/app/account/password/password.component.html
@@ -950,8 +1018,9 @@
Nové heslo
- src/app/account/password/password-reset-finish.component.html
- 70
+
+ src/app/account/password/password-reset-finish.component.html
+ 77
src/app/account/password/password.component.html
@@ -962,8 +1031,9 @@
Vaše heslo musí mít alespoň 4 znaky.
- src/app/account/password/password-reset-finish.component.html
- 91
+
+ src/app/account/password/password-reset-finish.component.html
+ 98
src/app/account/password/password.component.html
@@ -974,8 +1044,9 @@
Vaše heslo nesmí být delší než 50 znaků.
- src/app/account/password/password-reset-finish.component.html
- 98
+
+ src/app/account/password/password-reset-finish.component.html
+ 105
src/app/account/password/password.component.html
@@ -986,8 +1057,9 @@
Potvrzení nového hesla
- src/app/account/password/password-reset-finish.component.html
- 107
+
+ src/app/account/password/password-reset-finish.component.html
+ 114
src/app/account/password/password.component.html
@@ -998,8 +1070,9 @@
Potvrďte nové heslo
- src/app/account/password/password-reset-finish.component.html
- 114
+
+ src/app/account/password/password-reset-finish.component.html
+ 121
src/app/account/password/password.component.html
@@ -1010,8 +1083,9 @@
Musíte uvést potvrzovací heslo.
- src/app/account/password/password-reset-finish.component.html
- 128
+
+ src/app/account/password/password-reset-finish.component.html
+ 135
src/app/account/password/password.component.html
@@ -1022,8 +1096,9 @@
Vaše potvrzovací heslo musí mít alespoň 4 znaky.
- src/app/account/password/password-reset-finish.component.html
- 135
+
+ src/app/account/password/password-reset-finish.component.html
+ 142
src/app/account/password/password.component.html
@@ -1034,8 +1109,9 @@
Vaše potvrzovací heslo nesmí být delší než 50 znaků.
- src/app/account/password/password-reset-finish.component.html
- 142
+
+ src/app/account/password/password-reset-finish.component.html
+ 149
src/app/account/password/password.component.html
@@ -1062,55 +1138,79 @@
Znovu nastavit heslo
- src/app/account/password/password-reset-finish.component.html
+
+ src/app/account/password/password-reset-finish.component.html
4
-
- Chybí aktivační klíč.
-
- src/app/account/password/password-reset-finish.component.html
+
+ Chybí
+ aktivační klíč.
+
+
+ src/app/account/password/password-reset-finish.component.html
7
-
- Aktivační klíč je neplatný.
-
- src/app/account/password/password-reset-finish.component.html
+
+ Aktivační
+ klíč je neplatný.
+
+
+ src/app/account/password/password-reset-finish.component.html
11
-
- Vypršela platnost aktivačního klíče.
-
- src/app/account/password/password-reset-finish.component.html
+
+ Vypršela
+ platnost aktivačního klíče.
+
+
+ src/app/account/password/password-reset-finish.component.html
15
-
- ORCID Member Portal activation links are only valid for 24 hours. It looks like this link has expired.
+
+ ORCID Member Portal activation links are only valid for 24 hours. It
+ looks like this link has expired.
- src/app/account/password/password-reset-finish.component.html
+
+ src/app/account/password/password-reset-finish.component.html
20
-
- To make sure you can activate your Member Portal account we have sent a new activation link to your registered email address.
+
+ To make sure you can activate your Member Portal account we have sent a
+ new activation link to your registered email address.
- src/app/account/password/password-reset-finish.component.html
+
+ src/app/account/password/password-reset-finish.component.html
26
-
- If you are still having problems activating your account or have not received your new activation link, please contact us at membership@orcid.org.
-
- src/app/account/password/password-reset-finish.component.html
+
+ If you are still having problems activating your account or have not
+ received your new activation link, please contact us at membership@orcid.org.
+
+
+ src/app/account/password/password-reset-finish.component.html
32
@@ -1118,23 +1218,32 @@
Vyberte nové heslo
- src/app/account/password/password-reset-finish.component.html
+
+ src/app/account/password/password-reset-finish.component.html
39
-
- Heslo nelze znovu nastavit. Nezapomeňte, že žádost o heslo platí pouze 24 hodin.
+
+ Heslo nelze znovu nastavit. Nezapomeňte, že žádost o heslo platí pouze
+ 24 hodin.
- src/app/account/password/password-reset-finish.component.html
+
+ src/app/account/password/password-reset-finish.component.html
43
-
- Vaše heslo bylo obnoveno. Prosím
-
- src/app/account/password/password-reset-finish.component.html
+
+ Vaše
+ heslo bylo obnoveno.
+ Prosím
+
+
+ src/app/account/password/password-reset-finish.component.html
50
@@ -1142,16 +1251,18 @@
přihlásit se
- src/app/account/password/password-reset-finish.component.html
- 52
+
+ src/app/account/password/password-reset-finish.component.html
+ 58
Ověřte nové heslo
- src/app/account/password/password-reset-finish.component.html
- 152
+
+ src/app/account/password/password-reset-finish.component.html
+ 159
@@ -1182,10 +1293,332 @@
Síla hesla:
- src/app/account/password/password-strength.component.html
+
+ src/app/account/password/password-strength.component.html
+ 2
+
+
+
+
+ Pozvánka odeslána.
+
+ src/app/shared/pipe/localize.ts
+ 11
+
+
+
+
+ Zvací e-mail se nepodařilo odeslat.
+
+ src/app/shared/pipe/localize.ts
+ 13
+
+
+
+
+ Detaily uživatele
+
+ src/app/user/user-detail.component.html
+ 4
+
+
+
+
+ E-mail
+
+ src/app/user/user-detail.component.html
+ 9
+
+
+ src/app/user/user-update.component.html
+ 25
+
+
+ src/app/user/users.component.html
+ 61
+
+
+
+
+ Křestní jméno
+
+ src/app/user/user-detail.component.html
+ 13
+
+
+ src/app/user/user-update.component.html
+ 34
+
+
+ src/app/user/users.component.html
+ 65
+
+
+
+
+ Příjmení
+
+ src/app/user/user-detail.component.html
+ 17
+
+
+ src/app/user/user-update.component.html
+ 43
+
+
+ src/app/user/users.component.html
+ 73
+
+
+
+
+ Vlastník organizace
+
+ src/app/user/user-detail.component.html
+ 21
+
+
+ src/app/user/user-update.component.html
+ 60
+
+
+ src/app/user/users.component.html
+ 81
+
+
+
+
+ pravda
+
+ src/app/user/user-detail.component.html
+ 23
+
+
+ src/app/user/user-detail.component.html
+ 34
+
+
+ src/app/user/user-detail.component.html
+ 42
+
+
+
+
+ chybné
+
+ src/app/user/user-detail.component.html
+ 24
+
+
+ src/app/user/user-detail.component.html
+ 35
+
+
+ src/app/user/user-detail.component.html
+ 43
+
+
+
+
+ Organizace
+
+ src/app/user/user-detail.component.html
+ 28
+
+
+ src/app/user/user-update.component.html
+ 68
+
+
+ src/app/user/users.component.html
+ 89
+
+
+
+
+ Aktivováno
+
+ src/app/user/user-detail.component.html
+ 32
+
+
+ src/app/user/user-update.component.html
+ 95
+
+
+ src/app/user/users.component.html
+ 97
+
+
+
+
+ Správce
+
+ src/app/user/user-detail.component.html
+ 40
+
+
+ src/app/user/user-update.component.html
+ 105
+
+
+
+
+ Vytvořeno
+
+ src/app/user/user-detail.component.html
+ 48
+
+
+
+
+ podle
+
+ src/app/user/user-detail.component.html
+ 50
+
+
+ src/app/user/user-detail.component.html
+ 54
+
+
+
+
+ Naposledy upraveno
+
+ src/app/user/user-detail.component.html
+ 52
+
+
+ src/app/user/users.component.html
+ 105
+
+
+
+
+ Zpět
+
+ src/app/user/user-detail.component.html
+ 63
+
+
+
+
+ Upravit
+
+ src/app/user/user-detail.component.html
+ 70
+
+
+ src/app/user/users.component.html
+ 187
+
+
+
+
+ Odeslat aktivační e-mail znovu
+
+ src/app/user/user-detail.component.html
+ 77
+
+
+ src/app/user/user-update.component.html
+ 144
+
+
+ src/app/user/users.component.html
+ 178
+
+
+
+
+ Přidat nebo upravit uživatele
+
+ src/app/user/user-update.component.html
+ 4
+
+
+
+
+ Zrušit
+
+ src/app/user/user-update.component.html
+ 112
+
+
+
+
+ Uložit
+
+ src/app/user/user-update.component.html
+ 125
+
+
+ src/app/user/user-update.component.html
+ 135
+
+
+
+
+ Spravovat uživatele
+
+ src/app/user/users.component.html
2
+
+
+ Přidat uživatele
+
+ src/app/user/users.component.html
+ 11
+
+
+
+
+ Importovat uživatele z CSV
+
+ src/app/user/users.component.html
+ 20
+
+
+
+
+ Hledat...
+
+ src/app/user/users.component.html
+ 32
+
+
+
+
+ Žádní uživatelé k zobrazení
+
+ src/app/user/users.component.html
+ 51
+
+
+
+
+ Smazat
+
+ src/app/user/users.component.html
+ 198
+
+
+
+
+ Zobrazují se položky {{first}} – {{second}} z {{total}}
+
+ src/app/user/users.component.ts
+ 243
+
+