Remotely/Server/Pages/Downloads.razor

255 lines
9.1 KiB
Plaintext

@page "/downloads"
@using Microsoft.AspNetCore.Hosting
@using Microsoft.Extensions.Logging
@inject AuthenticationStateProvider AuthProvider
@inject IDataService DataService
@inject UserManager<RemotelyUser> UserManager
@inject IWebHostEnvironment HostEnv
@inject NavigationManager NavManager
@inject ILogger<Downloads> Logger
<div class="row mb-3">
<h4>Portable Instant Support Clients</h4>
<div class="text-info col-sm-12 pl-0 mb-2">
Instant desktop sharing. No account required.
</div>
<div class="col-sm-6 mb-3">
<h6>Windows (64-Bit)</h6>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/api/ClientDownloads/Desktop/WindowsDesktop-x64/@_organizationId">Windows EXE</a>
</p>
</div>
<div class="col-sm-6">
<h6>Windows (32-Bit)</h6>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/api/ClientDownloads/Desktop/WindowsDesktop-x86/@_organizationId">Windows EXE</a>
</p>
</div>
<div class="col-sm-6 mb-3">
<h6>Linux 64-Bit</h6>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/api/ClientDownloads/Desktop/UbuntuDesktop/@_organizationId">Ubuntu Executable</a>
</p>
</div>
</div>
<div class="row mb-3">
<h4>Installable Instant Support Clients</h4>
<div class="text-info col-sm-12 pl-0 mb-2">
Light-weight, self-updating quick support clients.
</div>
@if (!_isServerUrlEmbedded)
{
<div class="col-sm-12">
<AlertBanner Message="Must be built from source to target specific server URL." StatusClass="warning" />
</div>
}
<div class="col-sm-6 mb-3">
<h6>Windows (64-Bit)</h6>
<p>
<small>Note: Only the default organization's branding will apply to these.</small>
</p>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/Content/Win-x64/ClickOnce/setup.exe">Windows Installer</a>
</p>
</div>
<div class="col-sm-6">
<h6>Windows (32-Bit)</h6>
<p>
<small>Note: Only the default organization's branding will apply to these.</small>
</p>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/Content/Win-x86/ClickOnce/setup.exe">Windows Installer</a>
</p>
</div>
</div>
<div class="row">
<h4>Resident Agents</h4>
<div class="text-info col-sm-12 pl-0 mb-2">
Installable background agents that provide unattended access and remote scripting.
</div>
@if (!_isAuthenticated)
{
<div class="col-sm-6 mb-3">
<h6>Must be logged in to download.</h6>
</div>
}
else
{
<div class="col-sm-6 mb-3">
<h6>Windows 10 / 8.1 / 7 (64-Bit and 32-Bit)</h6>
<p>
<small>Note: GPU-accelerated screen capture and PowerShell Core is unavailable on Windows 7.</small>
</p>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/API/ClientDownloads/WindowsInstaller">Windows Installer (x64/x86)</a>
<br />
<a target="_blank" href="/Content/Remotely-Win10-x64.zip">Windows x64 Files Only</a>
<br />
<a target="_blank" href="/Content/Remotely-Win10-x86.zip">Windows x86 Files Only</a>
</p>
<p>
<strong>Quiet Install:</strong>
<br />
<span class="label label-default code">
Remotely_Installer.exe
-install
-quiet
-organizationid "0b3d706b-9c5d-41e6-8ae9-5720d16324e6"
-serverurl "https://remotely.mytechshop.com"
</span>
</p>
<p>
<strong>Quiet Uninstall:</strong>
<br />
<span class="label label-default code">Remotely_Installer.exe -uninstall -quiet</span>
</p>
<p>
<strong>Local Install:</strong>
<span data-toggle="modal" data-target="#localInstallInfo" class="fas fa-question-circle pointer"></span>
<br />
<span class="label label-default code">
Remotely_Installer.exe
-install
-quiet
-organizationid "0b3d706b-9c5d-41e6-8ae9-5720d16324e6"
-serverurl "https://remotely.mytechshop.com"
-path "[path]\Remotely-Win10-x64.zip"
</span>
</p>
<p>
<strong>Override Options:</strong>
<br />
<span class="label label-default code">
Remotely_Installer.exe -install -quiet -supportshortcut
-organizationid "0b3d706b-9c5d-41e6-8ae9-5720d16324e6"
-serverurl "https://remotely.mytechshop.com"
-devicegroup "Customer Group 1"
-devicealias "Front Desk"
-deviceuuid "eebb4d87-5459-4976-989e-a7876dffc69c"
</span>
</p>
</div>
<div class="col-sm-6 mb-3">
<h6>Linux 64-Bit</h6>
<p>
<strong>Download:</strong>
<br />
<a target="_blank" href="/API/ClientDownloads/UbuntuInstaller-x64">Ubuntu x64 Bash Installer</a>
<br />
<a target="_blank" href="/API/ClientDownloads/ManjaroInstaller-x64">Manjaro x64 Bash Installer</a>
<br />
<a target="_blank" href="/Content/Remotely-Linux.zip">Linux x64 Files Only</a>
</p>
<p>
<strong>Install:</strong>
<br />
<span class="label label-default code">sudo [path]/Install-Ubuntu-x64.sh</span>
</p>
<p>
<strong>Local Install:</strong>
<span data-toggle="modal" data-target="#localInstallInfo" class="fas fa-question-circle pointer"></span>
<br />
<span class="label label-default code">sudo [path]/Install-Ubuntu-x64.sh --path [path]/Remotely-Linux.zip</span>
</p>
<p>
<strong>Uninstall:</strong>
<br />
<span class="label label-default code">sudo [path]/Install-Ubuntu-x64.sh --uninstall</span>
</p>
</div>
}
</div>
<div id="localInstallInfo" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Local Installs</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
<p>
By default, the installer will download the client files from the server before installing them.
This is fine for one or two devices, but it wouldn't be ideal to have a large number of computers
downloading over the WAN simultaneously.
<br /><br />
To reduce bandwidth usage, you can download separately the ZIP file containing the client files and put
them on a network share. Then you can use the -path argument to have the script copy the files from
that location.
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
@code {
private string _organizationId;
private bool _isServerUrlEmbedded;
private bool _isAuthenticated;
protected override async Task OnInitializedAsync()
{
var authState = await AuthProvider.GetAuthenticationStateAsync();
_isAuthenticated = authState.User.Identity.IsAuthenticated;
if (_isAuthenticated)
{
var currentUser = await UserManager.GetUserAsync(authState.User);
_organizationId = DataService.GetOrganizationById(currentUser.OrganizationID)?.ID;
}
else
{
_organizationId = (await DataService.GetDefaultOrganization())?.ID;
}
var appFilePath = System.IO.Path.Combine(
HostEnv.WebRootPath,
"Content",
"Win-x64",
"ClickOnce",
"Remotely_Desktop.application");
try
{
await ClickOnceMiddleware.AppFileLock.WaitAsync();
var appContent = await System.IO.File.ReadAllTextAsync(appFilePath);
_isServerUrlEmbedded = appContent.Contains(NavManager.BaseUri.TrimEnd('/'));
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Error while checking ClickOnce file.");
}
finally
{
ClickOnceMiddleware.AppFileLock.Release();
}
await base.OnInitializedAsync();
}
}