diff --git a/assets/tpl/email.html b/assets/tpl/email.html
index b67a683..3bc2238 100644
--- a/assets/tpl/email.html
+++ b/assets/tpl/email.html
@@ -92,7 +92,7 @@
- |
+ |
|
@@ -100,14 +100,14 @@
- {{if .Client.LdapUser}}
- Hello {{.Client.LdapUser.Firstname}} {{.Client.LdapUser.Lastname}} |
+ {{if $.User}}
+ Hello {{$.User.Firstname}} {{$.User.Lastname}} |
{{else}}
Hello |
{{end}}
- You or your administrator probably requested this VPN configuration. Scan the Qrcode or open the attached configuration file ({{.Client.GetConfigFileName}}) in the WireGuard VPN client to establish a secure VPN connection. |
+ You or your administrator probably requested this VPN configuration. Scan the Qrcode or open the attached configuration file ({{$.Peer.GetConfigFileName}}) in the WireGuard VPN client to establish a secure VPN connection. |
|
@@ -170,7 +170,7 @@
-
+
diff --git a/internal/server/handlers_peer.go b/internal/server/handlers_peer.go
index 9f2de38..b51ea57 100644
--- a/internal/server/handlers_peer.go
+++ b/internal/server/handlers_peer.go
@@ -8,10 +8,10 @@ import (
"strings"
"time"
- "github.com/h44z/wg-portal/internal/wireguard"
-
"github.com/gin-gonic/gin"
"github.com/h44z/wg-portal/internal/common"
+ "github.com/h44z/wg-portal/internal/users"
+ "github.com/h44z/wg-portal/internal/wireguard"
"github.com/sirupsen/logrus"
"github.com/tatsushid/go-fastping"
)
@@ -197,8 +197,8 @@ func (s *Server) PostAdminCreateLdapPeers(c *gin.Context) {
}
func (s *Server) GetAdminDeletePeer(c *gin.Context) {
- currentUser := s.peers.GetPeerByKey(c.Query("pkey"))
- if err := s.DeletePeer(currentUser); err != nil {
+ currentPeer := s.peers.GetPeerByKey(c.Query("pkey"))
+ if err := s.DeletePeer(currentPeer); err != nil {
s.GetHandleError(c, http.StatusInternalServerError, "Deletion error", err.Error())
return
}
@@ -207,14 +207,14 @@ func (s *Server) GetAdminDeletePeer(c *gin.Context) {
}
func (s *Server) GetPeerQRCode(c *gin.Context) {
- user := s.peers.GetPeerByKey(c.Query("pkey"))
+ peer := s.peers.GetPeerByKey(c.Query("pkey"))
currentSession := GetSessionData(c)
- if !currentSession.IsAdmin && user.Email != currentSession.Email {
+ if !currentSession.IsAdmin && peer.Email != currentSession.Email {
s.GetHandleError(c, http.StatusUnauthorized, "No permissions", "You don't have permissions to view this resource!")
return
}
- png, err := user.GetQRCode()
+ png, err := peer.GetQRCode()
if err != nil {
s.GetHandleError(c, http.StatusInternalServerError, "QRCode error", err.Error())
return
@@ -224,38 +224,40 @@ func (s *Server) GetPeerQRCode(c *gin.Context) {
}
func (s *Server) GetPeerConfig(c *gin.Context) {
- user := s.peers.GetPeerByKey(c.Query("pkey"))
+ peer := s.peers.GetPeerByKey(c.Query("pkey"))
currentSession := GetSessionData(c)
- if !currentSession.IsAdmin && user.Email != currentSession.Email {
+ if !currentSession.IsAdmin && peer.Email != currentSession.Email {
s.GetHandleError(c, http.StatusUnauthorized, "No permissions", "You don't have permissions to view this resource!")
return
}
- cfg, err := user.GetConfigFile(s.peers.GetDevice(currentSession.DeviceName))
+ cfg, err := peer.GetConfigFile(s.peers.GetDevice(currentSession.DeviceName))
if err != nil {
s.GetHandleError(c, http.StatusInternalServerError, "ConfigFile error", err.Error())
return
}
- c.Header("Content-Disposition", "attachment; filename="+user.GetConfigFileName())
+ c.Header("Content-Disposition", "attachment; filename="+peer.GetConfigFileName())
c.Data(http.StatusOK, "application/config", cfg)
return
}
func (s *Server) GetPeerConfigMail(c *gin.Context) {
- user := s.peers.GetPeerByKey(c.Query("pkey"))
+ peer := s.peers.GetPeerByKey(c.Query("pkey"))
currentSession := GetSessionData(c)
- if !currentSession.IsAdmin && user.Email != currentSession.Email {
+ if !currentSession.IsAdmin && peer.Email != currentSession.Email {
s.GetHandleError(c, http.StatusUnauthorized, "No permissions", "You don't have permissions to view this resource!")
return
}
- cfg, err := user.GetConfigFile(s.peers.GetDevice(currentSession.DeviceName))
+ user := s.users.GetUser(peer.Email)
+
+ cfg, err := peer.GetConfigFile(s.peers.GetDevice(currentSession.DeviceName))
if err != nil {
s.GetHandleError(c, http.StatusInternalServerError, "ConfigFile error", err.Error())
return
}
- png, err := user.GetQRCode()
+ png, err := peer.GetQRCode()
if err != nil {
s.GetHandleError(c, http.StatusInternalServerError, "QRCode error", err.Error())
return
@@ -263,11 +265,13 @@ func (s *Server) GetPeerConfigMail(c *gin.Context) {
// Apply mail template
var tplBuff bytes.Buffer
if err := s.mailTpl.Execute(&tplBuff, struct {
- Client wireguard.Peer
+ Peer wireguard.Peer
+ User *users.User
QrcodePngName string
PortalUrl string
}{
- Client: user,
+ Peer: peer,
+ User: user,
QrcodePngName: "wireguard-config.png",
PortalUrl: s.config.Core.ExternalUrl,
}); err != nil {
@@ -278,7 +282,7 @@ func (s *Server) GetPeerConfigMail(c *gin.Context) {
// Send mail
attachments := []common.MailAttachment{
{
- Name: user.GetConfigFileName(),
+ Name: peer.GetConfigFileName(),
ContentType: "application/config",
Data: bytes.NewReader(cfg),
},
@@ -291,7 +295,7 @@ func (s *Server) GetPeerConfigMail(c *gin.Context) {
if err := common.SendEmailWithAttachments(s.config.Email, s.config.Core.MailFrom, "", "WireGuard VPN Configuration",
"Your mail client does not support HTML. Please find the configuration attached to this mail.", tplBuff.String(),
- []string{user.Email}, attachments); err != nil {
+ []string{peer.Email}, attachments); err != nil {
s.GetHandleError(c, http.StatusInternalServerError, "Email error", err.Error())
return
}
@@ -301,14 +305,14 @@ func (s *Server) GetPeerConfigMail(c *gin.Context) {
}
func (s *Server) GetPeerStatus(c *gin.Context) {
- user := s.peers.GetPeerByKey(c.Query("pkey"))
+ peer := s.peers.GetPeerByKey(c.Query("pkey"))
currentSession := GetSessionData(c)
- if !currentSession.IsAdmin && user.Email != currentSession.Email {
+ if !currentSession.IsAdmin && peer.Email != currentSession.Email {
s.GetHandleError(c, http.StatusUnauthorized, "No permissions", "You don't have permissions to view this resource!")
return
}
- if user.Peer == nil { // no peer means disabled
+ if peer.Peer == nil { // no peer means disabled
c.JSON(http.StatusOK, false)
return
}
@@ -316,7 +320,7 @@ func (s *Server) GetPeerStatus(c *gin.Context) {
isOnline := false
ping := make(chan bool)
defer close(ping)
- for _, cidr := range user.IPs {
+ for _, cidr := range peer.IPs {
ip, _, _ := net.ParseCIDR(cidr)
var ra *net.IPAddr
if common.IsIPv6(ip.String()) {
diff --git a/internal/server/server.go b/internal/server/server.go
index 6b35a71..54b14f3 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -14,8 +14,6 @@ import (
"strings"
"time"
- "gorm.io/gorm"
-
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/memstore"
"github.com/gin-gonic/gin"
@@ -28,6 +26,7 @@ import (
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
ginlogrus "github.com/toorop/gin-logrus"
+ "gorm.io/gorm"
)
const SessionIdentifier = "wgPortalSession"
@@ -258,8 +257,8 @@ func GetSessionData(c *gin.Context) SessionData {
} else {
sessionData = SessionData{
Search: map[string]string{"peers": "", "userpeers": "", "users": ""},
- SortedBy: map[string]string{"peers": "mail", "userpeers": "mail", "users": "email"},
- SortDirection: map[string]string{"peers": "asc", "userpeers": "asc", "users": "asc"},
+ SortedBy: map[string]string{"peers": "handshake", "userpeers": "id", "users": "email"},
+ SortDirection: map[string]string{"peers": "desc", "userpeers": "asc", "users": "asc"},
Email: "",
Firstname: "",
Lastname: "",