public static ActivityDetails HandleResponse(AsymmetricCipherKeyPair keyPair, string responseContent)
        {
            if (string.IsNullOrEmpty(responseContent))
            {
                throw new YotiProfileException(Properties.Resources.NullOrEmptyResponseContent);
            }

            ProfileDO parsedResponse = JsonConvert.DeserializeObject <ProfileDO>(responseContent);

            if (parsedResponse.Receipt == null)
            {
                throw new YotiProfileException(Properties.Resources.NullParsedResponse);
            }
            else if (parsedResponse.Receipt.SharingOutcome != "SUCCESS")
            {
                throw new YotiProfileException(
                          $"The share was not successful, sharing_outcome: '{parsedResponse.Receipt.SharingOutcome}'");
            }

            ReceiptDO receipt = parsedResponse.Receipt;

            var userProfile = new YotiProfile(
                ParseProfileContent(keyPair, receipt.WrappedReceiptKey, receipt.OtherPartyProfileContent));

            SetAddressToBeFormattedAddressIfNull(userProfile);

            var applicationProfile = new ApplicationProfile(
                ParseProfileContent(keyPair, receipt.WrappedReceiptKey, receipt.ProfileContent));

            ExtraData extraData = new ExtraData();

            if (!string.IsNullOrEmpty(parsedResponse.Receipt.ExtraDataContent))
            {
                extraData = CryptoEngine.DecryptExtraData(
                    receipt.WrappedReceiptKey,
                    parsedResponse.Receipt.ExtraDataContent,
                    keyPair);
            }

            DateTime?timestamp = null;

            if (receipt.Timestamp != null &&
                DateTime.TryParseExact(
                    receipt.Timestamp,
                    "yyyy-MM-ddTHH:mm:ssZ",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.AdjustToUniversal,
                    out DateTime parsedDate))
            {
                timestamp = parsedDate;
            }

            return(new ActivityDetails(parsedResponse.Receipt.RememberMeId, parsedResponse.Receipt.ParentRememberMeId, timestamp, userProfile, applicationProfile, parsedResponse.Receipt.ReceiptId, extraData));
        }
Example #2
0
        public ActivityDetails HandleSuccessfulResponse(AsymmetricCipherKeyPair keyPair, Response response)
        {
            ProfileDO parsedResponse = JsonConvert.DeserializeObject <ProfileDO>(response.Content);

            if (parsedResponse.receipt == null)
            {
                return(new ActivityDetails
                {
                    Outcome = ActivityOutcome.Failure
                });
            }
            else if (parsedResponse.receipt.sharing_outcome != "SUCCESS")
            {
                return(new ActivityDetails
                {
                    Outcome = ActivityOutcome.SharingFailure
                });
            }
            else
            {
                ReceiptDO receipt = parsedResponse.receipt;

                AttrpubapiV1.AttributeList attributes = CryptoEngine.DecryptCurrentUserReceipt(
                    parsedResponse.receipt.wrapped_receipt_key,
                    parsedResponse.receipt.other_party_profile_content,
                    keyPair);

                _yotiUserProfile.Id = parsedResponse.receipt.remember_me_id;
                _yotiProfile.Id     = parsedResponse.receipt.remember_me_id;

                AddAttributesToProfile(attributes);

                return(new ActivityDetails
                {
                    Outcome = ActivityOutcome.Success,
                    UserProfile = _yotiUserProfile,
                    Profile = _yotiProfile
                });
            }
        }
