public ActionResult About(string key) { var userMap = BotRegistryHelper.GetUserRow(User.Identity.Name); userMap.Key = key; BotRegistryHelper.StoreUserMap(userMap); return(View()); }
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)); } } }); }
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); }