예제 #1
0
        private void ValidirajUpdateSliku(int id, Fajl Slika)
        {
            UserException exception = new UserException();

            Igrac igrac = db.Igraci.Find(id);

            if (igrac == null)
            {
                exception.AddError(nameof(Igrac), "Igrac ne smije biti null.");
            }

            if (Slika == null)
            {
                exception.AddError(nameof(Slika), "Morate uploadat sliku.");
            }

            if (!IsDozvoljenTip(Slika))
            {
                exception.AddError(nameof(Slika), "Nedozovljen format fajla. Mozete uploadati samo slike.");
            }

            if (exception.Errori.Count > 0)
            {
                throw exception;
            }
        }
예제 #2
0
        public async Task <Users> Login(Login obj)
        {
            var korisnik = await usermanager.FindByEmailAsync(obj.UserName);

            if (korisnik == null)
            {
                UserException ex = new UserException();
                ex.AddError("", "Neispravni podaci za login");
                throw ex;
            }

            var igrac = db.Igraci.Find(korisnik.Id);

            var rezultat = await signinmanager.CheckPasswordSignInAsync(korisnik, obj.Password, false);

            if (rezultat.IsLockedOut)
            {
                TimeSpan t = (korisnik.LockoutEnd - DateTime.Now) ?? default(TimeSpan);
                throw new Exception("Vaš profil je zaključan još " + t.Minutes + " minuta i " + t.Seconds + " sekundi.");
            }
            else if (rezultat.Succeeded)
            {
                var povratni = Get(igrac.ID);
                return(povratni);
            }
            else if (await signinmanager.UserManager.CheckPasswordAsync(korisnik, obj.Password))
            {
                throw new UserException("Morate potvrditi mejl prije logiranja");
            }
            else
            {
                throw new UserException("Korisnik ne postoji");
            }
        }
예제 #3
0
        public async Task <SharedModels.Users> ConfirmPasswordChange(string loggedInUserName, PasswordPromjena obj)
        {
            var user = await usermanager.FindByEmailAsync(loggedInUserName);

            if (user != null)
            {
                if (obj.password != obj.potvrdaPassword)
                {
                    throw new UserException("Passwordi se ne slazu.");
                }

                var rezultat = await usermanager.ResetPasswordAsync(user, obj.token, obj.password);

                if (rezultat.Succeeded)
                {
                    var i = db.Igraci.Find(user.Id);
                    return(mapper.Map <SharedModels.Users>(i));
                }
                else
                {
                    UserException exception = new UserException();

                    foreach (var error in rezultat.Errors)
                    {
                        exception.AddError("", error.Description);
                    }

                    throw exception;
                }
            }
            throw new UserException("User ne postoji u bazi.");
        }
        public bool AuthorizeInsert(int UserId)
        {
            var suspenzija = suspenzijaService.ImaVazecuSuspenziju(UserId, "Kreiranje takmičenja");

            if (suspenzija != null)
            {
                UserException ex = new UserException();
                ex.AddError("Suspenzija", $"Suspendovani ste sa kreiranjem takmičenja do:  {suspenzija.DatumZavrsetka.ToString()}");
                throw ex;
            }
            return(true);
        }
예제 #5
0
        public bool AuthorizeLogin(int userId)
        {
            var suspenzija = suspenzijaServis.ImaVazecuSuspenziju(userId, "Login");

            if (suspenzija != null)
            {
                UserException ex = new UserException();
                ex.AddError("Suspenzija", $"Suspendovani ste sa loginom do {suspenzija.DatumZavrsetka.ToString()}");
                throw ex;
            }
            return(true);
        }
예제 #6
0
        private bool Validiraj(ReportsInsert obj)
        {
            UserException ex = new UserException();

            if (!OdgovarajuciFajlovi(obj.Prilozi))
            {
                ex.AddError(nameof(obj.Prilozi), "Možete uploadovati samo slike");
            }
            if (ex.Errori.Count > 0)
            {
                throw ex;
            }
            return(true);
        }
