public async Task <IActionResult> Authorization([FromQuery] string token) { // Verify JWT token (contains a default redirect URI) var jwtPayloadStr = _jwtTokenVerificationService.Verify(token, _configuration["MondayAPI:SS"]); if (jwtPayloadStr.Contains("invalid") || jwtPayloadStr.Contains("expired")) { return(Unauthorized()); } var jwtPayload = JsonConvert.DeserializeObject <JwtPayload>(jwtPayloadStr); // Check if you already have proper access token for that user // For example: const accessToken = await tokenStoreService.getToken(userId, token); // If already has token, redirect to Recipe (Set in the Monday App OAuth Configuration) // return Redirect(jwtPayload.backToUrl); // Else, Monday Authorization Request (OAuth) [https://monday.com/developers/apps/oauth] var requestUrl = $"{_configuration["MondayAPI:OAuthRequestUrl"]}?client_id={_configuration["MondayAPI:ClientId"]}&state={token}"; return(Redirect(requestUrl)); // Any 3rd party OAuth }
public async Task <IActionResult> ExtractDocument([FromBody] MondayApiRequest value, [FromQuery] ExecutionType executionType, [FromQuery] StartJobParamSearch jobParam) { var headerToken = Request.Headers["Authorization"]; //JwtPayload JwtPayload = Redirect($"api/auth/PerformVerification?token={headerToken}"); // Verify JWT token (contains a default redirect URI) var jwtPayloadStr = _jwtTokenVerificationService.Verify(headerToken, _configuration["MondayAPI:SS"]); if (jwtPayloadStr.Contains("invalid") || jwtPayloadStr.Contains("expired")) { return(Unauthorized()); } var jwtPayload = JsonConvert.DeserializeObject <JwtPayload>(jwtPayloadStr); _accessToken = jwtPayload.shortLivedToken ?? _configuration["MondayAPI:AccessToken"]; WorkflowInputRequest wfInputReq = new WorkflowInputRequest(); InboundFieldValues inboundValues = value.Payload.InboundFieldValues; // Mark as processing var item = await _mondayDataProvider.UpdateItem(_accessToken, inboundValues.BoardId, inboundValues.ItemId, "{ \"name\": \"Extracting Document.. Please wait...\"}".Replace("\"", "\\\"")); // Initialize workflow input values wfInputReq.in_ParentItemId = inboundValues.ItemId; wfInputReq.in_SS = _configuration["MondayAPI:SS"]; // Get webhook url based on the subscribed boards to trigger monday update after extract completion string boardId = inboundValues.BoardId.ToString(); var subsPayload = await _storageService.GetAsync(boardId); wfInputReq.in_CompletionTriggerUrl = subsPayload?.Data?.WebhookUrl; // Get input file/s Result <Item[]> items = await _mondayDataProvider.GetItemsDetails(_accessToken, wfInputReq.in_ParentItemId.ToString()); Item currentItem = items?.Data.FirstOrDefault(); JArray filesJArray = JArray.Parse(JObject.Parse(currentItem.ColumnValues.Where(c => c.Id == inboundValues.FileColumnId) ?.Single()?.Value)["files"].ToString()); var fileAssetIds = filesJArray.Select(f => f["assetId"].ToString()).ToList(); wfInputReq.in_FileUrls = fileAssetIds.Select(f => _mondayDataProvider.GetAssetDetails(_accessToken, f)) .ToDictionary(a => a.Result?.Data.FirstOrDefault().Name, a => a.Result?.Data.FirstOrDefault().PublicUrl); if (wfInputReq.in_FileUrls.Count() == 0) { await _mondayDataProvider.UpdateItem(_accessToken, inboundValues.BoardId, inboundValues.ItemId, "{ \"name\": \"Please attach a file first.\"}".Replace("\"", "\\\"")); return(Ok()); } // Check subitem columns metadata Result <Board[]> boards = await _mondayDataProvider.GetBoardDetails(_accessToken); var currentBoardName = currentItem.Board.Name; Board subItemBoard; try { subItemBoard = boards?.Data.Where(b => b.Name.ToUpper() == $"SUBITEMS OF {currentBoardName.ToUpper()}")?.Single(); } catch (Exception ex) { subItemBoard = null; } if (subItemBoard != null) { var columnList = subItemBoard.Columns; var subItemTemplateDict = new Dictionary <string, string>(); foreach (Column col in columnList) { var colObjectStr = JsonConvert.SerializeObject(col); if (col.type == "name") { subItemTemplateDict.Add(colObjectStr, $"\\\"{col.id}\\\":\\\"<>\\\""); } else { subItemTemplateDict.Add(colObjectStr, $"\\\"{col.id}\\\":<>"); } } wfInputReq.in_SubItemTemplate = subItemTemplateDict; } // Prepare inputs and start UiPath job for DU string inputArgs = JsonConvert.SerializeObject(wfInputReq); jobParam.Process = "Monday"; jobParam.ProcessExecution = executionType; if (jobParam.ProcessExecution == ExecutionType.None) { await _uiPathOrchestratorService.StartJob(inputArgs, jobParam.Process, jobParam.Folder, jobParam.Machine); } else { await _uiPathOrchestratorService.StartJob(inputArgs, jobParam.Process, jobParam.ProcessExecution); } return(Ok()); }