public async Task <IActionResult> Edit(int id) { var nalog = await _db.KorisnickiNalozi.FindAsync(id); var pass = Autentifikacija.GenerateRandomPassword(); var model = new KorisnickiNalogVM() { OsobaId = nalog.KorisnickiNalogId, KorisnickiNalogId = nalog.KorisnickiNalogId, UlogaKorisnika = nalog.UlogaKorisnika, KorisnickoIme = nalog.KorisnickoIme, Aktivan = nalog.Aktivan, Lozinka = pass, SendEmail = true, EmailBody = MyEmailHelper.GetKorisnickiPodatciEditEmailBody() }; return(PartialView("_Edit", model)); }
public async Task <IActionResult> Create(KorisnickiNalogVM model) { if (!ModelState.IsValid) { return(PartialView("_Create", model)); } var prom = await _db.Osobe.Where(w => w.OsobaId == model.OsobaId) .Select(s => new { osoba = s, kandidat = s.Kandidat != null, zaposlenik = s.Zaposlenik != null }) .SingleOrDefaultAsync(); if (!(prom.kandidat || prom.zaposlenik)) { return(BadRequest("Osoba mora biti ili kandidat ili zaposlenik da bi se promovisala!")); } var logedNalog = await HttpContext.GetLogiraniKorisnik(); if (model.UlogaKorisnika < UlogeKorisnika.Kandidat && logedNalog.UlogaKorisnika > UlogeKorisnika.Direktor) { return(BadRequest(new { alert = new Alert(Severity.warning, $"Nema pravo da dodjeli ulogu {model.UlogaKorisnika}.", logedNalog.UlogaKorisnika.ToString(), false) })); } // generate a 128-bit salt using a secure PRNG byte[] salt = new byte[128 / 8]; using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); } KorisnickiNalog nalog = new KorisnickiNalog() { KorisnickiNalogId = model.OsobaId, KorisnickoIme = model.KorisnickoIme, Aktivan = model.Aktivan, UlogaKorisnika = model.UlogaKorisnika, LozinkaSalt = Convert.ToBase64String(salt), LozinkaHash = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: model.Lozinka, salt: salt, prf: KeyDerivationPrf.HMACSHA1, iterationCount: 10000, numBytesRequested: 256 / 8)) }; try { Severity status = Severity.success; string detailsMessage = "Uspješno "; if (model.KorisnickiNalogId != 0) { nalog.KorisnickiNalogId = model.KorisnickiNalogId; _db.KorisnickiNalozi.Attach(nalog); var entry = _db.Entry(nalog); entry.State = EntityState.Modified; entry.Property(p => p.LozinkaHash).IsModified = model.IzmjenaLozinke; entry.Property(p => p.LozinkaSalt).IsModified = model.IzmjenaLozinke; detailsMessage += "editovan."; } else { _db.KorisnickiNalozi.Add(nalog); detailsMessage += "dodan u bazu."; } await _db.SaveChangesAsync(); if (model.SendEmail) { var emailBody = model.EmailBody.Replace("{lozinkaPolje}", model.Lozinka); try { MyEmailHelper email = new MyEmailHelper(_config) { Subject = "Obavjest-CZE Portala", Recipient = prom.osoba, Body = emailBody }; email.SendEmailKorisnickiPodatci(); detailsMessage += "\n ; Email poslan korisniku."; } catch (Exception) { status = Severity.warning; detailsMessage += "\n ; Email nije poslan korisniku."; } } return(RedirectToAction("QuickDetails", "Osoba", new { area = "AdministrativniRadnik", id = model.OsobaId })); } catch (Exception e) { return(BadRequest("Došlo je do greške prilikom snimanja podatka u bazu.; " + e.Message)); } }