예제 #7
0
        private void Validiraj(int userId)
        {
            UserException exception = new UserException();

            var user = db.Igraci.Find(userId);

            if (user == null)
            {
                exception.AddError("", "Igrac ne postoji u bazi.");
            }

            var statistika = db.Statistike.Where(s => s.IgracID == userId && s.AkademskaGodina == DateTime.Now.Year).FirstOrDefault();

            if (statistika != null)
            {
                exception.AddError("", "Statistika za ovog igraca i ovu akademsku godinu vec postoji.");
            }

            if (exception.Errori.Count > 0)
            {
                throw exception;
            }
        }
        public void AuthorizePrijava(int UserId, PrijavaInsert obj)
        {
            if (UserId != obj.Igrac1ID && UserId != obj.Igrac2ID)
            {
                throw new AuthorizeException("Niste autorizovani za takvu radnju.");
            }
            var suspenzija = suspenzijaService.ImaVazecuSuspenziju(UserId, "Prijava na takmičenja");

            if (suspenzija != null)
            {
                UserException ex = new UserException();
                ex.AddError("Suspenzija", $"Suspendovani ste sa prijavom na takmičenja do:  {suspenzija.DatumZavrsetka.ToString()}");
                throw ex;
            }
        }
예제 #9
0
        public bool Validiraj(int FeedID)
        {
            UserException ex   = new UserException();
            var           feed = db.Feeds.Where(x => x.ID == FeedID).FirstOrDefault();

            if (feed == null)
            {
                ex.AddError("", "Feed ne postoji ili je obrisan");
            }
            if (ex.Errori.Count > 0)
            {
                throw ex;
            }
            return(true);
        }
예제 #10
0
        public void Validiraj(Database.DTOs.Grad obj)
        {
            UserException ex = new UserException();

            int count = db.Gradovi.Where(x => x.Naziv == obj.Naziv).Count();

            if ((obj.ID == 0 && count > 0) || (obj.ID > 0 && count > 1)) // razlika insert i  update
            {
                ex.AddError("Naziv", "Naziv već postoji");
            }
            if (ex.Errori.Count > 0)
            {
                throw ex;
            }
        }
예제 #11
0
        private void ValidirajUklanjanjeSlike(int id)
        {
            UserException exception = new UserException();

            Igrac igrac = db.Igraci.Find(id);

            if (igrac == null)
            {
                exception.AddError(nameof(Igrac), "Igrac ne smije biti null.");
            }

            if (exception.Errori.Count > 0)
            {
                throw exception;
            }
        }
예제 #12
0
        public async Task <SharedModels.Users> CheckValidanLogin(Login obj)
        {
            var korisnik = await usermanager.FindByEmailAsync(obj.UserName);

            if (korisnik == null)
            {
                UserException ex = new UserException();
                ex.AddError("", "Neispravni podaci za login");
                throw ex;
            }
            var igrac    = db.Igraci.Find(korisnik.Id);
            var rezultat = await usermanager.CheckPasswordAsync(korisnik, obj.Password);

            if (rezultat)
            {
                return(mapper.Map <SharedModels.Users>(igrac));
            }
            return(null);
        }
