Skip to content
Snippets Groups Projects
Commit 79b1d16b authored by Clément Pit-Claudel's avatar Clément Pit-Claudel
Browse files

server: Improve error message in postInitApp

parent e78c6000
No related branches found
No related tags found
No related merge requests found
......@@ -4,7 +4,7 @@ package web
import java.net.InetAddress
import scala.jdk.CollectionConverters.*
import scala.util.Try
import scala.util.{Try, Success, Failure}
import cask.endpoints.JsonData
import decorators.checkOriginHeader
......@@ -51,8 +51,8 @@ private[server] final case class WebServerRoutes()(using cc: castor.Context, log
ListAppsResponse.Wire.encode(ListAppsResponse(WebServer.appDirectory.values.map(_.appInfo).toSeq))
@cask.getJson(f"${Endpoints.Api.instanceInfo}")
def getAppInfo(instanceId: InstanceId) =
val response: cask.Response[JsonData] = WebServer.instances.get(instanceId) match
def getAppInfo(instanceId: InstanceId): cask.Response[JsonData] =
WebServer.instances.get(instanceId) match
case Some(inst) =>
val authority = if Config.PUBLIC_INSTANCE then "{{authority}}" else f"$hostAddress:${Config.HTTP_PORT}"
val shareUrl = f"{{protocol}}://$authority${Endpoints.App}/${inst.appInfo.id}/$instanceId/"
......@@ -60,25 +60,25 @@ private[server] final case class WebServerRoutes()(using cc: castor.Context, log
val response = InstanceInfoResponse(instanceId, inst.registeredUserIds, wsEndpoint, shareUrl)
InstanceInfoResponse.Wire.encode(response)
case None =>
cask.Response(f"Unknown instance id $instanceId", 400)
response
cask.Response(f"Unknown instance '$instanceId'", 400)
@cask.post(f"${Endpoints.Api.createInstance}")
def postInitApp(request: cask.Request) =
val response: cask.Response[JsonData] =
val req = CreateInstanceRequest.Wire.decode(ujson.read(request.text()))
if req.isFailure then
def postInitApp(request: cask.Request): cask.Response[JsonData] =
CreateInstanceRequest.Wire.decode(ujson.read(request.text())) match
case Failure(_) =>
cask.Response(f"Unable to decode data: ${request.text()}", 400)
else
val appId = WebServer.createInstance(req.get.appName, req.get.userIds)
CreateInstanceResponse.Wire.encode(CreateInstanceResponse(appId))
response
case Success(CreateInstanceRequest(appName, userIds)) =>
if WebServer.appDirectory.contains(appName) then
val appId = WebServer.createInstance(appName, userIds)
CreateInstanceResponse.Wire.encode(CreateInstanceResponse(appId))
else
cask.Response(f"Unknown app '$appName'", 400)
@checkOriginHeader
@cask.websocket(f"${Endpoints.WebSocket}/:instanceId/:userId")
def websocket(instanceId: String, userId: String, request: cask.Request): cask.WebsocketResult =
WebServer.instances.get(instanceId) match
case Some(app) => app.connect(userId)
case None => cask.Response(f"Unknown instance id $instanceId", 400)
case None => cask.Response(f"Unknown instance '$instanceId'", 400)
initialize()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment