mirror of https://github.com/h44z/wg-portal.git
				
				
				
			
		
			
				
	
	
		
			189 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
| package server
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"strconv"
 | |
| 
 | |
| 	"github.com/gin-gonic/gin"
 | |
| )
 | |
| 
 | |
| func (s *Server) GetHandleError(c *gin.Context, code int, message, details string) {
 | |
| 	c.HTML(code, "error.html", gin.H{
 | |
| 		"Data": gin.H{
 | |
| 			"Code":    strconv.Itoa(code),
 | |
| 			"Message": message,
 | |
| 			"Details": details,
 | |
| 		},
 | |
| 		"Route":   c.Request.URL.Path,
 | |
| 		"Session": s.getSessionData(c),
 | |
| 		"Static":  s.getStaticData(),
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (s *Server) GetIndex(c *gin.Context) {
 | |
| 	c.HTML(http.StatusOK, "index.html", struct {
 | |
| 		Route   string
 | |
| 		Alerts  []FlashData
 | |
| 		Session SessionData
 | |
| 		Static  StaticData
 | |
| 		Device  Device
 | |
| 	}{
 | |
| 		Route:   c.Request.URL.Path,
 | |
| 		Alerts:  s.getFlashes(c),
 | |
| 		Session: s.getSessionData(c),
 | |
| 		Static:  s.getStaticData(),
 | |
| 		Device:  s.users.GetDevice(),
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (s *Server) GetAdminIndex(c *gin.Context) {
 | |
| 	currentSession := s.getSessionData(c)
 | |
| 
 | |
| 	sort := c.Query("sort")
 | |
| 	if sort != "" {
 | |
| 		if currentSession.SortedBy != sort {
 | |
| 			currentSession.SortedBy = sort
 | |
| 			currentSession.SortDirection = "asc"
 | |
| 		} else {
 | |
| 			if currentSession.SortDirection == "asc" {
 | |
| 				currentSession.SortDirection = "desc"
 | |
| 			} else {
 | |
| 				currentSession.SortDirection = "asc"
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if err := s.updateSessionData(c, currentSession); err != nil {
 | |
| 			s.GetHandleError(c, http.StatusInternalServerError, "sort error", "failed to save session")
 | |
| 			return
 | |
| 		}
 | |
| 		c.Redirect(http.StatusSeeOther, "/admin")
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	search, searching := c.GetQuery("search")
 | |
| 	if searching {
 | |
| 		currentSession.Search = search
 | |
| 
 | |
| 		if err := s.updateSessionData(c, currentSession); err != nil {
 | |
| 			s.GetHandleError(c, http.StatusInternalServerError, "search error", "failed to save session")
 | |
| 			return
 | |
| 		}
 | |
| 		c.Redirect(http.StatusSeeOther, "/admin")
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	device := s.users.GetDevice()
 | |
| 	users := s.users.GetFilteredAndSortedUsers(currentSession.SortedBy, currentSession.SortDirection, currentSession.Search)
 | |
| 
 | |
| 	c.HTML(http.StatusOK, "admin_index.html", struct {
 | |
| 		Route        string
 | |
| 		Alerts       []FlashData
 | |
| 		Session      SessionData
 | |
| 		Static       StaticData
 | |
| 		Peers        []User
 | |
| 		TotalPeers   int
 | |
| 		Device       Device
 | |
| 		LdapDisabled bool
 | |
| 	}{
 | |
| 		Route:        c.Request.URL.Path,
 | |
| 		Alerts:       s.getFlashes(c),
 | |
| 		Session:      currentSession,
 | |
| 		Static:       s.getStaticData(),
 | |
| 		Peers:        users,
 | |
| 		TotalPeers:   len(s.users.GetAllUsers()),
 | |
| 		Device:       device,
 | |
| 		LdapDisabled: s.ldapDisabled,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (s *Server) GetUserIndex(c *gin.Context) {
 | |
| 	currentSession := s.getSessionData(c)
 | |
| 
 | |
| 	sort := c.Query("sort")
 | |
| 	if sort != "" {
 | |
| 		if currentSession.SortedBy != sort {
 | |
| 			currentSession.SortedBy = sort
 | |
| 			currentSession.SortDirection = "asc"
 | |
| 		} else {
 | |
| 			if currentSession.SortDirection == "asc" {
 | |
| 				currentSession.SortDirection = "desc"
 | |
| 			} else {
 | |
| 				currentSession.SortDirection = "asc"
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if err := s.updateSessionData(c, currentSession); err != nil {
 | |
| 			s.GetHandleError(c, http.StatusInternalServerError, "sort error", "failed to save session")
 | |
| 			return
 | |
| 		}
 | |
| 		c.Redirect(http.StatusSeeOther, "/admin")
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	device := s.users.GetDevice()
 | |
| 	users := s.users.GetSortedUsersForEmail(currentSession.SortedBy, currentSession.SortDirection, currentSession.Email)
 | |
| 
 | |
| 	c.HTML(http.StatusOK, "user_index.html", struct {
 | |
| 		Route      string
 | |
| 		Alerts     []FlashData
 | |
| 		Session    SessionData
 | |
| 		Static     StaticData
 | |
| 		Peers      []User
 | |
| 		TotalPeers int
 | |
| 		Device     Device
 | |
| 	}{
 | |
| 		Route:      c.Request.URL.Path,
 | |
| 		Alerts:     s.getFlashes(c),
 | |
| 		Session:    currentSession,
 | |
| 		Static:     s.getStaticData(),
 | |
| 		Peers:      users,
 | |
| 		TotalPeers: len(users),
 | |
| 		Device:     device,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (s *Server) updateFormInSession(c *gin.Context, formData interface{}) error {
 | |
| 	currentSession := s.getSessionData(c)
 | |
| 	currentSession.FormData = formData
 | |
| 
 | |
| 	if err := s.updateSessionData(c, currentSession); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (s *Server) setNewUserFormInSession(c *gin.Context) (SessionData, error) {
 | |
| 	currentSession := s.getSessionData(c)
 | |
| 	// If session does not contain a user form ignore update
 | |
| 	// If url contains a formerr parameter reset the form
 | |
| 	if currentSession.FormData == nil || c.Query("formerr") == "" {
 | |
| 		user, err := s.PrepareNewUser()
 | |
| 		if err != nil {
 | |
| 			return currentSession, err
 | |
| 		}
 | |
| 		currentSession.FormData = user
 | |
| 	}
 | |
| 
 | |
| 	if err := s.updateSessionData(c, currentSession); err != nil {
 | |
| 		return currentSession, err
 | |
| 	}
 | |
| 
 | |
| 	return currentSession, nil
 | |
| }
 | |
| 
 | |
| func (s *Server) setFormInSession(c *gin.Context, formData interface{}) (SessionData, error) {
 | |
| 	currentSession := s.getSessionData(c)
 | |
| 	// If session does not contain a form ignore update
 | |
| 	// If url contains a formerr parameter reset the form
 | |
| 	if currentSession.FormData == nil || c.Query("formerr") == "" {
 | |
| 		currentSession.FormData = formData
 | |
| 	}
 | |
| 
 | |
| 	if err := s.updateSessionData(c, currentSession); err != nil {
 | |
| 		return currentSession, err
 | |
| 	}
 | |
| 
 | |
| 	return currentSession, nil
 | |
| }
 |