('TipUPJSONToken');
4 |
5 | export interface SfngTipUpPlacement {
6 | origin?: 'left' | 'right';
7 | offset?: number;
8 | }
9 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/lib/toggle-switch/index.ts:
--------------------------------------------------------------------------------
1 | export * from './toggle-switch';
2 | export * from './toggle.module';
3 |
4 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/lib/toggle-switch/toggle.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from "@angular/common";
2 | import { NgModule } from "@angular/core";
3 | import { FormsModule } from "@angular/forms";
4 | import { SfngToggleSwitchComponent } from "./toggle-switch";
5 |
6 | @NgModule({
7 | imports: [
8 | CommonModule,
9 | FormsModule,
10 | ],
11 | declarations: [
12 | SfngToggleSwitchComponent,
13 | ],
14 | exports: [
15 | SfngToggleSwitchComponent,
16 | ]
17 | })
18 | export class SfngToggleSwitchModule { }
19 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/lib/tooltip/_tooltip-component.scss:
--------------------------------------------------------------------------------
1 | sfng-tooltip-container {
2 | @apply relative block;
3 |
4 | max-width: 16rem;
5 | }
6 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/lib/tooltip/index.ts:
--------------------------------------------------------------------------------
1 | export * from './tooltip';
2 | export * from './tooltip.module';
3 |
4 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/lib/tooltip/tooltip-component.html:
--------------------------------------------------------------------------------
1 |
4 | {{ message }}
5 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/lib/ui.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { SfngAccordionModule } from './accordion';
3 |
4 |
5 | @NgModule({
6 | exports: [
7 | SfngAccordionModule
8 | ]
9 | })
10 | export class UiModule { }
11 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/src/public-api.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Public API Surface of ui
3 | */
4 |
5 | export * from './lib/accordion';
6 | export * from './lib/dialog';
7 | export * from './lib/dropdown';
8 | export * from './lib/overlay-stepper';
9 | export * from './lib/pagination';
10 | export * from './lib/select';
11 | export * from './lib/tabs';
12 | export * from './lib/tipup';
13 | export * from './lib/toggle-switch';
14 | export * from './lib/tooltip';
15 | export * from './lib/ui.module';
16 |
17 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/theming.scss:
--------------------------------------------------------------------------------
1 | @import "./src/lib/select/select";
2 | @import "./src/lib/dialog/dialog";
3 | @import "./src/lib/pagination/pagination";
4 | @import "./src/lib/tabs/tab-group";
5 | @import "./src/lib/tipup/tipup";
6 | @import "./src/lib/tooltip/tooltip-component";
7 | @import "./src/lib/toggle-switch/toggle-switch";
8 | @import "./src/lib/dialog/confirm.dialog";
9 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../../out-tsc/lib",
5 | "declaration": true,
6 | "declarationMap": true,
7 | "inlineSources": true,
8 | "types": [],
9 | "lib": [
10 | "dom",
11 | "es2018"
12 | ]
13 | },
14 | "exclude": [
15 | "src/test.ts",
16 | "**/*.spec.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.lib.json",
4 | "compilerOptions": {
5 | "declarationMap": false
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/safing/ui/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "../../../tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "../../../out-tsc/spec",
6 | "types": [
7 | "jasmine"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts"
12 | ],
13 | "include": [
14 | "**/*.spec.ts",
15 | "**/*.d.ts"
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/app/app.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { TauriIntegrationService } from 'src/app/integration/taur-app';
3 |
4 | export const appConfig: ApplicationConfig = {
5 | providers: [
6 | {
7 | provide: TauriIntegrationService,
8 | useClass: TauriIntegrationService,
9 | deps: []
10 | },
11 | ],
12 | };
13 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/modules/portmaster/projects/tauri-builtin/src/assets/.gitkeep
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/assets/portmaster-logo.png:
--------------------------------------------------------------------------------
1 | ../../../../../../assets/icons/pm_dark_512.png
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/modules/portmaster/projects/tauri-builtin/src/favicon.ico
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | TauriBuiltin
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/main.ts:
--------------------------------------------------------------------------------
1 | import { bootstrapApplication } from '@angular/platform-browser';
2 | import { appConfig } from './app/app.config';
3 | import { AppComponent } from './app/app.component';
4 |
5 | bootstrapApplication(AppComponent, appConfig)
6 | .catch((err) => console.error(err));
7 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/src/styles.scss:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @import "safing/ui/theming";
6 |
7 | /** foboar **/
8 |
--------------------------------------------------------------------------------
/modules/portmaster/projects/tauri-builtin/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "../../tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "../../out-tsc/app",
6 | "types": []
7 | },
8 | "files": ["src/main.ts"],
9 | "include": ["src/**/*.d.ts", "../../src/electron-app.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/modules/portmaster/proxy.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api": {
3 | "target": "http://localhost:817/",
4 | "secure": false
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/integration/index.ts:
--------------------------------------------------------------------------------
1 | export * from './integration';
2 | export * from './factory';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/index.ts:
--------------------------------------------------------------------------------
1 | export * from './intro.module';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/step-1-welcome/index.ts:
--------------------------------------------------------------------------------
1 | export * from './step-1-welcome';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/step-2-trackers/index.ts:
--------------------------------------------------------------------------------
1 | export * from './step-2-trackers'
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/step-3-dns/index.ts:
--------------------------------------------------------------------------------
1 | export * from './step-3-dns'
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/step-4-tipups/index.ts:
--------------------------------------------------------------------------------
1 | export * from './step-4-tipups'
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/step-4-tipups/step-4-tipups.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from "@angular/core";
2 | import { Step } from "@safing/ui";
3 | import { of } from "rxjs";
4 |
5 | @Component({
6 | templateUrl: './step-4-tipups.html',
7 | styleUrls: ['../step.scss'],
8 | changeDetection: ChangeDetectionStrategy.OnPush,
9 | })
10 | export class Step4TipupsComponent implements Step {
11 | validChange = of(true)
12 | }
13 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/intro/step.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | @apply flex flex-col items-center justify-center;
3 | }
4 |
5 | h1 {
6 | @apply text-primary text-2xl font-medium capitalize text-center py-5;
7 | }
8 |
9 | p {
10 | @apply text-tertiary text-sm font-medium text-center;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/layout/side-dash/side-dash.html:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/layout/side-dash/side-dash.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | justify-content: flex-start;
6 | overflow: hidden;
7 | overflow-y: hidden;
8 | width: 419px;
9 |
10 | @apply pt-4;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/layout/side-dash/side-dash.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-side-dash',
5 | templateUrl: './side-dash.html',
6 | styleUrls: ['./side-dash.scss'],
7 | changeDetection: ChangeDetectionStrategy.OnPush,
8 | })
9 | export class SideDashComponent {
10 | /** Whether or not a SPN account login is required */
11 | spnLoginRequired = false;
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/app-view.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | @apply flex flex-col h-screen max-h-screen;
3 | }
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/index.ts:
--------------------------------------------------------------------------------
1 | export { AppViewComponent } from './app-view';
2 | export { AppOverviewComponent } from './overview';
3 | export { QuickSettingInternetButtonComponent } from './qs-internet';
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/qs-history/qs-history.component.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/modules/portmaster/src/app/pages/app-view/qs-history/qs-history.component.scss
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/qs-internet/index.ts:
--------------------------------------------------------------------------------
1 | export * from './qs-internet';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/qs-select-exit/index.ts:
--------------------------------------------------------------------------------
1 | export * from './qs-select-exit';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/qs-select-exit/qs-select-exit.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/modules/portmaster/src/app/pages/app-view/qs-select-exit/qs-select-exit.scss
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/app-view/qs-use-spn/index.ts:
--------------------------------------------------------------------------------
1 | export * from './qs-use-spn';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/monitor/index.ts:
--------------------------------------------------------------------------------
1 | export { MonitorPageComponent } from './monitor';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/page.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | display : flex;
3 | flex-direction: column;
4 | width : 100%;
5 | height : 100%;
6 | }
7 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/country-details/index.ts:
--------------------------------------------------------------------------------
1 | export * from './country-details';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/country-overlay/index.ts:
--------------------------------------------------------------------------------
1 | export * from './country-overlay';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/index.ts:
--------------------------------------------------------------------------------
1 | export * from './spn-page';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/map-legend/index.ts:
--------------------------------------------------------------------------------
1 | export * from './map-legend';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/map-renderer/index.ts:
--------------------------------------------------------------------------------
1 | export * from './map-renderer';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/node-icon/index.ts:
--------------------------------------------------------------------------------
1 | export * from './node-icon';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/pin-details/index.ts:
--------------------------------------------------------------------------------
1 | export * from './pin-details';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/pin-list/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/modules/portmaster/src/app/pages/spn/pin-list/index.ts
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/pin-overlay/index.ts:
--------------------------------------------------------------------------------
1 | export * from './pin-overlay';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/pin-overlay/pin-overlay.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | min-width: 220px;
3 | display: block;
4 | }
5 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/pin-route/index.ts:
--------------------------------------------------------------------------------
1 | export * from './pin-route';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/spn-feature-carousel/index.ts:
--------------------------------------------------------------------------------
1 | export * from './spn-feature-carousel';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/spn/utils.ts:
--------------------------------------------------------------------------------
1 | import { OverlayRef } from '@angular/cdk/overlay';
2 | import { InjectionToken } from '@angular/core';
3 |
4 | export const OVERLAY_REF = new InjectionToken('OVERLAY_REF');
5 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/support/form/index.ts:
--------------------------------------------------------------------------------
1 | export * from './support-form';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/support/index.ts:
--------------------------------------------------------------------------------
1 | export * from './support';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/pages/support/progress-dialog/index.ts:
--------------------------------------------------------------------------------
1 | export * from './progress-dialog';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/services/index.ts:
--------------------------------------------------------------------------------
1 | export { NotificationsService } from './notifications.service';
2 | export * from './notifications.types';
3 | export * from './session-data.service';
4 | export { StatusService } from './status.service';
5 | export * from './status.types';
6 | export * from './supporthub.service';
7 | export * from './ui-state.service';
8 |
9 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/services/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "sideEffects": false
3 | }
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/services/status.service.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 |
3 | import { StatusService } from './status.service';
4 |
5 | describe('StatusService', () => {
6 | let service: StatusService;
7 |
8 | beforeEach(() => {
9 | TestBed.configureTestingModule({});
10 | service = TestBed.inject(StatusService);
11 | });
12 |
13 | it('should be created', () => {
14 | expect(service).toBeTruthy();
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/action-indicator/action-indicator.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from "@angular/common";
2 | import { NgModule } from "@angular/core";
3 | import { IndicatorComponent } from "./indicator";
4 |
5 | @NgModule({
6 | imports: [
7 | CommonModule,
8 | ],
9 | declarations: [
10 | IndicatorComponent,
11 | ]
12 | })
13 | export class ActionIndicatorModule { }
14 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/action-indicator/index.ts:
--------------------------------------------------------------------------------
1 | export * from './action-indicator.service';
2 | export * from './action-indicator.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/app-icon/index.ts:
--------------------------------------------------------------------------------
1 | export { AppIconComponent } from './app-icon';
2 | export { SfngAppIconModule } from './app-icon.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/basic-setting/index.ts:
--------------------------------------------------------------------------------
1 | export * from './basic-setting';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/filter-lists/index.ts:
--------------------------------------------------------------------------------
1 | export { FilterListComponent } from './filter-list';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/generic-setting/index.ts:
--------------------------------------------------------------------------------
1 | export * from './generic-setting';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/index.ts:
--------------------------------------------------------------------------------
1 | export * from './basic-setting';
2 | export * from './config-settings';
3 | export * from './config.module';
4 | export * from './filter-lists';
5 | export * from './generic-setting';
6 | export * from './ordererd-list';
7 | export * from './rule-list';
8 | export * from './safe.pipe';
9 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/ordererd-list/index.ts:
--------------------------------------------------------------------------------
1 | export { OrderedListComponent } from './ordered-list';
2 | export { OrderedListItemComponent } from './item';
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/ordererd-list/item.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{value}}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/config/rule-list/index.ts:
--------------------------------------------------------------------------------
1 | export * from './list-item';
2 | export * from './rule-list';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/count-indicator/count-indicator.html:
--------------------------------------------------------------------------------
1 | {{ count | prettyCount }}
2 |
5 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/count-indicator/count-indicator.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { CountIndicatorComponent } from "./count-indicator";
3 | import { PrettyCountPipe } from "./count.pipe";
4 |
5 | @NgModule({
6 | declarations: [
7 | CountIndicatorComponent,
8 | PrettyCountPipe,
9 | ],
10 | exports: [
11 | CountIndicatorComponent,
12 | PrettyCountPipe,
13 | ]
14 | })
15 | export class CountIndicatorModule { }
16 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/count-indicator/count-indicator.scss:
--------------------------------------------------------------------------------
1 | @import '../../../theme/mixins/_pill.scss';
2 |
3 | :host {
4 | @include pill-container;
5 | @apply pl-2;
6 | @apply bg-buttons-dark;
7 | @apply w-20;
8 | }
9 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/count-indicator/count.pipe.ts:
--------------------------------------------------------------------------------
1 | import { Pipe, PipeTransform } from "@angular/core";
2 |
3 | @Pipe({
4 | name: 'prettyCount',
5 | pure: true
6 | })
7 | export class PrettyCountPipe implements PipeTransform {
8 | transform(value: number) {
9 | if (value > 999) {
10 | const v = Math.floor(value / 1000);
11 | if (value === v * 1000) {
12 | return `${v}k`;
13 | }
14 | return `${v}k+`
15 | }
16 | return `${value}`
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/count-indicator/index.ts:
--------------------------------------------------------------------------------
1 | export * from './count-indicator';
2 | export * from './count-indicator.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/country-flag/country.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CountryFlagDirective } from './country-flag';
3 |
4 | @NgModule({
5 | declarations: [
6 | CountryFlagDirective
7 | ],
8 | exports: [
9 | CountryFlagDirective,
10 | ]
11 | })
12 | export class CountryFlagModule { }
13 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/country-flag/index.ts:
--------------------------------------------------------------------------------
1 | export * from './country-flag';
2 | export * from './country.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/edit-profile-dialog/index.ts:
--------------------------------------------------------------------------------
1 | export * from './edit-profile-dialog';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/exit-screen/index.ts:
--------------------------------------------------------------------------------
1 | export * from './exit.service';
2 | export * from './exit-screen';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/expertise/expertise-switch.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | display: flex;
3 | @apply pl-2;
4 | user-select: none;
5 | flex-direction: row;
6 | align-items: center;
7 | justify-content: center;
8 | }
9 |
10 | sfng-tipup {
11 | margin-right: 0.5rem;
12 | }
13 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/expertise/index.ts:
--------------------------------------------------------------------------------
1 | export * from './expertise-directive';
2 | export * from './expertise-switch';
3 | export * from './expertise.service';
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/feature-scout/feature-scout.scss:
--------------------------------------------------------------------------------
1 | .feature-icon {
2 | @apply text-primary text-opacity-80;
3 |
4 | &.feature-icon-off {
5 | opacity: 0.25;
6 | }
7 | }
8 |
9 | .status-info {
10 | @apply text-primary text-opacity-80 text-xxs text-center;
11 |
12 | &:hover {
13 | cursor: default;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/feature-scout/index.ts:
--------------------------------------------------------------------------------
1 | export * from './feature-scout';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/focus/focus.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from "@angular/common";
2 | import { NgModule } from "@angular/core";
3 | import { AutoFocusDirective } from "./focus.directive";
4 |
5 | @NgModule({
6 | imports: [
7 | CommonModule,
8 | ],
9 | declarations: [
10 | AutoFocusDirective,
11 | ],
12 | exports: [
13 | AutoFocusDirective,
14 | ]
15 | })
16 | export class SfngFocusModule { }
17 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/focus/index.ts:
--------------------------------------------------------------------------------
1 | export { AutoFocusDirective } from './focus.directive';
2 | export * from './focus.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/fuzzySearch/index.ts:
--------------------------------------------------------------------------------
1 | import Fuse from 'fuse.js';
2 |
3 | export { FuseSearchOpts, FuzzySearchService } from './fuse.service';
4 | export { FuzzySearchPipe } from './search-pipe';
5 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/loading/index.ts:
--------------------------------------------------------------------------------
1 | export { LoadingComponent } from './loading';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/loading/loading.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/loading/loading.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-loading',
5 | templateUrl: './loading.html',
6 | styleUrls: ['./loading.scss'],
7 | changeDetection: ChangeDetectionStrategy.OnPush,
8 | })
9 | export class LoadingComponent {
10 | @HostBinding('class.animate')
11 | _animate = true;
12 |
13 | constructor(private changeDetectorRef: ChangeDetectorRef) { }
14 | }
15 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/menu/index.ts:
--------------------------------------------------------------------------------
1 | export { MenuComponent, MenuTriggerComponent, MenuItemComponent, MenuGroupComponent } from './menu';
2 | export * from './menu.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/menu/menu-group.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | display: block;
3 | width: 100%;
4 |
5 | @apply p-1;
6 | @apply px-4;
7 | @apply text-secondary;
8 |
9 | display: block;
10 | text-transform: uppercase;
11 | font-size: 0.7rem;
12 | opacity: .7;
13 | }
14 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/menu/menu-item.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | @apply block w-full;
3 |
4 | cursor: pointer;
5 | @apply p-2;
6 | @apply px-4 text-primary text-xxs;
7 | font-weight: 500;
8 |
9 | &:hover {
10 | @apply bg-gray-300;
11 | }
12 |
13 | &.disabled {
14 | cursor: not-allowed;
15 | opacity: 0.5;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/menu/menu.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/multi-switch/index.ts:
--------------------------------------------------------------------------------
1 | export { MultiSwitchComponent } from './multi-switch';
2 | export { SwitchItemComponent } from './switch-item';
3 | export * from './multi-switch.module';
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/multi-switch/multi-switch.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/add-to-filter/index.ts:
--------------------------------------------------------------------------------
1 | export * from './add-to-filter';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/combined-menu.pipe.ts:
--------------------------------------------------------------------------------
1 | import { KeyValue } from '@angular/common';
2 | import { Pipe, PipeTransform } from "@angular/core";
3 |
4 | interface Model {
5 | visible: boolean | 'combinedMenu';
6 | }
7 |
8 | @Pipe({
9 | pure: true,
10 | name: 'combinedMenu'
11 | })
12 | export class CombinedMenuPipe implements PipeTransform {
13 | transform(value: KeyValue[], ...args: any[]) {
14 | return value.filter(entry => entry.value?.visible === 'combinedMenu')
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/connection-details/index.ts:
--------------------------------------------------------------------------------
1 | export * from './conn-details';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/connection-row/index.ts:
--------------------------------------------------------------------------------
1 | export * from './conn-row';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/index.ts:
--------------------------------------------------------------------------------
1 | export * from './netquery.component';
2 | export * from './netquery.module';
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/line-chart/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/modules/portmaster/src/app/shared/netquery/line-chart/index.ts
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/pipes/index.ts:
--------------------------------------------------------------------------------
1 | export * from './location.pipe';
2 | export * from './can-show.pipe';
3 | export * from './can-use-rules.pipe';
4 | export * from './is-blocked.pipe';
5 | export * from './country-name.pipe';
6 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/pipes/is-blocked.pipe.ts:
--------------------------------------------------------------------------------
1 | import { Pipe, PipeTransform } from '@angular/core';
2 | import { IsDenied, NetqueryConnection } from '@safing/portmaster-api';
3 |
4 | @Pipe({
5 | name: "isBlocked",
6 | pure: true
7 | })
8 | export class IsBlockedConnectionPipe implements PipeTransform {
9 | transform(conn: NetqueryConnection): boolean {
10 | return IsDenied(conn?.verdict);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/scope-label/index.ts:
--------------------------------------------------------------------------------
1 | export * from './scope-label';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/scope-label/scope-label.html:
--------------------------------------------------------------------------------
1 |
2 | {{subdomain}}.
4 | {{domain}}
5 |
6 |
7 | {{ scopeTranslation[scope || ''] || 'N/A' }}
8 |
9 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/search-overlay/index.ts:
--------------------------------------------------------------------------------
1 | export * from './search-overlay';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/search-overlay/search-overlay.html:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/searchbar/index.ts:
--------------------------------------------------------------------------------
1 | export * from './searchbar';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/tag-bar/index.ts:
--------------------------------------------------------------------------------
1 | export * from './tag-bar';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/netquery/textql/index.ts:
--------------------------------------------------------------------------------
1 | export * from './parser';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/network-scout/index.ts:
--------------------------------------------------------------------------------
1 | export * from './network-scout';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/network-scout/network-scout.scss:
--------------------------------------------------------------------------------
1 | :host {
2 | @apply w-full p-2 flex flex-col gap-2;
3 | }
4 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/notification-list/index.ts:
--------------------------------------------------------------------------------
1 | export { NotificationListComponent as NotificationWidgetComponent, NotificationWidgetConfig } from './notification-list.component';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/pipes/index.ts:
--------------------------------------------------------------------------------
1 | export * from './common-pipes.module';
2 | export * from './time-ago.pipe';
3 | export * from './to-profile.pipe';
4 | export * from './duration.pipe';
5 | export * from './to-seconds.pipe';
6 | export * from './round.pipe';
7 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/pipes/round.pipe.ts:
--------------------------------------------------------------------------------
1 | import { Pipe, PipeTransform } from '@angular/core';
2 |
3 | @Pipe({
4 | name: 'round',
5 | pure: true,
6 | })
7 | export class RoundPipe implements PipeTransform {
8 | transform(value: number, roundBy: number) {
9 | if (isNaN(value)) {
10 | return NaN
11 | }
12 |
13 | return Math.floor(value / roundBy) * roundBy
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/pipes/to-seconds.pipe.ts:
--------------------------------------------------------------------------------
1 | import { Pipe, PipeTransform } from "@angular/core";
2 |
3 | @Pipe({
4 | name: 'toSeconds',
5 | pure: true,
6 | })
7 | export class ToSecondsPipe implements PipeTransform {
8 | transform(value: Date | string, ...args: any[]) {
9 | if (value === null || value === undefined) {
10 | return NaN
11 | }
12 |
13 | if (typeof value === 'string') {
14 | value = new Date(value);
15 | }
16 |
17 | return Math.floor(value.getTime() / 1000)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/process-details-dialog/index.ts:
--------------------------------------------------------------------------------
1 | export * from './process-details-dialog';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/prompt-list/index.ts:
--------------------------------------------------------------------------------
1 | export { PromptListComponent as PromptWidgetComponent } from './prompt-list.component';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/security-lock/index.ts:
--------------------------------------------------------------------------------
1 | export * from './security-lock';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/spn-account-details/index.ts:
--------------------------------------------------------------------------------
1 | export * from './spn-account-details';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/spn-account-details/spn-account-details.scss:
--------------------------------------------------------------------------------
1 | table tr {
2 | background-color: transparent !important;
3 | }
4 |
5 | table .table-section-start {
6 | border-top: 1.5rem solid transparent;
7 | }
8 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/spn-login/index.ts:
--------------------------------------------------------------------------------
1 | export * from './spn-login';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/spn-network-status/index.ts:
--------------------------------------------------------------------------------
1 | export * from './spn-network-status';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/spn-status/index.ts:
--------------------------------------------------------------------------------
1 | export * from './spn-status';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/status-pilot/index.ts:
--------------------------------------------------------------------------------
1 | export { StatusPilotComponent as PilotWidgetComponent } from "./pilot-widget";
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/app/shared/text-placeholder/index.ts:
--------------------------------------------------------------------------------
1 | export { PlaceholderComponent } from './placeholder';
2 |
--------------------------------------------------------------------------------
/modules/portmaster/src/assets:
--------------------------------------------------------------------------------
1 | ../../../assets
--------------------------------------------------------------------------------
/modules/portmaster/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/dist/zone-testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | // First, initialize the Angular testing environment.
11 | getTestBed().initTestEnvironment(
12 | BrowserDynamicTestingModule,
13 | platformBrowserDynamicTesting()
14 | );
15 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme.less:
--------------------------------------------------------------------------------
1 |
2 | // Custom Theming for NG-ZORRO
3 | // For more information: https://ng.ant.design/docs/customize-theme/en
4 | @import "../node_modules/ng-zorro-antd/ng-zorro-antd.dark.less";
5 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme/_breadcrumbs.scss:
--------------------------------------------------------------------------------
1 | h4.breadcrumbs {
2 | * {
3 | margin-left : 0.125rem;
4 | margin-right: 0.125rem;
5 | }
6 |
7 | span {
8 | outline: none;
9 | @apply text-secondary;
10 |
11 | &:hover {
12 | @apply text-primary;
13 | text-decoration: underline;
14 | }
15 |
16 | &:last-of-type {
17 | @apply text-primary;
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme/_dialog.scss:
--------------------------------------------------------------------------------
1 | .dialog-screen-backdrop {
2 | backdrop-filter : blur(10px);
3 | background-color: rgba(#000000, 0.7);
4 | }
5 |
6 | .dialog-screen-backdrop-light {
7 | backdrop-filter : blur(3px);
8 | background-color: rgba(#000000, 0.4);
9 | }
10 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme/_pill.scss:
--------------------------------------------------------------------------------
1 | @import 'mixins/_pill.scss';
2 |
3 | .pill-container {
4 | @include pill-container;
5 | @apply pl-2;
6 | @apply bg-buttons-dark;
7 | }
8 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme/_scroll.scss:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | scroll-behavior: smooth;
4 | }
5 |
6 | ::-webkit-scrollbar {
7 | @apply bg-buttons-dark;
8 | width: 4px;
9 | }
10 |
11 | ::-webkit-scrollbar-thumb {
12 | @apply bg-buttons-light;
13 | @apply rounded;
14 | cursor: pointer;
15 | }
16 |
17 | .no-scroll {
18 | overflow: hidden;
19 | }
20 |
21 | .scrollable {
22 | width : 100%;
23 | max-height: 100%;
24 | overflow : auto;
25 | overflow-x: hidden;
26 | flex-grow : 1;
27 | @apply px-3;
28 | }
29 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme/_search.scss:
--------------------------------------------------------------------------------
1 | em.search-result {
2 | @apply text-background;
3 | @apply bg-yellow;
4 | @apply border;
5 | @apply border-yellow;
6 | @apply rounded-sm;
7 |
8 | text-decoration: none;
9 | font-style: inherit;
10 | }
11 |
--------------------------------------------------------------------------------
/modules/portmaster/src/theme/_tailwind.scss:
--------------------------------------------------------------------------------
1 | /** The tailwind post-processor will inject all tailwind styles here **/
2 | @import 'tailwindcss/base';
3 | @import 'tailwindcss/components';
4 | @import 'tailwindcss/utilities';
5 |
--------------------------------------------------------------------------------
/modules/portmaster/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/app",
6 | "types": [
7 | ]
8 | },
9 | "files": [
10 | "src/main.ts",
11 | "src/polyfills.ts"
12 | ],
13 | "include": [
14 | "src/**/*.d.ts"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/modules/portmaster/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/spec",
6 | "types": [
7 | "jasmine"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts",
12 | "src/polyfills.ts"
13 | ],
14 | "include": [
15 | "src/**/*.spec.ts",
16 | "src/**/*.d.ts",
17 | "src/app/widgets/status-widget-factory/settings.ts"
18 | ]
19 | }
20 |
--------------------------------------------------------------------------------
/notifier/Gopkg.toml:
--------------------------------------------------------------------------------
1 | ignored = ["github.com/safing/portbase/*"]
2 |
3 | [[constraint]]
4 | branch = "master"
5 | name = "github.com/mattn/go-gtk"
6 |
7 | [[constraint]]
8 | branch = "master"
9 | name = "github.com/dhaavi/go-notify"
10 |
11 | [[constraint]]
12 | branch = "master"
13 | name = "github.com/getlantern/systray"
14 |
15 | [prune]
16 | go-tests = true
17 | unused-packages = true
18 |
--------------------------------------------------------------------------------
/notifier/README.md:
--------------------------------------------------------------------------------
1 | ### Development Dependencies
2 |
3 | sudo apt install libgtk-3-dev libayatana-appindicator3-dev libwebkitgtk-3.0-dev libgl1-mesa-dev libglu1-mesa-dev libnotify-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
4 |
5 | sudo pacman -S libappindicator-gtk3
6 |
--------------------------------------------------------------------------------
/notifier/icons/icons.go:
--------------------------------------------------------------------------------
1 | package icons
2 |
3 | import (
4 | _ "embed"
5 | )
6 |
7 | //go:embed icons/pm_light_512.png
8 | var PNG []byte
9 |
--------------------------------------------------------------------------------
/notifier/icons/icons/README.md:
--------------------------------------------------------------------------------
1 | # .ICOs
2 |
3 | converted using https://www.icoconverter.com/
4 |
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_blue_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_blue_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_blue_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_blue_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_blue_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_blue_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_blue_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_blue_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_green_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_green_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_green_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_green_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_green_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_green_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_green_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_green_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_red_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_red_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_red_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_red_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_red_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_red_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_red_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_red_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_yellow_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_yellow_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_yellow_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_yellow_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_yellow_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_yellow_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_dark_yellow_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_dark_yellow_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_blue_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_blue_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_blue_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_blue_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_blue_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_blue_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_blue_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_blue_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_green_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_green_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_green_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_green_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_green_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_green_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_green_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_green_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_red_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_red_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_red_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_red_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_red_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_red_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_red_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_red_512.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_yellow_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_yellow_128.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_yellow_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_yellow_256.png
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_yellow_512.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_yellow_512.ico
--------------------------------------------------------------------------------
/notifier/icons/icons/pm_light_yellow_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/notifier/icons/icons/pm_light_yellow_512.png
--------------------------------------------------------------------------------
/tauri-app/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 |
--------------------------------------------------------------------------------
/tauri-app/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "rust-analyzer.linkedProjects": [
3 | "./src-tauri/Cargo.toml"
4 | ],
5 | "rust-analyzer.showUnlinkedFileNotification": false
6 | }
--------------------------------------------------------------------------------
/tauri-app/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM rust:latest
2 | RUN apt update && apt upgrade -y
3 | RUN apt install -y g++-mingw-w64-x86-64 libgtk-3-dev libjavascriptcoregtk-4.1-dev libsoup-3.0-dev libwebkit2gtk-4.1-dev
4 |
5 | RUN rustup target add x86_64-pc-windows-gnu
6 | RUN rustup toolchain install stable-x86_64-pc-windows-gnu
7 | RUN rustup target add x86_64-pc-windows-msvc
8 | RUN rustup toolchain install stable-x86_64-pc-windows-msvc
9 |
10 | WORKDIR /app/src-tauri
11 |
12 | CMD ["cargo", "build"]
13 |
--------------------------------------------------------------------------------
/tauri-app/Dockerfile.windows:
--------------------------------------------------------------------------------
1 | FROM rust:latest
2 | RUN apt update && apt upgrade -y
3 | RUN apt install -y g++-mingw-w64-x86-64
4 |
5 | RUN rustup target add x86_64-pc-windows-gnu
6 | RUN rustup toolchain install stable-x86_64-pc-windows-gnu
7 | RUN rustup target add x86_64-pc-windows-msvc
8 | RUN rustup toolchain install stable-x86_64-pc-windows-msvc
9 |
10 | WORKDIR /app/src-tauri
11 |
12 | CMD ["cargo", "build", "--target", "x86_64-pc-windows-gnu"]
--------------------------------------------------------------------------------
/tauri-app/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
--------------------------------------------------------------------------------
/tauri-app/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | tauri_build::build()
3 | }
4 |
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/tauri-app/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safing/portmaster-ui/896c6c2aca4c0a9eabfd41059b145d12918e835c/tauri-app/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/tauri-app/src-tauri/src/portapi/mod.rs:
--------------------------------------------------------------------------------
1 | pub mod client;
2 | pub mod message;
3 | pub mod types;
4 | pub mod models;
--------------------------------------------------------------------------------
/tauri-app/src-tauri/src/portapi/models/config.rs:
--------------------------------------------------------------------------------
1 | use serde::*;
2 | use super::super::message::Payload;
3 |
4 | #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
5 | pub struct BooleanValue {
6 | #[serde(rename = "Value")]
7 | pub value: Option,
8 | }
9 |
10 | impl TryInto for BooleanValue {
11 | type Error = serde_json::Error;
12 |
13 | fn try_into(self) -> Result {
14 | let str = serde_json::to_string(&self)?;
15 |
16 | Ok(Payload::JSON(str))
17 | }
18 | }
--------------------------------------------------------------------------------
/tauri-app/src-tauri/src/portapi/models/mod.rs:
--------------------------------------------------------------------------------
1 | pub mod config;
2 | pub mod spn;
3 | pub mod notification;
4 | pub mod subsystem;
--------------------------------------------------------------------------------
/tauri-app/src-tauri/src/portapi/models/spn.rs:
--------------------------------------------------------------------------------
1 | use serde::*;
2 |
3 |
4 | #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
5 | pub struct SPNStatus {
6 | #[serde(rename = "Status")]
7 | pub status: String,
8 | }
--------------------------------------------------------------------------------
/tauri-app/src-tauri/src/service/manager.rs:
--------------------------------------------------------------------------------
1 | use std::process::{Command, ExitStatus, Stdio};
2 | use std::{fs, io};
3 |
4 | use thiserror::Error;
5 |
6 | #[cfg(target_os = "linux")]
7 | use std::os::unix::fs::PermissionsExt;
8 |
9 | use super::status::StatusResult;
10 |
11 | static SYSTEMCTL: &str = "systemctl";
12 | // TODO(ppacher): add support for kdesudo and gksudo
13 |
14 | enum SudoCommand {
15 | Pkexec,
16 | Gksu,
17 | }
18 |
--------------------------------------------------------------------------------
/update-icons.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | echo "Cloning gosquared/flags into /tmp"
6 | rm -rf /tmp/flags.git
7 | git clone https://github.com/gosquared/flags.git /tmp/flags.git
8 |
9 | rm -rf ./assets/img/flags || true
10 | mv /tmp/flags.git/flags/flags-iso/flat/16 ./assets/img/flags
11 | cp /tmp/flags.git/LICENSE.txt ./assets/img/flags/LICENSE.txt
12 |
--------------------------------------------------------------------------------