Example #1
0
        public ClientDetailResource(ClientDetail client, IUrlHelper url, ClientMetaData idmAdminMeta)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (idmAdminMeta == null)
            {
                throw new ArgumentNullException("idmAdminMeta");
            }

            Data = new ClientDetailDataResource(client, url, idmAdminMeta);

            var links = new Dictionary <string, string>();

            if (idmAdminMeta.SupportsDelete)
            {
                links["Delete"] = url.RelativeLink(Constants.RouteNames.DeleteClient, new { subject = client.Subject });
            }
            Links = links;
        }
Example #2
0
        private void ValidateUpdateProperty(ClientMetaData clientMetaData, string type, string value)
        {
            if (clientMetaData == null)
            {
                throw new ArgumentNullException("clientMetaData");
            }

            if (String.IsNullOrWhiteSpace(type))
            {
                ModelState.AddModelError("", Messages.PropertyTypeRequired);
                return;
            }

            var prop = clientMetaData.UpdateProperties.SingleOrDefault(x => x.Type == type);

            if (prop == null)
            {
                ModelState.AddModelError("", String.Format(Messages.PropertyInvalid, type));
            }
            else
            {
                var error = prop.Validate(value);
                if (error != null)
                {
                    ModelState.AddModelError("", error);
                }
            }
        }
Example #3
0
        public void CountryIdTest()
        {
            ClientMetaData target      = new ClientMetaData(); // TODO: Initialize to an appropriate value
            var            t           = typeof(ClientMetaData);
            var            pi          = t.GetProperty("CountryId");
            var            hasRequired = Attribute.IsDefined(pi, typeof(System.ComponentModel.DataAnnotations.RequiredAttribute));

            Assert.IsTrue(hasRequired);
        }
Example #4
0
        public void RegisterClient(ClientMetaData meta)
        {
            Clients.Add(meta);

            if (ClientRegistered != null)
            {
                ClientRegistered(this, meta);
            }
        }
Example #5
0
        private IEnumerable <string> ValidateCreateProperties(ClientMetaData clientMetaData, IEnumerable <PropertyValue> properties)
        {
            if (clientMetaData == null)
            {
                throw new ArgumentNullException("clientMetaData");
            }
            properties = properties ?? Enumerable.Empty <PropertyValue>();

            var meta = clientMetaData.CreateProperties;

            return(meta.Validate(properties));
        }
Example #6
0
        public void AddressTest()
        {
            ClientMetaData target      = new ClientMetaData(); // TODO: Initialize to an appropriate value
            var            t           = typeof(ClientMetaData);
            var            pi          = t.GetProperty("Address");
            var            hasRequired = Attribute.IsDefined(pi, typeof(System.ComponentModel.DataAnnotations.RequiredAttribute));

            Assert.IsTrue(hasRequired);
            var attr = (System.ComponentModel.DataAnnotations.RequiredAttribute[])pi.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.RequiredAttribute), false);

            Assert.IsTrue(attr.Length > 0);
            Assert.IsTrue(attr[0].AllowEmptyStrings == false);
        }
        internal void Validate()
        {
            if (ClientMetaData == null)
            {
                throw new InvalidOperationException("ClientMetaData not assigned.");
            }
            ClientMetaData.Validate();

            if (ScopeMetaData == null)
            {
                throw new InvalidOperationException("ScopeMetaData not assigned.");
            }
            ScopeMetaData.Validate();
        }
Example #8
0
        private IdentityAdminMetadata GetMetadata()
        {
            if (_metadata == null)
            {
                var updateClient = new List <PropertyMetadata>();
                updateClient.AddRange(PropertyMetadata.FromType <InMemoryClient>());

                var createClient = new List <PropertyMetadata>
                {
                    PropertyMetadata.FromProperty <InMemoryClient>(x => x.ClientName, "ClientName", required: true),
                    PropertyMetadata.FromProperty <InMemoryClient>(x => x.ClientId, "ClientId", required: true),
                };

                var client = new ClientMetaData
                {
                    SupportsCreate   = true,
                    SupportsDelete   = true,
                    CreateProperties = createClient,
                    UpdateProperties = updateClient
                };


                var updateScope = new List <PropertyMetadata>();
                updateScope.AddRange(PropertyMetadata.FromType <InMemoryScope>());

                var createScope = new List <PropertyMetadata>
                {
                    PropertyMetadata.FromProperty <InMemoryScope>(x => x.Name, "ScopeName", required: true),
                };

                var scope = new ScopeMetaData
                {
                    SupportsCreate   = true,
                    SupportsDelete   = true,
                    CreateProperties = createScope,
                    UpdateProperties = updateScope
                };


                _metadata = new IdentityAdminMetadata
                {
                    ClientMetaData = client,
                    ScopeMetaData  = scope
                };
            }
            return(_metadata);
        }
