Try to fix remote mastodon interactions

pull/1935/head
Chocobozzz 2019-06-07 10:56:59 +02:00
parent 88ebb43310
commit 3ddb1ec555
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
6 changed files with 33 additions and 21 deletions

View File

@ -11,7 +11,7 @@ import {
styleUrls: ['./remote-subscribe.component.scss'] styleUrls: ['./remote-subscribe.component.scss']
}) })
export class RemoteSubscribeComponent extends FormReactive implements OnInit { export class RemoteSubscribeComponent extends FormReactive implements OnInit {
@Input() account: string @Input() uri: string
@Input() interact = false @Input() interact = false
@Input() showHelp = false @Input() showHelp = false
@ -42,19 +42,20 @@ export class RemoteSubscribeComponent extends FormReactive implements OnInit {
fetch(`https://${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`) fetch(`https://${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`)
.then(response => response.json()) .then(response => response.json())
.then(data => new Promise((resolve, reject) => { .then(data => new Promise((resolve, reject) => {
console.log(data)
if (data && Array.isArray(data.links)) { if (data && Array.isArray(data.links)) {
const link: { const link: { template: string } = data.links.find((link: any) => {
template: string return link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe'
} = data.links.find((link: any) => })
link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe')
if (link && link.template.includes('{uri}')) { if (link && link.template.includes('{uri}')) {
resolve(link.template.replace('{uri}', `acct:${this.account}`)) resolve(link.template.replace('{uri}', encodeURIComponent(this.uri)))
} }
} }
reject() reject()
})) }))
.then(window.open) .then(window.open)
.catch(() => window.open(`https://${hostname}/authorize_interaction?acct=${this.account}`)) .catch(err => console.error(err))
} }
} }

View File

@ -41,7 +41,7 @@
</button> </button>
<button class="dropdown-item" i18n>Subscribe with a Mastodon account:</button> <button class="dropdown-item" i18n>Subscribe with a Mastodon account:</button>
<my-remote-subscribe showHelp="true" account="{{ uriAccount }}"></my-remote-subscribe> <my-remote-subscribe showHelp="true" [uri]="channelUri"></my-remote-subscribe>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
@ -50,4 +50,4 @@
</div> </div>
</div> </div>
</div> </div>

View File

@ -28,19 +28,19 @@ export class SubscribeButtonComponent implements OnInit {
private videoService: VideoService private videoService: VideoService
) { } ) { }
get uri () { get channelHandle () {
return this.videoChannel.name + '@' + this.videoChannel.host return this.videoChannel.name + '@' + this.videoChannel.host
} }
get uriAccount () { get channelUri () {
return this.videoChannel.ownerAccount.name + '@' + this.videoChannel.host return this.videoChannel.url
} }
ngOnInit () { ngOnInit () {
if (this.isUserLoggedIn()) { if (this.isUserLoggedIn()) {
this.userSubscriptionService.doesSubscriptionExist(this.uri) this.userSubscriptionService.doesSubscriptionExist(this.channelHandle)
.subscribe( .subscribe(
res => this.subscribed = res[this.uri], res => this.subscribed = res[this.channelHandle],
err => this.notifier.error(err.message) err => this.notifier.error(err.message)
) )
@ -56,7 +56,7 @@ export class SubscribeButtonComponent implements OnInit {
} }
localSubscribe () { localSubscribe () {
this.userSubscriptionService.addSubscription(this.uri) this.userSubscriptionService.addSubscription(this.channelHandle)
.subscribe( .subscribe(
() => { () => {
this.subscribed = true this.subscribed = true
@ -78,7 +78,7 @@ export class SubscribeButtonComponent implements OnInit {
} }
localUnsubscribe () { localUnsubscribe () {
this.userSubscriptionService.deleteSubscription(this.uri) this.userSubscriptionService.deleteSubscription(this.channelHandle)
.subscribe( .subscribe(
() => { () => {
this.subscribed = false this.subscribed = false

View File

@ -41,7 +41,7 @@
<span i18n> <span i18n>
If you have an account on Mastodon or Pleroma, you can open it directly in their interface: If you have an account on Mastodon or Pleroma, you can open it directly in their interface:
</span> </span>
<my-remote-subscribe [interact]="true" [account]="getUrl()"></my-remote-subscribe> <my-remote-subscribe [interact]="true" [uri]="getUri()"></my-remote-subscribe>
</div> </div>
<div class="modal-footer inputs"> <div class="modal-footer inputs">
<span i18n class="action-button action-button-cancel" role="button" (click)="hideVisitorModal()"> <span i18n class="action-button action-button-cancel" role="button" (click)="hideVisitorModal()">

View File

@ -8,7 +8,6 @@ import { User } from '../../../shared/users'
import { Video } from '../../../shared/video/video.model' import { Video } from '../../../shared/video/video.model'
import { VideoComment } from './video-comment.model' import { VideoComment } from './video-comment.model'
import { VideoCommentService } from './video-comment.service' import { VideoCommentService } from './video-comment.service'
import { I18n } from '@ngx-translate/i18n-polyfill'
import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service' import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
import { VideoCommentValidatorsService } from '@app/shared/forms/form-validators/video-comment-validators.service' import { VideoCommentValidatorsService } from '@app/shared/forms/form-validators/video-comment-validators.service'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
@ -40,8 +39,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnInit {
private videoCommentService: VideoCommentService, private videoCommentService: VideoCommentService,
private authService: AuthService, private authService: AuthService,
private modalService: NgbModal, private modalService: NgbModal,
private router: Router, private router: Router
private i18n: I18n
) { ) {
super() super()
} }
@ -124,7 +122,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnInit {
return this.form.value['text'] return this.form.value['text']
} }
getUrl () { getUri () {
return window.location.href return window.location.href
} }

View File

@ -156,6 +156,19 @@ staticRouter.use('/.well-known/change-password',
} }
) )
staticRouter.use('/.well-known/host-meta',
(_, res: express.Response) => {
res.type('application/xml');
const xml = '<?xml version="1.0" encoding="UTF-8"?>\n' +
'<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">\n' +
` <Link rel="lrdd" type="application/xrd+xml" template="${WEBSERVER.URL}/.well-known/webfinger?resource={uri}"/>\n` +
'</XRD>'
res.send(xml).end()
}
)
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
export { export {