예제 #1
0
        private IMessageActivity CreateWorkItemCard(IDialogContext context, WorkItemEx workItem, string workItemId)
        {
            var message    = context.MakeMessage();
            var attachment = CreateWorkItemAttachment(workItem, workItemId);

            message.Attachments.Add(attachment);
            return(message);
        }
예제 #2
0
        private Attachment CreateWorkItemAttachment(WorkItemEx workItem, string workItemId)
        {
            var    encodedUrl      = workItem.TeamProject;
            string goToWorkItemUrl = "https://teamsbot.visualstudio.com/" + encodedUrl + "/_workitems?id=" + workItemId + "&_a=edit";

            return(new HeroCard
            {
                Title = workItem.Title,
                Subtitle = workItem.Url,
                Buttons = new List <CardAction>
                {
                    new CardAction(ActionTypes.OpenUrl, Strings.VSTSGetWorkItemCardButtonCaption, value: goToWorkItemUrl),
                }
            }.ToAttachment());
        }
        /// <summary>
        /// Get VSTS Work Item
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="workItemId"></param>
        /// <returns></returns>
        public static async Task <WorkItemEx> GetWorkItem(string accessToken, string workItemId)
        {
            WorkItemEx item = new WorkItemEx();
            var        uri  = GetUri("https://teamsbot.visualstudio.com/DefaultCollection/_apis/wit/workitems?",
                                     //Tuple.Create("access_token", accessToken));
                                     Tuple.Create("id", workItemId),
                                     Tuple.Create("api-version", "1.0"));

            var res = await VSTSRequestAPI(uri, accessToken);

            var jsonObject = JObject.Parse(res); // parse as array

            if (jsonObject != null)
            {
                item.Title       = jsonObject["fields"]["System.Title"].ToString();
                item.TeamProject = jsonObject["fields"]["System.TeamProject"].ToString();
                item.Url         = jsonObject["url"].ToString();
            }

            return(item);
        }
예제 #4
0
        public async virtual Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> argument)
        {
            var msg = await(argument);

            ConversationReference conversationReference;
            VSTSAcessToken        vstsToken = new VSTSAcessToken();
            string magicNumber         = string.Empty;
            string token               = string.Empty;
            string refreshToken        = string.Empty;
            String error               = null;
            string requestedWorkItemId = string.Empty;
            bool   IsAuthenticated     = false;

            if (context.UserData.TryGetValue("persistedCookieVSTS", out conversationReference))
            {
                requestedWorkItemId = conversationReference.User.Properties["workItemId"].ToString();

                if (string.IsNullOrEmpty(requestedWorkItemId))
                {
                    requestedWorkItemId = msg.Text;
                    IsAuthenticated     = true;
                }
                else
                {
                    magicNumber = conversationReference.User.Properties["MagicNumber"].ToString();

                    if (string.Equals(msg.Text, magicNumber))
                    {
                        IsAuthenticated = true;
                    }
                    else
                    {
                        //When entered number is not valid
                        await context.PostAsync(Strings.AuthMagicNumberNotMacthed);
                        await LogIn(context, msg.Text);
                    }
                }

                if (IsAuthenticated)
                {
                    refreshToken = conversationReference.User.Properties["RefreshToken"].ToString();

                    //Get the refreshed token
                    error = VSTSHelpers.PerformTokenRequest(VSTSHelpers.GenerateRefreshPostData(refreshToken), true, out vstsToken);

                    if (String.IsNullOrEmpty(error))
                    {
                        conversationReference.User.Properties["AccessToken"]  = vstsToken.accessToken;
                        conversationReference.User.Properties["RefreshToken"] = vstsToken.refreshToken;
                    }

                    WorkItemEx workItem = await VSTSHelpers.GetWorkItem(vstsToken.accessToken, requestedWorkItemId);

                    if (workItem != null)
                    {
                        var workItemCardMessage = CreateWorkItemCard(context, workItem, requestedWorkItemId);
                        await context.PostAsync(workItemCardMessage);
                    }
                }
            }
            else
            {
                await LogIn(context, msg.Text);
            }
        }