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