Skip to content

Commit

Permalink
Merge branch 'develop' into revamp/verdicts
Browse files Browse the repository at this point in the history
  • Loading branch information
ppacher authored Mar 20, 2024
2 parents 923ce2a + d17f391 commit 67d0d11
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 43 deletions.
4 changes: 4 additions & 0 deletions compat/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package compat

import (
"context"
"errors"
"time"

"github.com/tevino/abool"
Expand Down Expand Up @@ -92,6 +93,9 @@ func selfcheckTaskFunc(ctx context.Context, task *modules.Task) error {
case err == nil:
// Successful.
tracer.Debugf("compat: self-check successful")
case errors.Is(err, errSelfcheckSkipped):
// Skipped.
tracer.Debugf("compat: %s", err)
case issue == nil:
// Internal error.
tracer.Warningf("compat: %s", err)
Expand Down
9 changes: 9 additions & 0 deletions compat/selfcheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package compat
import (
"context"
"encoding/hex"
"errors"
"fmt"
"net"
"strings"
Expand All @@ -11,6 +12,7 @@ import (

"github.com/safing/portbase/log"
"github.com/safing/portbase/rng"
"github.com/safing/portmaster/netenv"
"github.com/safing/portmaster/network/packet"
"github.com/safing/portmaster/resolver"
)
Expand All @@ -36,12 +38,19 @@ var (
dnsCheckWaitDuration = 45 * time.Second
dnsCheckAnswerLock sync.Mutex
dnsCheckAnswer net.IP

errSelfcheckSkipped = errors.New("self-check skipped")
)

func selfcheck(ctx context.Context) (issue *systemIssue, err error) {
selfcheckLock.Lock()
defer selfcheckLock.Unlock()

// Step 0: Check if self-check makes sense.
if !netenv.Online() {
return nil, fmt.Errorf("%w: device is offline or in limited network", errSelfcheckSkipped)
}

// Step 1: Check if the system integration sees a packet.

// Empty recv channel.
Expand Down
3 changes: 2 additions & 1 deletion netenv/online-status.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ var (
"network-test.debian.org.", // Debian
"204.pop-os.org.", // Pop OS
"conncheck.opensuse.org.", // OpenSUSE
"ping.archlinux.org", // Arch
// There are probably a lot more domains for all the Linux Distro/DE Variants. Please raise issues and/or submit PRs!
// https://github.com/solus-project/budgie-desktop/issues/807
// https://www.lguruprasad.in/blog/2015/07/21/enabling-captive-portal-detection-in-gnome-3-14-on-debian-jessie/
Expand Down Expand Up @@ -434,7 +435,7 @@ func checkOnlineStatus(ctx context.Context) {

ipv4, ipv6, err := GetAssignedAddresses()
if err != nil {
log.Warningf("network: failed to get assigned network addresses: %s", err)
log.Warningf("netenv: failed to get assigned network addresses: %s", err)
} else {
var lan bool

Expand Down
18 changes: 12 additions & 6 deletions network/reference/ports.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ var (
25: "SMTP",
43: "WHOIS",
53: "DNS",
67: "DHCP-SERVER",
68: "DHCP-CLIENT",
67: "DHCP_SERVER",
68: "DHCP_CLIENT",
69: "TFTP",
80: "HTTP",
110: "POP3",
Expand All @@ -27,10 +27,10 @@ var (
389: "LDAP",
443: "HTTPS",
445: "SMB",
587: "SMTP-ALT",
465: "SMTP-SSL",
993: "IMAP-SSL",
995: "POP3-SSL",
587: "SMTP_ALT",
465: "SMTP_SSL",
993: "IMAP_SSL",
995: "POP3_SSL",
}

portNumbers = map[string]uint16{
Expand All @@ -42,7 +42,9 @@ var (
"WHOIS": 43,
"DNS": 53,
"DHCP-SERVER": 67,
"DHCP_SERVER": 67,
"DHCP-CLIENT": 68,
"DHCP_CLIENT": 68,
"TFTP": 69,
"HTTP": 80,
"POP3": 110,
Expand All @@ -55,9 +57,13 @@ var (
"HTTPS": 443,
"SMB": 445,
"SMTP-ALT": 587,
"SMTP_ALT": 587,
"SMTP-SSL": 465,
"SMTP_SSL": 465,
"IMAP-SSL": 993,
"IMAP_SSL": 993,
"POP3-SSL": 995,
"POP3_SSL": 995,
}
)

Expand Down
3 changes: 2 additions & 1 deletion profile/binmeta/find_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ func searchDirectory(directory string, binPath string) (iconPath string, err err
}
return "", fmt.Errorf("failed to read directory %s: %w", directory, err)
}
fmt.Println(directory)
// DEBUG:
// fmt.Println(directory)

var (
bestMatch string
Expand Down
54 changes: 29 additions & 25 deletions profile/binmeta/find_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ func GetIconAndName(ctx context.Context, binPath string, homeDir string) (icon *
}

return &Icon{
Type: IconTypeAPI,
Value: filename,
Type: IconTypeAPI,
Value: filename,
Source: IconSourceCore,
}, name, nil
}

Expand All @@ -63,29 +64,6 @@ func getIconAndNamefromRSS(ctx context.Context, binPath string) (png []byte, nam
// return true
// })

// Get first icon.
var (
icon *winres.Icon
iconErr error
)
rss.WalkType(winres.RT_GROUP_ICON, func(resID winres.Identifier, langID uint16, _ []byte) bool {
icon, iconErr = rss.GetIconTranslation(resID, langID)
return iconErr != nil
})
if iconErr != nil {
return nil, "", fmt.Errorf("failed to get icon: %w", err)
}
// Convert icon.
icoBuf := &bytes.Buffer{}
err = icon.SaveICO(icoBuf)
if err != nil {
return nil, "", fmt.Errorf("failed to save ico: %w", err)
}
png, err = ConvertICOtoPNG(icoBuf.Bytes())
if err != nil {
return nil, "", fmt.Errorf("failed to convert ico to png: %w", err)
}

// Get name from version record.
var (
versionInfo *version.Info
Expand All @@ -111,5 +89,31 @@ func getIconAndNamefromRSS(ctx context.Context, binPath string) (png []byte, nam
})
name = cleanFileDescription(name)

// Get first icon.
var (
icon *winres.Icon
iconErr error
)
rss.WalkType(winres.RT_GROUP_ICON, func(resID winres.Identifier, langID uint16, _ []byte) bool {
icon, iconErr = rss.GetIconTranslation(resID, langID)
return iconErr != nil
})
if iconErr != nil {
return nil, name, fmt.Errorf("failed to get icon: %w", err)
}
if icon == nil {
return nil, name, errors.New("no icon in resources")
}
// Convert icon, if it exists.
icoBuf := &bytes.Buffer{}
err = icon.SaveICO(icoBuf)
if err != nil {
return nil, name, fmt.Errorf("failed to save ico: %w", err)
}
png, err = ConvertICOtoPNG(icoBuf.Bytes())
if err != nil {
return nil, name, fmt.Errorf("failed to convert ico to png: %w", err)
}

return png, name, nil
}
43 changes: 37 additions & 6 deletions profile/binmeta/icon.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import (

// Icon describes an icon.
type Icon struct {
Type IconType
Value string
Type IconType
Value string
Source IconSource
}

// IconType describes the type of an Icon.
Expand All @@ -38,16 +39,46 @@ func (t IconType) sortOrder() int {
case IconTypeFile:
return 3
default:
return 100
return 9
}
}

// IconSource describes the source of an Icon.
type IconSource string

// Supported icon sources.
const (
IconSourceUser IconSource = "user"
IconSourceImport IconSource = "import"
IconSourceUI IconSource = "ui"
IconSourceCore IconSource = "core"
)

func (s IconSource) sortOrder() int {
switch s {
case IconSourceUser:
return 10
case IconSourceImport:
return 20
case IconSourceUI:
return 30
case IconSourceCore:
return 40
default:
return 90
}
}

func (icon Icon) sortOrder() int {
return icon.Source.sortOrder() + icon.Type.sortOrder()
}

// SortAndCompactIcons sorts and compacts a list of icons.
func SortAndCompactIcons(icons []Icon) []Icon {
// Sort.
slices.SortFunc[[]Icon, Icon](icons, func(a, b Icon) int {
aOrder := a.Type.sortOrder()
bOrder := b.Type.sortOrder()
aOrder := a.sortOrder()
bOrder := b.sortOrder()

switch {
case aOrder != bOrder:
Expand All @@ -68,7 +99,7 @@ func SortAndCompactIcons(icons []Icon) []Icon {
}

// GetIconAsDataURL returns the icon data as a data URL.
func (icon *Icon) GetIconAsDataURL() (bloburl string, err error) {
func (icon Icon) GetIconAsDataURL() (bloburl string, err error) {
switch icon.Type {
case IconTypeFile:
return "", errors.New("getting icon from file is not supported")
Expand Down
5 changes: 3 additions & 2 deletions profile/binmeta/icons.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@ func LoadAndSaveIcon(ctx context.Context, iconPath string) (*Icon, error) {
return nil, fmt.Errorf("failed to import icon %s: %w", iconPath, err)
}
return &Icon{
Type: IconTypeAPI,
Value: filename,
Type: IconTypeAPI,
Value: filename,
Source: IconSourceCore,
}, nil
}

Expand Down
5 changes: 3 additions & 2 deletions sync/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,8 +420,9 @@ func ImportProfile(r *ProfileImportRequest, requiredProfileSource profile.Profil
return nil, fmt.Errorf("%w: icon is invalid: %w", ErrImportFailed, err)
}
p.Icons = []binmeta.Icon{{
Type: binmeta.IconTypeAPI,
Value: filename,
Type: binmeta.IconTypeAPI,
Value: filename,
Source: binmeta.IconSourceImport,
}}
}

Expand Down

0 comments on commit 67d0d11

Please sign in to comment.