コード例 #1
0
        public ActionResult EditarUsuario(RegisterFrontViewModel viewModel)
        {
            ModelState["Password"].Errors.Clear();

            var usuarioActual = UsuarioClienteHelper.Actual(db);

            //if (!usuarioActual.EsAdministrador && !usuarioActual.EsGerenteSucursal)
            //{
            //    throw new Exception("SEGURIDAD: El usuario con id: " + usuarioActual.Id + " intentó entrar a la sección de creación de usuarios.");
            //}

            var appUser = UserManager.FindById(viewModel.IdUsuarioApplicacion);

            if (ModelState.IsValid)
            {
                if (ModificarApplicationUser(viewModel))
                {
                    var usuario = new Repositorio <Usuario>(db).Traer(viewModel.Id);

                    new Repositorio <Usuario>(db).Modificar(usuario);

                    return(RedirectToAction("MiPerfil", "Frontend", new { Message = "UpdateUserSuccess" }));
                }
            }

            return(View("Usuario", viewModel));
        }
コード例 #2
0
ファイル: IdentityModels.cs プロジェクト: dieabra/DanzFloor
 public ApplicationUser(RegisterFrontViewModel model)
 {
     UserName = model.Email;
     Email    = model.Email;
     Name     = model.Name;
     Lastname = model.Lastname;
     TokenFechaVencimiento = DateTime.Now.AddDays(7);
 }
コード例 #3
0
        public ActionResult Registrar(string nombre, string idSocial)
        {
            var user = new RegisterFrontViewModel();

            user.Name     = nombre;
            user.IdSocial = idSocial;
            if (string.IsNullOrWhiteSpace(idSocial))
            {
                user.Password        = "******";
                user.ConfirmPassword = "******";
            }
            return(View("Registrar", user));
        }
コード例 #4
0
        public ActionResult DetalleUsuario(Guid id)
        {
            var usuario   = new Repositorio <Usuario>(db).Traer(id);
            var viewModel = new RegisterFrontViewModel();

            List <string> seleccionados = UserManager.GetRoles(usuario.UsuarioApplicacion.Id).ToList();

            viewModel.UserRolesSelected = viewModel.Perfiles
                                          .Where(x => seleccionados.Contains(x.Text))
                                          .Select(x => x.Value).ToList();

            viewModel.RegenerarFrontend(db);
            ViewBag.Title = "Detalle Usuario";
            return(View(viewModel));
        }
コード例 #5
0
        public bool RegisterUser(RegisterFrontViewModel model)
        {
            try
            {
                var db   = new ApplicationDbContext();
                var user = new ApplicationUser(model);

                var usuario = new Usuario();
                usuario.UsuarioApplicacion = user;
                usuario.Nombre             = model.Name;
                usuario.Apellido           = model.Lastname;
                usuario.Email           = model.Email;
                usuario.FechaNacimiento = DateTime.Now;
                usuario.Sexo            = new Repositorio <Sexo>(db).TraerTodos().First();

                new Repositorio <Usuario>(db).Crear(usuario);
                model.Password = model.ConfirmPassword = usuario.UsuarioApplicacion.Id.Substring(0, 4) + GenerarRandomPass();
                UserManager.AddPassword(usuario.UsuarioApplicacion.Id, model.Password);

                if (model.UserRolesSelected != null && model.UserRolesSelected.Count > 0)
                {
                    model.UserRolesSelected.ToList().ForEach(rol => UserManager.AddToRole(user.Id, model.Perfiles.First(x => x.Value == rol).Text));
                }

                try
                {
                    //Enviar Mail Usuario Generado
                    dynamic em = new Email("UsuarioGenerado");
                    em.To       = model.Email;
                    em.Nombre   = user.Name;
                    em.Link     = WebConfigurationManager.AppSettings["Core"];
                    em.Password = model.Password;
                    em.Send();
                    //END Mail
                }
                catch (Exception ex)
                {
                    Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                }

                return(true);
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                return(false);
            }
        }
コード例 #6
0
        public ActionResult AltaUsuario()
        {
            var usuarioActual = UsuarioClienteHelper.Actual(db);

            //if (!usuarioActual.EsAdministrador)
            //{
            //    throw new Exception("SEGURIDAD: El usuario con id: " + usuarioActual.Id + " intentó entrar a la sección de creación de usuarios.");
            //}

            ViewBag.Name = new SelectList(ApplicationDbContext.Create().Roles.ToList(), "Name", "Name");

            RegisterFrontViewModel viewModel = new RegisterFrontViewModel()
            {
                UserRolesSelected = new List <string>(), ResetPassword = true
            };

            return(View("Usuario", viewModel));
        }
コード例 #7
0
        public async Task <ActionResult> AltaUsuario(RegisterFrontViewModel viewModel)
        {
            var usuarioActual = UsuarioClienteHelper.Actual(db);

            //if (!usuarioActual.EsAdministrador)
            //{
            //    throw new Exception("SEGURIDAD: El usuario con id: " + usuarioActual.Id + " intentó entrar a la sección de creación de usuarios.");
            //}

            if (ModelState.IsValid)
            {
                if (this.RegisterUser(viewModel))
                {
                    return(RedirectToAction("MiPerfil", "Frontend"));
                }
            }
            viewModel.ResetPassword = true;
            return(View("Usuario", viewModel));
        }
コード例 #8
0
        public bool ModificarApplicationUser(RegisterFrontViewModel usuarioModificado)
        {
            try
            {
                var appUser = UserManager.FindById(usuarioModificado.IdUsuarioApplicacion);

                if (usuarioModificado.ResetPassword)
                {
                    UserManager.RemovePassword(appUser.Id);
                    UserManager.AddPassword(appUser.Id, usuarioModificado.Password);
                }

                appUser.Email    = usuarioModificado.Email;
                appUser.Name     = usuarioModificado.Name;
                appUser.Lastname = usuarioModificado.Lastname;

                if (usuarioModificado.UserRolesSelected != null)
                {
                    UserManager.RemoveFromRoles(appUser.Id, UserManager.GetRoles(appUser.Id).ToArray());

                    UserManager.Update(appUser);

                    List <string> rolesAAgregar = new List <string>();

                    usuarioModificado.UserRolesSelected.ToList()
                    .ForEach(roleId =>
                             rolesAAgregar.Add(usuarioModificado.Perfiles.First(perf => perf.Value == roleId).Text)
                             );

                    UserManager.AddToRoles(appUser.Id, rolesAAgregar.ToArray());
                }

                UserManager.Update(appUser);

                return(true);
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                return(false);
            }
        }
コード例 #9
0
        public ActionResult EditarUsuario(Guid id)
        {
            var usuarioActual = UsuarioClienteHelper.Actual(db);

            //if (!usuarioActual.EsAdministrador && !usuarioActual.EsGerenteSucursal)
            //{
            //    throw new Exception("SEGURIDAD: El usuario con id: " + usuarioActual.Id + " intentó entrar a la sección de creación de usuarios.");
            //}

            var usuario   = new Repositorio <Usuario>(db).Traer(id);
            var viewModel = new RegisterFrontViewModel(usuario);

            List <string> seleccionados = UserManager.GetRoles(usuario.UsuarioApplicacion.Id).ToList();

            viewModel.UserRolesSelected = viewModel.Perfiles
                                          .Where(x => seleccionados.Contains(x.Text))
                                          .Select(x => x.Value).ToList();

            viewModel.RegenerarFrontend(db);
            ViewBag.Title = "Editar Usuario";

            return(View("Usuario", viewModel));
        }
