diff --git a/Agent/Services/DeviceSocket.cs b/Agent/Services/DeviceSocket.cs index 65103749..4adc8e44 100644 --- a/Agent/Services/DeviceSocket.cs +++ b/Agent/Services/DeviceSocket.cs @@ -70,6 +70,8 @@ namespace Remotely.Agent.Services // The above can be caused by temporary issues on the server. So we'll do // nothing here and wait for it to get resolved. Logger.Write("There was an issue registering with the server. The server might be undergoing maintenance, or the supplied organization ID might be incorrect."); + await Task.Delay(TimeSpan.FromMinutes(1)); + await HubConnection.StopAsync(); return; } diff --git a/Server/Migrations/20200226021333_Initial.Designer.cs b/Server/Migrations/20200229022500_Initial.Designer.cs similarity index 98% rename from Server/Migrations/20200226021333_Initial.Designer.cs rename to Server/Migrations/20200229022500_Initial.Designer.cs index 39ae38bc..8a1098b6 100644 --- a/Server/Migrations/20200226021333_Initial.Designer.cs +++ b/Server/Migrations/20200229022500_Initial.Designer.cs @@ -10,7 +10,7 @@ using Remotely.Server.Data; namespace Remotely.Server.Migrations { [DbContext(typeof(ApplicationDbContext))] - [Migration("20200226021333_Initial")] + [Migration("20200229022500_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -516,9 +516,6 @@ namespace Remotely.Server.Migrations { b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); - b.Property("DeviceGroupID") - .HasColumnType("text"); - b.Property("IsAdministrator") .HasColumnType("boolean"); @@ -528,8 +525,6 @@ namespace Remotely.Server.Migrations b.Property("UserOptions") .HasColumnType("text"); - b.HasIndex("DeviceGroupID"); - b.HasIndex("OrganizationID"); b.HasIndex("UserName"); @@ -654,10 +649,6 @@ namespace Remotely.Server.Migrations modelBuilder.Entity("Remotely.Shared.Models.RemotelyUser", b => { - b.HasOne("Remotely.Shared.Models.DeviceGroup", null) - .WithMany("Users") - .HasForeignKey("DeviceGroupID"); - b.HasOne("Remotely.Shared.Models.Organization", "Organization") .WithMany("RemotelyUsers") .HasForeignKey("OrganizationID"); diff --git a/Server/Migrations/20200226021333_Initial.cs b/Server/Migrations/20200229022500_Initial.cs similarity index 97% rename from Server/Migrations/20200226021333_Initial.cs rename to Server/Migrations/20200229022500_Initial.cs index b4ffa354..3a6ff733 100644 --- a/Server/Migrations/20200226021333_Initial.cs +++ b/Server/Migrations/20200229022500_Initial.cs @@ -167,6 +167,41 @@ namespace Remotely.Server.Migrations onDelete: ReferentialAction.Restrict); }); + migrationBuilder.CreateTable( + name: "RemotelyUsers", + columns: table => new + { + Id = table.Column(nullable: false), + UserName = table.Column(maxLength: 256, nullable: true), + NormalizedUserName = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: true), + NormalizedEmail = table.Column(maxLength: 256, nullable: true), + EmailConfirmed = table.Column(nullable: false), + PasswordHash = table.Column(nullable: true), + SecurityStamp = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + PhoneNumber = table.Column(nullable: true), + PhoneNumberConfirmed = table.Column(nullable: false), + TwoFactorEnabled = table.Column(nullable: false), + LockoutEnd = table.Column(nullable: true), + LockoutEnabled = table.Column(nullable: false), + AccessFailedCount = table.Column(nullable: false), + Discriminator = table.Column(nullable: false), + UserOptions = table.Column(nullable: true), + OrganizationID = table.Column(nullable: true), + IsAdministrator = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_RemotelyUsers", x => x.Id); + table.ForeignKey( + name: "FK_RemotelyUsers_Organizations_OrganizationID", + column: x => x.OrganizationID, + principalTable: "Organizations", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateTable( name: "SharedFiles", columns: table => new @@ -233,48 +268,6 @@ namespace Remotely.Server.Migrations onDelete: ReferentialAction.Restrict); }); - migrationBuilder.CreateTable( - name: "RemotelyUsers", - columns: table => new - { - Id = table.Column(nullable: false), - UserName = table.Column(maxLength: 256, nullable: true), - NormalizedUserName = table.Column(maxLength: 256, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), - EmailConfirmed = table.Column(nullable: false), - PasswordHash = table.Column(nullable: true), - SecurityStamp = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - PhoneNumber = table.Column(nullable: true), - PhoneNumberConfirmed = table.Column(nullable: false), - TwoFactorEnabled = table.Column(nullable: false), - LockoutEnd = table.Column(nullable: true), - LockoutEnabled = table.Column(nullable: false), - AccessFailedCount = table.Column(nullable: false), - Discriminator = table.Column(nullable: false), - UserOptions = table.Column(nullable: true), - OrganizationID = table.Column(nullable: true), - IsAdministrator = table.Column(nullable: true), - DeviceGroupID = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_RemotelyUsers", x => x.Id); - table.ForeignKey( - name: "FK_RemotelyUsers_DeviceGroups_DeviceGroupID", - column: x => x.DeviceGroupID, - principalTable: "DeviceGroups", - principalColumn: "ID", - onDelete: ReferentialAction.Restrict); - table.ForeignKey( - name: "FK_RemotelyUsers_Organizations_OrganizationID", - column: x => x.OrganizationID, - principalTable: "Organizations", - principalColumn: "ID", - onDelete: ReferentialAction.Restrict); - }); - migrationBuilder.CreateTable( name: "AspNetUserClaims", columns: table => new @@ -477,11 +470,6 @@ namespace Remotely.Server.Migrations column: "NormalizedUserName", unique: true); - migrationBuilder.CreateIndex( - name: "IX_RemotelyUsers_DeviceGroupID", - table: "RemotelyUsers", - column: "DeviceGroupID"); - migrationBuilder.CreateIndex( name: "IX_RemotelyUsers_OrganizationID", table: "RemotelyUsers", @@ -540,10 +528,10 @@ namespace Remotely.Server.Migrations name: "AspNetRoles"); migrationBuilder.DropTable( - name: "RemotelyUsers"); + name: "DeviceGroups"); migrationBuilder.DropTable( - name: "DeviceGroups"); + name: "RemotelyUsers"); migrationBuilder.DropTable( name: "Organizations"); diff --git a/Server/Migrations/ApplicationDbContextModelSnapshot.cs b/Server/Migrations/ApplicationDbContextModelSnapshot.cs index cabdabd5..480c5e98 100644 --- a/Server/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/Server/Migrations/ApplicationDbContextModelSnapshot.cs @@ -514,9 +514,6 @@ namespace Remotely.Server.Migrations { b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); - b.Property("DeviceGroupID") - .HasColumnType("text"); - b.Property("IsAdministrator") .HasColumnType("boolean"); @@ -526,8 +523,6 @@ namespace Remotely.Server.Migrations b.Property("UserOptions") .HasColumnType("text"); - b.HasIndex("DeviceGroupID"); - b.HasIndex("OrganizationID"); b.HasIndex("UserName"); @@ -652,10 +647,6 @@ namespace Remotely.Server.Migrations modelBuilder.Entity("Remotely.Shared.Models.RemotelyUser", b => { - b.HasOne("Remotely.Shared.Models.DeviceGroup", null) - .WithMany("Users") - .HasForeignKey("DeviceGroupID"); - b.HasOne("Remotely.Shared.Models.Organization", "Organization") .WithMany("RemotelyUsers") .HasForeignKey("OrganizationID"); diff --git a/Server/Pages/Agents.cshtml b/Server/Pages/Agents.cshtml index efcad895..2c2ae1f1 100644 --- a/Server/Pages/Agents.cshtml +++ b/Server/Pages/Agents.cshtml @@ -5,7 +5,7 @@ }
-

