public IActionResult Prijava(LoginViewModel vm)
        {
            // provjeriti i za mail!
            Korisnik korisnik = db.Korisnici.Include(x => x.Osoba).Where(x => x.KorisnickoIme == vm.LoginData || x.Osoba.Email == vm.LoginData).FirstOrDefault();

            if (korisnik == null)
            {
                ModelState.AddModelError("", "Korisnicko ime ili lozinka nisu tacni");
            }
            else
            {
                if (!Sigurnost.DaLiSePodudaraju(korisnik.LozinkaHash, vm.Password))
                {
                    ModelState.AddModelError("", "Korisnicko ime ili lozinka nisu tacni");
                }
            }
            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            Autentifikacija.PokreniNovuSesiju(korisnik, httpContext.HttpContext);

            korisnik.DatumZadnjePrijave = DateTime.Now;
            db.Korisnici.Update(korisnik);
            db.SaveChanges();

            if (!korisnik.PromijenioLozinku)
            {
                return(RedirectToAction("Lozinka", "Racun"));
            }
            return(RedirectToAction("Index", "Home"));
        }
        public IActionResult Dodaj(KorisniciDodajViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(GetDefaultViewModel(model)));
            }

            Osoba osoba = model.Osoba;

            db.Osobe.Add(osoba);

            Korisnik korisnik = model.Korisnik;

            korisnik.KorisnikID = osoba.OsobaID;

            string lozinka = Sigurnost.GenerisiPassword(10, false);

            korisnik.LozinkaHash       = Sigurnost.GenerisiHash(lozinka);
            korisnik.DatumRegistracije = DateTime.Now;
            korisnik.Aktivan           = true;
            korisnik.PromijenioLozinku = false;

            string poruka = $"Poštovani {osoba.Ime} {osoba.Prezime}, na sistem se možete logovati sa sljedećim podacima:\nEmail: [<strong>{osoba.Email}</strong>]\nLozinka: [<strong>{lozinka}</strong>]\n\nNapomena: Prilikom prvog logiranja morate promijeniti vašu lozinku.";

            emailSender.SendEmailAsync(osoba.Email, "Pristupni podaci", poruka);

            if (model.TipKorisnika == TipKorisnika.Administrator)
            {
                korisnik.IsAdmin      = true;
                korisnik.IsClanUprave = korisnik.IsPoslovodja = false;
            }
            else if (model.TipKorisnika == TipKorisnika.Poslovodja)
            {
                korisnik.IsPoslovodja = true;
                korisnik.IsAdmin      = korisnik.IsClanUprave = false;
            }
            else
            {
                korisnik.IsClanUprave = true;
                korisnik.IsPoslovodja = korisnik.IsAdmin = false;
            }

            db.Korisnici.Add(korisnik);
            db.SaveChanges();

            return(RedirectToAction(nameof(Index)));
        }
        public IActionResult Lozinka(RacunLozinkaViewModel viewModel)
        {
            if (viewModel.PotvrdaLozinke != viewModel.Lozinka)
            {
                ModelState.AddModelError("", "Lozinke se ne podudaraju");
            }

            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            Korisnik korisnik = httpContext.HttpContext.Session.GetJson <Korisnik>(Konfiguracija.LogiraniKorisnik);

            korisnik.PromijenioLozinku = true;
            korisnik.LozinkaHash       = Sigurnost.GenerisiHash(viewModel.Lozinka);

            db.Korisnici.Update(korisnik);
            db.SaveChanges();

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