public async Task <ProviderDisplayModel> Get(string slug, string languageCode = null) { var entity = await _repositoryProvider.GetFirst(x => x.Slug == slug.ToLowerInvariant() && x.State == MREntityState.Active); if (entity == null) { throw new MRException <ProviderDisplayModel>((int)ExceptionCode.NOT_FOUND, "Provider not found"); } var result = _mapper.Map <ProviderDisplayModel>(entity); result.Categories = new List <CategoryDisplayModel>(); result.Name = entity.Name.SelectTranslation(languageCode)?.Value; result.Description = entity.Description.SelectTranslation(languageCode)?.Value; var categoryIds = entity.Categories?.Select(x => x.Id).ToList() ?? new List <string>(); if (categoryIds != null && categoryIds.Any()) { var categories = (await _repositoryCategory.GetIn(x => x.Id, categoryIds)) .Where(x => x.State == MREntityState.Active); foreach (var cat in categories) { var cName = cat.Name.SelectTranslation(languageCode)?.Value; result.Categories.Add(new CategoryDisplayModel { CreateTime = cat.CreateTime, Id = cat.Id, LanguageCode = languageCode, Name = cName }); } } return(result); }
public async Task <UserStatusModel> SignIn(UserSignInModel model) { var user = await _managerUser.FindByEmailAsync(model.Email); if (user == null || !await _managerUser.CheckPasswordAsync(user, model.Password)) { _eNotFound <UserStatusModel>("User not found"); } var userRoles = await _managerUser.GetRolesAsync(user); var token = _serviceToken.GenerateToken(user.Id, user.Email, userRoles); UserLoginInfo li = null; string callbackToken = null; if (!string.IsNullOrWhiteSpace(model.ProviderSlug)) { var provider = await _repositoryProvider.GetFirst(x => x.Slug == model.ProviderSlug && x.State == MREntityState.Active); if (provider != null && provider.Options.IsEnabled) { li = new UserLoginInfo(provider.Id, token, provider.Slug); _serviceToken.GenerateToken("SOME_SECRET_KEY", "MR_IDENTITY", "SOME_PROVIDER", 60, new List <Tuple <string, string> > { new Tuple <string, string>("provider.id", provider.Id), new Tuple <string, string>("user.id", user.Id) }, "name", "password"); callbackToken = ProviderTokenGenerator.Generate(provider.Id, user.Id); } } if (li == null) { li = new UserLoginInfo(_tokenOptions.Issuer, token, _tokenOptions.Issuer); } if (await _managerUser.FindByLoginAsync(li.LoginProvider, li.ProviderKey) != null) { await _managerUser.RemoveLoginAsync(user, li.LoginProvider, li.ProviderKey); } await _managerUser.AddLoginAsync(user, li); var isEmailOnChange = await _repositoryEmailChangeUnit.Any(x => x.State == MREntityState.Active && x.UserId == user.Id && x.Status == Infrastructure.Entity.Enum.EmailChangeResult.NEW); _logger.LogInformation($"User login"); return(new UserStatusModel { FirstName = user.FirstName, LastName = user.LastName, Roles = userRoles.ToList(), AccessToken = token, LanguageCode = user.LanguageCode, Email = user.Email, Sex = user.Sex, IsEmailConfirmed = user.IsEmailConfirmed, IsEmailOnChange = isEmailOnChange, CallbackUrl = model.CallbackUrl, CallbackToken = callbackToken }); }