IdentityManagerMetadata GetMetadata()
        {
            if (metadata == null)
            {
                var createprops = new List<PropertyMetadata>()
                {
                    PropertyMetadata.FromProperty<InMemoryUser>(x => x.Username, type:Constants.ClaimTypes.Username, required:true),
                };

                var updateprops = new List<PropertyMetadata>();
                updateprops.AddRange(new PropertyMetadata[]{
                    PropertyMetadata.FromProperty<InMemoryUser>(x => x.Username, type:Constants.ClaimTypes.Username, required:true),
                    PropertyMetadata.FromPropertyName<InMemoryUser>("Password", type:Constants.ClaimTypes.Password, required:true),
                    PropertyMetadata.FromFunctions<InMemoryUser, string>(Constants.ClaimTypes.Name, this.GetName, this.SetName, name:"Name", required:true),
                });
                updateprops.AddRange(PropertyMetadata.FromType<InMemoryUser>());
                updateprops.AddRange(new PropertyMetadata[]{
                    PropertyMetadata.FromPropertyName<InMemoryUser>("Mobile"),
                    PropertyMetadata.FromPropertyName<InMemoryUser>("Email", dataType:PropertyDataType.Email),
                    new PropertyMetadata {
                        Name = "Is Administrator",
                        Type = "role.admin",
                        DataType = PropertyDataType.Boolean,
                        Required = true,
                    },
                    new PropertyMetadata {
                        Name = "Gravatar Url",
                        Type = "gravatar",
                        DataType = PropertyDataType.Url,
                    }
                });

                var roleCreateProps = new List<PropertyMetadata>();
                roleCreateProps.Add(PropertyMetadata.FromProperty<InMemoryRole>(x => x.Name));
                var roleUpdateProps = new List<PropertyMetadata>();
                roleUpdateProps.Add(PropertyMetadata.FromProperty<InMemoryRole>(x=>x.Description, type:"description"));

                metadata = new IdentityManagerMetadata()
                {
                    UserMetadata = new UserMetadata
                    {
                        SupportsCreate = true,
                        SupportsDelete = true,
                        SupportsClaims = true,
                        CreateProperties = createprops,
                        UpdateProperties = updateprops
                    },
                    RoleMetadata = new RoleMetadata
                    {
                        RoleClaimType = Constants.ClaimTypes.Role,
                        SupportsCreate = true,
                        SupportsDelete = true,
                        CreateProperties = roleCreateProps,
                        UpdateProperties = roleUpdateProps
                    }
                };
            }
            return metadata;
        }
        async Task<IdentityManagerMetadata> GetMetadataAsync()
        {
            if (_metadata == null)
            {
                _metadata = await this.userManager.GetMetadataAsync();
                if (_metadata == null) throw new InvalidOperationException("GetMetadataAsync returned null");
                _metadata.Validate();
            }

            return _metadata;
        }
        public IdentityManagerMetadata GetMetadata()
        {
            if (metadata == null)
            {
                var createprops = new List <PropertyMetadata>()
                {
                    PropertyMetadata.FromProperty <InMemoryUser>(x => x.Username, name: IdentityManagerConstants.ClaimTypes.Username, required: true),
                };

                var updateprops = new List <PropertyMetadata>();
                updateprops.AddRange(new PropertyMetadata[] {
                    PropertyMetadata.FromProperty <InMemoryUser>(x => x.Username, name: IdentityManagerConstants.ClaimTypes.Username, required: true),
                    PropertyMetadata.FromPropertyName <InMemoryUser>("Password", name: IdentityManagerConstants.ClaimTypes.Password, required: true),
                    PropertyMetadata.FromFunctions <InMemoryUser, string>(IdentityManagerConstants.ClaimTypes.Name, u => GetName(u), SetName, displayName: "DisplayName", required: true),
                });
                updateprops.AddRange(PropertyMetadata.FromType <InMemoryUser>());
                updateprops.AddRange(new PropertyMetadata[] {
                    PropertyMetadata.FromPropertyName <InMemoryUser>("Mobile"),
                    PropertyMetadata.FromPropertyName <InMemoryUser>("Email", dataType: PropertyDataType.Email),
                    new PropertyMetadata {
                        Name     = "Is Administrator",
                        Type     = "role.admin",
                        DataType = PropertyDataType.Boolean,
                        Required = true,
                    },
                    new PropertyMetadata {
                        Name     = "Gravatar Url",
                        Type     = "gravatar",
                        DataType = PropertyDataType.Url,
                    }
                });

                var roleCreateProps = new List <PropertyMetadata>
                {
                    PropertyMetadata.FromProperty <InMemoryRole>(x => x.Name)
                };
                var roleUpdateProps = new List <PropertyMetadata>
                {
                    PropertyMetadata.FromProperty <InMemoryRole>(x => x.Description, name: "description")
                };

                metadata = new IdentityManagerMetadata()
                {
                    UserMetadata = new UserMetadata
                    {
                        SupportsCreate   = true,
                        SupportsDelete   = true,
                        SupportsClaims   = true,
                        CreateProperties = createprops,
                        UpdateProperties = updateprops
                    },
                    RoleMetadata = new RoleMetadata
                    {
                        RoleClaimType    = IdentityManagerConstants.ClaimTypes.Role,
                        SupportsCreate   = true,
                        SupportsDelete   = true,
                        CreateProperties = roleCreateProps,
                        UpdateProperties = roleUpdateProps
                    }
                };
            }
            return(metadata);
        }
        public virtual Task <IdentityManagerMetadata> GetStandardMetadata(bool includeAccountProperties = true)
        {
            var update = new List <PropertyMetadata>();

            if (UserManager.SupportsUserPassword)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Password, u => Task.FromResult <string>(null), SetPassword, "Password", PropertyDataType.Password, true));
            }
            if (UserManager.SupportsUserEmail)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Email, u => GetEmail(u), SetEmail, "Email", PropertyDataType.Email));
            }
            if (UserManager.SupportsUserPhoneNumber)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Phone, u => GetPhone(u), SetPhone, "Phone", PropertyDataType.String));
            }
            if (UserManager.SupportsUserTwoFactor)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("two_factor", u => GetTwoFactorEnabled(u), SetTwoFactorEnabled, "Two Factor Enabled", PropertyDataType.Boolean));
            }
            if (UserManager.SupportsUserLockout)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("locked_enabled", GetLockoutEnabled, (user1, enabled) => SetLockoutEnabled(user1, enabled), "Lockout Enabled", PropertyDataType.Boolean));
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("locked", GetLockedOut, (user1, locked) => SetLockedOut(user1, locked), "Locked Out", PropertyDataType.Boolean));
            }

            if (includeAccountProperties)
            {
                update.AddRange(PropertyMetadata.FromType <TUser>());
            }

            var create = new List <PropertyMetadata>();

            create.Add(PropertyMetadata.FromProperty <TUser>(x => x.UserName, name: Constants.ClaimTypes.Username, required: true));
            create.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Password, u => Task.FromResult <string>(null), SetPassword, "Password", PropertyDataType.Password, true));

            var user = new UserMetadata
            {
                SupportsCreate   = true,
                SupportsDelete   = true,
                SupportsClaims   = UserManager.SupportsUserClaim,
                CreateProperties = create,
                UpdateProperties = update
            };

            var role = new RoleMetadata
            {
                RoleClaimType    = RoleClaimType,
                SupportsCreate   = true,
                SupportsDelete   = true,
                CreateProperties = new[] {
                    PropertyMetadata.FromProperty <TRole>(x => x.Name, name: Constants.ClaimTypes.Name, required: true),
                }
            };

            var meta = new IdentityManagerMetadata
            {
                UserMetadata = user,
                RoleMetadata = role
            };

            return(Task.FromResult(meta));
        }
