public async Task <IActionResult> Register([FromBody] RegisterViewModel vm)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (await UserExist(vm))
            {
                return(BadRequest("Email-ul este deja folosit."));
            }

            var newUser = new UniversityUserModel
            {
                UserName       = vm.Username,
                Email          = vm.Username,
                EmailConfirmed = true
            };

            var resultUser = await _userManager.CreateAsync(newUser, vm.Password);

            if (!resultUser.Succeeded)
            {
                return(BadRequest(resultUser.Errors));
            }
            var resultRole = await _userManager.AddToRoleAsync(newUser, "User");

            if (!resultRole.Succeeded)
            {
                return(BadRequest(resultRole.Errors));
            }

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(newUser);

            return(Ok(vm));
        }
 public async Task <ClaimsIdentity> GenerateClaimsIdentity(UniversityUserModel user)
 {
     return(new ClaimsIdentity(new GenericIdentity(user.UserName, "Token"), new[]
     {
         new Claim("id", user.Id),
         new Claim("roles", (await _userManager.GetRolesAsync(user)).LastOrDefault())
     }));
 }
        public async Task EnsureSeedData()
        {
            if (_roleManager.Roles.Count() == 0)
            {
                Console.WriteLine("seeding roles ...");

                var userRole = new UniversityRoleModel()
                {
                    Name = "User"
                };
                await _roleManager.CreateAsync(userRole);
            }

            if (await _userManager.FindByEmailAsync("*****@*****.**") == null)
            {
                Console.WriteLine("seeding users ...");
                var userUser = new UniversityUserModel()
                {
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true
                };

                await _userManager.CreateAsync(userUser, "user1234");

                await _userManager.AddToRoleAsync(userUser, "User");

                var newUserStudent = new StudentModel()
                {
                    Nume      = "Utilizator",
                    An        = 2,
                    Email     = "*****@*****.**",
                    Facultate = "Facultatea de Automatica si Calculatoare",
                    Grupa     = "1",
                    Sectie    = "CTI",
                    Subgrupa  = "1.1",
                    Telefon   = "0723676136",
                    UserId    = userUser.Id
                };

                await _bll.StudentRepository.InsertAsync(newUserStudent);

                var ghitaUser = new UniversityUserModel()
                {
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true
                };

                await _userManager.CreateAsync(ghitaUser, "ghita1234");

                await _userManager.AddToRoleAsync(ghitaUser, "User");

                var newGhitaStudent = new StudentModel()
                {
                    Nume      = "Gheorghe Darle",
                    An        = 2,
                    Email     = "*****@*****.**",
                    Facultate = "Facultatea de Automatica si Calculatoare",
                    Grupa     = "3",
                    Sectie    = "CTI",
                    Subgrupa  = "3.1",
                    Telefon   = "0723676136",
                    UserId    = ghitaUser.Id
                };

                await _bll.StudentRepository.InsertAsync(newGhitaStudent);

                var prodiUser = new UniversityUserModel()
                {
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    EmailConfirmed = true
                };

                await _userManager.CreateAsync(prodiUser, "prodi1234");

                await _userManager.AddToRoleAsync(prodiUser, "User");

                var newProdiStudent = new StudentModel()
                {
                    Nume      = "Andrei Prodaniuc",
                    An        = 2,
                    Email     = "*****@*****.**",
                    Facultate = "Facultatea de Automatica si Calculatoare",
                    Grupa     = "3",
                    Sectie    = "CTI",
                    Subgrupa  = "3.1",
                    Telefon   = "0724681188",
                    UserId    = prodiUser.Id
                };

                await _bll.StudentRepository.InsertAsync(newProdiStudent);

                await _ctx.SaveChangesAsync();
            }

            if (!_ctx.Profesors.Any())
            {
                Console.WriteLine("seeding profesors ...");

                var newProf1 = new ProfesorModel()
                {
                    Nume  = "Alexandru Popoescu",
                    Email = "*****@*****.**"
                };
                var newProf2 = new ProfesorModel()
                {
                    Nume  = "Vasile Marian",
                    Email = "*****@*****.**"
                };
                var newProf3 = new ProfesorModel()
                {
                    Nume  = "Iulian Popa",
                    Email = "*****@*****.**"
                };
                var newProf4 = new ProfesorModel()
                {
                    Nume  = "Andrei Craciun",
                    Email = "*****@*****.**"
                };

                await _bll.ProfesorRepository.InsertAsync(newProf1);

                await _bll.ProfesorRepository.InsertAsync(newProf2);

                await _bll.ProfesorRepository.InsertAsync(newProf3);

                await _bll.ProfesorRepository.InsertAsync(newProf4);

                await _ctx.SaveChangesAsync();
            }

            if (!_ctx.Subjects.Any())
            {
                Console.WriteLine("seeding subjects ...");

                var newSubj1 = new SubjectModel()
                {
                    Confirmations = 0,
                    Date          = 1,
                    Facultate     = "Facultatea de Automatica si Calculatoare",
                    Locatie       = "A101",
                    Nume          = "Matematici speciale",
                    Serie         = "CTI",
                    StartTime     = "08:00",
                    ProfesorId    = 1,
                    Tip           = SubjectTypeEnum.Curs
                };
                var newSubj2 = new SubjectModel()
                {
                    Confirmations = 0,
                    Date          = 3,
                    Facultate     = "Facultatea de Automatica si Calculatoare",
                    Locatie       = "A101",
                    Nume          = "Matematici speciale",
                    Serie         = "CTI",
                    StartTime     = "18:00",
                    ProfesorId    = 1,
                    Tip           = SubjectTypeEnum.Laborator
                };
                var newSubj3 = new SubjectModel()
                {
                    Confirmations = 0,
                    Date          = 2,
                    Facultate     = "Facultatea de Automatica si Calculatoare",
                    Locatie       = "A101",
                    Nume          = "Modelare si Simulare",
                    Serie         = "CTI",
                    StartTime     = "10:00",
                    ProfesorId    = 2,
                    Tip           = SubjectTypeEnum.Laborator
                };
                var newSubj4 = new SubjectModel()
                {
                    Confirmations = 0,
                    Date          = 2,
                    Facultate     = "Facultatea de Automatica si Calculatoare",
                    Locatie       = "A101",
                    Nume          = "Modelare si Simulare",
                    Serie         = "CTI",
                    StartTime     = "14:00",
                    ProfesorId    = 2,
                    Tip           = SubjectTypeEnum.Curs
                };

                await _bll.SubjectRepository.InsertAsync(newSubj1);

                await _bll.SubjectRepository.InsertAsync(newSubj2);

                await _bll.SubjectRepository.InsertAsync(newSubj3);

                await _bll.SubjectRepository.InsertAsync(newSubj4);

                await _ctx.SaveChangesAsync();
            }

            if (!_ctx.Notes.Any())
            {
                Console.WriteLine("seeding notes ...");

                var newNote1 = new NoteModel()
                {
                    Body      = "Notita mea numarul 1",
                    StudentId = 2,
                    SubjectId = 1,
                    Titlu     = "Notita 1"
                };
                var newNote2 = new NoteModel()
                {
                    Body      = "Notita mea numarul 1",
                    StudentId = 3,
                    SubjectId = 2,
                    Titlu     = "Notita 1"
                };
                var newNote3 = new NoteModel()
                {
                    Body      = "Notita mea numarul 2",
                    StudentId = 2,
                    SubjectId = 2,
                    Titlu     = "Notita 2"
                };

                await _bll.NoteRepository.InsertAsync(newNote1);

                await _bll.NoteRepository.InsertAsync(newNote2);

                await _bll.NoteRepository.InsertAsync(newNote3);

                await _ctx.SaveChangesAsync();
            }

            if (!_ctx.Prezenta.Any())
            {
                Console.WriteLine("seeding notes ...");

                var newPrezenta1 = new PrezentaModel()
                {
                    Data      = new DateTime(),
                    StudentId = 2,
                    SubjectId = 1,
                };
                var newPrezenta2 = new PrezentaModel()
                {
                    Data      = new DateTime(),
                    StudentId = 3,
                    SubjectId = 1,
                };

                await _bll.PrezentaRepository.InsertAsync(newPrezenta1);

                await _bll.PrezentaRepository.InsertAsync(newPrezenta2);

                await _ctx.SaveChangesAsync();
            }
        }
        private async Task <ClaimsIdentity> GetClaimsIdentity(string userName, string password, UniversityUserModel user)
        {
            if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
            {
                if (user != null)
                {
                    if (await _userManager.CheckPasswordAsync(user, password))
                    {
                        return(await Task.FromResult(await _jwtFactory.GenerateClaimsIdentity(user)));
                    }
                }
            }

            return(await Task.FromResult <ClaimsIdentity>(null));
        }