refactor: dedup LeaseEntry.Expires, remove unused exports
C6: Remove LeaseEntry.Expires — use Lease.Expires as single source of truth. Update all references across portal/, cmd/, and tests. C7: Remove unused LeaseManager exports: GetAllLeases, GetLeaseByName, SetNamePattern, SetTTLBounds and associated namePattern/minTTL/maxTTL struct fields.
cognitive committed
Mar 5, 2026 at 05:21 UTC
c1e76bb9767d36baf6a823579c803d526bd0f5e2
4 files changed
+5
-87
cmd/relay-server/utils.go
+2
-2
@@ -192,7 +192,7 @@ func (r *leaseRow) fromLeaseEntry(entry *types.LeaseEntry, admin *Admin, portalU
192
r.LastSeen = formatLastSeen(since)
193
r.LastSeenISO = entry.LastSeen.UTC().Format(time.RFC3339)
194
r.FirstSeenISO = entry.FirstSeen.UTC().Format(time.RFC3339)
195
- r.TTL = formatDuration(time.Until(entry.Expires))
195
+ r.TTL = formatDuration(time.Until(entry.Lease.Expires))
196
linkLabel := identityID
197
if normalized, ok := types.NormalizeServiceName(lease.Name); ok {
198
linkLabel = normalized
@@ -244,7 +244,7 @@ func convertLeaseEntriesToRows(serv *portal.RelayServer, admin *Admin, forAdmin
244
}
245
246
for _, entry := range leaseEntries {
247
- if now.After(entry.Expires) {
247
+ if now.After(entry.Lease.Expires) {
248
continue
249
}
250
portal/lease.go
+3
-82
@@ -1,8 +1,6 @@
1
package portal
2
3
import (
4
- "regexp"
5
- "strings"
4
"sync"
5
"time"
6
@@ -13,11 +11,8 @@ type LeaseManager struct {
11
leases map[string]*types.LeaseEntry
12
stopCh chan struct{}
13
bannedLeases map[string]struct{}
16
- namePattern *regexp.Regexp
14
onLeaseDeleted func(string)
15
ttlInterval time.Duration
19
- minTTL time.Duration
20
- maxTTL time.Duration
16
leasesLock sync.RWMutex
17
startOnce sync.Once
18
stopOnce sync.Once
@@ -64,7 +59,7 @@ func (lm *LeaseManager) cleanupExpiredLeases() {
59
now := time.Now()
60
expired := make([]string, 0)
61
for id, lease := range lm.leases {
67
- if now.After(lease.Expires) {
62
+ if now.After(lease.Lease.Expires) {
63
delete(lm.leases, id)
64
expired = append(expired, id)
65
}
@@ -95,18 +90,6 @@ func (lm *LeaseManager) UpdateLease(lease *types.Lease) bool {
90
if _, banned := lm.bannedLeases[identityID]; banned {
91
return false
92
}
98
- if lm.namePattern != nil && lease.Name != "" && !lm.namePattern.MatchString(lease.Name) {
99
- return false
100
- }
101
- if lm.minTTL > 0 || lm.maxTTL > 0 {
102
- ttl := time.Until(lease.Expires)
103
- if lm.minTTL > 0 && ttl < lm.minTTL {
104
- return false
105
- }
106
- if lm.maxTTL > 0 && ttl > lm.maxTTL {
107
- return false
108
- }
109
- }
93
94
// Check for name conflicts (only if name is not empty)
95
if lease.Name != "" && lease.Name != "(unnamed)" {
@@ -133,7 +116,6 @@ func (lm *LeaseManager) UpdateLease(lease *types.Lease) bool {
116
117
lm.leases[identityID] = &types.LeaseEntry{
118
Lease: lease,
136
- Expires: lease.Expires,
119
LastSeen: time.Now(),
120
FirstSeen: firstSeen,
121
}
@@ -177,52 +159,13 @@ func (lm *LeaseManager) GetLeaseByID(leaseID string) (*types.LeaseEntry, bool) {
159
}
160
161
// Check if lease is expired
180
- if time.Now().After(lease.Expires) {
162
+ if time.Now().After(lease.Lease.Expires) {
163
return nil, false
164
}
165
166
return lease, true
167
}
168
187
-func (lm *LeaseManager) GetLeaseByName(name string) (*types.LeaseEntry, bool) {
188
- lm.leasesLock.RLock()
189
- defer lm.leasesLock.RUnlock()
190
-
191
- if name == "" {
192
- return nil, false
193
- }
194
-
195
- now := time.Now()
196
- for _, lease := range lm.leases {
197
- if strings.EqualFold(lease.Lease.Name, name) {
198
- if _, banned := lm.bannedLeases[lease.Lease.ID]; banned {
199
- continue
200
- }
201
- if now.After(lease.Expires) {
202
- continue
203
- }
204
- return lease, true
205
- }
206
- }
207
- return nil, false
208
-}
209
-
210
-func (lm *LeaseManager) GetAllLeases() []*types.Lease {
211
- lm.leasesLock.RLock()
212
- defer lm.leasesLock.RUnlock()
213
-
214
- now := time.Now()
215
- var validLeases []*types.Lease
216
-
217
- for _, entry := range lm.leases {
218
- if now.Before(entry.Expires) {
219
- validLeases = append(validLeases, entry.Lease)
220
- }
221
- }
222
-
223
- return validLeases
224
-}
225
-
169
// GetAllLeaseEntries returns all lease entries from the lease manager.
170
func (lm *LeaseManager) GetAllLeaseEntries() []*types.LeaseEntry {
171
lm.leasesLock.RLock()
@@ -232,7 +175,7 @@ func (lm *LeaseManager) GetAllLeaseEntries() []*types.LeaseEntry {
175
var entries []*types.LeaseEntry
176
177
for _, entry := range lm.leases {
235
- if now.Before(entry.Expires) {
178
+ if now.Before(entry.Lease.Expires) {
179
entries = append(entries, entry)
180
}
181
}
@@ -262,25 +205,3 @@ func (lm *LeaseManager) GetBannedLeases() []string {
205
}
206
return banned
207
}
265
-
266
-func (lm *LeaseManager) SetNamePattern(pattern string) error {
267
- lm.leasesLock.Lock()
268
- defer lm.leasesLock.Unlock()
269
- if pattern == "" {
270
- lm.namePattern = nil
271
- return nil
272
- }
273
- re, err := regexp.Compile(pattern)
274
- if err != nil {
275
- return err
276
- }
277
- lm.namePattern = re
278
- return nil
279
-}
280
-
281
-func (lm *LeaseManager) SetTTLBounds(minTTL, maxTTL time.Duration) {
282
- lm.leasesLock.Lock()
283
- lm.minTTL = minTTL
284
- lm.maxTTL = maxTTL
285
- lm.leasesLock.Unlock()
286
-}
portal/lease_test.go
-2
@@ -47,7 +47,6 @@ func TestLeaseManagerCleanupExpiredLeasesInvokesCallback(t *testing.T) {
47
Name: "expired",
48
Expires: time.Now().Add(-1 * time.Second),
49
},
50
- Expires: time.Now().Add(-1 * time.Second),
50
}
51
lm.leases["active-1"] = &types.LeaseEntry{
52
Lease: &types.Lease{
@@ -55,7 +54,6 @@ func TestLeaseManagerCleanupExpiredLeasesInvokesCallback(t *testing.T) {
54
Name: "active",
55
Expires: time.Now().Add(30 * time.Second),
56
},
58
- Expires: time.Now().Add(30 * time.Second),
57
}
58
59
lm.cleanupExpiredLeases()
types/types.go
-1
@@ -23,7 +23,6 @@ type Lease struct {
23
// LeaseEntry represents a registered lease with expiration tracking.
24
type LeaseEntry struct {
25
Lease *Lease
26
- Expires time.Time
26
LastSeen time.Time
27
FirstSeen time.Time
28
}