Example #5
0
 internal void SetupGetMetadataAsync(IdentityManagerMetadata data)
 {
     Setup(x => x.GetMetadataAsync())
     .Returns(Task.FromResult(data));
 }
Example #6
0
        public virtual IdentityManagerMetadata GetStandardMetadata(bool includeAccountProperties = true)
        {
            var update = new List <PropertyMetadata>();

            if (this.userManager.SupportsUserPassword)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Password, x => null, SetPassword, name: "Password", dataType: PropertyDataType.Password, required: true));
            }
            if (this.userManager.SupportsUserEmail)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Email, GetEmail, SetEmail, name: "Email", dataType: PropertyDataType.Email));
            }
            if (this.userManager.SupportsUserPhoneNumber)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Phone, GetPhone, SetPhone, name: "Phone", dataType: PropertyDataType.String));
            }
            if (this.userManager.SupportsUserTwoFactor)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("two_factor", GetTwoFactorEnabled, SetTwoFactorEnabled, name: "Two Factor Enabled", dataType: PropertyDataType.Boolean));
            }
            if (this.userManager.SupportsUserLockout)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("locked_enabled", GetLockoutEnabled, SetLockoutEnabled, name: "Lockout Enabled", dataType: PropertyDataType.Boolean));
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("locked", GetLockedOut, SetLockedOut, name: "Locked Out", dataType: PropertyDataType.Boolean));
            }

            if (includeAccountProperties)
            {
                update.AddRange(PropertyMetadata.FromType(typeof(TUser)));
            }

            var create = new List <PropertyMetadata>();

            create.Add(PropertyMetadata.FromProperty <TUser>(x => x.UserName, type: Constants.ClaimTypes.Username, required: true));
            create.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Password, x => null, SetPassword, name: "Password", dataType: PropertyDataType.Password, required: true));

            var user = new UserMetadata
            {
                SupportsCreate   = true,
                SupportsDelete   = true,
                SupportsClaims   = this.userManager.SupportsUserClaim,
                CreateProperties = create,
                UpdateProperties = update
            };

            var role = new RoleMetadata
            {
                RoleClaimType    = this.RoleClaimType,
                SupportsCreate   = true,
                SupportsDelete   = true,
                CreateProperties = new PropertyMetadata[] {
                    PropertyMetadata.FromProperty <TRole>(x => x.Name, type: Constants.ClaimTypes.Name, required: true),
                }
            };

            var meta = new IdentityManagerMetadata
            {
                UserMetadata = user,
                RoleMetadata = role
            };

            return(meta);
        }
        public UserDetailDataResource(UserDetail user, UrlHelper url, IdentityManagerMetadata meta, RoleSummary[] roles)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (meta == null)
            {
                throw new ArgumentNullException("meta");
            }

            this["Username"] = user.Username;
            this["Name"]     = user.Name;
            this["Subject"]  = user.Subject;

            if (user.Properties != null)
            {
                var props =
                    from p in user.Properties
                    let m = (from m in meta.UserMetadata.UpdateProperties where m.Type == p.Type select m).SingleOrDefault()
                            where m != null
                            select new
                {
                    Data  = m.Convert(p.Value),
                    Meta  = m,
                    Links = new
                    {
                        update = url.Link(Constants.RouteNames.UpdateUserProperty,
                                          new
                        {
                            subject = user.Subject,
                            type    = p.Type.ToBase64UrlEncoded()
                        }
                                          ),
                    }
                };

                if (props.Any())
                {
                    this["Properties"] = props.ToArray();
                }
            }

            if (roles != null && user.Claims != null)
            {
                var roleClaims = user.Claims.Where(x => x.Type == meta.RoleMetadata.RoleClaimType);
                var query      =
                    from r in roles
                    orderby r.Name
                    select new
                {
                    data = roleClaims.Any(x => x.Value == r.Name),
                    meta = new
                    {
                        type        = r.Name,
                        description = r.Description,
                    },
                    links = new
                    {
                        add    = url.Link(Constants.RouteNames.AddRole, new { subject = user.Subject, role = r.Name.ToBase64UrlEncoded() }),
                        remove = url.Link(Constants.RouteNames.RemoveRole, new { subject = user.Subject, role = r.Name.ToBase64UrlEncoded() })
                    }
                };
                this["Roles"] = query.ToArray();
            }

            if (meta.UserMetadata.SupportsClaims && user.Claims != null)
            {
                var claims =
                    from c in user.Claims.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.Link(Constants.RouteNames.RemoveClaim, new
                        {
                            subject = user.Subject,
                            type    = c.Type.ToBase64UrlEncoded(),
                            value   = c.Value.ToBase64UrlEncoded()
                        })
                    }
                };

                this["Claims"] = new
                {
                    Data  = claims.ToArray(),
                    Links = new
                    {
                        create = url.Link(Constants.RouteNames.AddClaim, new { subject = user.Subject })
                    }
                };
            }
        }
 public AspNetCoreIdentityManagerService(UserManager <TUser> userManager, RoleManager <TRole> roleManager, IdentityManagerMetadata metadata)
     : this(userManager, roleManager, () => Task.FromResult(metadata))
 {
 }
        public virtual IdentityManagerMetadata GetStandardMetadata(bool includeAccountProperties = true)
        {
            var update = new List <PropertyMetadata>();

            if (userAccountService.Configuration.EmailIsUsername)
            {
                update.AddRange(new PropertyMetadata[] {
                    PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Username, GetUsername, SetUsername, name: "Email", dataType: PropertyDataType.Email, required: true),
                    PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Password, x => null, SetPassword, name: "Password", dataType: PropertyDataType.Password, required: true),
                });
            }
            else
            {
                update.AddRange(new PropertyMetadata[] {
                    PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Username, GetUsername, SetUsername, name: "Username", dataType: PropertyDataType.String, required: true),
                    PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Password, x => null, SetPassword, name: "Password", dataType: PropertyDataType.Password, required: true),
                    PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Email, GetEmail, SetConfirmedEmail, name: "Email", dataType: PropertyDataType.Email, required: userAccountService.Configuration.RequireAccountVerification),
                });
            }

            var create = new List <PropertyMetadata>();

            if (!userAccountService.Configuration.EmailIsUsername && !userAccountService.Configuration.RequireAccountVerification)
            {
                create.AddRange(update.Where(x => x.Required).ToArray());
                create.AddRange(new PropertyMetadata[] {
                    PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Email, GetEmail, SetConfirmedEmail, name: "Email", dataType: PropertyDataType.Email, required: false),
                });
            }

            update.AddRange(new PropertyMetadata[] {
                PropertyMetadata.FromFunctions <TAccount, string>(Constants.ClaimTypes.Phone, GetPhone, SetConfirmedPhone, name: "Phone", dataType: PropertyDataType.String, required: false),
                PropertyMetadata.FromFunctions <TAccount, bool>("IsLoginAllowed", GetIsLoginAllowed, SetIsLoginAllowed, name: "Is Login Allowed", dataType: PropertyDataType.Boolean, required: false),
            });

            if (includeAccountProperties)
            {
                update.AddRange(PropertyMetadata.FromType <TAccount>());
            }

            var user = new UserMetadata
            {
                SupportsCreate   = true,
                SupportsDelete   = true,
                SupportsClaims   = true,
                CreateProperties = create,
                UpdateProperties = update
            };

            var meta = new IdentityManagerMetadata {
                UserMetadata = user
            };

            if (this.groupService != null && this.groupQuery != null)
            {
                meta.RoleMetadata.SupportsCreate   = true;
                meta.RoleMetadata.SupportsDelete   = true;
                meta.RoleMetadata.RoleClaimType    = Constants.ClaimTypes.Role;
                meta.RoleMetadata.CreateProperties = new PropertyMetadata[] {
                    new PropertyMetadata {
                        Name     = "Name",
                        Type     = Constants.ClaimTypes.Name,
                        DataType = PropertyDataType.String,
                        Required = true
                    }
                };
            }

            return(meta);
        }
