public async Task <IActionResult> Get([FromBody] IdFormModel model) { var result = new ResultModel(); if (ModelState.IsValid) { var userId = User.GetUserId(); var data = await _db.Channels.Include(i => i.Users).FirstOrDefaultAsync(i => i.Id == model.Id); if (data != null) { // if the user is owner or member of the channel, then let him in if (data.OwnerId == userId || data.Users.Any(i => i.UserId == userId)) { var user = data.Users.FirstOrDefault(i => i.UserId.Equals(userId)); if (user != null && user.State == (int)UserStates.Blocked) { result.Succeeded = false; result.Message = "You have blocked from this channel."; } else { result.Succeeded = true; result.Data = FillTheModel(data); } } else { if (!string.IsNullOrEmpty(data.Password)) { result.Prompt = true; result.Message = "Enter Password"; } else { _db.ChannelUsers.Add(new ChannelUser() { UserId = userId, ChannelId = model.Id, State = (int)UserStates.Joined }); var affected = await _db.SaveChangesAsync(); if (affected == 1) { result.Data = FillTheModel(data); result.Succeeded = true; } } } } } return(Json(result)); }
public async Task GetWithPasswordPublicUserOne() { _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", MockData.AuthKey); IdFormModel model = new IdFormModel(); model.Id = MockData.CPublicSecondUserWithPassword; // second user's channel it should proceed var response = await _client.PostAsync("/api/Channel/Get", new StringContent(JsonConvert.SerializeObject(model), System.Text.Encoding.UTF8, "application/json")); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <TResultModel <object> >(content); Assert.True(result.Prompt); _client.DefaultRequestHeaders.Clear(); }