コード例 #10
0
        public ActionResult Registrar(RegisterFrontViewModel model)
        {
            string ContraseñaError = "La contraseña debe tener al menos: <br>- 6 caracteres</br>- 1 minúscula</br>- 1 mayúscula</br>- 1 símbolo (ej: $, % o !)</br>- 1 número";

            try
            {
                if (string.IsNullOrWhiteSpace(model.Email))
                {
                    ViewBag.Error = "No ha completado el mail";
                    return(View("Registrar", model));
                }
                if (string.IsNullOrWhiteSpace(model.Name))
                {
                    ViewBag.Error = "No ha completado el nombre";
                    return(View("Registrar", model));
                }
                if (string.IsNullOrWhiteSpace(model.IdSocial))
                {
                    if (string.IsNullOrWhiteSpace(model.Password) || string.IsNullOrWhiteSpace(model.ConfirmPassword))
                    {
                        ViewBag.Error = "No ha completado la contraseña y su confirmación";
                        return(View("Registrar", model));
                    }
                    if (model.Password != model.ConfirmPassword)
                    {
                        ViewBag.Error = "La contraseña y su confirmación no son iguales";
                        return(View("Registrar", model));
                    }
                    if (model.Password.Length < 6)
                    {
                        ViewBag.Error = ContraseñaError;
                        return(View("Registrar", model));
                    }
                    if (!model.Password.Any(c => char.IsLower(c)))
                    {
                        ViewBag.Error = ContraseñaError;
                        return(View("Registrar", model));
                    }
                    if (!model.Password.Any(c => char.IsUpper(c)))
                    {
                        ViewBag.Error = ContraseñaError;
                        return(View("Registrar", model));
                    }
                    if (!model.Password.Any(c => char.IsNumber(c)))
                    {
                        ViewBag.Error = ContraseñaError;
                        return(View("Registrar", model));
                    }
                    //Regex RgxUrl = new Regex("[^a-z0-9]");
                    if (model.Password.All(Char.IsLetterOrDigit))
                    {
                        ViewBag.Error = ContraseñaError;
                        return(View("Registrar", model));
                    }
                }
                else
                {
                    model.Password        = "******";
                    model.ConfirmPassword = "******";
                }
                if (new Repositorio <Usuario>(db).TraerTodos().Any(u => u.UsuarioApplicacion.UserName == model.Email))
                {
                    ViewBag.Error = "El email ingresado ya se encuentra en uso";
                    return(View("Registrar", model));
                }

                var user = new ApplicationUser
                {
                    UserName = model.Email,
                    Email    = model.Email,
                    Name     = model.Name,
                    Lastname = "",
                    TokenFechaVencimiento = DateTime.Now.AddDays(7),
                };


                var usuario = new Clubber();
                usuario.UsuarioApplicacion = user;
                usuario.Nombre             = model.Name;
                usuario.Apellido           = "";
                usuario.Email           = model.Email;
                usuario.FechaNacimiento = DateTime.Now;
                usuario.Sexo            = new Repositorio <Sexo>(db).TraerTodos().First();

                if (!string.IsNullOrWhiteSpace(model.IdSocial))
                {
                    var userSocial = new UsuarioSocial
                    {
                        Apellido  = "",
                        Email     = model.Email,
                        Nombre    = model.Name,
                        IdSocial  = model.IdSocial,
                        RedSocial = RedSocial.Instagram,
                    };

                    usuario.CredencialesSociales = new List <Models.Dominio.UsuarioSocial>();
                    usuario.CredencialesSociales.Add(userSocial);
                }
                new Repositorio <Usuario>(db).Crear(usuario);
                UserManager.AddPassword(usuario.UsuarioApplicacion.Id, model.Password);

                UserManager.AddToRole(user.Id, RoleConst.Clubber);

                SignInManager.SignIn(user, true, true);

                return(RedirectToAction("Index", "Frontend"));
            }
            catch (Exception ex)
            {
                ViewBag.Error = "Ha ocurrido un error!";
                return(View("Registrar", model));
            }
        }