Example #10
0
        public virtual IdentityManagerMetadata GetStandardMetadata(bool includeAccountProperties = true)
        {
            var update = new List <PropertyMetadata>();

            if (this.userManager.SupportsUserPassword)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Password, x => null, this.SetPassword, "Password", PropertyDataType.Password, true));
            }
            if (this.userManager.SupportsUserEmail)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Email, this.GetEmail, this.SetEmail, "Email", PropertyDataType.Email));
            }
            if (this.userManager.SupportsUserPhoneNumber)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Phone, this.GetPhone, this.SetPhone, "Phone", PropertyDataType.String));
            }
            if (this.userManager.SupportsUserTwoFactor)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("two_factor", this.GetTwoFactorEnabled, this.SetTwoFactorEnabled, "Two Factor Enabled", PropertyDataType.Boolean));
            }
            if (this.userManager.SupportsUserLockout)
            {
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("locked_enabled", this.GetLockoutEnabled, this.SetLockoutEnabled, "Lockout Enabled", PropertyDataType.Boolean));
                update.Add(PropertyMetadata.FromFunctions <TUser, bool>("locked", this.GetLockedOut, this.SetLockedOut, "Locked Out", PropertyDataType.Boolean));
            }
            update.Add(PropertyMetadata.FromFunctions <TUser, bool>(Constants.ClaimTypes.EmailConfirmed, this.GetIsEmailConfirmed, this.SetEmailConfirmed, "Email Confirmed", PropertyDataType.Boolean));

            if (includeAccountProperties)
            {
                update.AddRange(PropertyMetadata.FromType <TUser>());
            }

            var create = new List <PropertyMetadata>
            {
                new PropertyMetadata()
                {
                    Name = "Name", Type = Constants.ClaimTypes.Name, DataType = PropertyDataType.String, Required = true
                },
                PropertyMetadata.FromProperty <TUser>(x => x.Email, Constants.ClaimTypes.Email, required: true),
                PropertyMetadata.FromFunctions <TUser, string>(Constants.ClaimTypes.Password, x => null, this.SetPassword, "Password", PropertyDataType.Password, true),
                PropertyMetadata.FromFunctions <TUser, bool>(Constants.ClaimTypes.EmailConfirmed, x => false, this.SetEmailConfirmed, "Email Confirmed", PropertyDataType.Boolean)
            };

            var user = new UserMetadata
            {
                SupportsCreate   = true,
                SupportsDelete   = true,
                SupportsClaims   = this.userManager.SupportsUserClaim,
                CreateProperties = create,
                UpdateProperties = update
            };

            var role = new RoleMetadata
            {
                RoleClaimType    = this.RoleClaimType,
                SupportsCreate   = true,
                SupportsDelete   = true,
                CreateProperties = new[]
                {
                    PropertyMetadata.FromProperty <TRole>(x => x.Name, Constants.ClaimTypes.Name, required: true)
                }
            };

            var meta = new IdentityManagerMetadata
            {
                UserMetadata = user,
                RoleMetadata = role
            };

            return(meta);
        }