From 79b1d16b71ca01be0e48abe0e9bdfde58eb619b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= <clement.pit-claudel@epfl.ch> Date: Thu, 19 Dec 2024 18:24:03 +0100 Subject: [PATCH] server: Improve error message in postInitApp --- .../webapp/server/web/WebServerRoutes.scala | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala index 430d2d7..a98eb3c 100644 --- a/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala +++ b/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala @@ -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() -- GitLab