From 1e437a2f8b48da9c184b4d126368674ef1bda6ad Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Sat, 31 Mar 2018 11:45:19 -0600 Subject: [PATCH] Add ability to add self-hosted IRC bridges --- .../add-selfhosted.component.html | 24 +++++++++++++ .../add-selfhosted.component.scss | 0 .../add-selfhosted.component.ts | 35 +++++++++++++++++++ web/app/admin/bridges/irc/irc.component.html | 2 +- web/app/admin/bridges/irc/irc.component.ts | 14 +++++++- web/app/app.module.ts | 3 ++ 6 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.html create mode 100644 web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.scss create mode 100644 web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.ts diff --git a/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.html b/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.html new file mode 100644 index 0000000..b9d0d3c --- /dev/null +++ b/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.html @@ -0,0 +1,24 @@ +
+
+

Add a new self-hosted IRC Bridge

+
+
+

Self-hosted IRC bridges must have provisioning enabled in the configuration.

+ + +
+ +
\ No newline at end of file diff --git a/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.scss b/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.ts b/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.ts new file mode 100644 index 0000000..c26e7af --- /dev/null +++ b/web/app/admin/bridges/irc/add-selfhosted/add-selfhosted.component.ts @@ -0,0 +1,35 @@ +import { Component } from "@angular/core"; +import { ToasterService } from "angular2-toaster"; +import { DialogRef, ModalComponent } from "ngx-modialog"; +import { BSModalContext } from "ngx-modialog/plugins/bootstrap"; +import { AdminIrcApiService } from "../../../../shared/services/admin/admin-irc-api.service"; + +export class AddSelfhostedIrcBridgeDialogContext extends BSModalContext { +} + +@Component({ + templateUrl: "./add-selfhosted.component.html", + styleUrls: ["./add-selfhosted.component.scss"], +}) +export class AdminIrcBridgeAddSelfhostedComponent implements ModalComponent { + + public isSaving = false; + public provisionUrl: string; + + constructor(public dialog: DialogRef, + private ircApi: AdminIrcApiService, + private toaster: ToasterService) { + } + + public add() { + this.isSaving = true; + this.ircApi.newSelfhosted(this.provisionUrl).then(() => { + this.toaster.pop("success", "IRC Bridge added"); + this.dialog.close(); + }).catch(err => { + console.error(err); + this.isSaving = false; + this.toaster.pop("error", "Failed to create IRC bridge"); + }); + } +} diff --git a/web/app/admin/bridges/irc/irc.component.html b/web/app/admin/bridges/irc/irc.component.html index d542354..5a324f7 100644 --- a/web/app/admin/bridges/irc/irc.component.html +++ b/web/app/admin/bridges/irc/irc.component.html @@ -25,7 +25,7 @@ {{ bridge.upstreamId ? "matrix.org's bridge" : "Self-hosted bridge" }} - ({{ bridge.adminUrl }}) + ({{ bridge.provisionUrl }}) {{ getEnabledNetworksString(bridge) }} diff --git a/web/app/admin/bridges/irc/irc.component.ts b/web/app/admin/bridges/irc/irc.component.ts index f29403b..ab46c26 100644 --- a/web/app/admin/bridges/irc/irc.component.ts +++ b/web/app/admin/bridges/irc/irc.component.ts @@ -6,6 +6,10 @@ import { AdminUpstreamApiService } from "../../../shared/services/admin/admin-up import { FE_IrcBridge } from "../../../shared/models/irc"; import { Modal, overlayConfigFactory } from "ngx-modialog"; import { AdminIrcBridgeNetworksComponent, IrcNetworksDialogContext } from "./networks/networks.component"; +import { + AddSelfhostedIrcBridgeDialogContext, + AdminIrcBridgeAddSelfhostedComponent +} from "./add-selfhosted/add-selfhosted.component"; @Component({ templateUrl: "./irc.component.html", @@ -87,7 +91,15 @@ export class AdminIrcBridgeComponent implements OnInit { } public addSelfHostedBridge() { - console.log("TODO: Dialog"); + this.modal.open(AdminIrcBridgeAddSelfhostedComponent, overlayConfigFactory({ + isBlocking: true, + size: 'lg', + }, AddSelfhostedIrcBridgeDialogContext)).result.then(() => { + this.reload().catch(err => { + console.error(err); + this.toaster.pop("error", "Failed to get an update IRC bridge list"); + }); + }); } public editNetworks(bridge: FE_IrcBridge) { diff --git a/web/app/app.module.ts b/web/app/app.module.ts index 5574b08..059d8c5 100644 --- a/web/app/app.module.ts +++ b/web/app/app.module.ts @@ -67,6 +67,7 @@ import { AdminBridgesComponent } from "./admin/bridges/bridges.component"; import { AdminIrcBridgeComponent } from "./admin/bridges/irc/irc.component"; import { AdminIrcApiService } from "./shared/services/admin/admin-irc-api.service"; import { AdminIrcBridgeNetworksComponent } from "./admin/bridges/irc/networks/networks.component"; +import { AdminIrcBridgeAddSelfhostedComponent } from "./admin/bridges/irc/add-selfhosted/add-selfhosted.component"; @NgModule({ imports: [ @@ -127,6 +128,7 @@ import { AdminIrcBridgeNetworksComponent } from "./admin/bridges/irc/networks/ne AdminBridgesComponent, AdminIrcBridgeComponent, AdminIrcBridgeNetworksComponent, + AdminIrcBridgeAddSelfhostedComponent, // Vendor ], @@ -157,6 +159,7 @@ import { AdminIrcBridgeNetworksComponent } from "./admin/bridges/irc/networks/ne AdminNebImgurConfigComponent, ConfigSimpleBotComponent, AdminIrcBridgeNetworksComponent, + AdminIrcBridgeAddSelfhostedComponent, ] }) export class AppModule {