Пример #1
0
        public IActionResult SaveProfil(UserChoiceViewModel userChoice)
        {
            Preference p = new Preference();

            p.AgeMax = (short)userChoice.Age;
            p.AgeMin = 18;

            AspNetUser user = _context.AspNetUsers.Where(b => b.UserName == userChoice.UserName).SingleOrDefault();

            p.Id          = user.Id;
            p.SexualityId = userChoice.SexualityId;
            _context.Preferences.Add(p);

            PreferenceReligion prefReligion = new PreferenceReligion();

            prefReligion.ReligionId   = userChoice.ReligionId;
            prefReligion.PreferenceId = p.PreferenceId;
            p.PreferenceReligions.Add(prefReligion);

            PreferenceCorpulence prefCorpulence = new PreferenceCorpulence();

            prefCorpulence.CorpulenceId = userChoice.CorpulenceId;
            prefCorpulence.PreferenceId = p.PreferenceId;
            p.PreferenceCorpulences.Add(prefCorpulence);

            PreferenceHairColor preferenceHairColor = new PreferenceHairColor();

            preferenceHairColor.HairColorId  = userChoice.HairColorId;
            preferenceHairColor.PreferenceId = p.PreferenceId;
            p.PreferenceHairColors.Add(preferenceHairColor);

            PreferenceHairSize preferenceHairSize = new PreferenceHairSize();

            preferenceHairSize.HairSizeId   = userChoice.HairSizeId;
            preferenceHairSize.PreferenceId = p.PreferenceId;
            p.PreferenceHairSizes.Add(preferenceHairSize);

            PreferenceStyle preferenceStyle = new PreferenceStyle();

            preferenceStyle.StyleId      = userChoice.StyleId;
            preferenceStyle.PreferenceId = p.PreferenceId;
            p.PreferenceStyles.Add(preferenceStyle);

            try
            {
                _context.SaveChanges();
            }
            catch (Exception)
            {
                return(BadRequest());
            }

            return(NoContent());
        }
Пример #2
0
        // Permet d'afficher l'inscription avec plusieurs données
        public async Task <IActionResult> SignUp()
        {
            string accessToken = await HttpContext.GetTokenAsync("access_token");

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            string sexes = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/Sex");

            string corpulences = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/corpulences");

            string hairSize = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/hairSize");

            string hairColor = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/hairColor");

            string sexuality = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/sexuality");

            string styles = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/styles");

            string religions = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/religions");

            List <Religion>   resultReligion    = JsonConvert.DeserializeObject <List <Religion> >(religions);
            List <Sex>        resultSexes       = JsonConvert.DeserializeObject <List <Sex> >(sexes);
            List <Corpulence> resultCorpulences = JsonConvert.DeserializeObject <List <Corpulence> >(corpulences);
            List <HairColor>  resultHairColors  = JsonConvert.DeserializeObject <List <HairColor> >(hairColor);
            List <HairSize>   resultHairSizes   = JsonConvert.DeserializeObject <List <HairSize> >(hairSize);
            List <Sexuality>  resultSexualities = JsonConvert.DeserializeObject <List <Sexuality> >(sexuality);
            List <Style>      resultStyle       = JsonConvert.DeserializeObject <List <Style> >(styles);

            ViewData["sexes"]       = resultSexes;
            ViewData["corpulences"] = resultCorpulences;
            ViewData["hairColors"]  = resultHairColors;
            ViewData["hairSizes"]   = resultHairSizes;
            ViewData["sexualities"] = resultSexualities;
            ViewData["styles"]      = resultStyle;
            ViewData["religions"]   = resultReligion;

            string ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();

            _logger.LogInformation("A User is trying to sign up with ip : " + ip);
            UserTrace trace = new UserTrace
            {
                Logdate     = DateTime.Now,
                Ipadress    = ip,
                Pagevisited = "SignUp : A User is trying to sign up"
            };

            _context.UserTraces.Add(trace);
            _context.SaveChanges();

            return(View());
        }
