184 lines
4.5 KiB
Go
184 lines
4.5 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
d "playback-device-server/data"
|
|
m "playback-device-server/management"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
type DeviceApiHandler struct {
|
|
router *echo.Echo
|
|
deviceManager *m.DeviceManager
|
|
}
|
|
|
|
func (r *DeviceApiHandler) Initialize(authenticator *Authenticator) {
|
|
r.router.Use(authenticator.Authenticate("/api/devices", []string{}))
|
|
usersApi := r.router.Group("/api/devices")
|
|
//usersApi.POST("/register", r.handleRegister)
|
|
//usersApi.POST("/deregister", r.handleDeregister)
|
|
usersApi.GET("/session/info", r.handleGetSessionInfo)
|
|
usersApi.PUT("/:id", r.handleUpdateConfig)
|
|
usersApi.GET("", r.handleGetDevices)
|
|
usersApi.POST("", r.handleCreateDevice)
|
|
usersApi.DELETE("/:id", r.handleDeleteDevice)
|
|
}
|
|
|
|
//func (r DeviceApiHandler) handleRegister(context echo.Context) error {
|
|
// var registrationData struct {
|
|
// Code string `json:"code"`
|
|
// }
|
|
//
|
|
// var errorResponse struct {
|
|
// Error string `json:"error"`
|
|
// }
|
|
//
|
|
// error := context.Bind(®istrationData)
|
|
//
|
|
// if error != nil {
|
|
// log.Info().Msgf("failed to bind registration data: %s", error)
|
|
// errorResponse.Error = fmt.Sprintf("%s", error)
|
|
// context.JSON(400, errorResponse)
|
|
// return error
|
|
// }
|
|
//
|
|
// token, error := r.deviceManger.Register(registrationData.Code)
|
|
//
|
|
// if error != nil {
|
|
// log.Info().Msgf("failed to register: %s", error)
|
|
// errorResponse.Error = fmt.Sprintf("%s", error)
|
|
// context.JSON(400, errorResponse)
|
|
// return error
|
|
// }
|
|
//
|
|
// thirdyDays := 30 * 24 * 60 * 60
|
|
//
|
|
// cookie := &http.Cookie{
|
|
// Name: "token",
|
|
// Value: token,
|
|
// Path: "/",
|
|
// HttpOnly: true,
|
|
// MaxAge: thirdyDays,
|
|
// }
|
|
//
|
|
// context.SetCookie(cookie)
|
|
//
|
|
// return context.JSON(200, "")
|
|
//}
|
|
|
|
//func (r UsersApiHandler) handleDeregister(context echo.Context) error {
|
|
// r.removeTokenCookie(&context)
|
|
// context.JSON(200, "")
|
|
//
|
|
// authContext := context.(AuthContext)
|
|
//
|
|
// session := authContext.Session
|
|
// r.userManager.DeleteSession(session.Token)
|
|
//
|
|
// return nil
|
|
//}
|
|
|
|
func (r DeviceApiHandler) handleGetSessionInfo(context echo.Context) error {
|
|
//authContext := context.(AuthContext)
|
|
//user := authContext.User
|
|
|
|
response := struct {
|
|
IntegrationID string `json:"integration_id"`
|
|
IntegrationName string `json:"integration_name"`
|
|
DeviceID string `json:"device_id"`
|
|
DeviceName string `json:"device_name"`
|
|
}{
|
|
IntegrationID: "",
|
|
IntegrationName: "",
|
|
DeviceID: "",
|
|
DeviceName: "",
|
|
}
|
|
|
|
return context.JSON(200, response)
|
|
}
|
|
|
|
func (r DeviceApiHandler) handleGetDevices(context echo.Context) error {
|
|
users, error := r.deviceManager.GetDevices()
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("failed to get device list: %s", error))
|
|
}
|
|
|
|
return context.JSON(200, users)
|
|
}
|
|
|
|
func (r DeviceApiHandler) handleCreateDevice(context echo.Context) error {
|
|
var newDevice d.PlaybackDevice
|
|
error := context.Bind(&newDevice)
|
|
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("Failed to create playback device: %s", error))
|
|
return error
|
|
}
|
|
|
|
id, error := r.deviceManager.CreateDevice(&newDevice)
|
|
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("Failed to create playback device: %s", error))
|
|
return error
|
|
}
|
|
|
|
newDevice.ID = id
|
|
|
|
return context.JSON(200, newDevice)
|
|
}
|
|
|
|
func (r DeviceApiHandler) handleDeleteDevice(context echo.Context) error {
|
|
id := context.Param("id")
|
|
|
|
exists, error := r.deviceManager.DeviceIdExists(id)
|
|
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("Failed to delete playbac device: %s", error))
|
|
return error
|
|
}
|
|
|
|
if !exists {
|
|
SendError(404, context, fmt.Sprintf("Failed to delete playback device: Could not find device id %s", id))
|
|
return fmt.Errorf("not found")
|
|
}
|
|
|
|
error = r.deviceManager.DeleteDevice(id)
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("Failed to delete playback device: %s", error))
|
|
return error
|
|
}
|
|
|
|
return context.JSON(200, "")
|
|
}
|
|
|
|
func (r *DeviceApiHandler) handleUpdateConfig(context echo.Context) error {
|
|
id := context.Param("id")
|
|
|
|
var newDevice d.PlaybackDevice
|
|
error := context.Bind(&newDevice)
|
|
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("Failed to update device config: %s", error))
|
|
return error
|
|
}
|
|
|
|
newDevice.ID = id
|
|
error = r.deviceManager.UpdateDevice(&newDevice)
|
|
|
|
if error != nil {
|
|
SendError(500, context, fmt.Sprintf("Failed to update device config: %s", error))
|
|
return error
|
|
}
|
|
|
|
return context.JSON(200, newDevice)
|
|
}
|
|
|
|
func (r *DeviceApiHandler) SetRouter(router *echo.Echo) {
|
|
r.router = router
|
|
}
|
|
|
|
func (r *DeviceApiHandler) SetDeviceManager(deviceManager *m.DeviceManager) {
|
|
r.deviceManager = deviceManager
|
|
}
|