🎉 Initial Commit
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				release-nightly / build-docker (push) Has been cancelled
				
					
					
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	release-nightly / build-docker (push) Has been cancelled
				This commit is contained in:
		
							
								
								
									
										19
									
								
								pkg/internal/server/api/directory.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								pkg/internal/server/api/directory.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| package api | ||||
|  | ||||
| import ( | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/directory" | ||||
| 	"github.com/gofiber/fiber/v2" | ||||
| 	"github.com/samber/lo" | ||||
| ) | ||||
|  | ||||
| func listExistsService(c *fiber.Ctx) error { | ||||
| 	services := directory.ListServiceInstance() | ||||
|  | ||||
| 	return c.JSON(lo.Map(services, func(item *directory.ServiceInstance, index int) map[string]any { | ||||
| 		return map[string]any{ | ||||
| 			"id":    item.ID, | ||||
| 			"type":  item.Type, | ||||
| 			"label": item.Label, | ||||
| 		} | ||||
| 	})) | ||||
| } | ||||
							
								
								
									
										28
									
								
								pkg/internal/server/api/index.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								pkg/internal/server/api/index.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| package api | ||||
|  | ||||
| import ( | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/server/exts" | ||||
| 	"github.com/gofiber/contrib/websocket" | ||||
| 	"github.com/gofiber/fiber/v2" | ||||
| ) | ||||
|  | ||||
| func MapAPIs(app *fiber.App) { | ||||
| 	wellKnown := app.Group("/.well-known").Name("Well Known") | ||||
| 	{ | ||||
| 		wellKnown.Get("/directory/services", listExistsService) | ||||
| 	} | ||||
|  | ||||
| 	api := app.Group("/api").Name("API") | ||||
| 	{ | ||||
| 		api.Use(func(c *fiber.Ctx) error { | ||||
| 			if err := exts.EnsureAuthenticated(c); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			return c.Next() | ||||
| 		}).Get("/ws", websocket.New(listenWebsocket)) | ||||
|  | ||||
| 		api.All("/*", func(c *fiber.Ctx) error { | ||||
| 			return fiber.ErrNotFound | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										29
									
								
								pkg/internal/server/api/ws.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								pkg/internal/server/api/ws.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| package api | ||||
|  | ||||
| import ( | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/models" | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/services" | ||||
| 	"github.com/gofiber/contrib/websocket" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| ) | ||||
|  | ||||
| func listenWebsocket(c *websocket.Conn) { | ||||
| 	user := c.Locals("user").(models.Account) | ||||
|  | ||||
| 	// Push connection | ||||
| 	services.ClientRegister(user, c) | ||||
| 	log.Debug().Uint("user", user.ID).Msg("New websocket connection established...") | ||||
|  | ||||
| 	// Event loop | ||||
| 	var err error | ||||
|  | ||||
| 	for { | ||||
| 		if _, _, err = c.ReadMessage(); err != nil { | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Pop connection | ||||
| 	services.ClientUnregister(user, c) | ||||
| 	log.Debug().Uint("user", user.ID).Msg("A websocket connection disconnected...") | ||||
| } | ||||
		Reference in New Issue
	
	Block a user