Пример #1
0
        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));
        }
Пример #2
0
        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));
            }
        }