public static async Task OnCanvasRequest(Microsoft.AspNetCore.Http.HttpContext e, DbServer s, DbUser u, int tribe_id, string next) { //Find canvas if (!ObjectId.TryParse(next, out ObjectId id)) { throw new StandardError("Canvas Not Found", StandardErrorCode.NotFound); } DbCanvas c = await Program.connection.LoadCanvasData(id); if (c == null) { throw new StandardError("Canvas Not Found", StandardErrorCode.NotFound); } //Get request method var method = Program.FindRequestMethod(e); //Act from the method if (method == RequestHttpMethod.get) { //Write response await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c)); } else if (method == RequestHttpMethod.post) { //Check scope await Program.CheckTokenScope(u, null); //Rename the canvas; decode request CanvasCreateRequest request = Program.DecodePostBody <CanvasCreateRequest>(e); //Set await c.RenameCanvas(Program.connection, request.name, request.color); //Send RPC message SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Modify); //Write response await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c)); } else if (method == RequestHttpMethod.delete) { //Check scope await Program.CheckTokenScope(u, null); //Delete canvas await c.DeleteCanvas(Program.connection); //Send RPC message SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Delete); //Write response await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c)); } else if (method == RequestHttpMethod.put) { //Check scope await Program.CheckTokenScope(u, null); //We'll update the thumbnail; Decode the request UpdateThumbnailRequest request = Program.DecodePostBody <UpdateThumbnailRequest>(e); //Try to find DbUserContent uc = await Program.connection.GetUserContentByToken(request.token); if (uc == null) { throw new StandardError("Token Not Valid", StandardErrorCode.InvalidInput); } if (uc.application_id != CANVAS_THUMBNAIL_APPLICATION_ID) { throw new StandardError("Specified User Content Application ID Mismatch", StandardErrorCode.InvalidInput); } //Update await c.SetNewThumbnail(Program.connection, uc); //Send RPC message SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Modify); //Write response await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c)); } else { throw new StandardError("Unexpected method.", StandardErrorCode.BadMethod); } }
public static async Task OnListRequest(Microsoft.AspNetCore.Http.HttpContext e, DbServer s, DbUser u, int tribe_id) { //Get request method var method = Program.FindRequestMethod(e); //If this is a GET, list if (method == RequestHttpMethod.get) { //Find all canvases beloning to this server List <DbCanvas> canvases = await s.GetServerCanvases(Program.connection); //Now, convert all CanvasListResponse response = new CanvasListResponse { canvases = new RPCPayloadModifyCanvas_ListedCanvas[canvases.Count], ws_reconnect_policy = 10000, ws_url = Program.config.endpoint_canvas }; for (int i = 0; i < canvases.Count; i++) { response.canvases[i] = ConvertCanvas(canvases[i]); } //Write response await Program.QuickWriteJsonToDoc(e, response); return; } else if (method == RequestHttpMethod.post) { //Check scope await Program.CheckTokenScope(u, null); //We'll create a canvas. Decode the body CanvasCreateRequest request = Program.DecodePostBody <CanvasCreateRequest>(e); //Create DbCanvas c = new DbCanvas { color = request.color, last_edited = DateTime.UtcNow, last_editor = u._id, last_saved = DateTime.UtcNow, name = request.name, server_id = s.id, users = new ObjectId[256], user_index = 0, version = 0, _id = ObjectId.GenerateNewId() }; //Add await Program.connection.system_canvases.InsertOneAsync(c); //Send RPC message SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Create); //Write response await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c)); } else { throw new StandardError("Unexpected method.", StandardErrorCode.BadMethod); } }