using AutoMapper; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using MTWireGuard.Application.Models; using MTWireGuard.Application.Models.Mikrotik; using MTWireGuard.Application.Repositories; using MTWireGuard.Models.Requests; using MTWireGuard.Models.Responses; namespace MTWireGuard.Pages { public class ClientsModel : PageModel { private readonly IMikrotikRepository API; private readonly IMapper mapper; public ClientsModel(IMikrotikRepository mikrotik, IMapper mapper) { API = mikrotik; this.mapper = mapper; } public async Task OnGetAsync() { var servers = await API.GetServersAsync(); ViewData["servers"] = servers; } public async Task OnGetGetAll() { var users = await API.GetUsersAsync(); return Partial("_ClientsTable", users); } public async Task OnGetQRAsync(int id) { string config = await API.GetQRCodeBase64(id); return Content(config); } public async Task OnGetDownloadTunnelAsync(int id) { string config = await API.GetUserTunnelConfig(id); byte[] bytesInStream = System.Text.Encoding.UTF8.GetBytes(config); var user = await API.GetUser(id); string filename = string.IsNullOrWhiteSpace(user.Name) ? user.Interface : user.Name; Response.Headers.Add("content-disposition", $"attachment; filename={filename}.conf"); return File(bytesInStream, "text/plain"); } public async Task OnPostCreateAsync(CreateClientRequest request) { var model = mapper.Map(request); var make = await API.CreateUser(model); var message = mapper.Map(make); return new ToastResult(message); } public async Task OnPostDelete(DeleteRequest request) { var delete = await API.DeleteUser(request.Id); var message = mapper.Map(delete); return new ToastResult(message); } public async Task OnPostUpdate(UpdateClientRequest request) { var model = mapper.Map(request); var update = await API.UpdateUser(model); var message = mapper.Map(update); return new ToastResult(message); } public async Task OnPostSyncAsync(SyncUserRequest request) { var model = mapper.Map(request); var update = await API.SyncUser(model); var message = mapper.Map(update); return new ToastResult(message); } public async Task OnGetEnableAsync(ChangeStateRequest request) { CreationResult result; if (!request.Enabled) result = await API.EnableUser(request.Id); else result = await API.DisableUser(request.Id); var message = mapper.Map(result); return new ToastResult(message); } } }