diff --git a/assets/tpl/admin_index.html b/assets/tpl/admin_index.html
index f4e5544..b7a9f22 100644
--- a/assets/tpl/admin_index.html
+++ b/assets/tpl/admin_index.html
@@ -181,7 +181,15 @@
{{if eq $.Device.Type "client"}}
{{$p.Endpoint}} |
{{end}}
- {{$p.LastHandshake}} |
+
+
+ {{$p.LastHandshakeRelativeTime}}
+
+ |
{{if eq $.Session.IsAdmin true}}
diff --git a/assets/tpl/user_index.html b/assets/tpl/user_index.html
index 1968aba..f42b4c6 100644
--- a/assets/tpl/user_index.html
+++ b/assets/tpl/user_index.html
@@ -55,7 +55,15 @@
| {{$p.Email}} |
{{$p.IPsStr}} |
{{$p.DeviceName}} |
- {{$p.LastHandshake}} |
+
+
+ {{$p.LastHandshakeRelativeTime}}
+
+ |
{{if eq $.UserManagePeers true}}
diff --git a/internal/common/util.go b/internal/common/util.go
index e33ebf9..17ee7a6 100644
--- a/internal/common/util.go
+++ b/internal/common/util.go
@@ -93,3 +93,11 @@ func FormatDateHTML(t *time.Time) string {
return t.Format("2006-01-02")
}
+
+func FormatToUnixTime(t *time.Time) string {
+ if t == nil {
+ return ""
+ }
+
+ return t.Format(time.UnixDate)
+}
diff --git a/internal/server/docs/docs.go b/internal/server/docs/docs.go
index d57115f..697a0e7 100644
--- a/internal/server/docs/docs.go
+++ b/internal/server/docs/docs.go
@@ -1512,6 +1512,9 @@ const docTemplate = `{
"IgnoreGlobalSettings": {
"type": "boolean"
},
+ "LastHandshakeTime": {
+ "type": "string"
+ },
"Mtu": {
"description": "Global Device Settings (can be ignored, only make sense if device is in server mode)",
"type": "integer",
diff --git a/internal/server/server.go b/internal/server/server.go
index 5ccce9c..ca588f5 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -128,6 +128,7 @@ func (s *Server) Setup(ctx context.Context) error {
s.server.Use(sessions.Sessions("authsession", cookieStore))
s.server.SetFuncMap(template.FuncMap{
"formatDate": common.FormatDateHTML,
+ "formatTime": common.FormatToUnixTime,
"formatBytes": common.ByteCountSI,
"urlEncode": url.QueryEscape,
"startsWith": strings.HasPrefix,
diff --git a/internal/wireguard/peermanager.go b/internal/wireguard/peermanager.go
index 2381c92..537150c 100644
--- a/internal/wireguard/peermanager.go
+++ b/internal/wireguard/peermanager.go
@@ -100,10 +100,10 @@ type Peer struct {
Email string `gorm:"index" form:"mail" binding:"required,email"`
IgnoreGlobalSettings bool `form:"ignoreglobalsettings"`
- IsOnline bool `gorm:"-" json:"-"`
- IsNew bool `gorm:"-" json:"-"`
- LastHandshake string `gorm:"-" json:"-"`
- LastHandshakeTime string `gorm:"-" json:"-"`
+ IsOnline bool `gorm:"-" json:"-"`
+ IsNew bool `gorm:"-" json:"-"`
+ LastHandshakeTime time.Time `gorm:"-"`
+ LastHandshakeRelativeTime string `gorm:"-" json:"-"`
// Core WireGuard Settings
PublicKey string `gorm:"primaryKey" form:"pubkey" binding:"required,base64"` // the public key of the peer itself
@@ -610,8 +610,7 @@ func (m *PeerManager) populatePeerData(peer *Peer) {
// set data from WireGuard interface
peer.Peer, _ = m.wg.GetPeer(peer.DeviceName, peer.PublicKey)
- peer.LastHandshake = "never"
- peer.LastHandshakeTime = "Never connected, or user is disabled."
+ peer.LastHandshakeRelativeTime = "never"
if peer.Peer != nil {
since := time.Since(peer.Peer.LastHandshakeTime)
sinceSeconds := int(since.Round(time.Second).Seconds())
@@ -619,13 +618,13 @@ func (m *PeerManager) populatePeerData(peer *Peer) {
sinceSeconds -= sinceMinutes * 60
if sinceMinutes > 2*10080 { // 2 weeks
- peer.LastHandshake = "a while ago"
+ peer.LastHandshakeRelativeTime = "a while ago"
} else if sinceMinutes > 10080 { // 1 week
- peer.LastHandshake = "a week ago"
+ peer.LastHandshakeRelativeTime = "a week ago"
} else {
- peer.LastHandshake = fmt.Sprintf("%02dm %02ds", sinceMinutes, sinceSeconds)
+ peer.LastHandshakeRelativeTime = fmt.Sprintf("%02dm %02ds", sinceMinutes, sinceSeconds)
}
- peer.LastHandshakeTime = peer.Peer.LastHandshakeTime.Format(time.UnixDate)
+ peer.LastHandshakeTime = peer.Peer.LastHandshakeTime
}
peer.IsOnline = false
}
|