Пример #3
0
        public async Task <IActionResult> PutContactRequest(short id, ContactRequest contactRequest)
        {
            if (id != contactRequest.RequestId)
            {
                return(BadRequest());
            }

            _context.Entry(contactRequest).State = EntityState.Modified;

            try
            {
                _context.SaveChanges();
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ContactRequestExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Пример #4
0
        public async Task <IActionResult> Like([FromBody] string username)
        {
            string accessToken = await HttpContext.GetTokenAsync("access_token");

            AspNetUser user   = null;
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            string userString = await client.GetStringAsync(Configuration["URLAPI"] + "api/Account/getUserInfo");

            user = JsonConvert.DeserializeObject <AspNetUser>(userString);
            UserLike   ul        = new UserLike();
            AspNetUser userLiked = _context.AspNetUsers.Where(d => d.UserName == username).Single();

            ul.Id      = user.Id;
            ul.Id1     = userLiked.Id;
            ul.Ignored = false;

            try
            {
                //cherche si il existe une conversation entre les deux personnes
                Talk talk = _context.Talks.Where(t => t.Id == user.Id && t.IdUser2Talk == userLiked.Id).SingleOrDefault();
                if (talk == null)
                {
                    talk = _context.Talks.Where(t => t.Id == userLiked.Id && t.IdUser2Talk == user.Id).SingleOrDefault();
                }
                //crée une conversation si la conversation n'existe pas
                if (talk == null)
                {
                    Talk newtalk = new Talk {
                        Id = user.Id, IdUser2Talk = userLiked.Id, TalkName = user.NormalizedUserName + userLiked.NormalizedUserName
                    };
                    _context.Talks.Add(newtalk);
                    await _context.SaveChangesAsync();
                }
                _context.UserLikes.Add(ul);
                _context.SaveChanges();
                return(Ok());
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
Пример #5
0
        public async Task <IActionResult> PostPicture(List <IFormFile> files)
        {
            string id = "";

            try
            {
                // Il faut utiliser le Claim pour retrouver l'identifiant de l'utilisateur
                id = User.Claims.Where(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").SingleOrDefault().Value;
            }
            catch (Exception)
            {
                return(BadRequest());
            }

            string userName = await _context.AspNetUsers.Where(a => a.Id == id).Select(a => a.UserName).SingleOrDefaultAsync();

            try
            {
                string folder = "Upload";
                foreach (var file in files)
                {
                    if (file.Length > 0)
                    {
                        if (!Directory.Exists(Path.Combine(_environnement.WebRootPath, folder)))
                        {
                            Directory.CreateDirectory(Path.Combine(_environnement.WebRootPath, folder));
                        }

                        string filename = userName + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss") + file.FileName;
                        using (FileStream fileStream = System.IO.File.Create(Path.Combine(_environnement.WebRootPath, folder, filename)))
                        {
                            file.CopyTo(fileStream);
                            fileStream.Flush();
                            _context.Pictures.Add(new Picture {
                                Id = id, PictureView = folder + "/" + filename
                            });
                            _context.SaveChanges();
                        }
                    }
                }
                return(Ok());
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
Пример #6
0
        public async Task <ActionResult <Ad> > PostAd(AdPost adPost)
        {
            string folder = "Ads";

            AdInput ad = new AdInput();

            ad.Id          = adPost.Id;
            ad.Titre       = adPost.Titre;
            ad.Description = adPost.Description;
            ad.Link        = adPost.Link;

            byte[]    data   = Convert.FromBase64String(adPost.file);
            var       stream = new MemoryStream(data);
            IFormFile file   = new FormFile(stream, 0, data.Length, adPost.name, adPost.fileName)
            {
                Headers            = new HeaderDictionary(),
                ContentType        = adPost.ContentType,
                ContentDisposition = adPost.ContentDisposition
            };

            ad.file = file;

            if (ad.file.Length > 0)
            {
                if (!Directory.Exists(Path.Combine(_environnement.WebRootPath, folder)))
                {
                    Directory.CreateDirectory(Path.Combine(_environnement.WebRootPath, folder));
                }

                string filename = "_ad" + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss_") + ad.file.FileName;
                using (FileStream fileStream = System.IO.File.Create(Path.Combine(_environnement.WebRootPath, folder, filename)))
                {
                    ad.file.CopyTo(fileStream);
                    fileStream.Flush();
                    _context.Ads.Add(new Ad {
                        Id = ad.Id, Titre = ad.Titre, Description = ad.Description, AdView = folder + "/" + filename, Link = ad.Link
                    });
                    _context.SaveChanges();
                }

                await _context.SaveChangesAsync();
            }

            return(CreatedAtAction("GetAd", new { id = ad.Id }, ad));
        }
Пример #7
0
        public async Task <ActionResult> QuizSubmit(int[] answer)
        {
            string accessToken = await HttpContext.GetTokenAsync("access_token");

            AspNetUser user   = null;
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            //Récupération de l'utilisateur courant
            string userString = await client.GetStringAsync(Configuration["URLAPI"] + "api/Account/getUserInfo");

            user = JsonConvert.DeserializeObject <AspNetUser>(userString);

            int query = (from item in answer
                         group item by item into g
                         orderby g.Count() descending
                         select g.Key).First();

            UserProfil userProfil = new UserProfil();

            userProfil.ProfilId = (short)query;
            userProfil.Id       = user.Id;

            user.QuizCompleted = true;

            try
            {
                _context.AspNetUsers.Update(user);

                _context.UserProfils.Add(userProfil);
                _context.SaveChanges();

                return(NoContent());
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
Пример #8
0
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new LoveMirroringContext(
                       serviceProvider.GetRequiredService <DbContextOptions <LoveMirroringContext> >()))
            {
                // Look for any board games.
                if (!context.Sexes.Any())
                {
                    context.Sexes.AddRange(
                        new Sex
                    {
                        SexeId   = 1,
                        SexeName = "Masculin"
                    },
                        new Sex
                    {
                        SexeId   = 2,
                        SexeName = "Féminin"
                    });
                }

                context.SaveChanges();
            }
        }
Пример #9
0
        public async Task <IActionResult> Login(LoginInputModel model, string button)
        {
            // check if we are in the context of an authorization request
            var context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);

            // the user clicked the "cancel" button
            if (button != "login")
            {
                if (context != null)
                {
                    // if the user cancels, send a result back into IdentityServer as if they
                    // denied the consent (even if this client does not require consent).
                    // this will send back an access denied OIDC error response to the client.
                    await _interaction.GrantConsentAsync(context, ConsentResponse.Denied);

                    // we can trust model.ReturnUrl since GetAuthorizationContextAsync returned non-null
                    if (await _clientStore.IsPkceClientAsync(context.ClientId))
                    {
                        // if the client is PKCE then we assume it's native, so this change in how to
                        // return the response is for better UX for the end user.
                        return(this.LoadingPage("Redirect", model.ReturnUrl));
                    }

                    return(Redirect(model.ReturnUrl));
                }
                else
                {
                    // since we don't have a valid context, then we just go back to the home page
                    return(Redirect("~/"));
                }
            }

            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberLogin, lockoutOnFailure : true);


                if (result.Succeeded)
                {
                    string ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
                    _logger.LogInformation("A User signs in with ip : " + ip);

                    string    userId = _LMcontext.AspNetUsers.Where(u => u.UserName == model.Username).Select(u => u.Id).SingleOrDefault();
                    UserTrace trace  = new UserTrace
                    {
                        Logdate     = DateTime.Now,
                        Ipadress    = ip,
                        Pagevisited = "Login : A User signs in ",
                        Id          = userId
                    };
                    _LMcontext.UserTraces.Add(trace);
                    _LMcontext.SaveChanges();

                    var user = await _userManager.FindByNameAsync(model.Username);

                    var resultEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);

                    if (!resultEmailConfirmed)
                    {
                        throw new Exception("Le mail doit être validé");
                    }

                    var resultPhoneConfirmed = await _userManager.IsPhoneNumberConfirmedAsync(user);

                    if (!resultPhoneConfirmed)
                    {
                        return(Redirect("~/Account/VerifyPhone"));
                    }

                    await _events.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id, user.UserName, clientId : context?.ClientId));

                    if (context != null)
                    {
                        if (await _clientStore.IsPkceClientAsync(context.ClientId))
                        {
                            // if the client is PKCE then we assume it's native, so this change in how to
                            // return the response is for better UX for the end user.
                            return(this.LoadingPage("Redirect", model.ReturnUrl));
                        }

                        // we can trust model.ReturnUrl since GetAuthorizationContextAsync returned non-null
                        return(Redirect(model.ReturnUrl));
                    }

                    // request for a local page
                    if (Url.IsLocalUrl(model.ReturnUrl))
                    {
                        return(Redirect(model.ReturnUrl));
                    }
                    else if (string.IsNullOrEmpty(model.ReturnUrl))
                    {
                        return(Redirect("~/"));
                    }
                    else
                    {
                        // user might have clicked on a malicious link - should be logged
                        throw new Exception("invalid return URL");
                    }
                }

                if (result.IsLockedOut)
                {
                    ApplicationUser user = await _userManager.FindByNameAsync(model.Username);

                    ViewData["Lockout"] = await _userManager.GetLockoutEndDateAsync(user);

                    return(View("Banned"));
                }

                await _events.RaiseAsync(new UserLoginFailureEvent(model.Username, "invalid credentials", clientId : context?.ClientId));

                ModelState.AddModelError(string.Empty, AccountOptions.InvalidCredentialsErrorMessage);
            }

            // something went wrong, show form with error
            var vm = await BuildLoginViewModelAsync(model);

            return(View(vm));
        }
Пример #10
0
        public async Task <IActionResult> UpdateSong([FromBody] string songname)
        {
            AspNetUser user        = null;
            string     accessToken = await HttpContext.GetTokenAsync("access_token");

            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            // Récurération des données et convertion des données dans le bon type
            string content = await client.GetStringAsync(Configuration["URLAPI"] + "api/Account/getUserInfo");

            user = JsonConvert.DeserializeObject <AspNetUser>(content);
            Preference p = _context.Preferences
                           .Include(x => x.PreferenceMusics)
                           .Where(x => x.Id == user.Id)
                           .SingleOrDefault();

            PreferenceMusic pM = p.PreferenceMusics.FirstOrDefault();
            UserMusic       currentUserMusic = _context.UserMusics.Where(x => x.Id == user.Id).SingleOrDefault();

            string[] song  = songname.Split('-');
            Music    music = new Music();

            music.MusicName  = song[0];
            music.ArtistName = song[1];

            Music search = _context.Musics.Where(x => x.MusicName.Equals(music.MusicName)).SingleOrDefault();

            if (search == null)
            {
                _context.Musics.Add(music);
                _context.SaveChanges();
            }
            else
            {
                music = search;
            }

            try
            {
                _context.PreferenceMusics.Remove(pM);
                _context.UserMusics.Remove(currentUserMusic);
                _context.SaveChanges();
                pM.MusicId = music.MusicId;

                _context.PreferenceMusics.Add(pM);

                UserMusic userMusic = new UserMusic();
                userMusic.Id      = user.Id;
                userMusic.MusicId = music.MusicId;
                _context.UserMusics.Add(userMusic);

                _context.SaveChanges();

                return(Ok());
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
Пример #11
0
        private async Task <ApplicationUser> AutoProvisionUserAsync(string provider, string providerUserId, IEnumerable <Claim> claims)
        {
            // create a list of claims that we want to transfer into our store
            var filtered = new List <Claim>();

            // user's display name
            var name = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Name)?.Value ??
                       claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;

            if (name != null)
            {
                filtered.Add(new Claim(JwtClaimTypes.Name, name));
            }
            else
            {
                var first = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.GivenName)?.Value ??
                            claims.FirstOrDefault(x => x.Type == ClaimTypes.GivenName)?.Value;
                var last = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.FamilyName)?.Value ??
                           claims.FirstOrDefault(x => x.Type == ClaimTypes.Surname)?.Value;
                if (first != null && last != null)
                {
                    filtered.Add(new Claim(JwtClaimTypes.Name, first + " " + last));
                }
                else if (first != null)
                {
                    filtered.Add(new Claim(JwtClaimTypes.Name, first));
                }
                else if (last != null)
                {
                    filtered.Add(new Claim(JwtClaimTypes.Name, last));
                }
            }

            HttpClient client = new HttpClient();
            // email
            var email = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Email)?.Value ??
                        claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value;

            if (email != null)
            {
                filtered.Add(new Claim(JwtClaimTypes.Email, email));
            }

            short sexeId = 0;

            if (claims.FirstOrDefault(x => x.Type.Contains("gender")).Value.Contains("male"))
            {
                sexeId = 1;
            }
            else
            {
                sexeId = 2;
            }

            var user = new ApplicationUser
            {
                UserName          = ("fb" + claims.FirstOrDefault(x => x.Type.Contains("givenname")).Value + claims.FirstOrDefault(x => x.Type.Contains("surname")).Value).ToLower(),
                Sexeid            = sexeId,
                Birthday          = DateTime.ParseExact(claims.FirstOrDefault(x => x.Type.Contains("dateofbirth")).Value, "MM/dd/yyyy", null),
                Email             = claims.FirstOrDefault(x => x.Type.Contains("email")).Value,
                HairColorId       = 1,
                CorpulenceId      = 1,
                HairSizeId        = 1,
                SexualityId       = 1,
                ReligionId        = 1,
                EmailConfirmed    = true,
                LastName          = claims.FirstOrDefault(x => x.Type.Contains("surname")).Value,
                Firstname         = claims.FirstOrDefault(x => x.Type.Contains("givenname")).Value,
                AccountCompleted  = false,
                IsFacebookAccount = true
            };

            int cptUser = _context.AspNetUsers.Where(x => x.UserName.Contains(user.UserName)).Count();

            if (cptUser != 0)
            {
                user.UserName += (cptUser + 1).ToString();
            }

            user.UserName = RemoveSpecialCharacters(user.UserName);
            var identityResult = await _userManager.CreateAsync(user);

            if (!identityResult.Succeeded)
            {
                throw new Exception(identityResult.Errors.First().Description);
            }

            UserStyle userStyle = new UserStyle();

            userStyle.Id      = user.Id;
            userStyle.StyleId = 1;

            AspNetUserRole aspNetUserRole = new AspNetUserRole();

            aspNetUserRole.UserId = user.Id;
            aspNetUserRole.RoleId = "Utilisateur";

            _context.AspNetUserRoles.Add(aspNetUserRole);
            _context.UserStyles.Add(userStyle);
            _context.SaveChanges();


            if (filtered.Any())
            {
                identityResult = await _userManager.AddClaimsAsync(user, filtered);

                if (!identityResult.Succeeded)
                {
                    throw new Exception(identityResult.Errors.First().Description);
                }
            }

            identityResult = await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, providerUserId, provider));

            if (!identityResult.Succeeded)
            {
                throw new Exception(identityResult.Errors.First().Description);
            }

            return(user);
        }