Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 2
0
        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());
        }