diff options
author | Chocobozzz <me@florianbigard.com> | 2021-01-14 14:13:23 +0100 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2021-01-15 10:49:10 +0100 |
commit | d43c6b1ffc5e6c895f9e9f9de6625f17a9755c20 (patch) | |
tree | 6bdcbe9893574e0b5a41c4854c7f986f346ba761 /client/src/app/shared | |
parent | b0a9743af0273835cdf594431a774c0f7d46b539 (diff) | |
download | PeerTube-d43c6b1ffc5e6c895f9e9f9de6625f17a9755c20.tar.gz PeerTube-d43c6b1ffc5e6c895f9e9f9de6625f17a9755c20.tar.zst PeerTube-d43c6b1ffc5e6c895f9e9f9de6625f17a9755c20.zip |
Implement remote interaction
Diffstat (limited to 'client/src/app/shared')
4 files changed, 36 insertions, 20 deletions
diff --git a/client/src/app/shared/form-validators/user-validators.ts b/client/src/app/shared/form-validators/user-validators.ts index a27290035..3f462ca3b 100644 --- a/client/src/app/shared/form-validators/user-validators.ts +++ b/client/src/app/shared/form-validators/user-validators.ts | |||
@@ -39,6 +39,17 @@ export const USER_EMAIL_VALIDATOR: BuildFormValidator = { | |||
39 | } | 39 | } |
40 | } | 40 | } |
41 | 41 | ||
42 | export const USER_HANDLE_VALIDATOR: BuildFormValidator = { | ||
43 | VALIDATORS: [ | ||
44 | Validators.required, | ||
45 | Validators.pattern(/@.+/) | ||
46 | ], | ||
47 | MESSAGES: { | ||
48 | 'required': $localize`Handle is required.`, | ||
49 | 'pattern': $localize`Handle must be valid (chocobozzz@example.com).` | ||
50 | } | ||
51 | } | ||
52 | |||
42 | export const USER_EXISTING_PASSWORD_VALIDATOR: BuildFormValidator = { | 53 | export const USER_EXISTING_PASSWORD_VALIDATOR: BuildFormValidator = { |
43 | VALIDATORS: [ | 54 | VALIDATORS: [ |
44 | Validators.required | 55 | Validators.required |
diff --git a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.html b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.html index acfec0a8e..a00c3d1c7 100644 --- a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.html +++ b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.html | |||
@@ -15,8 +15,7 @@ | |||
15 | <my-help *ngIf="!interact && showHelp"> | 15 | <my-help *ngIf="!interact && showHelp"> |
16 | <ng-template ptTemplate="customHtml"> | 16 | <ng-template ptTemplate="customHtml"> |
17 | <ng-container i18n> | 17 | <ng-container i18n> |
18 | You can subscribe to the channel via any ActivityPub-capable fediverse instance.<br /><br /> | 18 | You can subscribe to the channel via any ActivityPub-capable fediverse instance (PeerTube, Mastodon or Pleroma for example). |
19 | For instance with Mastodon or Pleroma you can type the channel URL in the search box and subscribe there. | ||
20 | </ng-container> | 19 | </ng-container> |
21 | </ng-template> | 20 | </ng-template> |
22 | </my-help> | 21 | </my-help> |
@@ -24,8 +23,7 @@ | |||
24 | <my-help *ngIf="showHelp && interact"> | 23 | <my-help *ngIf="showHelp && interact"> |
25 | <ng-template ptTemplate="customHtml"> | 24 | <ng-template ptTemplate="customHtml"> |
26 | <ng-container i18n> | 25 | <ng-container i18n> |
27 | You can interact with this via any ActivityPub-capable fediverse instance.<br /><br /> | 26 | You can interact with this via any ActivityPub-capable fediverse instance (PeerTube, Mastodon or Pleroma for example). |
28 | For instance with Mastodon or Pleroma you can type the current URL in the search box and interact with it there. | ||
29 | </ng-container> | 27 | </ng-container> |
30 | </ng-template> | 28 | </ng-template> |
31 | </my-help> | 29 | </my-help> |
diff --git a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts index b46c91bf8..666199523 100644 --- a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts +++ b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts | |||
@@ -1,6 +1,7 @@ | |||
1 | import { Component, Input, OnInit } from '@angular/core' | 1 | import { Component, Input, OnInit } from '@angular/core' |
2 | import { Notifier } from '@app/core' | ||
2 | import { FormReactive, FormValidatorService } from '@app/shared/shared-forms' | 3 | import { FormReactive, FormValidatorService } from '@app/shared/shared-forms' |
3 | import { USER_EMAIL_VALIDATOR } from '../form-validators/user-validators' | 4 | import { USER_HANDLE_VALIDATOR } from '../form-validators/user-validators' |
4 | 5 | ||
5 | @Component({ | 6 | @Component({ |
6 | selector: 'my-remote-subscribe', | 7 | selector: 'my-remote-subscribe', |
@@ -13,14 +14,15 @@ export class RemoteSubscribeComponent extends FormReactive implements OnInit { | |||
13 | @Input() showHelp = false | 14 | @Input() showHelp = false |
14 | 15 | ||
15 | constructor ( | 16 | constructor ( |
16 | protected formValidatorService: FormValidatorService | 17 | protected formValidatorService: FormValidatorService, |
18 | private notifier: Notifier | ||
17 | ) { | 19 | ) { |
18 | super() | 20 | super() |
19 | } | 21 | } |
20 | 22 | ||
21 | ngOnInit () { | 23 | ngOnInit () { |
22 | this.buildForm({ | 24 | this.buildForm({ |
23 | text: USER_EMAIL_VALIDATOR | 25 | text: USER_HANDLE_VALIDATOR |
24 | }) | 26 | }) |
25 | } | 27 | } |
26 | 28 | ||
@@ -35,22 +37,27 @@ export class RemoteSubscribeComponent extends FormReactive implements OnInit { | |||
35 | const address = this.form.value['text'] | 37 | const address = this.form.value['text'] |
36 | const [ username, hostname ] = address.split('@') | 38 | const [ username, hostname ] = address.split('@') |
37 | 39 | ||
40 | const protocol = window.location.protocol | ||
41 | |||
38 | // Should not have CORS error because https://tools.ietf.org/html/rfc7033#section-5 | 42 | // Should not have CORS error because https://tools.ietf.org/html/rfc7033#section-5 |
39 | fetch(`https://${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`) | 43 | fetch(`${protocol}//${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`) |
40 | .then(response => response.json()) | 44 | .then(response => response.json()) |
41 | .then(data => new Promise((resolve, reject) => { | 45 | .then(data => new Promise((res, rej) => { |
42 | if (data && Array.isArray(data.links)) { | 46 | if (!data || Array.isArray(data.links) === false) return rej() |
43 | const link: { template: string } = data.links.find((link: any) => { | 47 | |
44 | return link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe' | 48 | const link: { template: string } = data.links.find((link: any) => { |
45 | }) | 49 | return link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe' |
46 | 50 | }) | |
47 | if (link && link.template.includes('{uri}')) { | 51 | |
48 | resolve(link.template.replace('{uri}', encodeURIComponent(this.uri))) | 52 | if (link && link.template.includes('{uri}')) { |
49 | } | 53 | res(link.template.replace('{uri}', encodeURIComponent(this.uri))) |
50 | } | 54 | } |
51 | reject() | ||
52 | })) | 55 | })) |
53 | .then(window.open) | 56 | .then(window.open) |
54 | .catch(err => console.error(err)) | 57 | .catch(err => { |
58 | console.error(err) | ||
59 | |||
60 | this.notifier.error($localize`Cannot fetch information of this remote account`) | ||
61 | }) | ||
55 | } | 62 | } |
56 | } | 63 | } |
diff --git a/client/src/app/shared/shared-user-subscription/subscribe-button.component.html b/client/src/app/shared/shared-user-subscription/subscribe-button.component.html index 607a7e113..75cfc918b 100644 --- a/client/src/app/shared/shared-user-subscription/subscribe-button.component.html +++ b/client/src/app/shared/shared-user-subscription/subscribe-button.component.html | |||
@@ -59,7 +59,7 @@ | |||
59 | </button> | 59 | </button> |
60 | 60 | ||
61 | <button class="dropdown-item dropdown-item-neutral"> | 61 | <button class="dropdown-item dropdown-item-neutral"> |
62 | <div class="mb-1" i18n>Subscribe with a Mastodon account:</div> | 62 | <div class="mb-1" i18n>Subscribe with a remote account:</div> |
63 | <my-remote-subscribe [showHelp]="true" [uri]="uri"></my-remote-subscribe> | 63 | <my-remote-subscribe [showHelp]="true" [uri]="uri"></my-remote-subscribe> |
64 | </button> | 64 | </button> |
65 | 65 | ||