mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
Add server admins.
This commit is contained in:
parent
57eb9b3a7e
commit
fe6147029a
@ -69,14 +69,20 @@ namespace Remotely.ScreenCast.Win.Services
|
||||
{
|
||||
try
|
||||
{
|
||||
if (clipboardText is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var thread = new Thread(() =>
|
||||
{
|
||||
Clipboard.SetText(clipboardText);
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(clipboardText))
|
||||
{
|
||||
Clipboard.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
Clipboard.SetText(clipboardText);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
});
|
||||
thread.SetApartmentState(ApartmentState.STA);
|
||||
thread.Start();
|
||||
|
||||
@ -111,15 +111,8 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
var result = await UserManager.CreateAsync(user);
|
||||
if (result.Succeeded)
|
||||
{
|
||||
//if (!DataService.SetNewUserProperties(user.UserName, currentUser.OrganizationID, Input.IsAdmin))
|
||||
//{
|
||||
// ModelState.AddModelError("OrgID", "Failed to set organization ID.");
|
||||
// return Page();
|
||||
//}
|
||||
|
||||
user = await UserManager.FindByEmailAsync(Input.UserEmail);
|
||||
|
||||
|
||||
await UserManager.ConfirmEmailAsync(user, await UserManager.GenerateEmailConfirmationTokenAsync(user));
|
||||
|
||||
StatusMessage = "User account created.";
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
<partial name="_StatusMessage" for="StatusMessage" />
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<form method="post" autocomplete="off">
|
||||
<form id="serverConfigForm" method="post" autocomplete="off">
|
||||
<div asp-validation-summary="All" class="text-danger"></div>
|
||||
|
||||
<h4>Application Settings</h4>
|
||||
@ -56,7 +56,10 @@
|
||||
<div class="form-group">
|
||||
<label asp-for="AppSettingsInput.KnownProxies" class="control-label"></label>
|
||||
<br />
|
||||
<select id="knownProxiesSelect" asp-for="AppSettingsInput.KnownProxies" class="form-control"></select>
|
||||
<select id="knownProxiesSelect"
|
||||
asp-for="AppSettingsInput.KnownProxies"
|
||||
asp-items="Model.AppSettingsInput.KnownProxies?.Select(x=>new SelectListItem(x,x))"
|
||||
class="form-control"></select>
|
||||
<div class="text-right mb-2 mt-1">
|
||||
<button id="knownProxiesRemoveButton" type="button" class="btn btn-secondary">Remove</button>
|
||||
</div>
|
||||
@ -167,7 +170,10 @@
|
||||
<div class="form-group">
|
||||
<label asp-for="AppSettingsInput.TrustedCorsOrigins" class="control-label"></label>
|
||||
<br />
|
||||
<select id="trustedCorsSelect" asp-for="AppSettingsInput.TrustedCorsOrigins" class="form-control"></select>
|
||||
<select id="trustedCorsSelect"
|
||||
asp-for="AppSettingsInput.TrustedCorsOrigins"
|
||||
asp-items="Model.AppSettingsInput.TrustedCorsOrigins?.Select(x=>new SelectListItem(x,x))"
|
||||
class="form-control"></select>
|
||||
|
||||
<div class="text-right mb-2 mt-1">
|
||||
<button id="trustedCorsRemoveButton" type="button" class="btn btn-secondary">Remove</button>
|
||||
@ -227,7 +233,10 @@
|
||||
<div class="form-group">
|
||||
<label asp-for="ServerAdmins" class="control-label"></label>
|
||||
<br />
|
||||
<select id="serverAdminsSelect" asp-for="ServerAdmins" class="form-control"></select>
|
||||
<select id="serverAdminsSelect"
|
||||
asp-for="ServerAdmins"
|
||||
asp-items="Model.ServerAdmins?.Select(x=>new SelectListItem(x,x))"
|
||||
class="form-control"></select>
|
||||
<div class="text-right mb-2 mt-1">
|
||||
<button id="serverAdminsRemoveButton" type="button" class="btn btn-secondary">Remove</button>
|
||||
</div>
|
||||
@ -240,13 +249,20 @@
|
||||
|
||||
|
||||
<div class="form-group mt-3">
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
<button id="serverConfigSaveButton" type="button" class="btn btn-primary">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="module" src="~/scripts/Pages/ServerConfig.js"></script>
|
||||
<style>
|
||||
input[type='checkbox'] {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
}
|
||||
else
|
||||
|
||||
@ -1,11 +1,3 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@ -14,38 +6,54 @@ using Microsoft.Extensions.Configuration;
|
||||
using Remotely.Server.Services;
|
||||
using Remotely.Shared.Enums;
|
||||
using Remotely.Shared.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
{
|
||||
public class ServerConfigModel : PageModel
|
||||
{
|
||||
public ServerConfigModel(IConfiguration configuration, IWebHostEnvironment hostEnv, UserManager<RemotelyUser> userManager)
|
||||
public ServerConfigModel(IConfiguration configuration,
|
||||
IWebHostEnvironment hostEnv,
|
||||
UserManager<RemotelyUser> userManager,
|
||||
DataService dataService)
|
||||
{
|
||||
Configuration = configuration;
|
||||
HostEnv = hostEnv;
|
||||
UserManager = userManager;
|
||||
DataService = dataService;
|
||||
}
|
||||
|
||||
|
||||
public IConfiguration Configuration { get; }
|
||||
public IWebHostEnvironment HostEnv { get; }
|
||||
public enum DBProviders
|
||||
{
|
||||
PostgreSQL,
|
||||
SQLite,
|
||||
SQLServer
|
||||
}
|
||||
|
||||
[BindProperty]
|
||||
public AppSettingsModel AppSettingsInput { get; set; } = new AppSettingsModel();
|
||||
|
||||
[BindProperty]
|
||||
[Display(Name = "Server Admins")]
|
||||
public List<string> ServerAdmins { get; set; } = new List<string>();
|
||||
|
||||
[BindProperty]
|
||||
public ConnectionStringsModel ConnectionStrings { get; set; } = new ConnectionStringsModel();
|
||||
|
||||
public bool IsServerAdmin { get; set; }
|
||||
|
||||
[BindProperty]
|
||||
[Display(Name = "Server Admins")]
|
||||
public List<string> ServerAdmins { get; set; } = new List<string>();
|
||||
|
||||
[TempData]
|
||||
public string StatusMessage { get; set; }
|
||||
|
||||
public UserManager<RemotelyUser> UserManager { get; }
|
||||
private IConfiguration Configuration { get; }
|
||||
private DataService DataService { get; }
|
||||
private IWebHostEnvironment HostEnv { get; }
|
||||
private UserManager<RemotelyUser> UserManager { get; }
|
||||
|
||||
public async Task<IActionResult> OnGet()
|
||||
{
|
||||
IsServerAdmin = (await UserManager.GetUserAsync(User)).IsServerAdmin;
|
||||
@ -56,9 +64,11 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
|
||||
Configuration.Bind("ApplicationOptions", AppSettingsInput);
|
||||
Configuration.Bind("ConnectionStrings", ConnectionStrings);
|
||||
ServerAdmins = DataService.GetServerAdmins();
|
||||
|
||||
return Page();
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPost()
|
||||
{
|
||||
IsServerAdmin = (await UserManager.GetUserAsync(User)).IsServerAdmin;
|
||||
@ -72,10 +82,20 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
return Page();
|
||||
}
|
||||
|
||||
var configReloaded = false;
|
||||
Configuration.GetReloadToken().RegisterChangeCallback((e) =>
|
||||
{
|
||||
configReloaded = true;
|
||||
}, null);
|
||||
|
||||
await SaveAppSettings();
|
||||
|
||||
return RedirectToPage();
|
||||
while (!configReloaded)
|
||||
{
|
||||
await Task.Delay(10);
|
||||
}
|
||||
|
||||
return RedirectToPage();
|
||||
}
|
||||
|
||||
private async Task SaveAppSettings()
|
||||
@ -103,10 +123,9 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
|
||||
await System.IO.File.WriteAllTextAsync(savePath, JsonSerializer.Serialize(settingsJson, new JsonSerializerOptions() { WriteIndented = true }));
|
||||
|
||||
// TODO: Save server admins.
|
||||
await DataService.UpdateServerAdmins(ServerAdmins, User.Identity.Name);
|
||||
}
|
||||
|
||||
|
||||
public class AppSettingsModel
|
||||
{
|
||||
[Display(Name = "Allow API Login")]
|
||||
@ -130,6 +149,7 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
|
||||
[Display(Name = "Max Organizations")]
|
||||
public int MaxOrganizationCount { get; set; }
|
||||
|
||||
[Display(Name = "Record Remote Control Sessions")]
|
||||
public bool RecordRemoteControlSessions { get; set; }
|
||||
|
||||
@ -189,17 +209,8 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
|
||||
[Display(Name = "SQLite")]
|
||||
public string SQLite { get; set; }
|
||||
|
||||
|
||||
[Display(Name = "SQL Server")]
|
||||
public string SQLServer { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public enum DBProviders
|
||||
{
|
||||
PostgreSQL,
|
||||
SQLite,
|
||||
SQLServer
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -88,13 +88,7 @@ namespace Remotely.Server.Areas.Identity.Pages.Account
|
||||
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
var user = new RemotelyUser
|
||||
{
|
||||
UserName = Input.Email,
|
||||
Email = Input.Email ,
|
||||
IsServerAdmin = organizationCount == 0
|
||||
};
|
||||
var result = await _userManager.CreateAsync(user, Input.Password);
|
||||
var (result, user) = await _dataService.CreateUser(Input.Email, Input.Password, true);
|
||||
if (result.Succeeded)
|
||||
{
|
||||
_logger.LogInformation("User created a new account with password.");
|
||||
|
||||
Binary file not shown.
@ -64,6 +64,14 @@ namespace Remotely.Server.Services
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<string> GetServerAdmins()
|
||||
{
|
||||
return RemotelyContext.Users
|
||||
.Where(x => x.IsServerAdmin)
|
||||
.Select(x => x.UserName)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public InviteLink AddInvite(string orgID, Invite invite)
|
||||
{
|
||||
invite.InvitedUser = invite.InvitedUser.ToLower();
|
||||
@ -101,6 +109,7 @@ namespace Remotely.Server.Services
|
||||
RemotelyContext.SaveChanges();
|
||||
}
|
||||
|
||||
|
||||
public bool AddOrUpdateDevice(Device device, out Device updatedDevice)
|
||||
{
|
||||
var existingDevice = RemotelyContext.Devices.Find(device.ID);
|
||||
@ -152,6 +161,31 @@ namespace Remotely.Server.Services
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task UpdateServerAdmins(List<string> serverAdmins, string callerUserName)
|
||||
{
|
||||
var currentAdmins = RemotelyContext.Users.Where(x => x.IsServerAdmin).ToList();
|
||||
|
||||
var removeAdmins = currentAdmins.Where(currentAdmin =>
|
||||
!serverAdmins.Contains(currentAdmin.UserName.Trim().ToLower()) &&
|
||||
currentAdmin.UserName.Trim().ToLower() != callerUserName.Trim().ToLower());
|
||||
|
||||
foreach (var removeAdmin in removeAdmins)
|
||||
{
|
||||
removeAdmin.IsServerAdmin = false;
|
||||
}
|
||||
|
||||
var newAdmins = RemotelyContext.Users.Where(user =>
|
||||
serverAdmins.Contains(user.UserName.Trim().ToLower()) &&
|
||||
!user.IsServerAdmin);
|
||||
|
||||
foreach (var newAdmin in newAdmins)
|
||||
{
|
||||
newAdmin.IsServerAdmin = true;
|
||||
}
|
||||
|
||||
await RemotelyContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public string AddSharedFile(IFormFile file, string organizationID)
|
||||
{
|
||||
var expirationDate = DateTimeOffset.Now.AddDays(-AppConfig.DataRetentionInDays);
|
||||
@ -233,6 +267,21 @@ namespace Remotely.Server.Services
|
||||
return newToken;
|
||||
}
|
||||
|
||||
|
||||
public async Task<(IdentityResult, RemotelyUser)> CreateUser(string email, string password, bool isOrgAdmin)
|
||||
{
|
||||
var user = new RemotelyUser
|
||||
{
|
||||
UserName = email,
|
||||
Email = email,
|
||||
IsServerAdmin = RemotelyContext.Organizations.Count() == 0,
|
||||
IsAdministrator = isOrgAdmin
|
||||
};
|
||||
var result = await UserManager.CreateAsync(user, password);
|
||||
|
||||
return (result, user);
|
||||
}
|
||||
|
||||
public async Task DeleteApiToken(string userName, string tokenId)
|
||||
{
|
||||
var user = RemotelyContext.Users.FirstOrDefault(x => x.UserName == userName);
|
||||
@ -720,17 +769,6 @@ namespace Remotely.Server.Services
|
||||
}
|
||||
}
|
||||
|
||||
public bool SetNewUserProperties(string targetName, string organizationID, bool isAdmin)
|
||||
{
|
||||
var targetUser = GetUserByName(targetName);
|
||||
|
||||
targetUser.OrganizationID = organizationID;
|
||||
targetUser.IsAdministrator = isAdmin;
|
||||
|
||||
RemotelyContext.SaveChanges();
|
||||
|
||||
return true;
|
||||
}
|
||||
public void SetServerVerificationToken(string deviceID, string verificationToken)
|
||||
{
|
||||
var device = RemotelyContext.Devices.Find(deviceID);
|
||||
|
||||
@ -19,12 +19,6 @@ h6 {
|
||||
font-size: 1rem !important;
|
||||
}
|
||||
|
||||
input[type='checkbox'] {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
|
||||
.container {
|
||||
max-width: 95vw !important;
|
||||
}
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
var serverConfigForm = document.getElementById("serverConfigForm");
|
||||
var serverConfigSaveButton = document.getElementById("serverConfigSaveButton");
|
||||
var trustedCorsAddButton = document.getElementById("trustedCorsAddButton");
|
||||
var trustedCorsRemoveButton = document.getElementById("trustedCorsRemoveButton");
|
||||
var trustedCorsInput = document.getElementById("trustedCorsInput");
|
||||
@ -10,6 +12,18 @@ var serverAdminsAddButton = document.getElementById("serverAdminsAddButton");
|
||||
var serverAdminsRemoveButton = document.getElementById("serverAdminsRemoveButton");
|
||||
var serverAdminsInput = document.getElementById("serverAdminsInput");
|
||||
var serverAdminsSelect = document.getElementById("serverAdminsSelect");
|
||||
serverConfigSaveButton.addEventListener("click", e => {
|
||||
for (var i = 0; i < trustedCorsSelect.options.length; i++) {
|
||||
trustedCorsSelect.options[i].selected = true;
|
||||
}
|
||||
for (var i = 0; i < knownProxiesSelect.options.length; i++) {
|
||||
knownProxiesSelect.options[i].selected = true;
|
||||
}
|
||||
for (var i = 0; i < serverAdminsSelect.options.length; i++) {
|
||||
serverAdminsSelect.options[i].selected = true;
|
||||
}
|
||||
serverConfigForm.submit();
|
||||
});
|
||||
trustedCorsAddButton.addEventListener("click", ev => {
|
||||
if (trustedCorsInput.value.length > 0) {
|
||||
var option = document.createElement("option");
|
||||
|
||||
@ -1 +1 @@
|
||||
{"version":3,"file":"ServerConfig.js","sourceRoot":"","sources":["ServerConfig.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"ServerConfig.js","sourceRoot":"","sources":["ServerConfig.ts"],"names":[],"mappings":"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"}
|
||||
@ -1,4 +1,7 @@
|
||||
var trustedCorsAddButton = document.getElementById("trustedCorsAddButton") as HTMLButtonElement;
|
||||
var serverConfigForm = document.getElementById("serverConfigForm") as HTMLFormElement;
|
||||
var serverConfigSaveButton = document.getElementById("serverConfigSaveButton") as HTMLButtonElement;
|
||||
|
||||
var trustedCorsAddButton = document.getElementById("trustedCorsAddButton") as HTMLButtonElement;
|
||||
var trustedCorsRemoveButton = document.getElementById("trustedCorsRemoveButton") as HTMLButtonElement;
|
||||
var trustedCorsInput = document.getElementById("trustedCorsInput") as HTMLInputElement;
|
||||
var trustedCorsSelect = document.getElementById("trustedCorsSelect") as HTMLSelectElement;
|
||||
@ -13,7 +16,19 @@ var serverAdminsRemoveButton = document.getElementById("serverAdminsRemoveButton
|
||||
var serverAdminsInput = document.getElementById("serverAdminsInput") as HTMLInputElement;
|
||||
var serverAdminsSelect = document.getElementById("serverAdminsSelect") as HTMLSelectElement;
|
||||
|
||||
serverConfigSaveButton.addEventListener("click", e => {
|
||||
for (var i = 0; i < trustedCorsSelect.options.length; i++) {
|
||||
trustedCorsSelect.options[i].selected = true;
|
||||
}
|
||||
for (var i = 0; i < knownProxiesSelect.options.length; i++) {
|
||||
knownProxiesSelect.options[i].selected = true;
|
||||
}
|
||||
for (var i = 0; i < serverAdminsSelect.options.length; i++) {
|
||||
serverAdminsSelect.options[i].selected = true;
|
||||
}
|
||||
|
||||
serverConfigForm.submit();
|
||||
});
|
||||
|
||||
trustedCorsAddButton.addEventListener("click", ev => {
|
||||
if (trustedCorsInput.value.length > 0) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user