예제 #13
0
 public SharedModels.Reports Add(ReportsInsert obj, string rootFolder = "content")  // razmisliti da se iz httpcontext. izvuce root path aplikacije kako bi se
 //uploadovo fajl tj da se ovoj metodi posalje taj parametar a ne ovako da ovaj nagadja sa ~/reports
 // kad se stavi ~ frajer napravi folder koji se zove ~ i onda u njemu reports, ne valja, ne moze tako, dakle on po defaultu kad ides create
 //directory pravi u ovom svom folderu gdje se pokrece web api, tako da stavit cu content da je folder a u njega reports, pa tamo za igrace
 //ce biti
 {
     Validiraj(obj);
     using (var transakcija = db.Database.BeginTransaction())
     {
         List <string> bekapPlan = new List <string>();
         try
         {
             //var bazaObj = mapko.Map<Database.DTOs.Report>(obj);
             var bazaObj = new Database.DTOs.Report
             {
                 DatumKreiranja = obj.DatumKreiranja ?? DateTime.Now,
                 Email          = obj.Email,
                 Naslov         = obj.Naslov,
                 Sadrzaj        = obj.Sadrzaj
             };
             bazaObj.Prilozi = new List <Database.DTOs.Attachment>();
             db.Reports.Add(bazaObj);
             db.SaveChanges();
             if (obj.Prilozi != null)
             {
                 foreach (Fajl i in obj.Prilozi)
                 {
                     using (MemoryStream ms = new MemoryStream(i.BinarniZapis))
                     {
                         //valja istraziti tj kako spremiti u zajednicki folder za webapp i webapi
                         Directory.CreateDirectory(Path.Combine(rootFolder, "reports"));
                         string ImeFajla      = Guid.NewGuid().ToString() + "_" + i.Naziv;
                         string pathSpremanja = Path.Combine(rootFolder, "reports", ImeFajla);
                         using (FileStream strim = new FileStream(pathSpremanja, FileMode.Create))
                             ms.CopyTo(strim);
                         bekapPlan.Add(pathSpremanja);
                         Attachment noviAttachment = new Attachment {
                             DatumUnosa = DateTime.Now, Path = pathSpremanja
                         };
                         db.Attachments.Add(noviAttachment);
                         bazaObj.Prilozi.Add(noviAttachment);
                     }
                 }
                 db.SaveChanges();
                 transakcija.Commit();
                 //ovdje treba pozvati email servis i obavijestiti adminsitratora o novom reportu
                 try
                 {
                     emailServis.PosaljiMejlReport(bazaObj);
                 }
                 catch (Exception) { }
                 var povratni = new SharedModels.Reports
                 {
                     ID             = bazaObj.ID,
                     Email          = bazaObj.Email,
                     DatumKreiranja = bazaObj.DatumKreiranja,
                     Naslov         = bazaObj.Naslov,
                     Sadrzaj        = bazaObj.Sadrzaj
                 };
                 //mapko ovdje ne moze osvojit,  zbog problema Prilozi su u klasi database.dtos.reports
                 //tipa list<attachment> dok su u sharedmodels.requests.reportsinsert zbog potrebe prenosa binarnih fajlova u formi list<Fajl>
                 //tako da ovdje svakako ne treba slat fajlove, mada se mogu
                 return(povratni);
             }
         }
         catch (DbUpdateException)
         {
             transakcija.Rollback();
             foreach (string i in bekapPlan)
             {
                 if (System.IO.File.Exists(i))
                 {
                     System.IO.File.Delete(i);
                 }
             }
         }
         UserException ex = new UserException();
         ex.AddError("error", "Došlo je do greške prilikom pohrane fajlova, pokušajte ponovo");
         throw ex;
     }
 }
