forked from Cliffbreak/tsviewer
		
	I tried so hard
This commit is contained in:
		
							parent
							
								
									872dd200e1
								
							
						
					
					
						commit
						9e2d7e9acc
					
				
					 21 changed files with 144 additions and 26 deletions
				
			
		| 
						 | 
					@ -9,7 +9,7 @@ import (
 | 
				
			||||||
func InfoAPIHandler(s Service) http.HandlerFunc {
 | 
					func InfoAPIHandler(s Service) http.HandlerFunc {
 | 
				
			||||||
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
						return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
		response.Handler(w, r, response.HandlerFunc(func() (int, error) {
 | 
							response.Handler(w, r, response.HandlerFunc(func() (int, error) {
 | 
				
			||||||
			s, err := s.Info()
 | 
								s, err := s.ServerInfo()
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return http.StatusNotFound, err
 | 
									return http.StatusNotFound, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ package server
 | 
				
			||||||
import "time"
 | 
					import "time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Service interface {
 | 
					type Service interface {
 | 
				
			||||||
	Info() (*Server, error)
 | 
						ServerInfo() (*Server, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Server struct {
 | 
					type Server struct {
 | 
				
			||||||
| 
						 | 
					@ -1,12 +0,0 @@
 | 
				
			||||||
package index
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"html/template"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func IndexGUIHandler(t template.Template) http.HandlerFunc {
 | 
					 | 
				
			||||||
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
					 | 
				
			||||||
		t.Lookup("index.html").Execute(w, nil)
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										32
									
								
								features/web/index/handler.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								features/web/index/handler.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					package index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"html/template"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/web/weberror"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func IndexGUIHandler(s Service, t template.Template) http.HandlerFunc {
 | 
				
			||||||
 | 
						return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
							server, err := s.ServerInfo()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								weberror.NewPage(err, http.StatusNotFound).Send(w, t)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							channels, err := s.Channels()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								weberror.NewPage(err, http.StatusNotFound).Send(w, t)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							clients, err := s.Clients()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								weberror.NewPage(err, http.StatusNotFound).Send(w, t)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							NewPage(*server, channels, clients).Send(w, t)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										34
									
								
								features/web/index/page.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								features/web/index/page.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					package index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"html/template"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/channel"
 | 
				
			||||||
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/client"
 | 
				
			||||||
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/server"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Service interface {
 | 
				
			||||||
 | 
						ServerInfo() (*server.Server, error)
 | 
				
			||||||
 | 
						Clients() ([]*client.Client, error)
 | 
				
			||||||
 | 
						Channels() ([]*channel.Channel, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type IndexPage struct {
 | 
				
			||||||
 | 
						Server   server.Server
 | 
				
			||||||
 | 
						Channels []*channel.Channel
 | 
				
			||||||
 | 
						Clients  []*client.Client
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewPage(server server.Server, channels []*channel.Channel, clients []*client.Client) *IndexPage {
 | 
				
			||||||
 | 
						return &IndexPage{
 | 
				
			||||||
 | 
							Server:   server,
 | 
				
			||||||
 | 
							Channels: channels,
 | 
				
			||||||
 | 
							Clients:  clients,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (page IndexPage) Send(w io.Writer, t template.Template) {
 | 
				
			||||||
 | 
						t.Lookup("index.html").Execute(w, page)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -6,10 +6,10 @@ import (
 | 
				
			||||||
	"github.com/go-chi/chi"
 | 
						"github.com/go-chi/chi"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GUIRoutes(t template.Template) *chi.Mux {
 | 
					func GUIRoutes(s Service, t template.Template) *chi.Mux {
 | 
				
			||||||
	router := chi.NewRouter()
 | 
						router := chi.NewRouter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	router.Get("/", IndexGUIHandler(t))
 | 
						router.Get("/", IndexGUIHandler(s, t))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return router
 | 
						return router
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								features/web/weberror/page.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								features/web/weberror/page.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					package weberror
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"html/template"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ErrorPage struct {
 | 
				
			||||||
 | 
						Error      error
 | 
				
			||||||
 | 
						StatusCode int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewPage(err error, statusCode int) *ErrorPage {
 | 
				
			||||||
 | 
						return &ErrorPage{
 | 
				
			||||||
 | 
							Error:      err,
 | 
				
			||||||
 | 
							StatusCode: statusCode,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (page ErrorPage) Send(w io.Writer, t template.Template) {
 | 
				
			||||||
 | 
						t.Lookup("error.html").Execute(w, page)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								main.go
									
										
									
									
									
								
							| 
						 | 
					@ -7,10 +7,10 @@ import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/config"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/config"
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/channel"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/channel"
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/client"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/client"
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/index"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/server"
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/server"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/web/index"
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/gui"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/gui"
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/service"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/service"
 | 
				
			||||||
	"github.com/go-chi/chi"
 | 
						"github.com/go-chi/chi"
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ func Routes(s service.Service, t template.Template) *chi.Mux {
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	router.Route("/", func(r chi.Router) {
 | 
						router.Route("/", func(r chi.Router) {
 | 
				
			||||||
		r.Mount("/", index.GUIRoutes(t))
 | 
							r.Mount("/", index.GUIRoutes(s, t))
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return router
 | 
						return router
 | 
				
			||||||
| 
						 | 
					@ -58,6 +58,9 @@ func main() {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	router := Routes(*service, *templates)
 | 
						router := Routes(*service, *templates)
 | 
				
			||||||
 | 
						router.Get("/static/*", func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
							http.StripPrefix("/static", http.FileServer(http.Dir("./static"))).ServeHTTP(w, r)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log.Fatal("Handler: ", http.ListenAndServe(":8080", router))
 | 
						log.Fatal("Handler: ", http.ListenAndServe(":8080", router))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ package service
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/channel"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/channel"
 | 
				
			||||||
	"github.com/multiplay/go-ts3"
 | 
						"github.com/multiplay/go-ts3"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ package service
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/client"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/client"
 | 
				
			||||||
	"github.com/multiplay/go-ts3"
 | 
						"github.com/multiplay/go-ts3"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,10 @@ package service
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.cliffbreak.de/Cliffbreak/tsviewer/features/server"
 | 
						"git.cliffbreak.de/Cliffbreak/tsviewer/features/api/server"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s Service) Info() (*server.Server, error) {
 | 
					func (s Service) ServerInfo() (*server.Server, error) {
 | 
				
			||||||
	serverInfo, err := s.TSClient.Server.Info()
 | 
						serverInfo, err := s.TSClient.Server.Info()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								static/styles.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								static/styles.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					*{
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h2{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					small{
 | 
				
			||||||
 | 
					    margin-left: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					p.client{
 | 
				
			||||||
 | 
					    margin-left: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								templates/error.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								templates/error.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					    <head>
 | 
				
			||||||
 | 
					        <title>Error</title>
 | 
				
			||||||
 | 
					    </head>
 | 
				
			||||||
 | 
					    <body>
 | 
				
			||||||
 | 
					        <h1>Oops, an error occurred!</h1>
 | 
				
			||||||
 | 
					        <p1>Error {{.StatusCode}}</p1>
 | 
				
			||||||
 | 
					        <p1>{{.Error}}</p1>
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,23 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <title>TS3 Viewer</title>
 | 
					    <title>TS3 Viewer</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <link rel="stylesheet" href="static/styles.css">
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
    <h1>Index page!</h1>
 | 
					    <h2>{{.Server.Name}}</h2>
 | 
				
			||||||
 | 
					    <!-- <small>{{.Server.Version}}</small> -->
 | 
				
			||||||
 | 
					    {{$clients := .Clients}}
 | 
				
			||||||
 | 
					    {{range .Channels}}
 | 
				
			||||||
 | 
					        <p class="channel">{{.Name}}</p>
 | 
				
			||||||
 | 
					        {{$channelId := .ID}}
 | 
				
			||||||
 | 
					        {{range $clients}}
 | 
				
			||||||
 | 
					            {{if eq $channelId .ChannelID}}
 | 
				
			||||||
 | 
					                <p class="client">{{.Nickname}}</p>
 | 
				
			||||||
 | 
					            {{end}}
 | 
				
			||||||
 | 
					        {{end}}
 | 
				
			||||||
 | 
					    {{end}}
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue