Esempio n. 1
0
        public string Login(UserP user)
        {
            //Creating token - First creating claims
            var claims = new[] {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Email, user.Mail)
            };

            //Getting the security key
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));

            //Generating the Signing credential for signing tokens
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                NotBefore          = DateTime.Now,
                Expires            = DateTime.Now.AddHours(1),
                SigningCredentials = creds
            };

            var tokenHandler = new JwtSecurityTokenHandler();
            var token        = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }
Esempio n. 2
0
        public async Task <IActionResult> Register(UserP user)
        {
            user.Mail = user.Mail.ToLower();
            if (await _Auth.IsUserRegistered(user.Mail))
            {
                return(BadRequest("User already exist"));
            }
            await _Auth.Register(user);

            return(StatusCode(201));
        }
Esempio n. 3
0
        public async Task <string> Register(UserP userP)
        {
            byte[] passwordHash, passwordSalt;
            CreatePasswordHash(userP.password, out passwordHash, out passwordSalt);
            User user = new User
            {
                Mail         = userP.Mail,
                Name         = userP.Name,
                PasswordHash = passwordHash,
                PasswordSalt = passwordSalt
            };

            await _DaoUser.SaveUser(user);

            return("Created");
        }
Esempio n. 4
0
        private UserViewModel DoWork(UserP selectedUser, bool pearson, int minRatings)
        {
            List <UserP> otherUsers = _context.UsersP
                                      .Include(x => x.Ratings)
                                      .ThenInclude(r => r.Movie)
                                      .Where(x => x.Id != selectedUser.Id)
                                      .ToList();

            var similarUsers = new List <UserViewModel>();

            foreach (var user in otherUsers)
            {
                var similarUser = new UserViewModel(user);
                // Calc similarity score
                if (pearson)
                {
                    similarUser.Distance.Score = user.CalcPearson(selectedUser, minRatings);
                }
                else
                {
                    similarUser.Distance.Score = user.CalcEuclidean(selectedUser, minRatings);
                }

                // Only include users with similarity of more than 0 in the calculations
                if (similarUser.Distance.Score < 0)
                {
                    continue;
                }

                // Only process the movies not seen by the selected user
                var ratings = user.Ratings.Where(x => selectedUser.Ratings.All(y => y.MovieId != x.MovieId));
                foreach (var rating in ratings)
                {
                    // Calc weighted movie score (similarity * rating)
                    similarUser.Distance.Movies.Add(new MovieViewModel()
                    {
                        MovieId = rating.MovieId,
                        Title   = rating.Movie.Title,
                        Score   = similarUser.Distance.Score * rating.Score,
                    });
                }
                similarUsers.Add(similarUser);
            }

            // Sum all weighted movie score
            // Sum user similarity for each movie
            var movierecDistance = similarUsers.SelectMany(u => u.Distance.Movies)
                                   .GroupBy(m => new { m.MovieId, m.Title })
                                   .Select(x => new MovieViewModel()
            {
                MovieId         = x.Key.MovieId,
                Title           = x.Key.Title,
                Score           = x.Sum(s => s.Score), // Sum weighted movie score
                SimilarityScore = similarUsers         // Sum similarity score
                                  .Where(u => u.Distance.Movies.Any(m => m.MovieId == x.Key.MovieId))
                                  .Sum(s => s.Distance.Score),
            }).ToList();

            var d = new DistanceMetric()
            {
                SimilarUsers = similarUsers
                               .Select(x => new UserViewModel()
                {
                    Score = x.Distance.Score
                })
                               .OrderByDescending(x => x.Score)
                               .Take(3).ToList(),
                Movies = movierecDistance
                         .Select(x => new MovieViewModel()
                {
                    MovieId = x.MovieId,
                    Title   = x.Title,
                    Score   = x.Score / x.SimilarityScore
                })
                         .OrderByDescending(x => x.Score)
                         .Take(3).ToList()
            };

            return(new UserViewModel()
            {
                Id = selectedUser.Id,
                Name = selectedUser.Name,
                Distance = d
            });
        }