using System; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using SharpRSS.API.Cryptography; using SharpRSS.API.Models; using SharpRSS.API.Models.Auth; using ToolQit; using ToolQit.Logging; namespace SharpRSS.API.Data { public class AuthService { public AuthService(IConfiguration configuration) { _configuration = configuration; _log = LogManager.CreateLogger(typeof(AuthService)); _log.Information("Setting up service..."); } private readonly IConfiguration _configuration; private readonly ILog _log; public async Task> CreateUser(UserRequest userRequest) { bool result = false; await using DbAccess access = new DbAccess(_configuration); var user = access.Users.FirstOrDefault(u => u.UserName == userRequest.UserName); if (user != null) return new Result(user, message:"User name already exists!"); byte[] hashedPwdBytes = Hasher.HashPassword(userRequest.Password, out byte[] salt); user = new User() { UserName = userRequest.UserName, Mail = userRequest.EMail, Password = hashedPwdBytes, Salt = salt }; access.Users.Add(user); try { int entries = await access.SaveChangesAsync(); result = entries > 0; } catch (Exception e) { _log.Error(e, "Error creating user: {UserName}", user.UserName); return new Result(user, message: "Could not create user!"); } return new Result(user, result); } } }