示例#1
0
        protected override async Task OnParametersSetAsync()
        {
            guests = await GuestRepo.GetAll().ToListAsync();

            Action <IGridColumnCollection <GuestEntity> > columns = c =>
            {
                c.Add(g => g.Username).Titled(Loc["Username"]);
                c.Add(g => g.AccessExpiration).Titled(Loc["AccessExpiration"]).SetFilterWidgetType("DateTimeLocal").Format("{0:dd/MM/yyyy HH:mm}");
                c.Add(g => g.AllowedAddresses).Titled(Loc["AllowedAddresses"]);
            };

            var query = new QueryDictionary <StringValues>();

            query.Add("grid-page", "1");

            var client = new GridClient <GuestEntity>(q => GetGridRows(columns, q), query, false, "guestsGrid", columns, CultureInfo.CurrentCulture)
                         .Sortable()
                         .Filterable()
                         .WithMultipleFilters()
                         .SetKeyboard(true)
                         .Selectable(true, false, false);

            grid = client.Grid;

            // Try to set a previous filter
            if (VolatileSettings.GridQueries.ContainsKey((0, "guestsGrid")))
            {
                grid.Query = VolatileSettings.GridQueries[(0, "guestsGrid")];
示例#2
0
        private async Task Clone()
        {
            var wrapper = new JobOptionsWrapper {
                Options = jobOptions
            };
            var entity = new JobEntity
            {
                Owner        = await GuestRepo.Get(uid),
                CreationDate = DateTime.Now,
                JobType      = jobType,
                JobOptions   = JsonConvert.SerializeObject(wrapper, settings)
            };

            await JobRepo.Add(entity);

            // Get the entity that was just added in order to get its ID
            // entity = await JobRepo.GetAll().Include(j => j.Owner).OrderByDescending(e => e.Id).FirstAsync();

            try
            {
                var job = JobFactory.FromOptions(entity.Id, entity.Owner == null ? 0 : entity.Owner.Id, jobOptions);

                Manager.AddJob(job);
                Nav.NavigateTo($"job/{job.Id}");
            }
            catch (Exception ex)
            {
                await js.AlertException(ex);
            }
        }
示例#3
0
        private async Task RefreshList()
        {
            guests = await GuestRepo.GetAll().ToListAsync();

            await gridComponent.UpdateGrid();

            StateHasChanged();
        }
示例#4
0
        private async Task DeleteGuest()
        {
            if (selectedGuest == null)
            {
                await ShowNoGuestSelectedWarning();

                return;
            }

            if (await js.Confirm(Loc["AreYouSure"], $"{Loc["ReallyDelete"]} {selectedGuest.Username}?", Loc["Cancel"]))
            {
                // We have to delete all the guest's jobs, proxies and wordlists first
                // otherwise we get a FOREIGN KEY CONSTRAINT FAILED exception.
                if (await js.Confirm(Loc["DeleteEverything"], Loc["DeleteEverythingMessage"], Loc["Cancel"]))
                {
                    // Delete jobs
                    var jobsToDelete = await JobRepo.GetAll().Include(j => j.Owner)
                                       .Where(j => j.Owner.Id == selectedGuest.Id).ToListAsync();

                    await JobRepo.Delete(jobsToDelete);

                    // Delete jobs from the service
                    JobManager.Jobs.RemoveAll(j => j.OwnerId == selectedGuest.Id);

                    // Delete proxy groups and their proxies
                    var proxyGroupsToDelete = await ProxyGroupRepo.GetAll().Include(g => g.Owner)
                                              .Where(g => g.Owner.Id == selectedGuest.Id).ToListAsync();

                    foreach (var group in proxyGroupsToDelete)
                    {
                        var toDelete = await ProxyRepo.GetAll()
                                       .Where(p => p.Group.Id == group.Id)
                                       .ToListAsync();

                        await ProxyRepo.Delete(toDelete);
                    }

                    await ProxyGroupRepo.Delete(proxyGroupsToDelete);

                    // Delete wordlists
                    var wordlistsToDelete = await WordlistRepo.GetAll().Include(w => w.Owner)
                                            .Where(w => w.Owner.Id == selectedGuest.Id).ToListAsync();

                    foreach (var w in wordlistsToDelete)
                    {
                        await WordlistRepo.Delete(w, false);
                    }

                    // Delete the guest from the db
                    await GuestRepo.Delete(selectedGuest);

                    // Delete the guest from the local list
                    guests.Remove(selectedGuest);
                }
            }

            await RefreshList();
        }
        public void GetController(Controller newController)
        {
            controller           = newController;
            guestRepo            = controller.guestRepo;
            appointmentRepo      = controller.appointmentRepo;
            DataContext          = guestRepo;
            listView.ItemsSource = guestRepo.guests;
            CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(listView.ItemsSource);

            view.Filter = UserFilter;
        }
示例#6
0
        private async Task AddGuest()
        {
            var modal  = Modal.Show <GuestAdd>(Loc["AddGuest"]);
            var result = await modal.Result;

            if (!result.Cancelled)
            {
                var entity = (GuestEntity)result.Data;
                await GuestRepo.Add(entity);
                await RefreshList();
            }
        }
示例#7
0
        private async Task EditGuestPassword()
        {
            if (selectedGuest == null)
            {
                await ShowNoGuestSelectedWarning();

                return;
            }

            var modal  = Modal.Show <NewPasswordForm>($"{Loc["NewPasswordForGuest"]}: {selectedGuest.Username}");
            var result = await modal.Result;

            if (!result.Cancelled)
            {
                selectedGuest.PasswordHash = BCrypt.Net.BCrypt.HashPassword(result.Data as string);
                await GuestRepo.Update(selectedGuest);
                await RefreshList();
            }
        }
示例#8
0
        private async Task EditGuestInfo()
        {
            if (selectedGuest == null)
            {
                await ShowNoGuestSelectedWarning();

                return;
            }

            var parameters = new ModalParameters();

            parameters.Add(nameof(GuestEdit.Guest), selectedGuest);

            var modal  = Modal.Show <GuestEdit>(Loc["EditGuest"], parameters);
            var result = await modal.Result;

            if (!result.Cancelled)
            {
                await GuestRepo.Update(selectedGuest);
                await RefreshList();
            }
        }