コード例 #11
0
        public ActionResult ReturnFrom(RedSocial tipo, string code)
        {
            var goTo = CacheHelper.GetKey(CacheHelper.GetNotLoggedUserKey());

            try
            {
                using (WebClient client = new WebClient())
                {
                    ISocialUser user;
                    byte[]      response;
                    switch (tipo)
                    {
                    case RedSocial.Google:
                        throw new Exception("Loggeo incorrecto con Google");
                        break;

                    case RedSocial.Instagram:
                        response =
                            client.UploadValues("https://api.instagram.com/oauth/access_token", new NameValueCollection()
                        {
                            { "client_id", SocialIds.InstagramClientId },
                            { "client_secret", SocialIds.InstagramClientSecret },
                            { "grant_type", SocialIds.InstagramGrantType },
                            { "redirect_uri", (WebConfigurationManager.AppSettings["Core"] + WebConfigurationManager.AppSettings["urlInstagramRedirect"]) },
                            { "code", code },
                        });

                        InstagramResponseValidationCode responseI = JsonConvert.DeserializeObject <InstagramResponseValidationCode>(System.Text.Encoding.UTF8.GetString(response));
                        user = responseI.user;
                        ((InstagramUser)user).Token = responseI.access_token;

                        break;

                    case RedSocial.FaceBook:
                        response = client.UploadValues("https://graph.facebook.com/v2.9/oauth/access_token", new NameValueCollection()
                        {
                            { "client_id", SocialIds.FacebookAppId },
                            { "redirect_uri", WebConfigurationManager.AppSettings["Core"] + WebConfigurationManager.AppSettings["urlFacebookRedirect"] },
                            { "client_secret", SocialIds.FacebookSecret },
                            { "code", code }
                        });

                        FacebookResponseValidationCode obj = JsonConvert.DeserializeObject <FacebookResponseValidationCode>(System.Text.Encoding.UTF8.GetString(response));

                        //No se por que no anda de esta forma
                        //byte[] userResponse = client.UploadValues("https://graph.facebook.com/v2.9/me", new NameValueCollection()
                        //{
                        //    { "fields", "email,id,first_name,last_name,name,picture.type(large)" },
                        //    { "access_token", obj.access_token }
                        //});

                        //FacebookUser fbUser = JsonConvert.DeserializeObject<FacebookUser>(System.Text.Encoding.UTF8.GetString(response));
                        //user = fbUser;
                        using (HttpClient cliente = new HttpClient())
                        {
                            var mess = cliente.GetStringAsync("https://graph.facebook.com/me?fields=email,name,picture.type(large),id&access_token=" + obj.access_token);
                            user = JsonConvert.DeserializeObject <FacebookUser>(mess.Result);
                            ((FacebookUser)user).Token = obj.access_token;
                        }
                        break;

                    case RedSocial.Spotify:
                        SpotifyResponseValidationCode responseS;
                        using (HttpClient cliente = new HttpClient())
                        {
                            Dictionary <string, string> postData = new Dictionary <string, string>();
                            postData.Add("grant_type", "authorization_code");
                            postData.Add("code", code);
                            postData.Add("redirect_uri", WebConfigurationManager.AppSettings["Core"] + WebConfigurationManager.AppSettings["urlSpotifyRedirect"]);
                            postData.Add("client_id", SocialIds.SpotifyClientId);
                            postData.Add("client_secret", SocialIds.SpotifySecret);
                            var content      = new FormUrlEncodedContent(postData);
                            var httpResponse = cliente.PostAsync("https://accounts.spotify.com/api/token", content).Result.Content.ReadAsStringAsync().Result;
                            responseS = JsonConvert.DeserializeObject <SpotifyResponseValidationCode>(httpResponse);
                        }
                        using (HttpClient cliente = new HttpClient())
                        {
                            cliente.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", responseS.access_token);

                            var mess = cliente.GetAsync("https://api.spotify.com/v1/me").Result.Content.ReadAsStringAsync();
                            user = JsonConvert.DeserializeObject <SpotifyUser>(mess.Result);
                            ((SpotifyUser)user).accessToken = responseS.access_token;
                        }
                        break;

                    case RedSocial.SoundCloud:
                        throw new Exception("Loggeo incorrecto con SoundCloud");
                        break;

                    default:
                        throw new Exception("Loggeo incorrecto con Random");
                        break;
                    }


                    if (ExisteUsuarioSocial(user.GetId()))
                    {
                        //existe el user, loguearlo
                        var id         = user.GetId();
                        var userSocial = new Repositorio <UsuarioSocial>(new ApplicationDbContext()).TraerTodos().Single(u => u.IdSocial == id);
                        var usuarios   = new Repositorio <Clubber>(db).TraerTodos()
                                         .Where(r => r.CredencialesSociales.Any(c => c.IdSocial == userSocial.IdSocial));

                        SignInManager.SignIn(usuarios.First().UsuarioApplicacion, true, true);

                        if (string.IsNullOrEmpty(goTo))
                        {
                            return(RedirectToAction("Index", "Frontend"));
                        }
                        else
                        {
                            return(RedirectToLocal(goTo.ToString()));
                        }
                    }
                    else
                    {
                        //no existe el user -> crearlo
                        var nuevo = new RegisterFrontViewModel();
                        nuevo.Name     = user.GetName();
                        nuevo.IdSocial = user.GetId();
                        nuevo.Email    = string.IsNullOrWhiteSpace(user.GetEmail()) ? user.GetName().Replace(" ", "") + "@danzfloor.com.ar" : user.GetEmail();

                        var clubberRepo = new Repositorio <Clubber>(db);
                        if (clubberRepo.TraerTodos().Any(u => u.UsuarioApplicacion.UserName == nuevo.Email))
                        {
                            var clubber    = clubberRepo.TraerTodos().First(u => u.UsuarioApplicacion.UserName == nuevo.Email);
                            var userSocial = new UsuarioSocial
                            {
                                AccessToken = user.GetAccessToken(),
                                Apellido    = "",
                                Email       = user.GetEmail(),
                                Nombre      = user.GetName(),
                                IdSocial    = user.GetId(),
                                RedSocial   = user is FacebookUser ? RedSocial.FaceBook : user is SpotifyUser ? RedSocial.Spotify : RedSocial.Instagram,
                            };

                            clubber.CredencialesSociales = new List <Models.Dominio.UsuarioSocial>();
                            clubber.CredencialesSociales.Add(userSocial);
                            clubberRepo.GuardarCambios();



                            SignInManager.SignIn(clubber.UsuarioApplicacion, true, true);

                            return(RedirectToAction("Index", "Frontend"));
                        }

                        var appUser = new ApplicationUser
                        {
                            UserName = nuevo.Email,
                            Email    = nuevo.Email,
                            Name     = nuevo.Name,
                            Lastname = "",
                            TokenFechaVencimiento = DateTime.Now.AddDays(7),
                        };


                        var usuario = new Clubber();
                        usuario.UsuarioApplicacion = appUser;
                        usuario.Nombre             = nuevo.Name;
                        usuario.Apellido           = "";
                        usuario.Email           = nuevo.Email;
                        usuario.FechaNacimiento = DateTime.Now;
                        usuario.Sexo            = new Repositorio <Sexo>(db).TraerTodos().First();

                        if (!string.IsNullOrWhiteSpace(user.GetId()))
                        {
                            var userSocial = new UsuarioSocial
                            {
                                Apellido  = "",
                                Email     = nuevo.Email,
                                Nombre    = nuevo.Name,
                                IdSocial  = nuevo.IdSocial,
                                RedSocial = RedSocial.Instagram,
                            };

                            usuario.CredencialesSociales = new List <Models.Dominio.UsuarioSocial>();
                            usuario.CredencialesSociales.Add(userSocial);
                        }
                        new Repositorio <Usuario>(db).Crear(usuario);
                        UserManager.AddPassword(usuario.UsuarioApplicacion.Id, "qweQWE123!#");

                        UserManager.AddToRole(appUser.Id, RoleConst.Clubber);

                        SignInManager.SignIn(appUser, true, true);

                        return(RedirectToAction("Index", "Frontend"));
                    }
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }