Restructure modules (#1572)

* Move portbase into monorepo

* Add new simple module mgr

* [WIP] Switch to new simple module mgr

* Add StateMgr and more worker variants

* [WIP] Switch more modules

* [WIP] Switch more modules

* [WIP] swtich more modules

* [WIP] switch all SPN modules

* [WIP] switch all service modules

* [WIP] Convert all workers to the new module system

* [WIP] add new task system to module manager

* [WIP] Add second take for scheduling workers

* [WIP] Add FIXME for bugs in new scheduler

* [WIP] Add minor improvements to scheduler

* [WIP] Add new worker scheduler

* [WIP] Fix more bug related to new module system

* [WIP] Fix start handing of the new module system

* [WIP] Improve startup process

* [WIP] Fix minor issues

* [WIP] Fix missing subsystem in settings

* [WIP] Initialize managers in constructor

* [WIP] Move module event initialization to constrictors

* [WIP] Fix setting for enabling and disabling the SPN module

* [WIP] Move API registeration into module construction

* [WIP] Update states mgr for all modules

* [WIP] Add CmdLine operation support

* Add state helper methods to module group and instance

* Add notification and module status handling to status package

* Fix starting issues

* Remove pilot widget and update security lock to new status data

* Remove debug logs

* Improve http server shutdown

* Add workaround for cleanly shutting down firewall+netquery

* Improve logging

* Add syncing states with notifications for new module system

* Improve starting, stopping, shutdown; resolve FIXMEs/TODOs

* [WIP] Fix most unit tests

* Review new module system and fix minor issues

* Push shutdown and restart events again via API

* Set sleep mode via interface

* Update example/template module

* [WIP] Fix spn/cabin unit test

* Remove deprecated UI elements

* Make log output more similar for the logging transition phase

* Switch spn hub and observer cmds to new module system

* Fix log sources

* Make worker mgr less error prone

* Fix tests and minor issues

* Fix observation hub

* Improve shutdown and restart handling

* Split up big connection.go source file

* Move varint and dsd packages to structures repo

* Improve expansion test

* Fix linter warnings

* Fix interception module on windows

* Fix linter errors

---------

Co-authored-by: Vladimir Stoilov <vladimir@safing.io>
This commit is contained in:
Daniel Hååvi 2024-08-09 17:15:48 +02:00 committed by GitHub
parent 10a77498f4
commit 80664d1a27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
647 changed files with 37690 additions and 3366 deletions

View file

@ -24,7 +24,7 @@ import {
} from '@safing/portmaster-api';
import { BehaviorSubject, Subscription, combineLatest } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { StatusService, Subsystem } from 'src/app/services';
import { StatusService } from 'src/app/services';
import {
fadeInAnimation,
fadeInListAnimation,
@ -44,6 +44,8 @@ import {
ImportDialogComponent,
} from './import-dialog/import-dialog.component';
import { subsystems, SubsystemWithExpertise } from './subsystems'
interface Category {
name: string;
settings: Setting[];
@ -52,12 +54,6 @@ interface Category {
hasUserDefinedValues: boolean;
}
interface SubsystemWithExpertise extends Subsystem {
minimumExpertise: ExpertiseLevelNumber;
isDisabled: boolean;
hasUserDefinedValues: boolean;
}
@Component({
selector: 'app-settings-view',
templateUrl: './config-settings.html',
@ -66,7 +62,7 @@ interface SubsystemWithExpertise extends Subsystem {
})
export class ConfigSettingsViewComponent
implements OnInit, OnDestroy, AfterViewInit {
subsystems: SubsystemWithExpertise[] = [];
subsystems: SubsystemWithExpertise[] = subsystems;
others: Setting[] | null = null;
settings: Map<string, Category[]> = new Map();
@ -207,7 +203,7 @@ export class ConfigSettingsViewComponent
private searchService: FuzzySearchService,
private actionIndicator: ActionIndicatorService,
private portapi: PortapiService,
private dialog: SfngDialogService
private dialog: SfngDialogService,
) { }
openImportDialog() {
@ -303,21 +299,12 @@ export class ConfigSettingsViewComponent
ngOnInit(): void {
this.subscription = combineLatest([
this.onSettingsChange,
this.statusService.querySubsystem(),
this.onSearch.pipe(debounceTime(250)),
this.configService.watch<StringSetting>('core/releaseLevel'),
])
.pipe(debounceTime(10))
.subscribe(
([settings, subsystems, searchTerm, currentReleaseLevelSetting]) => {
this.subsystems = subsystems.map((s) => ({
...s,
// we start with developer and decrease to the lowest number required
// while grouping the settings.
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
}));
([settings, searchTerm, currentReleaseLevelSetting]) => {
this.others = [];
this.settings = new Map();

View file

@ -0,0 +1,272 @@
import { ExpertiseLevelNumber } from "@safing/portmaster-api";
import { Subsystem } from "src/app/services/status.types";
export interface SubsystemWithExpertise extends Subsystem {
minimumExpertise: ExpertiseLevelNumber;
isDisabled: boolean;
hasUserDefinedValues: boolean;
}
export var subsystems : SubsystemWithExpertise[] = [
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "core",
Name: "Core",
Description: "Base Structure and System Integration",
Modules: [
{
Name: "core",
Enabled: true
},
{
Name: "subsystems",
Enabled: true
},
{
Name: "runtime",
Enabled: true
},
{
Name: "status",
Enabled: true
},
{
Name: "ui",
Enabled: true
},
{
Name: "compat",
Enabled: true
},
{
Name: "broadcasts",
Enabled: true
},
{
Name: "sync",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:core/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/core"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "dns",
Name: "Secure DNS",
Description: "DNS resolver with scoping and DNS-over-TLS",
Modules: [
{
Name: "nameserver",
Enabled: true
},
{
Name: "resolver",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:dns/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/dns"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "filter",
Name: "Privacy Filter",
Description: "DNS and Network Filter",
Modules: [
{
Name: "filter",
Enabled: true
},
{
Name: "interception",
Enabled: true
},
{
Name: "base",
Enabled: true
},
{
Name: "database",
Enabled: true
},
{
Name: "config",
Enabled: true
},
{
Name: "rng",
Enabled: true
},
{
Name: "metrics",
Enabled: true
},
{
Name: "api",
Enabled: true
},
{
Name: "updates",
Enabled: true
},
{
Name: "network",
Enabled: true
},
{
Name: "netenv",
Enabled: true
},
{
Name: "processes",
Enabled: true
},
{
Name: "profiles",
Enabled: true
},
{
Name: "notifications",
Enabled: true
},
{
Name: "intel",
Enabled: true
},
{
Name: "geoip",
Enabled: true
},
{
Name: "filterlists",
Enabled: true
},
{
Name: "customlists",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:filter/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/filter"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "history",
Name: "Network History",
Description: "Keep Network History Data",
Modules: [
{
Name: "netquery",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:history/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/history"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "spn",
Name: "SPN",
Description: "Safing Privacy Network",
Modules: [
{
Name: "captain",
Enabled: false
},
{
Name: "terminal",
Enabled: false
},
{
Name: "cabin",
Enabled: false
},
{
Name: "ships",
Enabled: false
},
{
Name: "docks",
Enabled: false
},
{
Name: "access",
Enabled: false
},
{
Name: "crew",
Enabled: false
},
{
Name: "navigator",
Enabled: false
},
{
Name: "sluice",
Enabled: false
},
{
Name: "patrol",
Enabled: false
}
],
ToggleOptionKey: "spn/enable",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:spn/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/spn"
}
}
];