Example #9
0
        async Task <ClientMetaData> GetCoreMetaDataAsync()
        {
            if (_clientMetadata == null)
            {
                _clientMetadata = await _clientService.GetMetadataAsync();

                if (_clientMetadata == null)
                {
                    throw new InvalidOperationException("coreMetaData returned null");
                }
                _clientMetadata.Validate();

                return(_clientMetadata);
            }

            return(_clientMetadata);
        }
        internal void Validate()
        {
            if (ClientMetaData == null)
            {
                throw new InvalidOperationException("ClientMetaData not assigned.");
            }
            ClientMetaData.Validate();

            if (IdentityResourceMetaData == null)
            {
                throw new InvalidOperationException("IdentityResourceMetaData not assigned.");
            }
            IdentityResourceMetaData.Validate();

            if (ApiResourceMetaData == null)
            {
                throw new InvalidOperationException("ApiResourceMetaData not assigned.");
            }
            ApiResourceMetaData.Validate();
        }
Example #11
0
        public IEnumerable <ClientMetaData> Register(ClientMetaData msg)
        {
            var callback = OperationContext.Current.GetCallbackChannel <IOTCallback>();

            Clients.Add(msg.Id, new SynchronizingConnection(callback, msg.Name));

            var others = Clients.Where(c => c.Key != msg.Id).ToList();

            others.ForEach(c => c.Value.Client.RegisterClient(msg));

            if (RegistrationCompleted != null)
            {
                RegistrationCompleted(this, null);
            }

            return(others.Select(c => new ClientMetaData()
            {
                Id = c.Key, Name = c.Value.Name
            }));
        }
Example #12
0
        private ClientMetaData GetMetadata()
        {
            if (_metadata == null)
            {
                var updateClient = new List <PropertyMetadata>();
                updateClient.AddRange(PropertyMetadata.FromType <IdentityServer4.EntityFramework.Entities.Client>());

                var createClient = new List <PropertyMetadata>
                {
                    PropertyMetadata.FromProperty <IdentityServer4.EntityFramework.Entities.Client>(x => x.ClientName, "ClientName", required: true),
                    PropertyMetadata.FromProperty <IdentityServer4.EntityFramework.Entities.Client>(x => x.ClientId, "ClientId", required: true),
                };

                _metadata = new ClientMetaData
                {
                    SupportsCreate   = true,
                    SupportsDelete   = true,
                    CreateProperties = createClient,
                    UpdateProperties = updateClient
                };
            }
            return(_metadata);
        }
Example #13
0
 internal void Register(ClientMetaData meta)
 {
     Application.Current.Dispatcher.BeginInvoke(new Action(() => Clients.Add(meta)));
 }
Example #14
0
 public CreateClientLink(UrlHelper url, ClientMetaData clientMetaData)
 {
     this["href"] = url.Link(Constants.RouteNames.CreateClient, null);
     this["meta"] = clientMetaData.CreateProperties;
 }
Example #15
0
        public ClientQueryResultResourceData(QueryResult <ClientSummary> result, UrlHelper url, ClientMetaData meta)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (meta == null)
            {
                throw new ArgumentNullException("meta");
            }

            AutoMapper.Mapper.Map(result, this);

            foreach (var client in this.Items)
            {
                var links = new Dictionary <string, string> {
                    { "detail", url.Link(Constants.RouteNames.GetClient, new { subject = client.Data.Subject }) }
                };
                if (meta.SupportsDelete)
                {
                    links.Add("delete", url.Link(Constants.RouteNames.DeleteClient, new { subject = client.Data.Subject }));
                }
                client.Links = links;
            }
        }
Example #16
0
 void callback_ClientRegistered(object sender, ClientMetaData meta)
 {
     editor.Dispatcher.BeginInvoke(new Action(() => editor.RegisterClient(meta.Id, meta.Name)));
     ClientsList.Dispatcher.BeginInvoke(new Action(() => InvalidateProperty(ListView.ItemsSourceProperty)));
     viewModel.Register(meta);
 }
