protected override async Task SaveSettings(IDialogContext context, SimpleAuthenticationResultModel authResult) { await base.SaveSettings(context, authResult); if (string.IsNullOrEmpty(authResult.GivenName) || string.IsNullOrEmpty(authResult.FamilyName)) { context.SetName(null); } else { context.SetName($"{authResult.GivenName} {authResult.FamilyName}"); } await this.PreAuthForResources(context, authResult, RoomsService.Resource); }
protected virtual Task PreAuthForResources(IDialogContext context, SimpleAuthenticationResultModel authResult, params string[] resources) { return(PreAuthForResources(context, authResult.AccessToken, resources)); }
protected virtual Task SaveSettings(IDialogContext context, SimpleAuthenticationResultModel authResult) { context.SetLastUniqueId(authResult.UniqueId); return(Task.FromResult(0)); }
public async Task ReceiveTokenAsync(IDialogContext context, IAwaitable <object> awaitableArgument) { var argument = await awaitableArgument; var model = argument as AuthenticationResultActivity; if (!string.IsNullOrEmpty(model.Error)) { Log($"LD: {model.Error}: {model.ErrorDescription}"); await context.PostAsync($"{model.Error}: {model.ErrorDescription}"); context.Done(string.Empty); return; } // Get access token var authContext = context.GetAuthenticationContext(); var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync( model.Code, new Uri(model.RequestUri.GetLeftPart(UriPartial.Path)), context.GetClientCredential()); var uniqueId = authResult?.UserInfo.UniqueId; var result = new SimpleAuthenticationResultModel() { AccessToken = authResult.IdToken, Upn = authResult?.UserInfo?.DisplayableId, GivenName = authResult?.UserInfo?.GivenName, FamilyName = authResult?.UserInfo?.FamilyName, UniqueId = uniqueId, }; var lastUniqueId = context.GetLastUniqueId(); if (uniqueId == model.State.State.User.Id || uniqueId == lastUniqueId) { model.Done(null); } else { var rnd = new Random(); result.SecurityKey = string.Join("", Enumerable.Range(0, 6).Select(i => rnd.Next(10).ToString())); model.Done(result.SecurityKey); } if (argument is IMessageActivity) { await context.PostAsync("Cancelled"); context.Done(string.Empty); return; } else if (null != result) { if (string.IsNullOrEmpty(result.SecurityKey)) { Log($"LD: got token, no key needed"); await context.PostAsync("Got your token, no security key is required"); await SaveSettings(context, result); context.Done(result.AccessToken); } else { Log($"LD: got token, waiting for key"); _authResult = result; if (_promptForKey) { await context.PostAsync("Please enter your security key"); } context.Wait(ReceiveSecurityKeyAsync); } return; } await context.PostAsync("Got unknown thing: " + argument?.GetType()?.Name); context.Wait <object>(ReceiveTokenAsync); }