diff options
Diffstat (limited to 'client/src')
7 files changed, 79 insertions, 1 deletions
diff --git a/client/src/app/+my-account/my-account-settings/my-account-danger-zone/index.ts b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/index.ts new file mode 100644 index 000000000..88a39bb97 --- /dev/null +++ b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/index.ts | |||
@@ -0,0 +1 @@ | |||
export * from './my-account-danger-zone.component' | |||
diff --git a/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.html b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.html new file mode 100644 index 000000000..8caff972f --- /dev/null +++ b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.html | |||
@@ -0,0 +1,5 @@ | |||
1 | <div class="delete-me"> | ||
2 | <p>Once you delete your account, there is no going back. Please be certain.</p> | ||
3 | |||
4 | <button (click)="deleteMe()">Delete your account</button> | ||
5 | </div> \ No newline at end of file | ||
diff --git a/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.scss b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.scss new file mode 100644 index 000000000..0ca310468 --- /dev/null +++ b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.scss | |||
@@ -0,0 +1,11 @@ | |||
1 | @import '_variables'; | ||
2 | @import '_mixins'; | ||
3 | |||
4 | .delete-me { | ||
5 | font-size: 15px; | ||
6 | |||
7 | button { | ||
8 | @include peertube-button; | ||
9 | @include grey-button; | ||
10 | } | ||
11 | } \ No newline at end of file | ||
diff --git a/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts new file mode 100644 index 000000000..63a121f64 --- /dev/null +++ b/client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts | |||
@@ -0,0 +1,46 @@ | |||
1 | import { Component, Input } from '@angular/core' | ||
2 | import { NotificationsService } from 'angular2-notifications' | ||
3 | import { AuthService, ConfirmService, RedirectService } from '../../../core' | ||
4 | import { UserService } from '../../../shared' | ||
5 | import { I18n } from '@ngx-translate/i18n-polyfill' | ||
6 | import { User } from '@app/shared' | ||
7 | |||
8 | @Component({ | ||
9 | selector: 'my-account-danger-zone', | ||
10 | templateUrl: './my-account-danger-zone.component.html', | ||
11 | styleUrls: [ './my-account-danger-zone.component.scss' ] | ||
12 | }) | ||
13 | export class MyAccountDangerZoneComponent { | ||
14 | @Input() user: User = null | ||
15 | |||
16 | constructor ( | ||
17 | private authService: AuthService, | ||
18 | private notificationsService: NotificationsService, | ||
19 | private userService: UserService, | ||
20 | private confirmService: ConfirmService, | ||
21 | private redirectService: RedirectService, | ||
22 | private i18n: I18n | ||
23 | ) { } | ||
24 | |||
25 | async deleteMe () { | ||
26 | const res = await this.confirmService.confirmWithInput( | ||
27 | this.i18n('Are you sure you want to delete your account? This will delete all you data, including channels, videos etc.'), | ||
28 | this.i18n('Type your username to confirm'), | ||
29 | this.user.username, | ||
30 | this.i18n('Delete your account'), | ||
31 | this.i18n('Delete my account') | ||
32 | ) | ||
33 | if (res === false) return | ||
34 | |||
35 | this.userService.deleteMe().subscribe( | ||
36 | () => { | ||
37 | this.notificationsService.success(this.i18n('Success'), this.i18n('Your account is deleted.')) | ||
38 | |||
39 | this.authService.logout() | ||
40 | this.redirectService.redirectToHomepage() | ||
41 | }, | ||
42 | |||
43 | err => this.notificationsService.error(this.i18n('Error'), err.message) | ||
44 | ) | ||
45 | } | ||
46 | } | ||
diff --git a/client/src/app/+my-account/my-account-settings/my-account-settings.component.html b/client/src/app/+my-account/my-account-settings/my-account-settings.component.html index ff08cb777..c7e23cd1f 100644 --- a/client/src/app/+my-account/my-account-settings/my-account-settings.component.html +++ b/client/src/app/+my-account/my-account-settings/my-account-settings.component.html | |||
@@ -14,3 +14,6 @@ | |||
14 | 14 | ||
15 | <div i18n class="account-title">Video settings</div> | 15 | <div i18n class="account-title">Video settings</div> |
16 | <my-account-video-settings [user]="user" [userInformationLoaded]="userInformationLoaded"></my-account-video-settings> | 16 | <my-account-video-settings [user]="user" [userInformationLoaded]="userInformationLoaded"></my-account-video-settings> |
17 | |||
18 | <div i18n class="account-title">Danger zone</div> | ||
19 | <my-account-danger-zone [user]="user"></my-account-danger-zone> \ No newline at end of file | ||
diff --git a/client/src/app/+my-account/my-account.module.ts b/client/src/app/+my-account/my-account.module.ts index 5403ab649..29b49e8d9 100644 --- a/client/src/app/+my-account/my-account.module.ts +++ b/client/src/app/+my-account/my-account.module.ts | |||
@@ -13,6 +13,7 @@ import { MyAccountVideoChannelCreateComponent } from '@app/+my-account/my-accoun | |||
13 | import { MyAccountVideoChannelUpdateComponent } from '@app/+my-account/my-account-video-channels/my-account-video-channel-update.component' | 13 | import { MyAccountVideoChannelUpdateComponent } from '@app/+my-account/my-account-video-channels/my-account-video-channel-update.component' |
14 | import { ActorAvatarInfoComponent } from '@app/+my-account/shared/actor-avatar-info.component' | 14 | import { ActorAvatarInfoComponent } from '@app/+my-account/shared/actor-avatar-info.component' |
15 | import { MyAccountVideoImportsComponent } from '@app/+my-account/my-account-video-imports/my-account-video-imports.component' | 15 | import { MyAccountVideoImportsComponent } from '@app/+my-account/my-account-video-imports/my-account-video-imports.component' |
16 | import { MyAccountDangerZoneComponent } from '@app/+my-account/my-account-settings/my-account-danger-zone' | ||
16 | 17 | ||
17 | @NgModule({ | 18 | @NgModule({ |
18 | imports: [ | 19 | imports: [ |
@@ -32,7 +33,8 @@ import { MyAccountVideoImportsComponent } from '@app/+my-account/my-account-vide | |||
32 | MyAccountVideoChannelCreateComponent, | 33 | MyAccountVideoChannelCreateComponent, |
33 | MyAccountVideoChannelUpdateComponent, | 34 | MyAccountVideoChannelUpdateComponent, |
34 | ActorAvatarInfoComponent, | 35 | ActorAvatarInfoComponent, |
35 | MyAccountVideoImportsComponent | 36 | MyAccountVideoImportsComponent, |
37 | MyAccountDangerZoneComponent | ||
36 | ], | 38 | ], |
37 | 39 | ||
38 | exports: [ | 40 | exports: [ |
diff --git a/client/src/app/shared/users/user.service.ts b/client/src/app/shared/users/user.service.ts index 365a21df7..e6dc3dbf8 100644 --- a/client/src/app/shared/users/user.service.ts +++ b/client/src/app/shared/users/user.service.ts | |||
@@ -39,6 +39,16 @@ export class UserService { | |||
39 | ) | 39 | ) |
40 | } | 40 | } |
41 | 41 | ||
42 | deleteMe () { | ||
43 | const url = UserService.BASE_USERS_URL + 'me' | ||
44 | |||
45 | return this.authHttp.delete(url) | ||
46 | .pipe( | ||
47 | map(this.restExtractor.extractDataBool), | ||
48 | catchError(err => this.restExtractor.handleError(err)) | ||
49 | ) | ||
50 | } | ||
51 | |||
42 | changeAvatar (avatarForm: FormData) { | 52 | changeAvatar (avatarForm: FormData) { |
43 | const url = UserService.BASE_USERS_URL + 'me/avatar/pick' | 53 | const url = UserService.BASE_USERS_URL + 'me/avatar/pick' |
44 | 54 | ||