Example #17
0
        public ClientDetailDataResource(ClientDetail client, IUrlHelper url, ClientMetaData idmAdminMeta)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (idmAdminMeta == null)
            {
                throw new ArgumentNullException("idmAdminMeta");
            }

            this["ClientName"] = client.ClientName;
            this["ClientId"]   = client.ClientId;
            this["Subject"]    = client.Subject;

            if (client.Properties != null)
            {
                var props =
                    from p in client.Properties
                    let m =
                        (from m in idmAdminMeta.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.RelativeLink(Constants.RouteNames.UpdateClientProperty,
                                                  new
                        {
                            subject = client.Subject,
                            type    = p.Type.ToBase64UrlEncoded()
                        }
                                                  )
                    }
                };

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

            #region Claims
            if (client.Claims != null)
            {
                var claims =
                    from c in client.Claims.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientClaim, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["Claims"] = new
                {
                    Data  = claims.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientClaim, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region ClientSecrets
            if (client.ClientSecrets != null)
            {
                var clientSecrets =
                    from c in client.ClientSecrets.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientSecret, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["ClientSecrets"] = new
                {
                    Data  = clientSecrets.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientSecret, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region IdentityProviderRestrictions
            if (client.IdentityProviderRestrictions != null)
            {
                var clientIdentityProviderRestrictions =
                    from c in client.IdentityProviderRestrictions.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientIdPRestriction, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["IdentityProviderRestrictions"] = new
                {
                    Data  = clientIdentityProviderRestrictions.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientIdPRestriction, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region PostLogoutRedirectUris
            if (client.PostLogoutRedirectUris != null)
            {
                var postLogoutRedirectUris =
                    from c in client.PostLogoutRedirectUris.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientPostLogoutRedirectUri, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["PostLogoutRedirectUris"] = new
                {
                    Data  = postLogoutRedirectUris.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientPostLogoutRedirectUri, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region RedirectUris
            if (client.RedirectUris != null)
            {
                var redirectUris =
                    from c in client.RedirectUris.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientRedirectUri, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["RedirectUris"] = new
                {
                    Data  = redirectUris.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientRedirectUri, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region AllowedCorsOrigins
            if (client.AllowedCorsOrigins != null)
            {
                var alowedCorsOrigins =
                    from c in client.AllowedCorsOrigins.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientCorsOrigin, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["AllowedCorsOrigins"] = new
                {
                    Data  = alowedCorsOrigins.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientCorsOrigin, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region AllowedCustomGrantTypes
            if (client.AllowedCustomGrantTypes != null)
            {
                var allowedCustomGrantTypes =
                    from c in client.AllowedCustomGrantTypes.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientCustomGrantType, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["AllowedCustomGrantTypes"] = new
                {
                    Data  = allowedCustomGrantTypes.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientCustomGrantType, new { subject = client.Subject })
                    }
                };
            }
            #endregion

            #region AllowedScopes
            if (client.AllowedScopes != null)
            {
                var allowedScopes =
                    from c in client.AllowedScopes.ToArray()
                    select new
                {
                    Data  = c,
                    Links = new
                    {
                        delete = url.RelativeLink(Constants.RouteNames.RemoveClientScope, new
                        {
                            subject = client.Subject,
                            id      = c.Id
                        })
                    }
                };

                this["AllowedScopes"] = new
                {
                    Data  = allowedScopes.ToArray(),
                    Links = new
                    {
                        create = url.RelativeLink(Constants.RouteNames.AddClientScope, new { subject = client.Subject })
                    }
                };
            }
            #endregion
        }
        public ClientQueryResultResource(QueryResult <ClientSummary> result, IUrlHelper url, ClientMetaData meta)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (meta == null)
            {
                throw new ArgumentNullException("meta");
            }

            Data = new ClientQueryResultResourceData(result, url, meta);

            var links = new Dictionary <string, object>();

            if (meta.SupportsCreate)
            {
                links["create"] = new CreateClientLink(url, meta);
            }
            ;
            Links = links;
        }
Example #19
0
 internal void SetupGetMetadataAsync(ClientMetaData data)
 {
     Setup(x => x.GetMetadataAsync())
     .Returns(Task.FromResult(data));
 }