UNPKG

globular-mvc

Version:

Generic template to create web-application that made use of globular as backend and materialize as css (wrap in web-component's)

327 lines (272 loc) 15.7 kB
import { Settings } from "./Settings" import { SettingsMenu, SettingsPanel, ComplexSetting, LinkSetting, EmailSetting, ActionSetting, ReadOnlyStringSetting, StringListSetting, StringSetting, DropdownSetting, TextAreaSetting, NumberSetting } from "./components/Settings" import * as resource from "globular-web-client/resource/resource_pb" import { Application } from "./Application"; import { SaveConfigRequest } from "globular-web-client/admin/admin_pb"; import { Model } from "./Model"; import { ApplicationView } from "./ApplicationView"; export class ServerGeneralSettings extends Settings { private config: any; private needSave: boolean; constructor(settingsMenu: SettingsMenu, settingsPanel: SettingsPanel) { super(settingsMenu, settingsPanel); //ApplicationView.displayMessage("The server will now restart...", 3000) // make sure the configuration is not the actual server configuration this.config = JSON.parse(JSON.stringify(Model.globular.config)) delete this.config["Services"] // do not display services configuration here... Model.globular.eventHub.subscribe("save_settings_evt", uuid => { }, evt => { this.save() }, true) // Create the settings menu and panel here let generalSettingsMenuItem = settingsMenu.appendSettingsMenuItem("settings", "General"); // Create General informations setting's let serverSettingsPage = <any>settingsPanel.appendSettingsPage("General"); // Create general server settings ... let generalSettings = serverSettingsPage.appendSettings("General", "Globular Server General Settings"); // Set the name of the server. let nameSetting = new StringSetting("Name", "The Globular server name") nameSetting.setValue(this.config.Name) generalSettings.addSetting(nameSetting) // nameSetting.onchange = () => { this.config.Name = nameSetting.getValue() this.needSave = true } let macSetting = new ReadOnlyStringSetting("MAC Address", "The Globular server MAC addresse") macSetting.setValue(this.config.Mac) generalSettings.addSetting(macSetting) let versionSetting = new ReadOnlyStringSetting("Version", "The Globular server version number") versionSetting.setValue(this.config.Version) generalSettings.addSetting(versionSetting) let buildSetting = new ReadOnlyStringSetting("Build", "The Globular server build number") buildSetting.setValue(this.config.Build) generalSettings.addSetting(buildSetting) let platformSetting = new ReadOnlyStringSetting("Platfrom", "The server operating system and architecture") platformSetting.setValue(this.config.Platform) generalSettings.addSetting(platformSetting) // Now the port range. // The user name. let portRangeSetting = new ComplexSetting("Grpc Port Range", "[" + this.config.PortsRange + "]") // Set the user setting complex content. let startPortSetting = new NumberSetting("from port number", "Enter the starting port number (inclusive)") startPortSetting.setValue(this.config.PortsRange.split("-")[0]) portRangeSetting.addSetting(startPortSetting) let endPortSetting = new NumberSetting("to port number", "Enter ending port number (inclusive)") endPortSetting.setValue(this.config.PortsRange.split("-")[1]) portRangeSetting.addSetting(endPortSetting) startPortSetting.onchange = endPortSetting.onchange = () => { this.config.PortsRange = startPortSetting.getValue() + "-" + endPortSetting.getValue() portRangeSetting.setDescription("[" + this.config.PortsRange + "]") this.needSave = true } generalSettings.addSetting(portRangeSetting) let watchForUpdateSetting = new NumberSetting("Update Delay", "Delay before watch for update in seconds") watchForUpdateSetting.setValue(this.config.WatchUpdateDelay) generalSettings.addSetting(watchForUpdateSetting) watchForUpdateSetting.onchange = () => { this.config.WatchUpdateDelay = parseInt(watchForUpdateSetting.getValue()) this.needSave = true } let sessionTimeoutSetting = new NumberSetting("Session timeout", "The time tokens will be valid in seconds") sessionTimeoutSetting.setValue(this.config.SessionTimeout) generalSettings.addSetting(sessionTimeoutSetting) sessionTimeoutSetting.onchange = () => { this.config.SessionTimeout = parseInt(sessionTimeoutSetting.getValue()) this.needSave = true } let webSeverSettings = serverSettingsPage.appendSettings("Web Server", "Web server http settings"); // Set the protocol... let protocolSetting = new DropdownSetting("http/https", "Select the http server protocol") protocolSetting.setDropdownList(["http", "https"]) protocolSetting.setValue(this.config.Protocol) webSeverSettings.addSetting(protocolSetting) protocolSetting.onchange = () => { this.config.Protocol = protocolSetting.getValue() this.needSave = true } let indexApplicationSetting = new DropdownSetting("Index Application", "The default application to display on the server") webSeverSettings.addSetting(indexApplicationSetting) Application.getAllApplicationInfo((info: any) => { let applications = [""] for (var i = 0; i < info.length; i++) { let app = <resource.Application>(info[i]) applications.push(app.getName()) } indexApplicationSetting.setDropdownList(applications) }, (err: any) => { }) indexApplicationSetting.setValue(this.config.IndexApplication) indexApplicationSetting.onchange = () => { this.config.IndexApplication = indexApplicationSetting.getValue() this.needSave = true } // Now the http port... let httpPortSetting = new NumberSetting("http port number", "Enter the http port number") httpPortSetting.setValue(this.config.PortHttp) httpPortSetting.onchange = () => { this.config.PortHttp = parseInt(httpPortSetting.getValue()) this.needSave = true } webSeverSettings.addSetting(httpPortSetting) let httpsPortSetting = new NumberSetting("https port number", "Enter the https port number") httpsPortSetting.setValue(this.config.PortHttps) httpsPortSetting.onchange = () => { this.config.PortHttps = parseInt(httpsPortSetting.getValue()) this.needSave = true } webSeverSettings.addSetting(httpsPortSetting) let corsOriginsSettings_ = new ComplexSetting("Allowed Origins", "List of allowed Cross-origin") let corsOriginsSettings = new StringListSetting("Allowed Origins", "List of allowed Cross-origin") corsOriginsSettings.setValues(this.config.AllowedOrigins) corsOriginsSettings.onchange = () => { this.config.AllowedOrigins = corsOriginsSettings.getValues() this.needSave = true } corsOriginsSettings_.addSetting(corsOriginsSettings) webSeverSettings.addSetting(corsOriginsSettings_) let corsMethodsSettings_ = new ComplexSetting("Allowed Methods", "List of allowed Cross-method") let corsMethodsSettings = new StringListSetting("Allowed Methods", "List of allowed Cross-method") corsMethodsSettings.setValues(this.config.AllowedMethods) corsMethodsSettings.onchange = () => { this.config.AllowedMethods = corsMethodsSettings.getValues() this.needSave = true } corsMethodsSettings_.addSetting(corsMethodsSettings) webSeverSettings.addSetting(corsMethodsSettings_) let corsHeadersSettings_ = new ComplexSetting("Allowed Headers", "List of allowed Cross-header") let corsHeadersSettings = new StringListSetting("Allowed Headers", "List of allowed Cross-header") corsHeadersSettings.setValues(this.config.AllowedHeaders) corsHeadersSettings.onchange = () => { this.config.AllowedHeaders = corsHeadersSettings.getValues() this.needSave = true } corsHeadersSettings_.addSetting(corsHeadersSettings) webSeverSettings.addSetting(corsHeadersSettings_) // Now the dns informations. let discoveriesSettings = serverSettingsPage.appendSettings("Dicoveries", "Directories where to find new application and service packages."); let discoveriSettings_ = new StringListSetting("Discoveries", "") discoveriSettings_.setValues(this.config.Discoveries) discoveriSettings_.onchange = () => { this.config.Discoveries = discoveriSettings_.getValues() this.needSave = true } discoveriesSettings.addSetting(discoveriSettings_) // Now the dns informations. let dnsSeverSettings = serverSettingsPage.appendSettings("Domain", "Domain releated informations"); // Set the name of the server. let domainSetting = new StringSetting("Domain", "The server domain name. If a Name is set the domain will be Name.Domaim") let domain = this.config.Domain.replace(this.config.Name + ".", "") domainSetting.setValue(domain) domainSetting.onchange = () => { this.config.Domain = domainSetting.getValue() this.needSave = true } dnsSeverSettings.addSetting(domainSetting) let alternateDomainSettings = new StringListSetting("Alternate Domains", "List of alternate domain for the server") alternateDomainSettings.setValues(this.config.AlternateDomains) alternateDomainSettings.onchange = () => { this.config.AlternateDomains = alternateDomainSettings.getValues() this.needSave = true } dnsSeverSettings.addSetting(domainSetting) dnsSeverSettings.addSetting(alternateDomainSettings) let dnsSettings = new StringListSetting("DNS servers", "List of dns server at least tow...") dnsSettings.setValues(this.config.Dns) dnsSettings.onchange = () => { this.config.Dns = dnsSettings.getValues() this.needSave = true } dnsSeverSettings.addSetting(dnsSettings) // Server certificate setting. let certificateSettings = serverSettingsPage.appendSettings("Certificates", "TLS certificate(s) settings"); let certUrlSetting = new LinkSetting("Certificate", "Certificate URL") certUrlSetting.setValue("click to download") certUrlSetting.setUrl(this.config.CertURL) certificateSettings.addSetting(certUrlSetting) // Set the name of the server. let crtSetting = new StringSetting("Cerificate", "the certificate .crt file in the creds directory.") crtSetting.setValue(this.config.Certificate) certificateSettings.addSetting(crtSetting) // Empty it will force certificate regeneation... crtSetting.onchange = () => { this.config.Certificate = crtSetting.getValue() this.needSave = true } let crtBundleSetting = new StringSetting("Cerificate bundle", "the certificate ca bundle") crtBundleSetting.setValue(this.config.CertificateAuthorityBundle) certificateSettings.addSetting(crtBundleSetting) // Empty it will force certificate regeneation... crtBundleSetting.onchange = () => { this.config.CertificateAuthorityBundle = crtBundleSetting.getValue() this.needSave = true } let certExpirationDelaySetting = new NumberSetting("Expiration", "The number of day the certificate must be valid") certExpirationDelaySetting.setValue(this.config.CertExpirationDelay) certExpirationDelaySetting.onchange = () => { this.config.CertExpirationDelay = certExpirationDelaySetting.getValue() this.needSave = true } certificateSettings.addSetting(certExpirationDelaySetting) let certPasswordSetting = new StringSetting("Password", "Certificate password") certPasswordSetting.setValue(this.config.CertPassword) certPasswordSetting.onchange = () => { this.config.CertPassword = certPasswordSetting.getValue() this.needSave = true } certificateSettings.addSetting(certPasswordSetting) let certCountrySetting = new StringSetting("Country", "Country Codes are required when creating a Certificate Signing Request") certCountrySetting.setValue(this.config.Country) certCountrySetting.onchange = () => { this.config.Country = certCountrySetting.getValue() this.needSave = true } certificateSettings.addSetting(certCountrySetting) let certStateSetting = new StringSetting("State", "State Codes are required when creating a Certificate Signing Request") certStateSetting.setValue(this.config.State) certStateSetting.onchange = () => { this.config.State = certStateSetting.getValue() this.needSave = true } certificateSettings.addSetting(certStateSetting) let citySetting = new StringSetting("City", "City Codes are required when creating a Certificate Signing Request") citySetting.setValue(this.config.City) citySetting.onchange = () => { this.config.City = citySetting.getValue() this.needSave = true } certificateSettings.addSetting(citySetting) let certOrganizationSetting = new StringSetting("Organization", "Organization Codes are required when creating a Certificate Signing Request") certOrganizationSetting.setValue(this.config.Organization) certOrganizationSetting.onchange = () => { this.config.Organization = certOrganizationSetting.getValue() this.needSave = true } certificateSettings.addSetting(certOrganizationSetting) // Now the action. let renewCertificateAction = new ActionSetting("Renew", "Renew the certificate", () => { this.config.Certificate = "" this.config.CertificateAuthorityBundle = "" this.needSave = true this.save() }) certificateSettings.addSetting(renewCertificateAction) generalSettingsMenuItem.click() } save() { if(!this.needSave){ return } let saveRqst = new SaveConfigRequest let config = JSON.parse(JSON.stringify(this.config)) config.Domain = config.Domain.replace(config.Name + ".", "") saveRqst.setConfig(JSON.stringify(config)) Model.globular.adminService.saveConfig(saveRqst, { token: localStorage.getItem("user_token"), application: Model.application, domain: Model.domain, address: Model.address }).then(() => { }) .catch(err => { ApplicationView.displayMessage(err, 3000) }) } }