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)); }
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)); }
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"); }
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 }); }