예제 #14
0
        //*****************************************************
        //              POMOCNE FUNKCIJE
        //*****************************************************
        private void ValidirajDodavanje(int takmicenjeId, PrijavaInsert obj)
        {
            var exception = new UserException();

            var takmicenje = db.Takmicenja.Where(x => x.ID == takmicenjeId).Include(x => x.Vrsta).SingleOrDefault();

            if (takmicenje == null)
            {
                exception.AddError("", "Takmicenje ne postoji u bazi.");
            }

            var igrac1 = db.Igraci.Find(obj.Igrac1ID);
            var igrac2 = db.Igraci.Find(obj.Igrac2ID);

            if (igrac1 == null || (takmicenje != null && takmicenje.Vrsta.Naziv == "Double" && igrac2 == null))
            {
                exception.AddError("", "Igrac ne postoji u bazi.");
            }


            if (takmicenje.RokZavrsetkaPrijave >= DateTime.Now)
            {
                var pi = db.PrijaveIgraci.Where(p => p.Prijava.TakmicenjeID == takmicenjeId && p.IgracID == obj.Igrac1ID).SingleOrDefault();

                if (pi != null)
                {
                    exception.AddError("", "Igrač je već prijavljen na takmičenje.");
                }

                if (obj.Igrac1ID == null)
                {
                    exception.AddError("", "Polje igrač1 je obavezno.");
                }

                if (obj.isTim)
                {
                    var pi2 = db.PrijaveIgraci.Where(p => p.Prijava.TakmicenjeID == takmicenjeId && p.IgracID == obj.Igrac2ID).SingleOrDefault();

                    if (pi2 != null)
                    {
                        exception.AddError("", "Igrač je već prijavljen na takmičenje.");
                    }

                    if (obj.Igrac2ID == null)
                    {
                        exception.AddError("", "Polje igrač2 je obavezno.");
                    }

                    if (obj.Naziv == null)
                    {
                        exception.AddError("", "Polje naziv je obavezno.");
                    }

                    var blokListaIgrac2 = db.BlokListe.Where(x => x.IgracID == obj.Igrac2ID && x.TakmicenjeID == takmicenjeId).SingleOrDefault();
                    if (blokListaIgrac2 != null)
                    {
                        exception.AddError("", "Ovaj igrač je blokiran na ovom takmičenju.");
                    }
                }

                if (obj.Igrac1ID == obj.Igrac2ID && obj.Igrac2ID != null)
                {
                    exception.AddError("", "Ne možete dodati istog igrača kao saigrača.");
                }

                var blokListaIgrac1 = db.BlokListe.Where(x => x.IgracID == obj.Igrac1ID && x.TakmicenjeID == takmicenjeId).SingleOrDefault();

                if (blokListaIgrac1 != null)
                {
                    exception.AddError("", "Blokirani ste na ovom takmičenju.");
                }

                var naziv = obj.isTim ? obj.Naziv : igrac1.PrikaznoIme;

                if (db.Prijave.Where(x => x.TakmicenjeID == takmicenjeId && x.Naziv == naziv).SingleOrDefault() != null)
                {
                    exception.AddError("", "Ime je zauzeto.");
                }

                if (exception.Errori.Count > 0)
                {
                    throw exception;
                }
            }
        }
예제 #15
0
        public async Task <Users> Register(AccountInsert obj)
        {
            if (PostojiPrikaznoIme(obj.PrikaznoIme))
            {
                throw new UserException("Prikazno ime koje ste unijeli je vec zauzeto.");
            }

            var user = new IdentityUser <int>
            {
                UserName = obj.Email,
                Email    = obj.Email
            };

            var result = await usermanager.CreateAsync(user, obj.Password);

            if (result.Succeeded)
            {
                var igrac = new Igrac
                {
                    ID     = user.Id,
                    ELO    = 1000,
                    GradID = obj.GradId,
                    BrojPosjetaNaProfil = 0,
                    JacaRuka            = obj.JacaRuka,
                    PrikaznoIme         = obj.PrikaznoIme,
                    Spol             = obj.Spol,
                    Visina           = obj.Visina,
                    TwoFactorEnabled = false
                };
                if (obj.Slika != null)
                {
                    igrac.ProfileImagePath = "content/igraci/" + ProcesSpremanjaSlike(obj.Slika);
                }

                var userTemp = mapper.Map <SharedModels.Users>(obj);

                if (user.Id != 0)
                {
                    userTemp.ID = user.Id;
                }

                db.Add(igrac);
                db.SaveChanges();

                try
                {
                    var token = await usermanager.GenerateEmailConfirmationTokenAsync(user);

                    mailservis.PosaljiKonfirmacijskiMejl(token, user.Email, "api");
                }
                catch (Exception) {}
                // da imamo logger ovo bi samo loggovalo, posto nemamo nikom nista, ako nije stiglo korisnik posalje
                //zahtjev za ponovno slanje mejla i to je to

                return(userTemp);
            }
            else
            {
                var exception = new UserException();
                foreach (var error in result.Errors)
                {
                    exception.AddError(error.Code, error.Description);
                }
                throw exception;
            }
        }