mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package status
|
|
|
|
import (
|
|
"sync/atomic"
|
|
|
|
"github.com/safing/portbase/log"
|
|
)
|
|
|
|
// autopilot automatically adjusts the security level as needed.
|
|
func (s *SystemStatus) autopilot() {
|
|
// check if users is overruling
|
|
if s.SelectedSecurityLevel > SecurityLevelOff {
|
|
s.ActiveSecurityLevel = s.SelectedSecurityLevel
|
|
atomicUpdateActiveSecurityLevel(s.SelectedSecurityLevel)
|
|
return
|
|
}
|
|
|
|
// update active security level
|
|
switch s.ThreatMitigationLevel {
|
|
case SecurityLevelOff:
|
|
s.ActiveSecurityLevel = SecurityLevelNormal
|
|
atomicUpdateActiveSecurityLevel(SecurityLevelNormal)
|
|
case SecurityLevelNormal, SecurityLevelHigh, SecurityLevelExtreme:
|
|
s.ActiveSecurityLevel = s.ThreatMitigationLevel
|
|
atomicUpdateActiveSecurityLevel(s.ThreatMitigationLevel)
|
|
default:
|
|
log.Errorf("status: threat mitigation level is set to invalid value: %d", s.ThreatMitigationLevel)
|
|
}
|
|
}
|
|
|
|
// setSelectedSecurityLevel sets the selected security level.
|
|
func setSelectedSecurityLevel(level uint8) {
|
|
switch level {
|
|
case SecurityLevelOff, SecurityLevelNormal, SecurityLevelHigh, SecurityLevelExtreme:
|
|
status.Lock()
|
|
|
|
status.SelectedSecurityLevel = level
|
|
atomicUpdateSelectedSecurityLevel(level)
|
|
status.autopilot()
|
|
|
|
status.Unlock()
|
|
status.Save()
|
|
default:
|
|
log.Errorf("status: tried to set selected security level to invalid value: %d", level)
|
|
}
|
|
}
|
|
|
|
func atomicUpdateActiveSecurityLevel(level uint8) {
|
|
atomic.StoreUint32(activeSecurityLevel, uint32(level))
|
|
}
|
|
|
|
func atomicUpdateSelectedSecurityLevel(level uint8) {
|
|
atomic.StoreUint32(selectedSecurityLevel, uint32(level))
|
|
}
|