Esempio n. 1
0
        public ActionResult About(string key)
        {
            var userMap = BotRegistryHelper.GetUserRow(User.Identity.Name);

            userMap.Key = key;
            BotRegistryHelper.StoreUserMap(userMap);

            return(View());
        }
Esempio n. 2
0
        public void ConfigureAuth(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions {
            });

            app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
            {
                ClientId  = clientId,
                Authority = authority,
                TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
                {
                    // instead of using the default validation (validating against a single issuer value, as we do in line of business apps),
                    // we inject our own multitenant validation logic
                    ValidateIssuer = false,
                },
                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    SecurityTokenValidated = (context) =>
                    {
                        return(Task.FromResult(0));
                    },
                    AuthorizationCodeReceived = (context) =>
                    {
                        var code = context.Code;

                        ClientCredential credential = new ClientCredential(clientId, appKey);
                        string tenantID             = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
                        //string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;

                        string signedInUserID             = context.AuthenticationTicket.Identity.Name;
                        AuthenticationContext authContext = new AuthenticationContext(aadInstance + tenantID, false);
                        AuthenticationResult result       = authContext.AcquireTokenByAuthorizationCode(
                            code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceID);

                        BotRegistryHelper.MapUser(signedInUserID, result.AccessToken);

                        return(Task.FromResult(0));
                    },
                    AuthenticationFailed = (context) =>
                    {
                        context.OwinContext.Response.Redirect("/Home/Error");;
                        context.HandleResponse();     // Suppress the exception
                        return(Task.FromResult(0));
                    }
                }
            });
        }
Esempio n. 3
0
        public async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            var             responseStr = "";
            var             endPoint    = "https://graph.microsoft.com/v1.0/me/events";
            ConnectorClient connector   = new ConnectorClient(new Uri(activity.ServiceUrl));

            if (activity.Type == ActivityTypes.Message)
            {
                var token = "";
                switch (activity.Text.ToLower())
                {
                case "hi":
                    var reply = activity.CreateReply($"Hello dude");
                    await connector.Conversations.ReplyToActivityAsync(reply);

                    break;

                case "forget me":
                    var requestStr = "";
                    if (BotRegistryHelper.ForgetUserToken(activity.From.Id))
                    {
                        requestStr = "You are forgotten.";
                    }
                    else
                    {
                        requestStr = "Cannot forget you.";
                    }
                    var forgetTokenreply = activity.CreateReply(requestStr);
                    await connector.Conversations.ReplyToActivityAsync(forgetTokenreply);

                    break;

                case "who am i":
                    token = BotRegistryHelper.GetUserToken(activity.From.Id);
                    if (token != null)
                    {
                        var jwt = new JwtSecurityToken(token);
                        if (jwt != null)
                        {
                            if (jwt.ValidTo < DateTime.Now)
                            {
                                //Expired Token
                                var exiredTokenreply = activity.CreateReply($"Token is Expired");
                                await connector.Conversations.ReplyToActivityAsync(exiredTokenreply);

                                var retryTokenreply = activity.CreateReply($"goto: https://{Request.RequestUri.Host}:{Request.RequestUri.Port}/home/about?key={activity.From.Id}");
                                await connector.Conversations.ReplyToActivityAsync(retryTokenreply);

                                break;
                            }
                        }
                        try
                        {
                            var client = new HttpClient();
                            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
                            var graphResponse = await client.GetAsync("https://graph.microsoft.com/v1.0/me");

                            if (graphResponse.IsSuccessStatusCode)
                            {
                                var json = await graphResponse.Content.ReadAsStringAsync();

                                var me = JsonConvert.DeserializeObject <Me>(json);
                                if (me != null)
                                {
                                    responseStr = $"Hi {me.displayName}";
                                }
                                else
                                {
                                    responseStr = "I do not know who you are";
                                }
                            }
                            var meetingReply = activity.CreateReply($"{responseStr}");
                            await connector.Conversations.ReplyToActivityAsync(meetingReply);
                        }
                        catch (Exception ex)
                        {
                            var exceptionReply = activity.CreateReply($"Bummer: {ex.Message}");
                            await connector.Conversations.ReplyToActivityAsync(exceptionReply);
                        }
                    }
                    else
                    {
                        var noTokenreply = activity.CreateReply($"goto: https://{Request.RequestUri.Host}:{Request.RequestUri.Port}/home/about?key={activity.From.Id}");
                        await connector.Conversations.ReplyToActivityAsync(noTokenreply);
                    }
                    break;
                    break;

                case "next meeting":
                    token = BotRegistryHelper.GetUserToken(activity.From.Id);
                    if (token != null)
                    {
                        var jwt = new JwtSecurityToken(token);
                        if (jwt != null)
                        {
                            if (jwt.ValidTo < DateTime.Now)
                            {
                                //Expired Token
                                var exiredTokenreply = activity.CreateReply($"Token is Expired");
                                await connector.Conversations.ReplyToActivityAsync(exiredTokenreply);

                                var retryTokenreply = activity.CreateReply($"goto: https://{Request.RequestUri.Host}:{Request.RequestUri.Port}/home/about?key={activity.From.Id}");
                                await connector.Conversations.ReplyToActivityAsync(retryTokenreply);

                                break;
                            }
                        }
                        try
                        {
                            var client = new HttpClient();
                            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
                            var graphResponse = await client.GetAsync(endPoint);

                            if (graphResponse.IsSuccessStatusCode)
                            {
                                var json = await graphResponse.Content.ReadAsStringAsync();

                                var events = JsonConvert.DeserializeObject <EventModels>(json);
                                if (events.value.Count() > 0)
                                {
                                    responseStr = $"Your next meeting '{events.value.First().subject}' is at {events.value.First().start.DateTime.ToLocalTime().Date.ToShortDateString()} on {events.value.First().start.DateTime.ToShortTimeString()}";
                                }
                                else
                                {
                                    responseStr = "You do not have any meeting";
                                }
                            }
                            var meetingReply = activity.CreateReply($"{responseStr}");
                            await connector.Conversations.ReplyToActivityAsync(meetingReply);
                        }
                        catch (Exception ex)
                        {
                            var exceptionReply = activity.CreateReply($"Bummer: {ex.Message}");
                            await connector.Conversations.ReplyToActivityAsync(exceptionReply);
                        }
                    }
                    else
                    {
                        var noTokenreply = activity.CreateReply($"goto: https://{Request.RequestUri.Host}:{Request.RequestUri.Port}/home/about?key={activity.From.Id}");
                        await connector.Conversations.ReplyToActivityAsync(noTokenreply);
                    }
                    break;

                default:
                    break;
                }
            }
            else
            {
                HandleSystemMessage(activity);
            }
            var response = Request.CreateResponse(HttpStatusCode.OK);

            return(response);
        }