summaryrefslogtreecommitdiffhomepage
path: root/ipn/ipnlocal/profiles.go
diff options
context:
space:
mode:
Diffstat (limited to 'ipn/ipnlocal/profiles.go')
-rw-r--r--ipn/ipnlocal/profiles.go23
1 files changed, 20 insertions, 3 deletions
diff --git a/ipn/ipnlocal/profiles.go b/ipn/ipnlocal/profiles.go
index 5d14c1d94..5c5c832a5 100644
--- a/ipn/ipnlocal/profiles.go
+++ b/ipn/ipnlocal/profiles.go
@@ -12,6 +12,7 @@ import (
"runtime"
"time"
+ "golang.org/x/exp/maps"
"golang.org/x/exp/slices"
"tailscale.com/ipn"
"tailscale.com/tailcfg"
@@ -349,6 +350,21 @@ func (pm *profileManager) DeleteProfile(id ipn.ProfileID) error {
return pm.writeKnownProfiles()
}
+// DeleteAllProfiles removes all known profiles and switches to a new empty
+// profile.
+func (pm *profileManager) DeleteAllProfiles() error {
+ metricDeleteAllProfile.Add(1)
+
+ for _, kp := range pm.knownProfiles {
+ if err := pm.store.WriteState(kp.Key, nil); err != nil {
+ return err
+ }
+ }
+ pm.NewProfile()
+ maps.Clear(pm.knownProfiles)
+ return pm.writeKnownProfiles()
+}
+
func (pm *profileManager) writeKnownProfiles() error {
b, err := json.Marshal(pm.knownProfiles)
if err != nil {
@@ -512,9 +528,10 @@ func (pm *profileManager) migrateFromLegacyPrefs() error {
}
var (
- metricNewProfile = clientmetric.NewCounter("profiles_new")
- metricSwitchProfile = clientmetric.NewCounter("profiles_switch")
- metricDeleteProfile = clientmetric.NewCounter("profiles_delete")
+ metricNewProfile = clientmetric.NewCounter("profiles_new")
+ metricSwitchProfile = clientmetric.NewCounter("profiles_switch")
+ metricDeleteProfile = clientmetric.NewCounter("profiles_delete")
+ metricDeleteAllProfile = clientmetric.NewCounter("profiles_delete_all")
metricMigration = clientmetric.NewCounter("profiles_migration")
metricMigrationError = clientmetric.NewCounter("profiles_migration_error")