Screen-Sharing Client

+

Instant Support Client

Instant desktop sharing. No account required.
diff --git a/Server/Startup.cs b/Server/Startup.cs index 0330776e..39268b0f 100644 --- a/Server/Startup.cs +++ b/Server/Startup.cs @@ -71,17 +71,20 @@ namespace Remotely.Server } else if (dbProvider == "postgresql") { - var connectionBuilder = new NpgsqlConnectionStringBuilder(Configuration.GetConnectionString("PostgreSQL")); - - // Password needs to be set in User Secrets in dev environment. + // Password should be set in User Secrets in dev environment. // See https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1 - if (IsDev) + if (!string.IsNullOrWhiteSpace(Configuration.GetValue("PostgresPassword"))) { + var connectionBuilder = new NpgsqlConnectionStringBuilder(Configuration.GetConnectionString("PostgreSQL")); connectionBuilder.Password = Configuration["PostgresPassword"]; + services.AddDbContext(options => + options.UseNpgsql(connectionBuilder.ConnectionString)); + } + else + { + services.AddDbContext(options => + options.UseNpgsql(Configuration.GetConnectionString("PostgreSQL"))); } - - services.AddDbContext(options => - options.UseNpgsql(connectionBuilder.ConnectionString)); } services.AddIdentity(options => options.Stores.MaxLengthForKeys = 128) diff --git a/Server/web.config b/Server/web.config index 926a1ad4..4a8f9ab4 100644 --- a/Server/web.config +++ b/Server/web.config @@ -1,9 +1,9 @@  - + diff --git a/Server/wwwroot/css/Themes/cyborg.custom.css b/Server/wwwroot/css/Themes/cyborg.custom.css index d3504e75..b7a987d7 100644 --- a/Server/wwwroot/css/Themes/cyborg.custom.css +++ b/Server/wwwroot/css/Themes/cyborg.custom.css @@ -131,4 +131,8 @@ span.label.code { } .chat-input { background-color: lightgray; +} + +#deviceGrid .fas:hover { + color: #2A9FD6 !important; } \ No newline at end of file diff --git a/Server/wwwroot/css/Themes/yeti.custom.css b/Server/wwwroot/css/Themes/yeti.custom.css index d39b6cc8..87b3d427 100644 --- a/Server/wwwroot/css/Themes/yeti.custom.css +++ b/Server/wwwroot/css/Themes/yeti.custom.css @@ -123,4 +123,8 @@ span.label.code { .chat-header { color: white; background-color: #008cba; +} + +#deviceGrid .fas:hover { + color: #008cba !important; } \ No newline at end of file diff --git a/Server/wwwroot/scripts/DataGrid.js b/Server/wwwroot/scripts/DataGrid.js index c6e64f2f..8337234c 100644 --- a/Server/wwwroot/scripts/DataGrid.js +++ b/Server/wwwroot/scripts/DataGrid.js @@ -3,6 +3,7 @@ import { Main } from "./Main.js"; import { DeviceGrid } from "./UI.js"; import { AddConsoleOutput } from "./Console.js"; import { CreateChatWindow } from "./Chat.js"; +import * as BrowserSockets from "./BrowserSockets.js"; export const DataSource = new Array(); export const FilterOptions = new class { constructor() { @@ -66,7 +67,8 @@ export function AddOrUpdateDevice(device) { ${device.TotalMemory.toLocaleString()} - + + `; recordRow.querySelector(".device-edit-button").onclick = (ev) => { ev.preventDefault(); @@ -78,6 +80,12 @@ export function AddOrUpdateDevice(device) { ev.stopPropagation(); CreateChatWindow(device.ID, device.DeviceName); }; + recordRow.querySelector(".device-remotecontrol-button").onclick = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + AddConsoleOutput("Launching remote control on client device..."); + BrowserSockets.Connection.invoke("RemoteControl", device.ID); + }; UpdateDeviceCounts(); } export function ApplyFilter() { diff --git a/Server/wwwroot/scripts/DataGrid.js.map b/Server/wwwroot/scripts/DataGrid.js.map index ded9967c..7cdfa7d1 100644 --- a/Server/wwwroot/scripts/DataGrid.js.map +++ b/Server/wwwroot/scripts/DataGrid.js.map @@ -1 +1 @@ -{"version":3,"file":"DataGrid.js","sourceRoot":"","sources":["DataGrid.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DataGrid.js","sourceRoot":"","sources":["DataGrid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/DataGrid.ts b/Server/wwwroot/scripts/DataGrid.ts index fcc0ab6c..8d1ea603 100644 --- a/Server/wwwroot/scripts/DataGrid.ts +++ b/Server/wwwroot/scripts/DataGrid.ts @@ -4,6 +4,7 @@ import { Main } from "./Main.js"; import { DeviceGrid } from "./UI.js"; import { AddConsoleOutput } from "./Console.js"; import { CreateChatWindow } from "./Chat.js"; +import * as BrowserSockets from "./BrowserSockets.js" export const DataSource: Array = new Array(); @@ -74,7 +75,8 @@ export function AddOrUpdateDevice(device: Device) { ${device.TotalMemory.toLocaleString()} - + + `; @@ -88,6 +90,12 @@ export function AddOrUpdateDevice(device: Device) { ev.stopPropagation(); CreateChatWindow(device.ID, device.DeviceName); }; + (recordRow.querySelector(".device-remotecontrol-button") as HTMLButtonElement).onclick = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + AddConsoleOutput("Launching remote control on client device..."); + BrowserSockets.Connection.invoke("RemoteControl", device.ID); + }; UpdateDeviceCounts(); } export function ApplyFilter() { diff --git a/Utilities/Install-RemotelyServer.ps1 b/Utilities/Install-RemotelyServer.ps1 index 51fa3758..18a231d6 100644 --- a/Utilities/Install-RemotelyServer.ps1 +++ b/Utilities/Install-RemotelyServer.ps1 @@ -14,9 +14,15 @@ param ( [Parameter(Mandatory=$True)] [string]$BindingHostname, - [switch]$Quiet + [switch]$Quiet, + + [string]$WacsPath, + + [string]$EmailAddress ) +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + $ErrorActionPreference = "Stop" $Host.UI.RawUI.WindowTitle = "Remotely Setup" Clear-Host @@ -139,10 +145,19 @@ if ((Get-Package -Name "*PostgreSQL*" -ErrorAction SilentlyContinue) -eq $null){ Wrap-Host Wrap-Host "ERROR: PostgreSQL was not found. Please install it from https://postgresql.org." -ForegroundColor Red Wrap-Host - pause + Do-Pause return } +if ((Get-Package -Name "*3.1.2 - Windows Server Hosting*" -ErrorAction SilentlyContinue) -eq $null){ + Wrap-Host "Downloading .NET Core Runtime and Hosting Bundle..." + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest -Uri "https://download.visualstudio.microsoft.com/download/pr/dd119832-dc46-4ccf-bc12-69e7bfa61b18/990843c6e0cbd97f9df68c94f6de6bb6/dotnet-hosting-3.1.2-win.exe" -OutFile "$env:TEMP\dotnet-hosting-3.1.2-win.exe" + $ProgressPreference = "Continue" + Start-Process -FilePath "$env:TEMP\dotnet-hosting-3.1.2-win.exe" -ArgumentList "/install /quiet /norestart" -Wait + Wrap-Host + Wrap-Host ".NET Runtime installation completed." +} #endregion @@ -171,7 +186,7 @@ Wrap-Host "**********************************" Wrap-Host Wrap-Host "Hello, and thank you for trying out Remotely!" -ForegroundColor Green Wrap-Host -Wrap-Host "This setup script will install Remotely on this machine. Please make sure you've already created a website in IIS where Remotely will be installed." -ForegroundColor Green +Wrap-Host "This setup script will create an IIS site and install Remotely on this machine." -ForegroundColor Green Wrap-Host Wrap-Host "If you encounter any problems or have any questions, please contact Translucency_Software@outlook.com." -ForegroundColor Green Wrap-Host @@ -190,36 +205,36 @@ if ($ServerCmdlets) { { $RebootRequired = $true } - Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET" -PercentComplete (2/7*100) - $Result = Add-WindowsFeature Web-Asp-Net - if ($Result.RestartNeeded -like "Yes") - { - $RebootRequired = $true - } - Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET 4.5" -PercentComplete (3/7*100) - $Result = Add-WindowsFeature Web-Asp-Net45 - if ($Result.RestartNeeded -like "Yes") - { - $RebootRequired = $true - } - Write-Progress -Activity "IIS Component Installation" -Status "Installing web sockets" -PercentComplete (4/7*100) - $Result = Add-WindowsFeature Web-WebSockets - if ($Result.RestartNeeded -like "Yes") - { - $RebootRequired = $true - } + #Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET" -PercentComplete (2/7*100) + #$Result = Add-WindowsFeature Web-Asp-Net + #if ($Result.RestartNeeded -like "Yes") + #{ + # $RebootRequired = $true + #} + #Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET 4.5" -PercentComplete (3/7*100) + #$Result = Add-WindowsFeature Web-Asp-Net45 + #if ($Result.RestartNeeded -like "Yes") + #{ + # $RebootRequired = $true + #} + #Write-Progress -Activity "IIS Component Installation" -Status "Installing web sockets" -PercentComplete (4/7*100) + #$Result = Add-WindowsFeature Web-WebSockets + #if ($Result.RestartNeeded -like "Yes") + #{ + # $RebootRequired = $true + #} Write-Progress -Activity "IIS Component Installation" -Status "Installing IIS management tools" -PercentComplete (5/7*100) $Result = Add-WindowsFeature Web-Mgmt-Tools if ($Result.RestartNeeded -like "Yes") { $RebootRequired = $true } - Write-Progress -Activity "IIS Component Installation" -Status "Installing web filtering" -PercentComplete (6/7*100) - $Result = Add-WindowsFeature Web-Filtering - if ($Result.RestartNeeded -like "Yes") - { - $RebootRequired = $true - } + #Write-Progress -Activity "IIS Component Installation" -Status "Installing web filtering" -PercentComplete (6/7*100) + #$Result = Add-WindowsFeature Web-Filtering + #if ($Result.RestartNeeded -like "Yes") + #{ + # $RebootRequired = $true + #} Write-Progress -Activity "IIS Component Installation" -Status "IIS setup completed" -PercentComplete (7/7*100) -Completed Start-Sleep 2 @@ -231,20 +246,20 @@ else Write-Progress -Activity "IIS Component Installation" -Status "Installing web server" -PercentComplete (1/7*100) DISM /Online /Enable-Feature /FeatureName:IIS-WebServer /All /Quiet - Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET" -PercentComplete (2/7*100) - DISM /Online /Enable-Feature /FeatureName:IIS-ASPNET /All /Quiet + #Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET" -PercentComplete (2/7*100) + #DISM /Online /Enable-Feature /FeatureName:IIS-ASPNET /All /Quiet - Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET 4.5" -PercentComplete (3/7*100) - DISM /Online /Enable-Feature /FeatureName:IIS-ASPNET45 /All /Quiet + #Write-Progress -Activity "IIS Component Installation" -Status "Installing ASP.NET 4.5" -PercentComplete (3/7*100) + #DISM /Online /Enable-Feature /FeatureName:IIS-ASPNET45 /All /Quiet - Write-Progress -Activity "IIS Component Installation" -Status "Installing web sockets" -PercentComplete (4/7*100) - DISM /Online /Enable-Feature /FeatureName:IIS-WebSockets /All /Quiet + #Write-Progress -Activity "IIS Component Installation" -Status "Installing web sockets" -PercentComplete (4/7*100) + #DISM /Online /Enable-Feature /FeatureName:IIS-WebSockets /All /Quiet Write-Progress -Activity "IIS Component Installation" -Status "Installing IIS management tools" -PercentComplete (5/7*100) DISM /Online /Enable-Feature /FeatureName:IIS-ManagementConsole /All /Quiet - Write-Progress -Activity "IIS Component Installation" -Status "Installing web filtering" -PercentComplete (6/7*100) - DISM /Online /Enable-Feature /FeatureName:IIS-RequestFiltering /All /Quiet + #Write-Progress -Activity "IIS Component Installation" -Status "Installing web filtering" -PercentComplete (6/7*100) + #DISM /Online /Enable-Feature /FeatureName:IIS-RequestFiltering /All /Quiet Write-Progress -Activity "IIS Component Installation" -Status "IIS setup completed" -PercentComplete (7/7*100) -Completed Start-Sleep 2 @@ -253,15 +268,14 @@ else Clear-Host ### Create IIS Site ## -[System.IO.Directory]::CreateDirectory($FilePath) +[System.IO.Directory]::CreateDirectory($SitePath) if ((Get-IISAppPool -Name $AppPoolName) -eq $null) { New-WebAppPool -Name $AppPoolName } if ((Get-Website -Name $SiteName) -eq $null) { - New-Website -Name $SiteName -PhysicalPath $SitePath -HostHeader $BindingHostname - New-WebBinding -Name $SiteName -Protocol "https" -Port 443 -HostHeader $BindingHostname + New-Website -Name $SiteName -PhysicalPath $SitePath -HostHeader $BindingHostname -ApplicationPool $AppPoolName } @@ -300,8 +314,9 @@ try { Remove-Item -Path "$env:TEMP\Remotely_Server_Win-x64.zip" -Force } Wrap-Host "Downloading server package..." - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + $ProgressPreference = "SilentlyContinue" Invoke-WebRequest -Uri "https://github.com/Jay-Rad/Remotely/releases/latest/download/Remotely_Server_Win-x64.zip" -OutFile "$env:TEMP\Remotely_Server_Win-x64.zip" + $ProgressPreference = "Continue" Wrap-Host "Extracting server files..." [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\Remotely_Server_Win-x64.zip", $SitePath) @@ -349,6 +364,12 @@ catch # Start website. Start-Website -Name $SiteName + +### SSL certificate installation. ### +if ($WacsPath -ne $null -and (Test-Path -Path $WacsPath)) { + &"$WacsPath" --target iis --siteid (Get-Website -Name $SiteName).ID --installation iis --emailaddress $EmailAddress --accepttos +} + Wrap-Host Wrap-Host Wrap-Host @@ -356,7 +377,7 @@ Wrap-Host "**********************************" Wrap-Host " Server setup complete!" -ForegroundColor Green Wrap-Host "**********************************" Wrap-Host -Wrap-Host "Website bindings and SSL need to be set up in IIS, if they're not already. This process needs to be completed manually. I recommend researching Let's Encrypt for free, automated SSL certificates." -ForegroundColor Green +Wrap-Host "If a path to Win-Acme exe path (WacsPath) wasn't provided, SSL/TLS needs to be set up in IIS. I recommend checking out Let's Encrypt for free, automated SSL certificates." -ForegroundColor Green if ($RebootRequired) { Wrap-Host