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);
            }
Example #2
0
 protected virtual Task PreAuthForResources(IDialogContext context, SimpleAuthenticationResultModel authResult, params string[] resources)
 {
     return(PreAuthForResources(context, authResult.AccessToken, resources));
 }
Example #3
0
 protected virtual Task SaveSettings(IDialogContext context, SimpleAuthenticationResultModel authResult)
 {
     context.SetLastUniqueId(authResult.UniqueId);
     return(Task.FromResult(0));
 }
Example #4
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);
        }