static string CallAppUserurl(string usuario)

        {
            smacEntities2 db = new smacEntities2();

            string apps;
            var    app = db.UserApps.FirstOrDefault(e => e.Users.Usuario.Contains(usuario));

            if (app != null)
            {
                return(apps = app.AppWeb1.Enlace);
                //UserData.roles = roles;
            }
            //
            //{
            //    RegistrarUsuario(usuario);

            //    var roless = db.Users.FirstOrDefault(e => e.Usuario.Contains(usuario));

            //    return app = roless.Role1.Role1;
            //}


            return(null);
        }
        static string Callrole(string usuario)

        {
            smacEntities2 db = new smacEntities2();

            string roles;
            //var role= db.Users.FirstOrDefault(e => e.Usuario.Contains(usuario));
            var role = from a in db.Users
                       select a;

            role = role.Where(a => a.Usuario.Contains(usuario));
            if (role != null)
            {
                var x = role.OrderBy(a => a.Role1.Role1).ToString();
                return(roles = x.ToString());
                //return roles = role.Role1.Role1;
                //UserData.roles = roles;
            }
            else
            {
                RegistrarUsuario(usuario);

                var roless = db.Users.FirstOrDefault(e => e.Usuario.Contains(usuario));

                return(roles = roless.Role1.Role1);
            }


            return(null);
        }
        static string RegistrarUsuario(string usuario)

        {
            smacEntities2 db  = new smacEntities2();
            Users         ord = new Users
            {
                Usuario = usuario,
                Role    = 3
                          // …
            };

            // Add the new object to the Orders collection.
            db.Users.Add(ord);

            // Submit the change to the database.

            db.SaveChanges();



            return(null);
        }
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "capgefi.local"))
            {
                // validate the credentials
                bool isValid = pc.ValidateCredentials(context.UserName, context.Password);

                if (!isValid)
                {
                    context.SetError("invalid_grant", "The user name or password is incorrect.");
                    return;
                }
            }


            //var identity = new ClaimsIdentity(context.Options.AuthenticationType);


            //ContextType authenticationType = ContextType.Domain;
            PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "capgefi.local");
            UserPrincipal    userPrincipal    = null;

            userPrincipal = UserPrincipal.FindByIdentity(principalContext, context.UserName);

            var roles = Callrole(context.UserName);
            //var app = string.Format("{0} {1}", CallAppUser(context.UserName), CallAppUserurl(context.UserName));
            var url = CallAppUserurl(context.UserName);
            //UserPrincipal userPrincipal = null;
            //userPrincipal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);

            identity.AddClaim(new Claim("user", context.UserName));
            //identity.AddClaim(new Claim("role", roles));
            //identity.AddClaim(new Claim("app", app));
            //identity.AddClaim(new Claim("url", url));
            //identity.AddClaim(new Claim("role", roles));
            //identity.AddClaim(new Claim("role", "user"));
            //identity.AddClaim(new Claim(ClaimTypes.Role, "user"));
            //var identity = new ClaimsIdentity(context.Options.AuthenticationType, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
            //identity.AddClaim(new Claim(ClaimTypes.Role, ));
            //  smacEntities2 db = new smacEntities2();
            //  //var apps = db.UserApps.Include(a => a.AppWeb1.Nombre).Include(a => a.AppWeb1.Enlace);
            //  //apps= apps.Where(a => a.Users.Usuario.Contains(context.UserName));
            //var APP = db.UserApps.Include(a => a.AppWeb1.UserApps.).Include(a => a.AppWeb1.Enlace);
            //  APP = APP.Where(a => a.Users.Usuario.Contains(context.UserName));
            //  //var apps = APP.UserApps.Contains(context.UserName);
            //  foreach (var tapp in APP)
            //  {
            //      identity.AddClaim(new Claim("apps", tapp.AppWeb1.Nombre));
            //  }

            //var groups = userPrincipal.GetAuthorizationGroups();
            //foreach (var @group in groups)
            //{
            //    identity.AddClaim(new Claim("roles", @group.Name));
            //}
            //ROLES
            smacEntities2 db   = new smacEntities2();
            var           role = from a in db.Users
                                 select a;

            role = role.Where(a => a.Usuario.Contains(context.UserName));
            if (role == null)
            {
                RegistrarUsuario(context.UserName);
                role = role.Where(a => a.Usuario.Contains(context.UserName));
            }
            foreach (var @roless in role)
            {
                identity.AddClaim(new Claim("role", @roless.Role1.Role1));
            }

            //APP
            var app = from a in db.UserApps
                      select a;

            app = app.Where(a => a.Users.Usuario.Contains(context.UserName));
            foreach (var @roless in app)
            {
                identity.AddClaim(new Claim(@roless.AppWeb1.Nombre, @roless.AppWeb1.Enlace));
                //identity.AddClaim(new Claim("url", @roless.AppWeb1.Enlace));
            }


            var user = userPrincipal;
            //UserPrincipal user = null;
            //Create a PrincipleContext that will search the full domain
            //ie not just the site's user OU
            //FQDC = Fully Qualified Domain Controller
            string userName = userPrincipal.Name;

            //using (var context2 = new PrincipalContext(ContextType.Domain, "capgefi.local"))
            //{

            //    {
            //        if ((userPrincipal = UserPrincipal.FindByIdentity(principalContext, context.UserName)) != null)
            //        {
            //            // Search for current groups
            //            PrincipalSearchResult<Principal> groups2 = userPrincipal.GetGroups();

            //            // Iterate group membership
            //            foreach (GroupPrincipal g in groups2)
            //            {
            //                //UserData.roles = string.Format("{0} {1}", "Role:" + g.Name, "Nombre:" + user.DisplayName);
            //                UserData.user = string.Format("{0}", user.UserPrincipalName);
            //                UserData.roles = string.Format("{0}", "Role:" + g.Name);
            //            }
            //        }
            //    }
            //}



            context.Validated(identity);
        }