import { Component, OnInit, Input } from '@angular/core'; import { HttpErrorResponse } from '@angular/common/http'; import { Store } from '@ngxs/store'; import { RegisteredAppsStateModel, AppInfo, AddRegisteredApp } from '../../../states/registered-apps.state'; import { AuthService, CurrentAuthProcess } from '../../../services/auth.service'; import { AppData } from '../../../services/models/mastodon.interfaces'; import { NotificationService } from '../../../services/notification.service'; import { ToolsService } from '../../../services/tools.service'; @Component({ selector: 'app-add-new-account', templateUrl: './add-new-account.component.html', styleUrls: ['./add-new-account.component.scss'] }) export class AddNewAccountComponent implements OnInit { private blockList = ['gab.com', 'gab.ai', 'cyzed.com']; private comradeList = ['juche.town']; isComrade: boolean; isLoading: boolean; private instance: string; @Input() set setInstance(value: string) { this.instance = value.replace('http://', '').replace('https://', '').replace('/', '').toLowerCase().trim(); this.checkComrad(); this.checkInstanceMultiAccount(value); } get setInstance(): string { return this.instance; } constructor( private readonly toolsService: ToolsService, private readonly notificationService: NotificationService, private readonly authService: AuthService, private readonly store: Store) { } ngOnInit() { } checkComrad(): any { if (this.instance) { let cleanInstance = this.instance.replace('http://', '').replace('https://', '').toLowerCase(); for (let b of this.comradeList) { if (cleanInstance == b || cleanInstance.includes(`.${b}`)) { this.isComrade = true; return; } } } this.isComrade = false; } isInstanceMultiAccount: boolean; isInstanceMultiAccountLoading: boolean; checkInstanceMultiAccount(value: string) { if(value) { const instances: string[] = this.toolsService.getAllAccounts().map(x => x.instance); if(instances && instances.indexOf(value) > -1){ this.isInstanceMultiAccount = true; this.isInstanceMultiAccountLoading = true; setTimeout(() => { this.isInstanceMultiAccountLoading = false; }, 2000); } else { this.isInstanceMultiAccount = false; this.isInstanceMultiAccountLoading = false; } } } onSubmit(): boolean { if(this.isLoading || !this.instance || this.isInstanceMultiAccountLoading) return false; this.isLoading = true; this.checkBlockList(this.instance); this.checkAndCreateApplication(this.instance) .then((appData: AppData) => { this.redirectToInstanceAuthPage(this.instance, appData); }) .then(x => { setTimeout(() => { this.isLoading = false; }, 1000); }) .catch((err: HttpErrorResponse) => { this.isLoading = false; if (err instanceof HttpErrorResponse) { this.notificationService.notifyHttpError(err, null); } else if ((err).message === 'CORS') { this.notificationService.notify(null, null, 'Connection Error. It\'s usually a CORS issue with the server you\'re connecting to. Please check in the console and if so, contact your administrator with those informations.', true); } else { this.notificationService.notify(null, null, 'Unkown error', true); } }); return false; } private checkBlockList(instance: string) { let cleanInstance = instance.replace('http://', '').replace('https://', '').toLowerCase(); for (let b of this.blockList) { if (cleanInstance == b || cleanInstance.includes(`.${b}`)) { let content = '