@model Disco.Web.Areas.Config.Models.SystemConfig.IndexModel @{ Authorization.Require(Claims.Config.System.Show); var canConfigProxy = Authorization.Has(Claims.Config.System.ConfigureProxy); var canConfigAD = Authorization.Has(Claims.Config.System.ConfigureActiveDirectory); ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "System"); if (canConfigAD) { Html.BundleDeferred("~/Style/Fancytree"); Html.BundleDeferred("~/ClientScripts/Modules/jQuery-Fancytree"); Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); } }
Disco Version:
@Model.DiscoVersion.ToString(4)
Built @CommonHelpers.FriendlyDate(Model.DiscoVersionBuilt, "Unknown")
Database Connection: @{if (Model.DatabaseSqlAuthUsername != null) { } }
Server: @Model.DatabaseServer
Database: @Model.DatabaseName
Authentication: @Model.DatabaseAuthentication
SQL User: @Model.DatabaseSqlAuthUsername
Data Store Location: @Model.DataStoreLocation

Updates

@{ if (Model.UpdateLatestResponse == null) { } else { if (Model.UpdateLatestResponse.IsUpdatable(typeof(DiscoApplication).Assembly.GetName().Version)) { } else { } } }
Last Check:
 Never
Last Run: @CommonHelpers.FriendlyDate(Model.UpdateLatestResponse.ResponseTimestamp)
Update Available:
 Version @(Model.UpdateLatestResponse.Version) is available
[Released @(CommonHelpers.FriendlyDate(Model.UpdateLatestResponse.VersionReleasedTimestamp))]
@(new HtmlString(Model.UpdateLatestResponse.Blurb))
Download Now
Status:  The latest version is installed
Check for Update: @{ if (Model.UpdateRunningStatus == null) { @Html.ActionLinkSmallButton("Check Now", MVC.API.System.UpdateCheck()) [Will run automatically @CommonHelpers.FriendlyDate(Model.UpdateNextScheduled, "Unknown")] } else { @Html.ActionLink("View Status", MVC.Config.Logging.TaskStatus(Model.UpdateRunningStatus.SessionId)) [Running Now] } } @if (Model.UpdateBetaDeployment) {
 Beta Deployment }

Active Directory

Primary Domain: @Model.ADPrimaryDomain.Name [@Model.ADPrimaryDomain.NetBiosName]
Additional Domains: @if (Model.ADDomains.Count > 1) { var adAdditionalDomains = Model.ADDomains.Where(d => d != Model.ADPrimaryDomain).OrderBy(d => d.Name).ToList(); var adDomainFirst = adAdditionalDomains.First(); @adDomainFirst.Name [@adDomainFirst.NetBiosName] foreach (var adDomain in adAdditionalDomains.Skip(1)) {
@adDomain.Name [@adDomain.NetBiosName]
} } else { <None> }
Site: @Model.ADSite.Name
Servers:
@if (Model.ADServers.Count > 0) {
    @foreach (var server in Model.ADServers) { var serverDescription = string.Format("{0} [{1}]", server.Name.EndsWith(server.Domain.Name, StringComparison.OrdinalIgnoreCase) ? server.Name.Substring(0, server.Name.Length - server.Domain.Name.Length - 1) : server.Name, server.Domain.NetBiosName); var reachable = server.IsAvailable;
  • @if (server.IsAvailable) { } else { } @(serverDescription) @if (server.IsSiteServer) { } else { } @if (server.IsWritable) { }
  • }
} else {
 None Found
}
Forest: @if (Model.ADForestServers == null) {
@Html.CheckBoxFor(m => m.ADSearchAllForestServers, new { disabled = "disabled" }) @Html.LabelFor(m => m.ADSearchAllForestServers)
 Forest servers are currently being retrieved.
Try refreshing this page in a moment.
} else { if (canConfigAD) { var canSearchEntireForest = (Model.ADForestServers.Count <= Disco.Services.Interop.ActiveDirectory.ActiveDirectory.MaxForestServerSearch);
@if (!canSearchEntireForest) { @Html.CheckBoxFor(m => m.ADSearchAllForestServers, new { disabled = "disabled" }) @Html.LabelFor(m => m.ADSearchAllForestServers)
 Disco will not search entire forests which consist of more than @(Disco.Services.Interop.ActiveDirectory.ActiveDirectory.MaxForestServerSearch) servers. Only servers within this site will be searched.
} else { @Html.CheckBoxFor(m => m.ADSearchAllForestServers) @Html.LabelFor(m => m.ADSearchAllForestServers) @AjaxHelpers.AjaxLoader()
If this setting is enabled, Disco will query all servers within the forest rather than only servers within this site.
}
} else {
@Html.CheckBoxFor(m => m.ADSearchAllForestServers, new { disabled = "disabled" }) @Html.LabelFor(m => m.ADSearchAllForestServers)
If this setting is enabled, Disco will search all servers within the forest rather than only servers within this site.
}

All Servers:
    @{ var domainIndex = Model.ADDomains.ToDictionary(d => d.Name, StringComparer.OrdinalIgnoreCase); foreach (var server in Model.ADForestServers.OrderBy(s => s)) { var isSiteServer = Model.ADServers.Any(s => s.IsSiteServer && s.Name.Equals(server, StringComparison.OrdinalIgnoreCase)); var serverDescription = server; if (server.Contains('.')) { Disco.Services.Interop.ActiveDirectory.ADDomain serverDomain; if (domainIndex.TryGetValue(server.Substring(server.IndexOf('.') + 1), out serverDomain)) { serverDescription = string.Format("{0} [{1}]", server.Substring(0, server.IndexOf('.')), serverDomain.NetBiosName); } }
  • @serverDescription@if (isSiteServer) { }
  • } }
}
Search Scope: @if (Model.ADSearchContainers != null && Model.ADSearchContainers.Count > 0) {
Searching is restricted to the following Organisational Unit containers
    @foreach (var adContainer in Model.ADSearchContainers) {
  • @adContainer.Item3
  • }
} else {
No restrictions are in effect.
When searching, the entire domain will be queried. This is suitable for most single-domain deployments.
} @if (canConfigAD) {
@AjaxHelpers.AjaxLoader() Loading Organisational Units
@using (Html.BeginForm(MVC.API.System.UpdateActiveDirectorySearchScope(null, redirect: true))) { }
}
@if (canConfigProxy) { using (Html.BeginForm(MVC.API.System.UpdateProxySettings())) {

Proxy Settings

Address: @Html.EditorFor(m => m.ProxyAddress)
@Html.ValidationMessageFor(m => m.ProxyAddress)
Port: @Html.EditorFor(m => m.ProxyPort)
@Html.ValidationMessageFor(m => m.ProxyPort)
Username: @Html.EditorFor(m => m.ProxyUsername)
@Html.ValidationMessageFor(m => m.ProxyUsername)
Password: @Html.EditorFor(m => m.ProxyPassword)
@Html.ValidationMessageFor(m => m.ProxyPassword)
 
} } else {

Proxy Settings

Address: @Html.DisplayFor(m => m.ProxyAddress)
Port: @Html.DisplayFor(m => m.ProxyPort)
Username: @Html.DisplayFor(m => m.ProxyUsername)
Password: ********
}
@Html.ActionLinkButton("Update Device Last Network Logons", MVC.API.System.UpdateLastNetworkLogonDates())