Example #3
0
        public static void AddDefaultProfiles(IUnitOfWork uow)
        {
            //create 'Fr8 Admin' Profile
            var fr8AdminProfile = uow.ProfileRepository.GetQuery().FirstOrDefault(x => x.Name == DefaultProfiles.Fr8Administrator);

            if (fr8AdminProfile == null)
            {
                fr8AdminProfile = new ProfileDO
                {
                    Id             = Guid.NewGuid(),
                    Name           = DefaultProfiles.Fr8Administrator,
                    Protected      = true,
                    PermissionSets = new List <PermissionSetDO>()
                };
                uow.ProfileRepository.Add(fr8AdminProfile);
            }
            else
            {
                fr8AdminProfile.Protected = true;
            }

            //create 'System Administrator' Profile
            var profile = uow.ProfileRepository.GetQuery().FirstOrDefault(x => x.Name == DefaultProfiles.SystemAdministrator);

            if (profile == null)
            {
                profile = new ProfileDO
                {
                    Id             = Guid.NewGuid(),
                    Name           = DefaultProfiles.SystemAdministrator,
                    Protected      = true,
                    PermissionSets = new List <PermissionSetDO>()
                };
                uow.ProfileRepository.Add(profile);
            }
            else
            {
                profile.Protected = true;
            }

            //create 'Standard User' profile
            var standardProfile = uow.ProfileRepository.GetQuery().FirstOrDefault(x => x.Name == DefaultProfiles.StandardUser);

            if (standardProfile == null)
            {
                standardProfile = new ProfileDO()
                {
                    Id        = Guid.NewGuid(),
                    Name      = DefaultProfiles.StandardUser,
                    Protected = true
                };
                uow.ProfileRepository.Add(standardProfile);
            }
            else
            {
                standardProfile.Protected = true;
            }

            //presave needed here for permissionSetPermissions table inserts
            uow.SaveChanges();

            fr8AdminProfile.PermissionSets.Clear();
            //default permissions for Plans and PlanNodes
            fr8AdminProfile.PermissionSets.Add(AddPermissionSet(nameof(PlanNodeDO), true, false, false, fr8AdminProfile.Id, "Fr8 Administrator Permission Set", uow));

            //default permissions for ContainerDO
            fr8AdminProfile.PermissionSets.Add(AddPermissionSet(nameof(ContainerDO), true, false, false, fr8AdminProfile.Id, "Fr8 Administrator Permission Set", uow));

            //default permissions for Terminals
            fr8AdminProfile.PermissionSets.Add(AddPermissionSet(nameof(TerminalDO), true, false, false, fr8AdminProfile.Id, "Fr8 Administrator Permission Set", uow));

            //default permissions for Users
            fr8AdminProfile.PermissionSets.Add(AddPermissionSet(nameof(Fr8AccountDO), true, false, true, fr8AdminProfile.Id, "Fr8 Administrator Permission Set", uow));

            //default permissions for PageDefinitions
            fr8AdminProfile.PermissionSets.Add(AddPermissionSet(nameof(PageDefinitionDO), true, false, false, fr8AdminProfile.Id, "Fr8 Administrator Permission Set", uow));

            profile.PermissionSets.Clear();
            //default permissions for Plans and PlanNodes
            profile.PermissionSets.Add(AddPermissionSet(nameof(PlanNodeDO), false, false, false, profile.Id, "System Administrator Permission Set", uow));

            //default permissions for ContainerDO
            profile.PermissionSets.Add(AddPermissionSet(nameof(ContainerDO), false, false, false, profile.Id, "System Administrator Permission Set", uow));

            //default permissions for Terminals
            profile.PermissionSets.Add(AddPermissionSet(nameof(TerminalDO), false, false, false, profile.Id, "System Administrator Permission Set", uow));

            //default permissions for Users
            profile.PermissionSets.Add(AddPermissionSet(nameof(Fr8AccountDO), false, true, false, profile.Id, "System Administrator Permission Set", uow));

            //default permissions for PageDefinitions
            profile.PermissionSets.Add(AddPermissionSet(nameof(PageDefinitionDO), false, false, false, profile.Id, "System Administrator Permission Set", uow));

            //add standard user to all users without profile
            var roles = uow.UserRepository.GetQuery().Where(x => x.ProfileId == null).ToList();

            foreach (var item in roles)
            {
                item.ProfileId = profile.Id;
            }

            var adminRole = uow.AspNetRolesRepository.GetQuery().FirstOrDefault(x => x.Name == Roles.Admin);

            var userRoles = uow.AspNetUserRolesRepository.GetQuery().Where(x => x.RoleId == adminRole.Id).Select(l => l.UserId).ToList();
            var fr8Admins = uow.UserRepository.GetQuery().Where(x => userRoles.Contains(x.Id)).ToList();

            foreach (var user in fr8Admins)
            {
                user.ProfileId = fr8AdminProfile.Id;
            }

            standardProfile.PermissionSets.Clear();
            //default permissions for Plans and PlanNodes
            standardProfile.PermissionSets.Add(AddPermissionSet(nameof(PlanNodeDO), false, false, false, standardProfile.Id, "Standard User Permission Set", uow));

            //default permissions for ContainerDO
            standardProfile.PermissionSets.Add(AddPermissionSet(nameof(ContainerDO), false, false, false, standardProfile.Id, "Standard User Permission Set", uow));

            //default permissions for Terminals
            standardProfile.PermissionSets.Add(AddPermissionSet(nameof(TerminalDO), false, false, false, standardProfile.Id, "Standard User Permission Set", uow));

            //default permissions for Users
            standardProfile.PermissionSets.Add(AddPermissionSet(nameof(Fr8AccountDO), false, false, false, standardProfile.Id, "Standard User Permission Set", uow));
        }